volumes: outline_redis_data: {} networks: net: driver: overlay attachable: true traefik-public: external: true services: redis: image: redis:7.2-alpine restart: unless-stopped volumes: - outline_redis_data:/data networks: - net deploy: placement: constraints: - node.labels.outline.outline_redis_data == true outline: image: docker.getoutline.com/outlinewiki/outline:latest environment: - NODE_ENV=${NODE_ENV} - SECRET_KEY=${OUTLINE_SECRET_KEY} - UTILS_SECRET=${OUTLINE_UTILS_SECRET} - DATABASE_URL=${DATABASE_URL} - PGSSLMODE=${PGSSLMODE} - REDIS_URL=${REDIS_URL} - URL=${OUTLINE_URL} - PORT=${OUTLINE_PORT} - COLLABORATION_URL=${COLLABORATION_URL} - FILE_STORAGE=${FILE_STORAGE} - FILE_STORAGE_LOCAL_ROOT_DIR=${FILE_STORAGE_LOCAL_ROOT_DIR} - FILE_STORAGE_UPLOAD_MAX_SIZE=${FILE_STORAGE_UPLOAD_MAX_SIZE} - FILE_STORAGE_IMPORT_MAX_SIZE=${FILE_STORAGE_IMPORT_MAX_SIZE} - FILE_STORAGE_WORKSPACE_IMPORT_MAX_SIZE=${FILE_STORAGE_WORKSPACE_IMPORT_MAX_SIZE} - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID} - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET} - SLACK_CLIENT_ID=${SLACK_CLIENT_ID} - SLACK_CLIENT_SECRET=${SLACK_CLIENT_SECRET} depends_on: - redis user: "${UID}:${GID}" volumes: - /var/data/outline_data:/var/lib/outline/data expose: - 3000 networks: - net - traefik-public deploy: labels: - traefik.enable=true - traefik.swarm.network=traefik-public - traefik.constraint-label=traefik-public - traefik.http.routers.outline-rtr.entrypoints=https - traefik.http.routers.outline-rtr.rule=Host(`outline.${DOMAIN}`) - traefik.http.routers.outline-rtr.middlewares=xbot - traefik.http.routers.outline-rtr.tls.certresolver=le - traefik.http.routers.outline-rtr.service=outline-svc - traefik.http.services.outline-svc.loadbalancer.server.port=3000