# Bring Your Own Cloud (BYOC)

{% hint style="warning" %}
This feature is experimental.

Not recommended for production usage yet, since it might introduce breaking changes in the future.

Feedback is welcome and much appreciated!
{% endhint %}

"Bring Your Own Cloud" (BYOC) satellites are a hybrid between [self hosted](https://docs.earthly.dev/earthly-cloud/satellites/self-hosted) and [earthly-managed](https://docs.earthly.dev/earthly-cloud/satellites) satellites. These satellites are managed by Earthly; just like our managed offering, but within your infrastructure. This blends the ease-of-use of managed satellites with the security benefits that self hosting can bring.

BYOC satellites are [available with an Enterprise plan](https://earthly.dev/pricing).

### Comparing Earthly Satellite Offerings

|                                                                                    | Earthly Cloud                     | Earthly BYOC                     | Earthly Self-Hosted              |
| ---------------------------------------------------------------------------------- | --------------------------------- | -------------------------------- | -------------------------------- |
| Who is responsible for monitoring and reliability of the Satellite                 | ✅ Earthly                         | ✅ Earthly                        | ❌ You                            |
| Satellites are deployed within your internal network                               | ❌ No                              | ✅ Yes                            | ✅ Yes                            |
| Earthly Cloud and Earthly staff are prevented from accessing your internal network | ✅ N/A                             | ✅ Yes                            | ✅ Yes                            |
| How is compute billed                                                              | ✅ Zero-margin compute via Earthly | ✅ To you via your cloud provider | ✅ To you via your cloud provider |
| Automatic updates                                                                  | ✅ Yes                             | ✅ Yes                            | ❌ No                             |
| Auto-sleep to drastically reduce compute cost                                      | ✅ Yes                             | ✅ Yes                            | ❌ No                             |
| Automatic management and GCing of cache volumes                                    | ✅ Yes                             | ✅ Yes                            | ❌ No                             |
| Users can launch and remove satellites via the `earthly sat` CLI                   | ✅ Yes                             | ✅ Yes                            | ❌ No                             |
| Requires access to a set of limited AWS capabilities                               | ✅ No                              | ❌ Yes                            | ✅ No                             |

## Installation

### Step 1: Install Your Cloud Provider

Make sure that you meet the base requirements for your cloud provider:

* [AWS](https://docs.earthly.dev/earthly-cloud/satellites/byoc/aws/requirements)

Assuming you meet these requirements, there are multiple methods you can use to provision resources required to operate BYOC. Choose the one that works best for your organization:

* [AWS CloudFormation](https://docs.earthly.dev/earthly-cloud/satellites/byoc/aws/cloudformation)
* [Terraform](https://docs.earthly.dev/earthly-cloud/satellites/byoc/aws/terraform)
* [Manual](https://docs.earthly.dev/earthly-cloud/satellites/byoc/aws/manual)

To get a better idea of what will be provisioned, see this section about [configuring byoc manually](https://docs.earthly.dev/earthly-cloud/satellites/aws/manual#configuring-byoc-manually). All installation methods create the same resources.

Follow the instructions for your selected installation method to provision the required resources and install BYOC.

### Step 2: Networking

To use a satellite created by BYOC, you'll need to configure your networking (usually a VPN) to ensure access. We have guides to enable BYOC on VPNs for the following VPN providers:

* [Tailscale](https://docs.earthly.dev/earthly-cloud/satellites/byoc/vpn/tailscale)

### Step 3. Test Drive

Now that you have your cloud installation configured in your cloud provider and Earthly, it's time to take it for a test drive!

First, make sure you can see your new cloud by running `earthly cloud list`, which lists all the cloud installations within your organization. Your output should look something like this:

```shell
❯ earthly cloud list
   NAME           SATELLITES  STATUS          
   my-new-cloud   0           Green  
*  earthly-cloud  2           Green  
```

The `*` indicates the default cloud that will be used when launching satellites within your organization, unless otherwise specified.

{% hint style="info" %}
Note that the `earthly-cloud` installation is a special cloud present in all organizations. Satellites within this cloud are managed within Earthly's cloud, by Earthly. You can change back to use Earthly-managed satellites at any time by running the `earthly cloud use earthly-cloud` installation.
{% endhint %}

### Step 4. Launch A Satellite

To test-launch a new satellite within the cloud, run:

```shell
earthly satellite launch --cloud <name> my-byoc-sat
```

This will launch a new satellite using your newly created cloud. Assuming that works, kick the tires by trying to run one of your builds on it!

### Step 5. Use The Cloud

If everything looks good, you're done! If you would like this new cloud to be the default, simply run:

```shell
earthly cloud use <name>
```

This makes the new cloud you created be the default for *the entire organization*.

{% hint style="warning" %}
This setting is global for all users within the org. This prevents people from launching satellites in the wrong cloud, and accidentally disseminating information that shouldn't be.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.earthly.dev/earthly-cloud/satellites/byoc.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
