mycopunk-swag-store/docker-compose.yml

100 lines
2.8 KiB
YAML

services:
# PostgreSQL Database
db:
image: postgres:16-alpine
container_name: swag-db
restart: unless-stopped
environment:
POSTGRES_USER: swag
POSTGRES_PASSWORD: ${DB_PASSWORD:-devpassword}
POSTGRES_DB: swag
volumes:
- swag-db-data:/var/lib/postgresql/data
networks:
- swag-internal
healthcheck:
test: ["CMD-SHELL", "pg_isready -U swag"]
interval: 5s
timeout: 5s
retries: 5
# Redis for sessions/cache
redis:
image: redis:7-alpine
container_name: swag-redis
restart: unless-stopped
volumes:
- swag-redis-data:/data
networks:
- swag-internal
# FastAPI Backend
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: swag-backend
restart: unless-stopped
environment:
- DATABASE_URL=postgresql://swag:${DB_PASSWORD:-devpassword}@db:5432/swag
- REDIS_URL=redis://redis:6379
- STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY}
- STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET}
- PRODIGI_API_KEY=${PRODIGI_API_KEY}
- PRINTFUL_API_TOKEN=${PRINTFUL_API_TOKEN}
- POD_SANDBOX_MODE=${POD_SANDBOX_MODE:-true}
- JWT_SECRET=${JWT_SECRET:-dev-secret-change-me}
- CORS_ORIGINS=${CORS_ORIGINS:-http://localhost:3000}
- DESIGNS_PATH=/app/designs
- CONFIG_PATH=/app/config
- GEMINI_API_KEY=${GEMINI_API_KEY}
volumes:
- ${DESIGNS_PATH:-../mycopunk-swag/designs}:/app/designs
- ${CONFIG_PATH:-../mycopunk-swag/config}:/app/config:ro
depends_on:
db:
condition: service_healthy
networks:
- swag-internal
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.swag-api.rule=Host(`swag.mycofi.earth`) && PathPrefix(`/api`)"
- "traefik.http.routers.swag-api.entrypoints=web"
- "traefik.http.services.swag-api.loadbalancer.server.port=8000"
- "traefik.docker.network=traefik-public"
# Next.js Frontend
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
args:
- NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL:-http://localhost:8000/api}
- NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=${NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY}
container_name: swag-frontend
restart: unless-stopped
environment:
- NODE_ENV=production
depends_on:
- backend
networks:
- swag-internal
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.swag-web.rule=Host(`swag.mycofi.earth`)"
- "traefik.http.routers.swag-web.entrypoints=web"
- "traefik.http.services.swag-web.loadbalancer.server.port=3000"
- "traefik.docker.network=traefik-public"
volumes:
swag-db-data:
swag-redis-data:
networks:
swag-internal:
driver: bridge
traefik-public:
external: true