> ## Documentation Index
> Fetch the complete documentation index at: https://developer.upsun.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Manage Upsun environments

> Learn what environments on Upsun are and how to take advantage of them.

export const VariableBlock = ({name}) => {
  return <var spellCheck={false} title={`Replace '${name}' with your own data`}>{name}</var>;
};

export const SettingsIcon = () => <svg width="24px" height="24px" style={{
  display: 'inline',
  verticalAlign: 'middle'
}}>
    <title id="settings-icon">Settings</title>
    <path d="M10.5289 21.9416C9.86066 21.8582 9.3595 21.3576 9.19245 20.6903L9.02539 19.6892C8.85834 19.6058 8.77482 19.6058 8.60776 19.5224L7.93955 20.0229C7.43839 20.44 6.68665 20.44 6.10196 20.0229C6.10196 20.0229 4.09732 18.1042 4.01379 17.9374C3.51263 17.3535 3.51263 16.6027 3.93027 16.0187L4.51495 15.3514C4.43143 15.1845 4.43143 15.1011 4.3479 14.9343L3.42911 14.7674C2.76089 14.684 2.25973 14.1835 2.09268 13.4327C2.00915 13.1824 2.09268 10.4296 2.09268 10.4296C2.17621 9.76222 2.67737 9.2617 3.34558 9.09486L4.3479 8.92802C4.43143 8.8446 4.43143 8.76118 4.51495 8.59434L4.01379 7.92697C3.59616 7.42645 3.59616 6.67567 4.01379 6.09173C4.01379 6.09173 5.93491 4.08964 6.10196 4.00622C6.68665 3.5057 7.43839 3.5057 8.02307 3.9228L8.69129 4.50675C8.85834 4.42333 8.94187 4.42333 9.10892 4.33991L9.27597 3.42228C9.3595 2.75492 9.86066 2.2544 10.6124 2.08756C10.863 2.00414 13.2853 2.00414 13.5358 2.08756H13.6194C14.2876 2.17098 14.7887 2.6715 14.9558 3.33886L15.1228 4.33991C15.2064 4.42333 15.2899 4.50675 15.457 4.50675L16.1252 4.00622C16.6263 3.58912 17.3781 3.58912 17.9628 4.00622C17.9628 4.00622 19.9674 5.92489 20.0509 6.09173C20.5521 6.67567 20.5521 7.42645 20.1344 8.0104L19.6333 8.67776C19.7168 8.8446 19.7168 9.01144 19.8003 9.09486L20.7191 9.2617C21.3873 9.34512 21.972 9.92906 22.0556 10.5964V13.5996C21.972 14.2669 21.4709 14.7674 20.8027 14.9343L19.8003 15.1011C19.7168 15.268 19.7168 15.3514 19.6333 15.5182L20.218 16.269C20.6356 16.7695 20.6356 17.5203 20.218 18.1042L18.0463 20.2732C17.4616 20.6903 16.7099 20.6903 16.2087 20.2732L15.3734 19.6058C15.2064 19.6892 15.1228 19.6892 14.9558 19.7726L14.7887 20.6903C14.7052 21.3576 14.1205 21.9416 13.4523 22.025H10.5289V21.9416ZM11.5312 20.3566C11.8653 20.3566 12.1994 20.3566 12.45 20.3566C12.8676 20.3566 13.2017 20.0229 13.2853 19.6058L13.3688 18.9384C13.3688 18.6882 13.6194 18.4379 13.8699 18.2711L15.1228 17.7706C15.3734 17.6871 15.7075 17.6871 15.9581 17.854L16.5428 18.2711C16.8769 18.5213 17.3781 18.5213 17.6286 18.1877C17.7957 18.0208 18.0463 17.7706 18.2969 17.5203C18.5474 17.1866 18.631 16.7695 18.3804 16.4358L17.8792 16.0187C17.7122 15.7685 17.6286 15.4348 17.7957 15.1845L18.2969 14.0167C18.3804 13.7664 18.631 13.5996 18.9651 13.5161L19.6333 13.4327C20.0509 13.3493 20.385 13.0156 20.385 12.5985C20.385 12.2648 20.385 11.9311 20.385 11.6809C20.385 11.2638 20.0509 10.9301 19.6333 10.8467L18.9651 10.7633C18.7145 10.7633 18.4639 10.513 18.2969 10.2627L17.7957 9.01144C17.7122 8.76118 17.7122 8.4275 17.8792 8.17724L18.2969 7.59329C18.5474 7.25961 18.5474 6.84251 18.2133 6.50883C18.0463 6.34199 17.7957 6.09173 17.5451 5.84147C17.211 5.50779 16.7934 5.50779 16.4593 5.75805L16.0416 6.17515C15.7911 6.34199 15.457 6.42541 15.2064 6.25857L14.037 5.75805C13.7864 5.67463 13.6194 5.42437 13.5358 5.09069L13.3688 4.50675C13.2853 4.08964 12.9511 3.75596 12.5335 3.75596C12.1994 3.75596 11.8653 3.75596 11.6147 3.75596C11.1971 3.75596 10.863 4.08964 10.7795 4.50675L10.6959 5.17411C10.6959 5.42437 10.4453 5.67463 10.1948 5.84147L9.02539 6.25857C8.69129 6.42541 8.44071 6.34199 8.19013 6.17515L7.60544 5.75805C7.27133 5.50779 6.77017 5.50779 6.51959 5.84147C6.26901 6.00831 6.10196 6.25857 5.85138 6.42541C5.6008 6.75909 5.51727 7.17619 5.85138 7.50987L6.18549 8.09382C6.35254 8.34408 6.43607 8.67776 6.26901 8.92802L5.76785 10.0959C5.68433 10.3462 5.43375 10.513 5.09964 10.5964L4.43143 10.6798C4.01379 10.7633 3.67969 11.0969 3.67969 11.514C3.67969 11.8477 3.67969 12.1814 3.67969 12.4317C3.67969 12.8488 4.01379 13.1825 4.43143 13.2659L5.09964 13.3493C5.35022 13.3493 5.6008 13.5996 5.76785 13.8498L6.26901 15.1011C6.35254 15.3514 6.35254 15.6851 6.18549 15.9353L5.76785 16.5193C5.51727 16.8529 5.51727 17.3535 5.85138 17.6037C6.01843 17.7706 6.26901 18.0208 6.51959 18.2711C6.8537 18.5213 7.27133 18.6048 7.60544 18.3545L8.02307 17.854C8.27365 17.6871 8.60776 17.6037 8.85834 17.7706L10.0277 18.2711C10.2783 18.3545 10.4453 18.6048 10.5289 18.9384L10.6124 19.6058C10.7795 20.0229 11.1136 20.3566 11.5312 20.3566ZM18.798 6.92593C18.798 6.92593 18.798 7.00935 18.798 6.92593V6.92593Z"></path>
    <path d="M12.0324 17.0198C9.27597 17.0198 7.02075 14.7675 7.02075 12.0146C7.02075 9.26172 9.27597 7.00937 12.0324 7.00937C14.7887 7.00937 17.044 9.26172 17.044 12.0146C17.044 14.7675 14.7887 17.0198 12.0324 17.0198ZM12.0324 8.67777C10.1948 8.67777 8.69129 10.1793 8.69129 12.0146C8.69129 13.8498 10.1948 15.3514 12.0324 15.3514C13.8699 15.3514 15.3734 13.8498 15.3734 12.0146C15.3734 10.1793 13.8699 8.67777 12.0324 8.67777Z"></path>
  </svg>;

