services: wiregui: build: context: . dockerfile: Dockerfile image: wiregui:latest restart: unless-stopped ports: - "13000:13000" - "51821:51821/udp" cap_add: - NET_ADMIN - SYS_MODULE sysctls: - net.ipv4.ip_forward=1 - net.ipv6.conf.all.forwarding=1 - net.ipv6.conf.all.disable_ipv6=0 environment: WG_DATABASE_URL: postgresql+asyncpg://wiregui:${POSTGRES_PASSWORD:-wiregui}@postgres/wiregui WG_REDIS_URL: redis://valkey:6379/0 WG_SECRET_KEY: ${WG_SECRET_KEY:-change-me-in-production} WG_WG_ENABLED: "true" WG_WG_ENDPOINT_HOST: ${WG_ENDPOINT_HOST:-vpn.example.com} WG_WG_ENDPOINT_PORT: "51821" WG_HOST: "0.0.0.0" WG_PORT: "13000" WG_EXTERNAL_URL: ${WG_EXTERNAL_URL:-http://localhost:13000} WG_ADMIN_EMAIL: ${WG_ADMIN_EMAIL:-admin@localhost} WG_ADMIN_PASSWORD: ${WG_ADMIN_PASSWORD:-} WG_LOG_TO_FILE: "true" WG_METRICS_ENABLED: "true" WG_METRICS_POLL_INTERVAL: "5" WG_VICTORIAMETRICS_URL: http://victoriametrics:8428 WG_IDP_CONFIG_FILE: ${WG_IDP_CONFIG_FILE:-} volumes: - wiregui_logs:/app/logs depends_on: postgres: condition: service_healthy valkey: condition: service_started victoriametrics: condition: service_started postgres: image: postgres:17 restart: unless-stopped environment: POSTGRES_USER: wiregui POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-wiregui} POSTGRES_DB: wiregui volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U wiregui"] interval: 5s timeout: 5s retries: 5 valkey: image: valkey/valkey:8 restart: unless-stopped volumes: - valkey_data:/data victoriametrics: image: victoriametrics/victoria-metrics:v1.108.1 restart: unless-stopped command: - "-retentionPeriod=90d" - "-httpListenAddr=:8428" volumes: - vm_data:/victoria-metrics-data volumes: postgres_data: valkey_data: wiregui_logs: vm_data: