A comprehensive collection of Docker tools for deploying Frappe/ERPNext, supporting both local development and VPS/cloud server environments with automatic SSL certificate management and Cloudflare integration.
- SSL/HTTPS Support: Full Let's Encrypt certificates
- Cloudflare Integration: DNS challenge support
- Internet Accessible: Public domain deployment
- Production Ready: Optimized for live websites
- Optimized Architecture: 4 containers with faster startup
- Custom Ports: Smart port detection (e.g., 8081)
- Localhost Support: .localhost domains
- Development Focus: Lower resource usage, faster iteration
generate_frappe_docker.sh- Production deployment with SSL/HTTPSdocker-manager.sh- Production container management (13 menu options)fix_traefik_https.sh- Comprehensive HTTPS upgrademanual_fix_traefik.sh- Quick HTTPS fixtest_mixed_setup.sh- Mixed HTTP/HTTPS testing
Docker-Local/generate_frappe_docker_local.sh- Local development setup with enhanced featuresDocker-Local/setup-traefik-local.sh- Local Traefik configuration (Linux)Docker-Local/setup-traefik-local-mac.sh- Local Traefik configuration (Mac optimized)
docker-manager.sh- Universal container management (13 menu options) - works for both local and VPSfix-traefik-network.sh- Fix broken traefik_proxy network issuesfix-db-permissions.sh- Fix database permissions for app installation
Docker-Local/README.md- Complete local development guideDocker-Local/QUICK_REFERENCE.md- Local development commandsDocker-on-VPS/README.md- Complete VPS deployment guideDocker-on-VPS/DOCKER_MANAGER.md- VPS container management guidedemo.yaml&pwd.yml- Docker Compose templates
# 1. Make script executable
chmod +x generate_frappe_docker.sh
# 2. Run the setup
./generate_frappe_docker.sh
# 3. Choose SSL/HTTPS when prompted
# 4. Enter your domain (e.g., example.com)
# 5. Provide Cloudflare API token (optional)
# 6. Wait for automatic setup (5 minutes)
# 7. Manage your site
./docker-manager.shWhat You Get:
- β 4-Container Setup: app, db, redis, create-site
- β SSL/HTTPS: Automatic Let's Encrypt certificates
- β Traefik Integration: Reverse proxy with SSL termination
- β Production Ready: Internet accessible with domain validation
- β Enhanced Features: ERPNext version selection, database permissions auto-fix, automatic restart policies
# π Mac Users (Recommended)
# Option 1: No sudo required (RECOMMENDED for Mac)
# 1. Setup local Traefik (Mac optimized, no sudo)
./Docker-Local/setup-traefik-local-mac-no-sudo.sh
# 2. Generate new local site
./Docker-Local/generate_frappe_docker_local.sh
# 3. Enter site name (e.g., demo.localhost)
# 4. Wait for automatic setup (5 minutes)
# 5. Manage local containers
./docker-manager.sh
# Option 2: With sudo (if you prefer)
# 1. Setup local Traefik (Mac optimized, with sudo)
sudo ./Docker-Local/setup-traefik-local-mac.sh
# 2. Generate new local site
sudo ./Docker-Local/generate_frappe_docker_local.sh
# 3. Enter site name (e.g., demo.localhost)
# 4. Wait for automatic setup (5 minutes)
# 5. Manage local containers
sudo ./docker-manager.sh
# π§ Linux Users
# 1. Setup local Traefik
sudo ./Docker-Local/setup-traefik-local.sh
# 2. Generate new local site
sudo ./Docker-Local/generate_frappe_docker_local.sh
# 3. Enter site name (e.g., demo.local)
# 4. Wait for automatic setup (5 minutes)
# 5. Manage local containers
sudo ./docker-manager.shWhat You Get:
- β 4-Container Setup: Optimized for local development
- β Custom Ports: Automatically detected (e.g., 8081)
- β Localhost Domains: .localhost support with hosts file management
- β Fast Startup: Lower resource usage, faster iteration
- β Mac Optimized: Native .localhost support, port 8081 default, Docker Desktop optimized
- β Enhanced Features: ERPNext version selection, database permissions auto-fix, VS Code development support
| Feature | VPS/Cloud Server | Local Development |
|---|---|---|
| Purpose | Production websites | Development & testing |
| Containers | 4 containers (minimal) | 4 containers (optimized) |
| SSL | Full HTTPS with Let's Encrypt | HTTP only (local) |
| Ports | Standard 80/443 | Custom ports (e.g., 8081) - Mac optimized |
| Access | Internet accessible | Local network only |
| Domains | Real domains (example.com) | Localhost domains (demo.localhost) |
| Resource Usage | Medium (production) | Lower (development) |
| Startup Time | Medium | Faster |
| Use Case | Live websites, clients | Learning, testing, development |
| Mac Support | Standard | Native .localhost, port 8081, Docker Desktop optimized |
Site Container Structure:
βββ site-name-app/ # Main application (Supervisor + all Frappe processes)
β βββ Frappe Web # Web server (port 8000)
β βββ Frappe Workers # Background workers (short, long, default)
β βββ Frappe Schedule # Background scheduler
β βββ Frappe WebSocket # WebSocket server (port 9000)
βββ site-name-db/ # MariaDB 10.6 database
βββ site-name-redis/ # Redis 6.2 (cache, queue, socketio)
βββ site-name-create-site/ # Temporary setup container
Traefik Integration:
βββ SSL termination
βββ Automatic redirects (HTTP β HTTPS)
βββ Load balancing
βββ Certificate management
Site Container Structure:
βββ site-name-app/ # Main application (Supervisor + all Frappe processes)
β βββ Frappe Web # Web server (port 8000)
β βββ Frappe Workers # Background workers
β βββ Frappe Schedule # Background scheduler
β βββ Frappe WebSocket # WebSocket server (port 9000)
βββ site-name-db/ # MariaDB 10.6 database
βββ site-name-redis/ # Redis 6.2 (cache, queue, socketio)
βββ site-name-create-site/ # Temporary setup container
Local Traefik Integration:
βββ Custom port support (e.g., 8081)
βββ Localhost domain handling
βββ Hosts file management
βββ Development-optimized routing
βββ Mac-optimized configuration (port 8081, .localhost domains)
π Complete VPS Guide - Full production deployment documentation
Key Features:
- SSL/HTTPS with Let's Encrypt
- Cloudflare DNS challenge support
- Traefik reverse proxy setup
- Mixed HTTP/HTTPS deployments
- Production security considerations
π Complete Local Guide - Full local development documentation
Key Features:
- Optimized 4-container setup
- Smart port detection
- Localhost domain support
- Hosts file management
- Development-focused tooling
# Access the Universal Docker Manager (works for both VPS and Local)
./docker-manager.sh
# Available Menu Options:
1. Show running containers
2. Access container shell (normal user)
3. Access container shell (root user)
4. Manage Frappe processes
5. View logs
6. Manage containers
7. Show site information
8. Access specific container as root
9. File Transfer
10. Install Packages
11. View Create-Site logs
12. Fix Restart Policies
13. Exit# Check process status
docker exec SITE_NAME-app /home/frappe/.local/bin/supervisorctl -c /home/frappe/supervisor/supervisord.conf status
# Restart specific process
docker exec SITE_NAME-app /home/frappe/.local/bin/supervisorctl -c /home/frappe/supervisor/supervisord.conf restart frappe-web
# Restart all processes
docker exec SITE_NAME-app /home/frappe/.local/bin/supervisorctl -c /home/frappe/supervisor/supervisord.conf restart all
# View specific logs
docker exec SITE_NAME-app tail -f /home/frappe/supervisor/logs/frappe-web.logAvailable Processes:
frappe-web- Web serverfrappe-schedule- Background schedulerfrappe-worker-short- Short queue workerfrappe-worker-long- Long queue workerfrappe-worker-default- Default queue workerfrappe-websocket- WebSocket server
Located in Docker-Local/helper-screenshot/:
- Site Generation:
run_generate_frappe_docker_local.png- Complete setup process - Docker Manager:
access_the_docker-manager.png- Main menu interface - Container Access:
view_and_access_containers.png- Container management - Package Installation:
install_nano_package_on_container.png- Software installation
Production deployment screenshots available in the VPS documentation.
# Check container logs
docker logs SITE_NAME-app
# Check container status
docker ps -a
# Restart container
docker restart SITE_NAME-app# Fix broken traefik_proxy network
./fix-traefik-network.sh
# This will temporarily disconnect all sites (~30 seconds)
# and recreate the network properly# Access container and check Supervisor
docker exec -it SITE_NAME-app bash
# Check Supervisor status
/home/frappe/.local/bin/supervisorctl -c /home/frappe/supervisor/supervisord.conf status
# Restart all processes
/home/frappe/.local/bin/supervisorctl -c /home/frappe/supervisor/supervisord.conf restart all# Check what's using ports
sudo ss -ltn "sport = :80"
sudo ss -ltn "sport = :443"
# Setup local Traefik
sudo ./Docker-Local/setup-traefik-local.sh# Fix database permissions for app installation
./fix-db-permissions.sh SITE_NAME-app
# This fixes "Access denied" errors when installing custom apps# Check Traefik logs
docker logs traefik
# Verify domain DNS
nslookup your-domain.com
# Test Traefik configuration
./test_mixed_setup.sh- β SSL/HTTPS: Always use for production
- β Firewall: Configure UFW with minimal open ports
- β Cloudflare: Use "Full (strict)" SSL mode
- β Passwords: Change default passwords immediately
- β Updates: Keep containers and system updated
- β Local Network: Only accessible from local machine
- β Custom Ports: Use non-standard ports for development
- β Hosts File: Automatic domain management
- β Isolation: Separate from production environments
# Backup database
docker exec SITE_NAME-db mysqldump -u root -padmin --all-databases > backup.sql
# Backup volumes
docker run --rm -v SITE_NAME_sites:/data -v $(pwd):/backup alpine tar czf /backup/sites-backup.tar.gz /data
# Backup entire site
tar czf site-backup-$(date +%Y%m%d).tar.gz SITE_NAME/ backup.sql# Restore database
docker exec -i SITE_NAME-db mysql -u root -padmin < backup.sql
# Restore volumes
docker run --rm -v SITE_NAME_sites:/data -v $(pwd):/backup alpine tar xzf /backup/sites-backup.tar.gz -C /# Deploy multiple production sites
./generate_frappe_docker.sh # site1.com
./generate_frappe_docker.sh # site2.com
./generate_frappe_docker.sh # site3.com# Deploy multiple local sites
sudo ./Docker-Local/generate_frappe_docker_local.sh # demo.localhost
sudo ./Docker-Local/generate_frappe_docker_local.sh # test.localhost
sudo ./Docker-Local/generate_frappe_docker_local.sh # dev.localhost- β Deploying production websites
- β Need SSL/HTTPS certificates
- β Want public internet access
- β Using Cloudflare integration
- β Need domain validation
- β Running on cloud servers/VPS
- β Client-facing applications
- β Developing locally
- β Testing applications
- β Learning Frappe/ERPNext
- β Working offline
- β Need faster startup times
- β Want lower resource usage
- β Using custom ports
- β Development iterations
- β Mac Development: Native .localhost support, Docker Desktop optimization
- β Native .localhost Support: .localhost domains work without /etc/hosts modification
- β Port 8081 Default: Automatically uses port 8081 to avoid macOS system port conflicts
- β Docker Desktop Optimized: Optimized for Docker Desktop on macOS
- β Smart Port Detection: Automatically detects and handles port conflicts
- β System Service Awareness: Recognizes macOS system services using port 80
# Option 1: No sudo required (RECOMMENDED for Mac)
# 1. Setup local Traefik (Mac optimized, no sudo)
./Docker-Local/setup-traefik-local-mac-no-sudo.sh
# 2. Generate local site
./Docker-Local/generate_frappe_docker_local.sh
# 3. Manage containers
./Docker-Local/docker-manager-local.sh
# Option 2: With sudo (if you prefer)
# 1. Setup local Traefik (Mac optimized, with sudo)
sudo ./Docker-Local/setup-traefik-local-mac.sh
# 2. Generate local site
sudo ./Docker-Local/generate_frappe_docker_local.sh
# 3. Manage containers
sudo ./Docker-Local/docker-manager-local.sh- Site Access:
http://yoursite.localhost:8081 - Traefik Dashboard:
http://localhost:8080 - No hosts file editing required on macOS
- Check Documentation: Start with the appropriate README
- Review Logs: Use container management tools
- Verify Setup: Ensure proper configuration
- Test Scripts: Use diagnostic tools
# View all containers
docker ps -a
# Check container resources
docker stats
# View Docker networks
docker network ls
# Clean up unused resources
docker system prune- π Local Development: Docker-Local/README.md
- π VPS/Cloud Server: Docker-on-VPS/README.md
- π οΈ VPS Manager: Docker-on-VPS/DOCKER_MANAGER.md
- π Local Quick Reference: Docker-Local/QUICK_REFERENCE.md
Feel free to submit issues, feature requests, or pull requests to improve these tools and documentation.
- Test changes in both environments
- Update relevant documentation
- Maintain backward compatibility
- Follow existing code patterns
This project is open source and available under the MIT License.
chmod +x generate_frappe_docker.sh
./generate_frappe_docker.sh
./docker-manager.sh# π Mac users (recommended):
# No sudo required (RECOMMENDED):
./Docker-Local/setup-traefik-local-mac-no-sudo.sh
./Docker-Local/generate_frappe_docker_local.sh
./docker-manager.sh
# With sudo (if you prefer):
sudo ./Docker-Local/setup-traefik-local-mac.sh
sudo ./Docker-Local/generate_frappe_docker_local.sh
sudo ./docker-manager.sh
# π§ Linux users:
sudo ./Docker-Local/setup-traefik-local.sh
sudo ./Docker-Local/generate_frappe_docker_local.sh
sudo ./docker-manager.sh# Check status
docker exec SITE_NAME-app /home/frappe/.local/bin/supervisorctl -c /home/frappe/supervisor/supervisord.conf status
# Restart all
docker exec SITE_NAME-app /home/frappe/.local/bin/supervisorctl -c /home/frappe/supervisor/supervisord.conf restart allπ‘ Pro Tip: Bookmark the appropriate README for your environment - Local Development or VPS/Cloud Server!
π Mac Users: Use setup-traefik-local-mac-no-sudo.sh for the best experience with no sudo required and native .localhost support!
π§ New Features: Enhanced ERPNext version selection, automatic database permissions fixes, universal docker-manager.sh, and network troubleshooting tools!
π― Ready to Deploy? Choose your environment and follow the complete guide! π