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

# Deployment

> Run Evakage with Docker, HTTPS, and account backups.

## Start the server

Install Docker, then run:

```bash theme={null}
git clone https://github.com/thesteau/evakage.git
cd evakage/deploy
cp .env.example .env
docker compose pull
docker compose up -d
```

Open `http://localhost:3712` on the host. The `.env` file is required; edit it before starting if you need different settings.

The default image is `ghcr.io/thesteau/evakage:latest`, built from tested `main` commits. To pin a stable version, replace `latest` in the Compose file with a published `vX.Y.Z` tag.

## Use HTTPS for other devices

Put Evakage behind a reverse proxy with a certificate trusted by your devices.

1. Set `TRUST_PROXY=1` in `deploy/.env`.
2. Preserve the public `Host` header or send it as `X-Forwarded-Host`, including any non-default port.
3. Keep the backend port accessible only through your proxy.
4. Recreate the container after changing settings:

```bash theme={null}
docker compose up -d --force-recreate
```

HTTPS or localhost is required for encryption features, camera access, and installation.

**“Same-origin JSON request required” when signing up?** Check `TRUST_PROXY` and the forwarded host. See [proxy configuration](/hosting/configuration#https-reverse-proxies).

## Default limits

| Limit | Default |
| - | - |
| Connected devices | 200 |
| Active rooms | 50 |
| Rooms per account | 2 |
| Members per room | 20 |
| File size | 512 MiB |
| Total temporary relay budget | 4 GiB: 3 GiB files, 1 GiB text |
| Per-chat ceilings | 50 GiB files, 1 GiB text; global budgets still apply |

These limits control how much the server accepts; they do not guarantee that a host can handle that load. Follow the [configuration guide](/hosting/configuration) to adjust them for your host.

## Temporary relay

The relay holds encrypted content until recipients receive or save it. When space is needed, the server may remove older items whose uploads are complete but which are still waiting for recipients. Active uploads and downloads are protected from capacity cleanup. Online participants receive warnings and removal notices.

Relay data lives at `/tmp/evakage-blobs` inside the container. **Do not mount a persistent relay volume.** A restart or container replacement erases it.

The server expires content and cleans up automatically. No cron job is needed. See [relay lifetimes](/guides/transfers#how-long-server-copies-last), including the self-chat exception.

## Accounts

Accounts are enabled by default. The named `account-data` volume holds usernames, password hashes, and saved settings at `/home/node/evakage-accounts/accounts.sqlite`. The Go image keeps this path for compatibility with existing account volumes.

To disable accounts, set `ACCOUNTS_DB=` in `.env`. Chat, files, and joining rooms still work; creating rooms requires an account.

## Check server health

```bash theme={null}
docker compose logs --tail=100
curl -fsS http://localhost:3712/healthz
```

## Updates and backups

Update from `deploy/`:

```bash theme={null}
docker compose pull
docker compose up -d
```

Updates clear relay content and end login sessions. Accounts and saved settings survive in the named volume.

For a simple account backup, stop the app, copy the SQLite database with its `-wal` and `-shm` files, then start it again. Use SQLite's backup API for a live backup.

**Do not run `docker compose down -v` if you want to keep accounts.**

To build your own Docker image from source, follow the [local container build instructions](/development#build-a-local-container).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.