Files
ackify/compose.yml
T
Benjamin 75622c0a6b feat(auth): add ACKIFY_ORGANISATION_DOMAIN to restrict document creation by email domain
When set, only users whose email matches the organisation domain can create
documents. Admins bypass this restriction. Empty value preserves current
behavior (all users allowed). Exposed in admin settings UI and install script.
2026-03-11 17:51:07 +01:00

119 lines
4.1 KiB
YAML

## SPDX-License-Identifier: AGPL-3.0-or-later
name: ackify-ce
services:
ackify-migrate:
image: kolapsis/ackify
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: kolapsis/ackify
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_ORGANISATION_DOMAIN: "${ACKIFY_ORGANISATION_DOMAIN:-}"
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"
healthcheck:
test: ["CMD", "/app/ackify", "health"]
interval: 30s
timeout: 5s
start_period: 10s
retries: 3
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: