> For the complete documentation index, see [llms.txt](https://mercure-technologies.gitbook.io/xprem/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mercure-technologies.gitbook.io/xprem/installation-guide/deploy-your-server.md).

# Deploy your server

### Validate your configuration

Once you have filled in the placeholders, check your configuration:

**Standard deployment**

```shellscript
npx eoas server:validate .env.xprem
```

**Helm deployment**

```shellscript
npx eoas server:validate xprem-helm
```

For Helm you can point the command at the directory, or at either file inside it; the matching values.yaml or secrets.yaml is picked up automatically from the same directory.

The command reports everything that would prevent the server from booting: a required variable that is missing for your setup, a `<placeholder>` left behind, two master key sources set at once, an invalid BASE\_URL, or an admin password that does not meet the dashboard policy.\
Problems that the server tolerates, like an empty Redis password, are reported as warnings instead of errors.

### Deploy your server

{% tabs %}
{% tab title="Docker image" icon="docker" %}
{% hint style="info" %}
Avoid the Docker image's `latest` tag. Pin a specific version and upgrade deliberately.

See [available image versions](https://github.com/mercuretechnologies/expo-open-ota/pkgs/container/xprem).
{% endhint %}

**Pull the image**

```bash
docker pull ghcr.io/mercuretechnologies/xprem:{{VERSION}}
```

**Run the container**

```bash
docker run --rm -it \
  -p 3000:3000 \
  --env-file .env.xprem \
  --platform linux/amd64 \
  ghcr.io/mercuretechnologies/xprem:{{VERSION}}
```

{% endtab %}

{% tab title="Helm" icon="kubernetes" %}
{% hint style="info" %}
Chart versions match [releases](https://github.com/mercuretechnologies/expo-open-ota/releases), without the `v` prefix. Release `v3.X.X` uses chart `3.X.X`. Always pin `--version`.
{% endhint %}

The wizard generated `xprem-helm/values.yaml` and `xprem-helm/secrets.yaml`. One command deploys both the server and its Kubernetes Secret:

```shellscript
helm install xprem oci://ghcr.io/mercuretechnologies/charts/xprem \
  --version {{VERSION}} -n NAMESPACE \
  -f xprem-helm/values.yaml -f xprem-helm/secrets.yaml
```

Gitignore `xprem-helm/secrets.yaml`; `values.yaml` is safe to commit. To change a value later, edit `secrets.yaml` and run the same `helm upgrade`: the pods restart automatically. The [Helm page](/xprem/deployment/helm-template.md) covers the chart in full, including managing the Secret with your own tooling.
{% endtab %}

{% tab title="Railway" icon="train-track" %} <a href="https://railway.com/deploy/expo-open-ota?referralCode=OEHlEK&#x26;utm_medium=integration&#x26;utm_source=template&#x26;utm_campaign=generic" class="button primary">Deploy on railway</a>

You can use the railway template provided here and replace the environment variables by the one in your `.env.xprem` file
{% endtab %}
{% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://mercure-technologies.gitbook.io/xprem/installation-guide/deploy-your-server.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
