This document provides instructions for running YomU using Docker or Podman with Docker Compose.
- Docker installed
- Docker Compose installed
- Podman installed
- Podman Compose installed
-
Clone the repository (if not already done):
git clone <repository-url> cd yomu
-
Set up environment variables:
cp .env.example .env # Edit .env with your configuration -
Build and run the application:
# Production mode docker-compose up -d # Development mode (with hot reload) docker-compose --profile dev up -d
-
Access the application:
- Production: http://localhost:3000
- Development: http://localhost:3001
-
Clone the repository (if not already done):
git clone <repository-url> cd yomu
-
Set up environment variables:
cp .env.example .env # Edit .env with your configuration -
Build and run the application:
# Production mode podman-compose up -d # Development mode (with hot reload) podman-compose --profile dev up -d
-
Access the application:
- Production: http://localhost:3000
- Development: http://localhost:3001
- app: Next.js application (production build)
- db: SQLite database with persistent storage
- app-dev: Development version with hot reload (optional)
- app-dev: Next.js development server with hot reload
- db: SQLite database with persistent storage
Create a .env file in the root directory:
# Database
DATABASE_URL="file:/data/dev.db"
# NextAuth
NEXTAUTH_URL="http://localhost:3000"
NEXTAUTH_SECRET="your-secret-key-here"
# Node Environment
NODE_ENV="production"# Start all services
docker-compose up -d
# Start with development profile
docker-compose --profile dev up -d
# View logs
docker-compose logs -f app
# Stop all services
docker-compose down
# Rebuild and start
docker-compose up -d --build
# Clean up volumes
docker-compose down -v# Start all services
podman-compose up -d
# Start with development profile
podman-compose --profile dev up -d
# View logs
podman-compose logs -f app
# Stop all services
podman-compose down
# Rebuild and start
podman-compose up -d --build
# Clean up volumes
podman-compose down -v# Run database migrations
docker-compose exec app npx prisma migrate deploy
# Seed the database
docker-compose exec app node scripts/seed.js# Copy database from container
docker cp yomu-db:/data/dev.db ./backup/dev.db# Copy database to container
docker cp ./backup/dev.db yomu-db:/data/dev.db-
Start development environment:
docker-compose --profile dev up -d
-
Access development server: http://localhost:3001
-
View logs:
docker-compose logs -f app-dev
-
Run commands in container:
docker-compose exec app-dev npm run test docker-compose exec app-dev npx prisma studio
The development container includes volume mounts for:
- Source code changes
- Node modules (cached)
- Database persistence
Changes to your code will automatically trigger hot reload.
-
Build production image:
docker-compose build app
-
Start production stack:
docker-compose up -d
-
Initialize database:
docker-compose exec app npx prisma migrate deploy docker-compose exec app node scripts/seed.js
-
Build production image:
podman-compose build app
-
Start production stack:
podman-compose up -d
-
Initialize database:
podman-compose exec app npx prisma migrate deploy podman-compose exec app node scripts/seed.js
-
Port already in use:
# Check what's using the port lsof -i :3000 # Stop conflicting services docker-compose down
-
Database connection issues:
# Check database container docker-compose logs db # Restart database docker-compose restart db
-
Build failures:
# Clean build cache docker-compose build --no-cache app -
Permission issues (Podman):
# Run with correct SELinux labels podman-compose up -d
# View all logs
docker-compose logs
# View specific service logs
docker-compose logs app
# Follow logs in real-time
docker-compose logs -f app
# Access container shell
docker-compose exec app sh- Environment Variables: Never commit
.envfiles to version control - Secrets: Use Docker secrets or external secret management
- Network: Services are isolated in a custom network
- User: Application runs as non-root user (nextjs:1001)
- Multi-stage Dockerfile reduces image size
- Standalone Next.js output optimizes runtime
- Alpine Linux base image minimizes footprint
- Volume mounts for fast file access
- Node modules cached in container
- Hot reload for rapid development
# Check service status
docker-compose ps
# Check resource usage
docker stats# Application logs
docker-compose logs app
# Database logs
docker-compose logs db# Create backup
docker-compose exec db sqlite3 /data/dev.db ".backup /data/backup_$(date +%Y%m%d_%H%M%S).db"
# Copy backup to host
docker cp yomu-db:/data/backup_*.db ./backups/# Backup volumes
docker run --rm -v yomu_db_data:/data -v $(pwd):/backup alpine tar czf /backup/db_backup_$(date +%Y%m%d_%H%M%S).tar.gz /data# Scale application instances
docker-compose up -d --scale app=3For production deployments, consider using:
- Nginx reverse proxy
- Traefik for automatic SSL
- Docker Swarm for orchestration
When contributing to the Docker setup:
- Test both Docker and Podman configurations
- Update documentation for any changes
- Ensure backward compatibility
- Test in both development and production modes