Docker
There is a supplied docker image to make deploying a server as a container easier. The “LATEST TAGGED RELEASE” can be found on the releases page.
docker run -d -v "$HOME/.config/atuin:/config" ghcr.io/atuinsh/atuin:<LATEST TAGGED RELEASE> server start
Docker Compose
Using the already build docker image hosting your own Atuin can be done using the supplied docker-compose file.
Create a .env
file next to docker-compose.yml
with contents like this:
ATUIN_DB_NAME=atuinATUIN_DB_USERNAME=atuin# Choose your own secure passwordATUIN_DB_PASSWORD=really-insecure
Create a docker-compose.yml
:
version: '3.5'services: atuin: restart: always image: ghcr.io/atuinsh/atuin:<LATEST TAGGED RELEASE> command: server start volumes: - "./config:/config" links: - postgresql:db 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 postgresql: image: postgres:14 restart: unless-stopped volumes: # Don't remove permanent storage for index database files! - "./database:/var/lib/postgresql/data/" environment: POSTGRES_USER: ${ATUIN_DB_USERNAME} POSTGRES_PASSWORD: ${ATUIN_DB_PASSWORD} POSTGRES_DB: ${ATUIN_DB_NAME}
Start the services using docker compose
:
docker compose up -d
Using systemd to manage your atuin server
The following systemd
unit file to manage your docker-compose
managed service:
[Unit]Description=Docker Compose Atuin ServiceRequires=docker.serviceAfter=docker.service
[Service]# Where the docker-compose file is locatedWorkingDirectory=/srv/atuin-serverExecStart=/usr/bin/docker compose upExecStop=/usr/bin/docker compose downTimeoutStartSec=0Restart=on-failureStartLimitBurst=3
[Install]WantedBy=multi-user.target
Start and enable the service with:
systemctl enable --now atuin
Check if its running with:
systemctl status atuin
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: container_name: atuin_db_dumper image: prodrigestivill/postgres-backup-local env_file: - .env environment: POSTGRES_HOST: postgresql POSTGRES_DB: ${ATUIN_DB_NAME} POSTGRES_USER: ${ATUIN_DB_USERNAME} POSTGRES_PASSWORD: ${ATUIN_DB_PASSWORD} SCHEDULE: "@daily" BACKUP_DIR: /db_dumps volumes: - ./db_dumps:/db_dumps depends_on: - postgresql
This will create daily backups of your database for that additional layer of comfort.
PLEASE NOTE: The ./db_dumps
mount MUST be a POSIX-compliant filesystem to store the backups (mainly with support for hardlinks and softlinks). So filesystems like VFAT, EXFAT, SMB/CIFS, … can’t be used with this docker image. See https://github.com/prodrigestivill/docker-postgres-backup-local for more details on how this works. There are additional settings for the number of backups retained, etc., all explained on the linked page.