services: postgres: image: postgres:17-alpine container_name: assetpilot-postgres restart: unless-stopped environment: - POSTGRES_DB=assetpilot - POSTGRES_USER=assetpilot - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-assetpilot} volumes: - assetpilot-postgres:/var/lib/postgresql/data assetpilot: image: es94111/assetpilot:latest # 如果要自行建置,取消下一行註解並註解 image: # build: . container_name: assetpilot restart: unless-stopped depends_on: - postgres # 僅綁定 loopback:nginx.conf 透過 Docker 內部網路以服務名稱 # (http://assetpilot:3000)連線,不需要把 3000 對外發布到所有介面。 # 對外發布會讓任何人略過 nginx(見 nginx.conf 對 XFF/X-Real-IP 的覆寫) # 直連 Node,偽造 X-Forwarded-For 繞過應用層速率限制(AUTH-VULN-06)。 ports: - "127.0.0.1:3000:3000" volumes: - assetpilot-data:/app/data environment: - PORT=3000 - HOSTNAME=0.0.0.0 - NEXT_TELEMETRY_DISABLED=1 - DATABASE_URL=${DATABASE_URL:-postgres://assetpilot:assetpilot@postgres:5432/assetpilot} - ENV_PATH=/app/data/.env - SSL_PATH=/app/data/SSL - JWT_EXPIRES=7d - APP_JWT_EXPIRES=90d - GOOGLE_CLIENT_ID= # JWT_SECRET 首次啟動自動產生並寫入 /app/data/.env # 具名 Volume — Docker 自動管理,資料不會因容器刪除而遺失 volumes: assetpilot-data: driver: local assetpilot-postgres: driver: local