feat: create production docker-compose.yml (#38)
Some checks failed
Deploy to Coolify / Code Quality (pull_request) Has been cancelled
Deploy to Coolify / Run Tests (pull_request) Has been cancelled
Deploy to Coolify / Deploy to Development (pull_request) Has been cancelled
Deploy to Coolify / Deploy to Production (pull_request) Has been cancelled
Deploy to Coolify / Deploy to Test (pull_request) Has been cancelled
Pull Request Checks / Validate PR (pull_request) Has been cancelled

- Production compose file with single app service
- Separate from development compose (now docker-compose.dev.yml)
- Environment variable configuration
- Health checks and resource limits
- .env.production.example template
- Comprehensive DEPLOYMENT.md guide

Deployment guide covers:
- Quick start with Docker Compose
- Supabase setup (cloud + self-hosted)
- Multiple deployment options (Coolify, Docker, K8s, VPS)
- HTTPS/SSL configuration
- Monitoring and logging
- Backup and restore procedures
- Troubleshooting
- Security checklist
- Performance optimization

Ready for production deployment on any platform.

Closes #38
This commit is contained in:
Pantry Lead Agent
2026-02-25 00:13:53 +00:00
parent 60d6e03e87
commit f0b555f18a
4 changed files with 411 additions and 0 deletions

52
docker-compose.prod.yml Normal file
View File

@@ -0,0 +1,52 @@
# Production Docker Compose for Pantry App
#
# This compose file only runs the Nuxt frontend.
# Supabase should be hosted separately (managed service or self-hosted).
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
image: pantry:latest
container_name: pantry-app
restart: unless-stopped
ports:
- "3000:3000"
environment:
# Supabase connection (REQUIRED - set these in .env.production)
NUXT_PUBLIC_SUPABASE_URL: ${NUXT_PUBLIC_SUPABASE_URL}
NUXT_PUBLIC_SUPABASE_ANON_KEY: ${NUXT_PUBLIC_SUPABASE_ANON_KEY}
# Server configuration
NODE_ENV: production
HOST: 0.0.0.0
PORT: 3000
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000/api/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"]
interval: 30s
timeout: 3s
start_period: 40s
retries: 3
networks:
- pantry
# Resource limits (adjust based on your needs)
deploy:
resources:
limits:
memory: 512M
cpus: '1.0'
reservations:
memory: 256M
cpus: '0.5'
networks:
pantry:
driver: bridge