Files
backup-tool/docker-compose.yml

116 lines
2.8 KiB
YAML

name: backup-tool
x-app-base: &app-base
build:
context: .
dockerfile: Dockerfile
image: backup-tool:local
init: true
read_only: true
tmpfs:
- /tmp:mode=1777,size=64m
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
environment:
BACKUP_TOOL_DATA_DIR: /var/lib/backup-tool
BACKUP_TOOL_DATABASE_URL: sqlite+aiosqlite:////var/lib/backup-tool/metadata.db
BACKUP_TOOL_REPOSITORY_ROOTS: '["/var/lib/backup-tool/repositories"]'
BACKUP_TOOL_LOCAL_SOURCE_ROOTS: '["/mnt/sources"]'
BACKUP_TOOL_RESTORE_ROOTS: '["/var/lib/backup-tool/restores"]'
BACKUP_TOOL_MASTER_KEY_FILE: /run/backup-tool-secrets/master.key
BACKUP_TOOL_WEB_SOCKET_PATH: /run/backup-tool/web.sock
BACKUP_TOOL_PUBLIC_BASE_URL: ${BACKUP_TOOL_PUBLIC_BASE_URL:-http://localhost:8080}
volumes:
- backup-tool-data:/var/lib/backup-tool
- backup-tool-runtime:/run/backup-tool
- type: bind
source: ${BACKUP_TOOL_SOURCES_DIR:-./sources}
target: /mnt/sources
read_only: true
- type: bind
source: ${BACKUP_TOOL_MASTER_KEY_FILE:-./secrets/master.key}
target: /run/backup-tool-secrets/master.key
read_only: true
services:
migrate:
<<: *app-base
command: ["migrate", "upgrade"]
restart: "no"
web:
<<: *app-base
command: ["web"]
depends_on:
migrate:
condition: service_completed_successfully
healthcheck:
test: ["CMD", "backup-tool", "health", "web"]
interval: 10s
timeout: 10s
retries: 6
start_period: 0s
scheduler:
<<: *app-base
command: ["scheduler"]
depends_on:
migrate:
condition: service_completed_successfully
healthcheck:
test: ["CMD", "backup-tool", "health", "scheduler"]
interval: 10s
timeout: 10s
retries: 6
start_period: 0s
worker:
<<: *app-base
command: ["worker"]
depends_on:
migrate:
condition: service_completed_successfully
healthcheck:
test: ["CMD", "backup-tool", "health", "worker"]
interval: 10s
timeout: 10s
retries: 6
start_period: 0s
admin:
<<: *app-base
profiles: ["admin"]
command: ["admin", "--help"]
depends_on:
migrate:
condition: service_completed_successfully
proxy:
build:
context: ./frontend
dockerfile: Dockerfile
image: backup-tool-proxy:local
init: true
read_only: true
tmpfs:
- /tmp:mode=1777,size=64m
- /var/cache/nginx:uid=10001,gid=0,mode=0750,size=32m
- /var/run:uid=10001,gid=0,mode=0750,size=8m
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
ports:
- "127.0.0.1:${BACKUP_TOOL_PORT:-8080}:8080"
volumes:
- backup-tool-runtime:/run/backup-tool:ro
depends_on:
web:
condition: service_healthy
volumes:
backup-tool-data:
backup-tool-runtime: