services: outline: image: outlinewiki/outline:latest container_name: outline restart: unless-stopped networks: - proxy - outline environment: - NODE_ENV=production - URL=https://${OUTLINE_HOST} - PORT=3000 - FILE_STORAGE_UPLOAD_MAX_SIZE=1024000000 - SECRET_KEY=${OUTLINE_SECRET_KEY} - UTILS_SECRET=${OUTLINE_UTILS_SECRET} - POSTGRES_PASSWORD=${OUTLINE_POSTGRES_PASSWORD} - DATABASE_URL=postgres://outline:${OUTLINE_POSTGRES_PASSWORD}@outline-db:5432/outline - PGSSLMODE=disable - REDIS_URL=redis://outline-redis:6379 - FILE_STORAGE=local - FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data - OIDC_ISSUER_URL=https://${OUTLINE_OIDC_ISSUER_URL} - OIDC_CLIENT_ID=${OUTLINE_OIDC_CLIENT_ID} - OIDC_CLIENT_SECRET=${OUTLINE_OIDC_CLIENT_SECRET} - OIDC_DISPLAY_NAME=Gitea - OIDC_SCOPES=openid profile email - OIDC_USERNAME_CLAIM=preferred_username - OIDC_LOGOUT_URI=https://${OUTLINE_HOST} volumes: - ./data/outline:/var/lib/outline/data depends_on: outline-db: condition: service_healthy outline-redis: condition: service_healthy labels: - "traefik.enable=true" - "traefik.http.services.outline.loadbalancer.server.port=3000" - "traefik.http.routers.outline.rule=Host(`${OUTLINE_HOST}`)" - "traefik.http.routers.outline.entrypoints=websecure" - "traefik.http.routers.outline.tls.certresolver=le" outline-db: image: postgres:latest container_name: outline-db restart: unless-stopped networks: - outline environment: POSTGRES_USER: outline POSTGRES_PASSWORD: ${OUTLINE_POSTGRES_PASSWORD} POSTGRES_DB: outline volumes: - ./data/outline-db:/var/lib/postgresql healthcheck: test: ["CMD", "pg_isready -U outline -d outline"] interval: 10s timeout: 5s retries: 5 outline-redis: image: redis:7-alpine container_name: outline-redis restart: unless-stopped networks: - outline volumes: - ./data/outline-redis:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 networks: proxy: name: proxy external: true outline: name: outline