Files
vpwg/Go/docker-compose.yml

111 lines
3.0 KiB
YAML

# Amnezia VPN Share Panel (Go) — Dokploy / Docker Compose
# App listens on host port 30000. Postgres 17 is internal-only.
services:
app:
build:
context: .
dockerfile: Dockerfile
image: amnezia-share-go:latest
container_name: amnezia-share-app
restart: unless-stopped
ports:
- "30000:30000"
environment:
APP_PORT: "30000"
APP_BASE_URL: ${APP_BASE_URL:-}
APP_HTTP_BUDGET_SEC: ${APP_HTTP_BUDGET_SEC:-52}
APP_SESSION_SECRET: ${APP_SESSION_SECRET:?set APP_SESSION_SECRET}
DATABASE_URL: postgres://${POSTGRES_USER:-vpn_admin}:${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-vpn_admin}?sslmode=disable
TZ: ${TZ:-UTC}
AMNEZIA_PANEL_URL: ${AMNEZIA_PANEL_URL:-}
AMNEZIA_API_TOKEN: ${AMNEZIA_API_TOKEN:-}
AMNEZIA_SERVER_LABELS_JSON: ${AMNEZIA_SERVER_LABELS_JSON:-}
depends_on:
db:
condition: service_healthy
healthcheck:
test: ["CMD", "wget", "-qO-", "http://127.0.0.1:30000/health"]
interval: 30s
timeout: 5s
retries: 5
start_period: 25s
networks:
- amnezia
# Dokploy: keep logs bounded
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
cleanup:
image: amnezia-share-go:latest
container_name: amnezia-share-cleanup
restart: unless-stopped
entrypoint: ["/bin/sh", "-c"]
command:
- |
while true; do
/app/cleanup || true
sleep 300
done
environment:
DATABASE_URL: postgres://${POSTGRES_USER:-vpn_admin}:${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-vpn_admin}?sslmode=disable
APP_HTTP_BUDGET_SEC: ${APP_HTTP_BUDGET_SEC:-52}
AMNEZIA_PANEL_URL: ${AMNEZIA_PANEL_URL:-}
AMNEZIA_API_TOKEN: ${AMNEZIA_API_TOKEN:-}
TZ: ${TZ:-UTC}
depends_on:
db:
condition: service_healthy
app:
condition: service_started
healthcheck:
disable: true
networks:
- amnezia
logging:
driver: json-file
options:
max-size: "5m"
max-file: "2"
db:
image: postgres:17-alpine
container_name: amnezia-share-db
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB:-vpn_admin}
POSTGRES_USER: ${POSTGRES_USER:-vpn_admin}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD}
TZ: ${TZ:-UTC}
volumes:
- postgres_data:/var/lib/postgresql/data
# Do NOT publish 5432 publicly in Dokploy — app reaches db via internal network.
# Uncomment only for local debugging:
# ports:
# - "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
interval: 10s
timeout: 5s
retries: 10
start_period: 15s
networks:
- amnezia
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
volumes:
postgres_data:
name: amnezia-share-pg17
networks:
amnezia:
name: amnezia-share-net
driver: bridge