docs/cloud/satellites.md
Earthly Satellites are remote runners that work seamlessly with Earthly, using persistent cache to improve build times. Satellites can be either fully managed by Earthly Cloud or self-hosted in your own environment.
Fully managed Satellites are included with Earthly Cloud. Earthly Cloud is a SaaS build automation platform with consistent builds, ridiculous speed, and a next-gen developer experience that works seamlessly with any CI. Get 6,000 build minutes/month as part of Earthly Cloud's no time limit free tier. Sign up today.
Typical use cases for Earthly Satellites include:
Earthly Satellites is part of Earthly Cloud. You can use it for free as part of our free tier. Get started with Earthly Cloud by visiting the sign up page, and get 6,000 build minutes/month for free.
Satellites are launched in one of the following two ways, depending on which kind of satellite you intend on creating.
To launch a new managed Satellite on Earthly Cloud, run:
earthly sat launch <satellite-name>
The Satellite name can be any arbitrary string.
If you are part of multiple Earthly organizations, you may want to first select the org under which you would like to launch the satellite:
earthly org select <org-name>
earthly sat launch <satellite-name>
Once the satellite is created it will be automatically selected for use as part of your builds. The selection takes place by Earthly adding some information in your Earthly config file (usually located under ~/.earthly/config.yml).
Self-Hosted Satellites are instead launched by running the satellite container directly. See the self-hosted guide for instructions.
To execute a build using the newly created satellite, simply run Earthly like you always have. For example:
earthly +my-target
Because the satellite has been automatically selected in the step above, the build will be executed on it.
To go back to using your local machine for builds, you may "unselect" the satellite by running:
earthly sat unselect
You can always go back to using the satellite by running:
earthly sat select <satellite-name>
Or, you can use a satellite only for a specific build, even if it is not selected:
earthly --sat <satellite-name> +my-target
Conversely, if a satellite is currently selected, but you want to execute a build on your local machine, you can use the --no-sat flag:
earthly --no-sat +my-target
For more information on using satellites, see the Using satellites page.
A final step is to invite your team to use the satellite. This can be done by running:
earthly org invite <email>
Once a user has been invited, you can forward them a link to the page Using Satellites for them to get started.
For more information on managing satellites, see the Managing Satellites page.
When using Cloud Satellites, the size and architecture can be specified at launch time using the --size and --platform flags.
For the full list of supported options, please see the Pricing Page.
A key benefit of using satellites in a CI environment is that the cache is shared between runs. This results in significant speedups in CIs that would otherwise have to start from scratch each time.
{% hint style='danger' %}
If a satellite is shared between multiple CI pipelines, it is possible that it becomes overloaded by too many parallel builds. For best performance, you can create a dedicated satellite for each CI pipeline. See the best practices guide for more details. {% endhint %}
To get started with using Earthly Satellites in CI, you can create a login token for access.
First, run
earthly account create-token <token-name>
to create your login token.
Copy and paste the value into an environment variable called EARTHLY_TOKEN in your CI environment.
Then as part of your CI script, simply select your satellite using one of these supported methods
earthly sat select <satellite-name>earthly --sat my-satellite +buildEARTHLY_SATELLITE=my-satellitebefore running your Earthly targets.
Note that when using Self-Hosted Satelites, your CI runner must be able to access the satellite on the network where it is hosted.
{% hint style='danger' %}
It's best to avoid using an image registry like Dockerhub without authentication, since the IP address from the satellite easily become rate-limited.
A simple docker login command before running your build should be used to pass registry credentials to your satellite.
See our Docker authentication guide for more details.
{% endhint %}
If you run into any issues please let us know either via Slack, GitHub issues or by emailing support.