Docker
Warning
If you're self hosting, we strongly suggest you stick to tagged releases, and don't follow main or latest
Follow the GitHub releases, and please read the notes for each release. Most of the time, upgrades can occur without any manual intervention.
We can't guarantee that all updates will apply cleanly, and some may require some extra steps.
A supplied docker image lets you deploy a server as a container. The "LATEST TAGGED RELEASE" can be found on the releases page.
CONFIG="$HOME/.config/atuin"
mkdir "$CONFIG"
chown 1000:1000 "$CONFIG"
docker run -d -v "$CONFIG:/config" ghcr.io/atuinsh/atuin:<LATEST TAGGED RELEASE> start
Docker Compose
You can also host your own Atuin server with the prebuilt docker image using the supplied docker-compose file.
Create a docker-compose.yml:
services:
atuin:
restart: always
image: ghcr.io/atuinsh/atuin:<LATEST TAGGED RELEASE>
command: start
volumes:
- "./config:/config"
ports:
- 8888:8888
environment:
ATUIN_HOST: "0.0.0.0"
ATUIN_OPEN_REGISTRATION: "true"
ATUIN_DB_URI: postgres://${ATUIN_DB_USERNAME}:${ATUIN_DB_PASSWORD}@db/${ATUIN_DB_NAME}
RUST_LOG: info,atuin_server=debug
depends_on:
- db
db:
image: postgres:18
restart: unless-stopped
volumes: # Don't remove permanent storage for index database files!
- "./database:/var/lib/postgresql/"
environment:
POSTGRES_USER: ${ATUIN_DB_USERNAME}
POSTGRES_PASSWORD: ${ATUIN_DB_PASSWORD}
POSTGRES_DB: ${ATUIN_DB_NAME}
TZ: Europe/London
PGTZ: Europe/London
Create a .env file next to docker-compose.yml with contents like this:
ATUIN_DB_NAME=atuin
ATUIN_DB_USERNAME=atuin
# Choose your own secure password. Stick to [A-Za-z0-9.~_-]
ATUIN_DB_PASSWORD=really-insecure
Start the services using docker compose:
Using systemd to manage your Atuin server
The following systemd unit file can be used to manage your docker-compose managed service:
[Unit]
Description=Docker Compose Atuin Service
Requires=docker.service
After=docker.service
[Service]
# Where the docker-compose file is located
WorkingDirectory=/srv/atuin-server
ExecStart=/usr/bin/docker compose up
ExecStop=/usr/bin/docker compose down
TimeoutStartSec=0
Restart=on-failure
StartLimitBurst=3
[Install]
WantedBy=multi-user.target
Start and enable the service with:
Check if it's running with:
Creating backups of the Postgres database
You can add another service to your docker-compose.yml file to have it run daily backups. It should look like this:
backup:
restart: unless-stopped
container_name: atuin_db_dumper
image: prodrigestivill/postgres-backup-local
env_file:
- .env
environment:
POSTGRES_HOST: db
POSTGRES_DB: ${ATUIN_DB_NAME}
POSTGRES_USER: ${ATUIN_DB_USERNAME}
POSTGRES_PASSWORD: ${ATUIN_DB_PASSWORD}
SCHEDULE: "@daily"
BACKUP_DIR: /db_dumps
TZ: Europe/London
volumes:
- ./db_dumps:/db_dumps
depends_on:
- db
This will create daily backups of your database for that additional layer of comfort.
Warning
The ./db_dumps mount must use a POSIX-compliant filesystem that supports hard links and symlinks. Filesystems such as VFAT, exFAT, and SMB/CIFS won't work with this image. See docker-postgres-backup-local for the retention settings and how backups work.