pogoo-atlas/docker-compose.yml

63 lines
2 KiB
YAML

# atlas.pogoo.app — full product stack, self-contained repo for Portainer-git auto-deploy.
# Fully ISOLATED: own frontend + own API + own DB. Nothing shared with other products.
name: pogoo-atlas
services:
web:
build:
context: ./site
image: pogoo/atlas-web:latest
restart: unless-stopped
networks: [edge]
labels:
- "traefik.enable=true"
- "traefik.http.routers.atlas.rule=Host(`atlas.pogoo.app`)"
- "traefik.http.routers.atlas.entrypoints=websecure"
- "traefik.http.routers.atlas.tls.certresolver=le"
- "traefik.http.routers.atlas.middlewares=security-headers@file"
- "traefik.http.services.atlas.loadbalancer.server.port=80"
api:
# Placeholder — swap traefik/whoami for the real Atlas backend image.
image: traefik/whoami:latest
restart: unless-stopped
environment:
- DATABASE_URL=postgres://atlas:${DB_PASSWORD}@db:5432/atlas
networks: [edge, atlas_net]
depends_on:
db:
condition: service_healthy
labels:
- "traefik.enable=true"
- "traefik.http.routers.atlas-api.rule=Host(`atlas.pogoo.app`) && PathPrefix(`/api`)"
- "traefik.http.routers.atlas-api.entrypoints=websecure"
- "traefik.http.routers.atlas-api.tls.certresolver=le"
- "traefik.http.routers.atlas-api.priority=100"
- "traefik.http.routers.atlas-api.middlewares=atlas-strip@docker,ratelimit-std@file"
- "traefik.http.middlewares.atlas-strip.stripprefix.prefixes=/api"
- "traefik.http.services.atlas-api.loadbalancer.server.port=80"
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
- POSTGRES_USER=atlas
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=atlas
volumes:
- atlas_pgdata:/var/lib/postgresql/data
networks: [atlas_net] # private — never on edge
healthcheck:
test: ["CMD-SHELL", "pg_isready -U atlas"]
interval: 10s
timeout: 5s
retries: 5
networks:
edge:
external: true
atlas_net:
driver: bridge
volumes:
atlas_pgdata: