## SPDX-License-Identifier: AGPL-3.0-or-later name: ackify-ce services: ackify-migrate: image: btouchard/ackify-ce container_name: ackify-ce-migrate environment: ACKIFY_LOG_LEVEL: "${ACKIFY_LOG_LEVEL}" ACKIFY_DB_DSN: "postgres://postgres:${POSTGRES_PASSWORD}@ackify-db:5432/ackify?sslmode=disable" ACKIFY_APP_PASSWORD: "${ACKIFY_APP_PASSWORD:-ackify}" depends_on: ackify-db: condition: service_healthy networks: - internal command: ["/app/migrate", "up"] entrypoint: [] restart: "no" ackify-ce: image: btouchard/ackify-ce container_name: ackify-ce restart: unless-stopped environment: ACKIFY_LOG_LEVEL: "${ACKIFY_LOG_LEVEL}" ACKIFY_BASE_URL: "${ACKIFY_BASE_URL}" ACKIFY_ORGANISATION: "${ACKIFY_ORGANISATION}" ACKIFY_DB_DSN: "postgres://ackify_app:${ACKIFY_APP_PASSWORD}@ackify-db:5432/ackify?sslmode=disable" ACKIFY_OAUTH_PROVIDER: "${ACKIFY_OAUTH_PROVIDER}" ACKIFY_OAUTH_CLIENT_ID: "${ACKIFY_OAUTH_CLIENT_ID}" ACKIFY_OAUTH_CLIENT_SECRET: "${ACKIFY_OAUTH_CLIENT_SECRET}" ACKIFY_OAUTH_AUTH_URL: "${ACKIFY_OAUTH_AUTH_URL:-}" ACKIFY_OAUTH_TOKEN_URL: "${ACKIFY_OAUTH_TOKEN_URL:-}" ACKIFY_OAUTH_USERINFO_URL: "${ACKIFY_OAUTH_USERINFO_URL:-}" ACKIFY_OAUTH_LOGOUT_URL: "${ACKIFY_OAUTH_LOGOUT_URL:-}" ACKIFY_OAUTH_ALLOWED_DOMAIN: "${ACKIFY_OAUTH_ALLOWED_DOMAIN:-}" ACKIFY_OAUTH_COOKIE_SECRET: "${ACKIFY_OAUTH_COOKIE_SECRET}" ACKIFY_ED25519_PRIVATE_KEY: "${ACKIFY_ED25519_PRIVATE_KEY}" ACKIFY_LISTEN_ADDR: ":8080" ACKIFY_ADMIN_EMAILS: "${ACKIFY_ADMIN_EMAILS}" ACKIFY_MAIL_HOST: "${ACKIFY_MAIL_HOST:-mailhog}" ACKIFY_MAIL_PORT: "${ACKIFY_MAIL_PORT:-1025}" ACKIFY_MAIL_TLS: "false" ACKIFY_MAIL_STARTTLS: "false" ACKIFY_MAIL_FROM: "${ACKIFY_MAIL_FROM:-noreply@ackify.local}" ACKIFY_MAIL_FROM_NAME: "${ACKIFY_MAIL_FROM_NAME:-Ackify}" ACKIFY_TELEMETRY: "${ACKIFY_TELEMETRY:-false}" ACKIFY_TELEMETRY_DATA_DIR: "${ACKIFY_TELEMETRY_DATA_DIR:-/data/telemetry}" ACKIFY_STORAGE_TYPE: "${ACKIFY_STORAGE_TYPE:-}" ACKIFY_STORAGE_LOCAL_PATH: "${ACKIFY_STORAGE_LOCAL_PATH:-/data/documents}" ACKIFY_STORAGE_MAX_SIZE_MB: "${ACKIFY_STORAGE_MAX_SIZE_MB:-50}" ACKIFY_STORAGE_S3_ENDPOINT: "${ACKIFY_STORAGE_S3_ENDPOINT:-}" ACKIFY_STORAGE_S3_BUCKET: "${ACKIFY_STORAGE_S3_BUCKET:-}" ACKIFY_STORAGE_S3_ACCESS_KEY: "${ACKIFY_STORAGE_S3_ACCESS_KEY:-}" ACKIFY_STORAGE_S3_SECRET_KEY: "${ACKIFY_STORAGE_S3_SECRET_KEY:-}" ACKIFY_STORAGE_S3_REGION: "${ACKIFY_STORAGE_S3_REGION:-}" ACKIFY_STORAGE_S3_USE_SSL: "${ACKIFY_STORAGE_S3_USE_SSL:-true}" volumes: - ackify_storage:/data/documents - ./telemetry:/data/telemetry depends_on: ackify-migrate: condition: service_completed_successfully ackify-db: condition: service_healthy networks: - internal ports: - "8080:8080" ackify-db: image: postgres:16-alpine container_name: ackify-db restart: unless-stopped environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ackify volumes: - ackify_data:/var/lib/postgresql/data networks: - internal labels: - docker-volume-backup.stop-during-backup=true healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d ackify"] interval: 10s timeout: 5s retries: 5 backup: image: offen/docker-volume-backup:v2.46.1 restart: always volumes: - /etc/localtime:/etc/localtime:ro - /var/run/docker.sock:/var/run/docker.sock:ro - ackify_data:/backup/ackify-backup:ro - ./backup:/archive # OR USE S3 STORAGE OR DRIVE PROVIDER... environment: BACKUP_CRON_EXPRESSION: "@daily" BACKUP_FILENAME: "ackify-%Y-%m-%dT%H-%M-%S.{{ .Extension }}" BACKUP_PRUNING_PREFIX: "ackify-" BACKUP_RETENTION_DAYS: 7 networks: internal: volumes: ackify_data: ackify_storage: