qrmaster/docker/README.md

5.3 KiB

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:

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:

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 string
  • NEXTAUTH_SECRET: Secret for NextAuth.js
  • NEXTAUTH_URL: Application URL
  • IP_SALT: Salt for hashing IP addresses
  • REDIS_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 data
  • redisdata: 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.yml to run only the database and Redis
  • Production: Use docker-compose.yml to 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: