diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..3db78da --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,57 @@ +version: '3.9' + +services: + db: + image: postgres:16-alpine + environment: + POSTGRES_DB: vbytes + POSTGRES_USER: postgres + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} + volumes: + - postgres-data:/var/lib/postgresql/data + healthcheck: + test: ['CMD-SHELL', 'pg_isready -U postgres'] + interval: 10s + timeout: 5s + retries: 5 + restart: unless-stopped + + api: + build: ./api + environment: + DATABASE_URL: postgres://postgres:${POSTGRES_PASSWORD:-postgres}@db:5432/vbytes + DATABASE_MAX_CONNECTIONS: 10 + JWT_SECRET: ${JWT_SECRET:-dev_jwt_secret} + JWT_ISSUER: vbytes-api + JWT_TTL_SECONDS: 86400 + JWT_COOKIE_NAME: auth_token + JWT_COOKIE_SECURE: ${JWT_COOKIE_SECURE:-false} + ADMIN_USERNAME: ${ADMIN_USERNAME:-admin} + ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin123} + depends_on: + db: + condition: service_healthy + restart: unless-stopped + + web: + build: ./web + environment: + API_BASE_URL: http://api:8080 + HOST: 0.0.0.0 + PORT: 3000 + depends_on: + api: + condition: service_started + restart: unless-stopped + + cloudflared: + image: cloudflare/cloudflared:latest + command: ['tunnel', 'run', '--token', '${TUNNEL_TOKEN}'] + environment: + TUNNEL_TOKEN: ${TUNNEL_TOKEN} + depends_on: + - web + restart: unless-stopped + +volumes: + postgres-data: