|
|
||
|---|---|---|
| .. | ||
| README.md | ||
| init-db.sh | ||
README.md
Docker Setup for QR Master
This directory contains Docker configuration files for running QR Master with PostgreSQL database.
🚀 Quick Start
Development (Database Only)
For local development where you run Next.js on your host machine:
# Start PostgreSQL and Redis
docker-compose -f docker-compose.dev.yml up -d
# Run database migrations
npm run db:migrate
# Start the development server
npm run dev
Access:
- Application: http://localhost:3050
- Database: localhost:5432
- Redis: localhost:6379
- Adminer (DB UI): http://localhost:8080
Production (Full Stack)
To run the entire application in Docker:
# Build and start all services
docker-compose up -d --build
# Run database migrations
docker-compose exec web npx prisma migrate deploy
# (Optional) Seed the database
docker-compose exec web npm run db:seed
Access:
- Application: http://localhost:3050
- Database: localhost:5432
- Redis: localhost:6379
- Adminer (DB UI): http://localhost:8080 (only with --profile dev)
To include Adminer in production mode:
docker-compose --profile dev up -d
📦 Services
PostgreSQL (db)
- Image: postgres:16-alpine
- Port: 5432
- Database: qrmaster
- User: postgres
- Password: postgres (change in production!)
Redis (redis)
- Image: redis:7-alpine
- Port: 6379
- Max Memory: 256MB with LRU eviction policy
- Persistence: AOF enabled
Next.js Application (web)
- Port: 3050
- Environment: Production
- Health Check: HTTP GET on localhost:3050
Adminer (adminer)
- Image: adminer:latest
- Port: 8080
- Purpose: Database management UI
- Profile: dev (optional in production)
🗄️ Database Management
Migrations
# Create a new migration
npm run db:migrate
# Deploy migrations in Docker
docker-compose exec web npx prisma migrate deploy
# Reset database (caution!)
docker-compose exec web npx prisma migrate reset
Prisma Studio
# On host machine
npm run db:studio
# Or in Docker
docker-compose exec web npx prisma studio
Backup and Restore
# Backup
docker-compose exec db pg_dump -U postgres qrmaster > backup.sql
# Restore
docker-compose exec -T db psql -U postgres qrmaster < backup.sql
🔧 Useful Commands
View Logs
# All services
docker-compose logs -f
# Specific service
docker-compose logs -f web
docker-compose logs -f db
docker-compose logs -f redis
Shell Access
# Next.js container
docker-compose exec web sh
# PostgreSQL container
docker-compose exec db psql -U postgres -d qrmaster
# Redis container
docker-compose exec redis redis-cli
Stop and Clean
# Stop all services
docker-compose down
# Stop and remove volumes (deletes data!)
docker-compose down -v
# Stop and remove everything including images
docker-compose down -v --rmi all
🔐 Environment Variables
Create a .env file in the root directory (copy from env.example):
cp env.example .env
Required variables:
DATABASE_URL: PostgreSQL connection stringNEXTAUTH_SECRET: Secret for NextAuth.jsNEXTAUTH_URL: Application URLIP_SALT: Salt for hashing IP addressesREDIS_URL: Redis connection string
🌐 Network Architecture
All services run on a custom bridge network qrmaster-network which allows:
- Service discovery by container name
- Network isolation from other Docker projects
- Internal DNS resolution
📊 Volumes
Persistent Data
dbdata: PostgreSQL dataredisdata: Redis data
Volume Management
# List volumes
docker volume ls
# Inspect volume
docker volume inspect qrmaster_dbdata
# Remove all unused volumes
docker volume prune
🐛 Troubleshooting
Database Connection Issues
# Check if database is ready
docker-compose exec db pg_isready -U postgres
# Check database logs
docker-compose logs db
# Restart database
docker-compose restart db
Application Won't Start
# Check health status
docker-compose ps
# View application logs
docker-compose logs web
# Rebuild the application
docker-compose up -d --build web
Port Already in Use
If ports 3050, 5432, 6379, or 8080 are already in use:
# Find process using port
# Windows
netstat -ano | findstr :3050
# Linux/Mac
lsof -i :3050
# Kill process or change port in docker-compose.yml
🔄 Updates and Maintenance
Update Dependencies
# Update Node packages
npm update
# Rebuild Docker images
docker-compose build --no-cache
Update Docker Images
# Pull latest images
docker-compose pull
# Restart with new images
docker-compose up -d
📝 Notes
- Development: Use
docker-compose.dev.ymlto run only the database and Redis - Production: Use
docker-compose.ymlto run the full stack - Security: Always change default passwords in production
- Backups: Implement regular database backups in production
- Scaling: For production, consider using PostgreSQL replication and Redis Sentinel
🆘 Support
For more information, see: