services:
  postgres:
    image: postgres:18
    container_name: Outline-DB
    user: 1026:100
    security_opt:
      - no-new-privileges:true
    volumes:
      - /volume1/docker/outline/db:/var/lib/postgresql/:rw
    environment:
      POSTGRES_DB: outline
      POSTGRES_USER: outlineuser
      POSTGRES_PASSWORD: outlinepass
    restart: on-failure:5
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "outline", "-U", "outlineuser"]
      timeout: 45s
      interval: 30s
      retries: 10

  redis:
    image: redis:8-alpine
    container_name: Outline-REDIS
    hostname: outline-redis
    security_opt:
      - no-new-privileges:true
    user: 1026:100
    volumes:
      - /volume1/docker/outline/redis:/data:rw
    environment:
      TZ: Europe/Bucharest
    restart: on-failure:5
    healthcheck:
      test: ["CMD-SHELL", "redis-cli ping || exit 1"]

  outline:
    image: outlinewiki/outline:latest
    container_name: Outline
    user: 1026:100
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    environment:
      NODE_ENV: production
      URL: https://outline.yourdomain.synology.me
      DATABASE_URL: 'postgresql://outlineuser:outlinepass@db:5432/outline?sslmode=disable'
      REDIS_URL: 'redis://redis:6379'
      REDIS_COLLABORATION_URL: 'redis://redis:6379/1'
      SECRET_KEY: SECRET_KEY # hex32
      UTILS_SECRET: UTILS_SECRET # hex32
      SMTP_HOST: smtp.gmail.com
      SMTP_PORT: 465
      SMTP_USERNAME: Your-own-gmail-address
      SMTP_PASSWORD: Your-own-app-password
      SMTP_FROM_EMAIL: Your-own-gmail-address
    ports:
      - 4787:3000
    volumes:
      - /volume1/docker/outline/data:/var/lib/outline/data:rw
    restart: on-failure:5
    healthcheck:
      test: timeout 10s bash -c ':> /dev/tcp/127.0.0.1/3000' || exit 1
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 90s