| version: '3.8' | |
| services: | |
| app: | |
| build: | |
| context: . | |
| dockerfile: Dockerfile.new | |
| ports: | |
| - "3000:3000" | |
| environment: | |
| - PORT=3000 | |
| - GIN_MODE=release | |
| - MONGODB_URI=${MONGODB_URI:-mongodb://mongo:27017/ryp} | |
| - JWT_SECRET=${JWT_SECRET:-your-secret-key-change-in-production} | |
| - GROQ_API_KEY=${GROQ_API_KEY} | |
| depends_on: | |
| - mongo | |
| restart: unless-stopped | |
| healthcheck: | |
| test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/health"] | |
| interval: 30s | |
| timeout: 10s | |
| retries: 3 | |
| start_period: 40s | |
| mongo: | |
| image: mongo:7.0 | |
| ports: | |
| - "27017:27017" | |
| environment: | |
| - MONGO_INITDB_ROOT_USERNAME=${MONGO_ROOT_USERNAME:-admin} | |
| - MONGO_INITDB_ROOT_PASSWORD=${MONGO_ROOT_PASSWORD:-password} | |
| - MONGO_INITDB_DATABASE=ryp | |
| volumes: | |
| - mongo_data:/data/db | |
| - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro | |
| restart: unless-stopped | |
| healthcheck: | |
| test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] | |
| interval: 30s | |
| timeout: 10s | |
| retries: 3 | |
| start_period: 40s | |
| nginx: | |
| image: nginx:alpine | |
| ports: | |
| - "80:80" | |
| - "443:443" | |
| volumes: | |
| - ./nginx.conf:/etc/nginx/nginx.conf:ro | |
| - ./ssl:/etc/nginx/ssl:ro | |
| depends_on: | |
| - app | |
| restart: unless-stopped | |
| profiles: | |
| - production | |
| volumes: | |
| mongo_data: | |
| networks: | |
| default: | |
| driver: bridge | |