An Upsun environment contains one instance of an app (or [group of apps](/docs/configure-apps/multi-app))
with all the services needed for it to run.

Each project can include multiple environments,
often divided into [environment types](/docs/administration/users#environment-type-roles).
If you have a live site, you have at least a production environment.
You may also have additional environments of the Staging or Development [environment type](/docs/administration/users#environment-type-roles), but there will only ever be one production environment.

You can think of other environments as copies of your live site
where you can run tests without worrying about damaging anything in production.
Once you have completed your tests,
you can merge your changes so that they're instantly and seamlessly deployed to production.

You can create environments for development, testing, staging, review, and so on.
To organize your environments, you can create [hierarchical relationships](#hierarchy).

## Create environments

You can create new environments in one of two ways:

* Push a local branch through Git or a [source integration](/docs/integrations/source).

* [Branch](/docs/glossary#branch) existing environments using the [CLI](/cli)
  or the [Console](/docs/administration/web).

When you branch an environment, you might want to create exact replicas of it.
In this case, each new environment inherits all of the data and services from its parent environment.
This includes databases, network storage, queues, and routing configurations.

You can create Upsun environments on demand.
Each environment is tied to a Git branch.
If you use a source integration,
you can even have environments created automatically for your pull requests and branches.

You can also have branches that aren't tied to a running instance of your application.
These are called [inactive environments](#environment-status).

## Default environment

Your default environment comes from your default branch and is a
[production environment](/docs/administration/users#environment-type-roles). Your project must have a default
environment, but you can [name it as you want](/docs/environments/default-environment). This environment is your
**live site**. You might want to give it a [custom domain name](/docs/domains/steps).

## Environment status

Your environments can have one of three statuses:

* [Active](/docs/glossary#active-environment):
  A deployed environment with services and data.

* [Inactive](/docs/glossary#inactive-environment):
  An environment that isn't deployed and has no services or data, only code.

* [Paused](#paused-environments):
  An environment that hasn't been redeployed in 14 days or longer.

You can see the status of your environments in the [Console](/docs/administration/web) or the [CLI](/cli).

<Tabs>
  <Tab title="In the Console">
    When you open your project, inactive environments appear lighter in the environment list.
    You also can't select them from the **Environment** dropdown menu.

    To check the status of an environment,
    you can also open it and view its information panel.
  </Tab>

  <Tab title="Using the CLI">
    To check the status of all your environments, from your project directory run the `upsun environments` command.
  </Tab>
</Tabs>

You can [change an environment's status](/docs/environments/deactivate-environment) at any time.

## Organize your environments

### Hierarchy

<img src="https://mintcdn.com/upsun-c9761871/7cK3KMJBgO7MXm_y/images/management-console/environments.png?fit=max&auto=format&n=7cK3KMJBgO7MXm_y&q=85&s=01ef261cad3d13b4ce8f2dd53e147f1a" alt="Environment hierarchy" width="1808" height="1420" data-path="images/management-console/environments.png" />

In Upsun, your environments are organized in a hierarchy featuring parent and child environments.

When you [branch](/docs/glossary#branch) an environment,
the parent of the new environment is the environment it was created from.
You can [change the environment's parent](/docs/environments/change-parent) after it's been created.

When you push a branch through Git or a [source integration](/docs/integrations/source),
the parent environment of the new environment is your [default environment](#default-environment).
Alternatively, you can [change the environment's parent](/docs/environments/change-parent) after it's been created.

Each child environment can [sync](/docs/glossary#sync) code and/or data down from its parent
and [merge](/docs/glossary#merge) code up to its parent.
You can use child environments for development, staging, and testing.

### Workflows

Since you can customize your [environment hierarchy](#hierarchy), you can create your own workflows.
You can decide which structure best fits your needs.

#### Possible approaches

You may want to take one of the following approaches when creating your workflows:

* **Agile**: A child environment per sprint.
  Each story in the sprint can have its own environment as a child of the sprint environment.

* **Developer-centric**: One QA environment and a few preview environments
  (*per developer*, *per task*, or similar).

* **Testing**: An operational test environment, a user test environment, and a few unit test environments.

* **Hotfix**: One environment for each bug, security issue, or hotfix that needs deployment.

#### Example workflow

Example Agile workflow:

1. An admin [branches](/docs/glossary#branch) the Live (default) environment to create a Sprint environment.

2. The admin gives each developer permission to branch the Sprint environment to create new feature environments.

   <img src="https://mintcdn.com/upsun-c9761871/aVFFOuRhYE4U37eI/images/workflow/branches.svg?fit=max&auto=format&n=aVFFOuRhYE4U37eI&q=85&s=b40640fb79fd332ca9f7670c54b783d0" alt="Agile branches with Live as the top parent, Sprint 1 as a child, and Feature 1 and Feature 2 as children of Sprint" width="373" height="274" data-path="images/workflow/branches.svg" />

3. Feature 1 is developed and work is reviewed by accessing the deployed Feature 1 environment.

4. When the review is done, Feature 1 is [merged](/docs/glossary#merge) into the Sprint environment.

   <img src="https://mintcdn.com/upsun-c9761871/aVFFOuRhYE4U37eI/images/workflow/merge-feature.svg?fit=max&auto=format&n=aVFFOuRhYE4U37eI&q=85&s=e45dacaa17f53e18481cd44702fb8c37" alt="Feature 1 is merged into the Sprint 1 environment" width="456" height="274" data-path="images/workflow/merge-feature.svg" />

5. The remaining features [sync](/docs/glossary#sync) with the Sprint environment.
   This ensures their working environment is up-to-date with the latest code.

   <img src="https://mintcdn.com/upsun-c9761871/aVFFOuRhYE4U37eI/images/workflow/sync.svg?fit=max&auto=format&n=aVFFOuRhYE4U37eI&q=85&s=ad2ab35e3ee41e45e1b645117b370218" alt="Features from the Sprint 1 environment are synced with the Feature 2 environment" width="456" height="274" data-path="images/workflow/sync.svg" />

6. When the sprint is complete and all features merged into the Sprint environment,
   the admin makes a backup of the live site.

7. The admin merges the Sprint environment into the Live environment.

   <img src="https://mintcdn.com/upsun-c9761871/aVFFOuRhYE4U37eI/images/workflow/merge-live.svg?fit=max&auto=format&n=aVFFOuRhYE4U37eI&q=85&s=eaf9909a45f56a6c02a0881146a1832f" alt="Features from the Sprint 1 environment are merged into the Live environment" width="355" height="144" data-path="images/workflow/merge-live.svg" />

8. The admin syncs the next sprint's environment with the Live environment
   to repeat and continue the development process.

   <img src="https://mintcdn.com/upsun-c9761871/aVFFOuRhYE4U37eI/images/workflow/sync-live.svg?fit=max&auto=format&n=aVFFOuRhYE4U37eI&q=85&s=7fcd2462aa971a515d258a78c18dda5f" alt="Features from the Live environment are synced with the Sprint 2 environment" width="355" height="144" data-path="images/workflow/sync-live.svg" />

### Naming conventions

You can organize and work with your preview environments in many different ways.
It can help to introduce a convention for how you name and structure your environments.

For each environment, choose a name that represents what the environment is for.
If you use Agile, for example, you can adopt a naming convention similar to the following:

```text {no-copy="true"} theme={null}
Live
  Sprint1
    Feature1
    Feature2
    Feature3
  Sprint2
    Feature1
    Feature2
```

If you prefer splitting your environments per developer and having a specific environment for each task or ticket,
you can adopt a naming convention similar to the following:

```text {no-copy="true"} theme={null}
Staging
  Developer1
    Ticket-526
    Ticket-593
  Developer2
    Ticket-395
```

## Paused environments

[Preview environments](/docs/glossary#preview-environment) are often used for a limited time and then abandoned.
To prevent unnecessary consumption of resources,
Upsun automatically pauses preview environments ([of both development and staging types](/docs/glossary#environment-type)) that haven't been redeployed in 14 days.

You can pause (and resume) an environment manually at any time.

### Pause an environment

To pause an environment, follow these steps:

<Tabs>
  <Tab title="Using the CLI">
    Run the following command:

    ```bash theme={null}
    upsun environment:pause --project <PROJECT_ID> --environment <ENVIRONMENT_NAME>
    ```
  </Tab>

  <Tab title="In the Console">
    1. Navigate to your project and click <SettingsIcon /> **Settings**.
    2. Under **Environments**, select the environment you want to pause.
    3. In the **General** tab, click **Pause environment**.
  </Tab>
</Tabs>

### Resume a paused environment

Pushing new code or redeploying a paused environment automatically resumes it.
You can also resume it manually at any time.

<Tabs>
  <Tab title="Using the CLI">
    Run the following command:

    ```bash theme={null}
    upsun environment:resume --project <PROJECT_ID> --environment <ENVIRONMENT_NAME>
    ```
  </Tab>

  <Tab title="In the Console">
    1. Navigate to the paused environment.
    2. In the Activity tab, click **Resume environment**.
    3. In the **Resume environment** window, click **Resume**.
  </Tab>
</Tabs>

The environment is redeployed and becomes available for use again.

## Push options

Git provides push options to pass a string to the server (see [the official Git documentation](https://git-scm.com/docs/git-push#Documentation/git-push.txt--oltoptiongt)).

Upsun supports some of these push options,
which allows you to push changes to your environment and trigger the following actions at the same time:

| Action                                                                                                                                                                     | Command                                                                 |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| Activate the environment                                                                                                                                                   | `git push upsun -o "environment.status=active"`                         |
| Set a title for the environment                                                                                                                                            | `git push upsun -o "environment.title=<ENVIRONMENT_TITLE>"`             |
| Set the parent environment                                                                                                                                                 | `git push upsun -o "environment.parent=<PARENT_ENVIRONMENT_NAME>"`      |
| Clone the data from the parent environment                                                                                                                                 | `git push upsun -o "environment.clone_parent_on_create=True"`           |
| Disable the cloning of the data from the parent environment                                                                                                                | `git push upsun -o "environment.clone_parent_on_create=False"`          |
| Set the environment type (`development`, `staging`, or `production`)                                                                                                       | `git push upsun -o "environment.type=<ENVIRONMENT_TYPE>"`               |
| Define a [resource initialization strategy](/docs/manage-resources/resource-init#specify-a-resource-initialization-strategy) (`default`, `manual`, `minimum`, or `parent`) | `git push upsun -o "resources.init=<RESOURCE_INITIALIZATION_STRATEGY>"` |

If your remote location isn't named `upsun`,
make sure you adjust the commands accordingly.

<Note>
  You can't use push options if you have a [source integration](/docs/integrations/source) set up.
</Note>

The following example shows how, through a single `push`,
you can activate your environment, set a title for it,
set a parent environment for it, and clone the data from its parent into it.

```bash Terminal theme={null}
git push upsun -o "environment.status=active" -o "environment.title=my-environment-title" -o "environment.parent=my-parent-environment" -o "environment.clone_parent_on_create=True"
```
