8.5 KiB
8.5 KiB
🐳 ScriptShare Docker Deployment Guide
Overview
This guide covers deploying ScriptShare to any generic Docker server using Docker Compose. The setup includes:
- Frontend: React application served by Nginx
- Backend API: Node.js Express server
- Database: MySQL 8.0
- Reverse Proxy: Nginx with load balancing
- Cache: Redis (optional)
- Monitoring: Health checks and logging
Prerequisites
- Docker Engine 20.10+
- Docker Compose 2.0+
- At least 2GB RAM
- 10GB+ disk space
- Linux/macOS server (Windows with WSL2)
Quick Start
1. Prepare Environment
# Clone the repository
git clone <your-repo-url>
cd scriptshare-cursor
# Copy and configure environment
cp env.production .env
# Edit .env with your specific settings
nano .env
2. Deploy Application
# Make scripts executable (Linux/macOS)
chmod +x scripts/*.sh
# Run deployment
./scripts/deploy.sh
3. Verify Deployment
# Check service status
./scripts/manage.sh status
# View logs
./scripts/manage.sh logs
Configuration
Environment Variables
Edit env.production
before deployment:
# Domain Configuration
APP_URL=https://your-domain.com
FRONTEND_URL=https://your-domain.com
CORS_ORIGIN=https://your-domain.com
# Security (CHANGE THESE!)
JWT_SECRET=your-super-secret-jwt-key
DB_PASSWORD=your-secure-database-password
DB_ROOT_PASSWORD=your-root-password
REDIS_PASSWORD=your-redis-password
# Ports (adjust if needed)
PROXY_PORT=80
PROXY_SSL_PORT=443
API_PORT=3001
SSL Configuration
-
Place SSL certificates in
./certs/
:certs/ ├── fullchain.pem └── privkey.pem
-
Enable HTTPS in
nginx/conf.d/scriptshare.conf
:- Uncomment the SSL server block
- Update
server_name
with your domain
-
Restart proxy:
./scripts/manage.sh restart scriptshare-proxy
Service Architecture
┌─────────────────┐ ┌─────────────────┐
│ Nginx Proxy │────│ Frontend │
│ Port 80/443 │ │ (React+Nginx) │
└─────────────────┘ └─────────────────┘
│ │
│ ┌─────────────────┐
└──────────────│ Backend API │
│ (Node.js) │
└─────────────────┘
│
┌─────────────────┐
│ MySQL 8.0 │
│ Database │
└─────────────────┘
│
┌─────────────────┐
│ Redis Cache │
│ (Optional) │
└─────────────────┘
Management Commands
Service Management
# Start all services
./scripts/manage.sh start
# Stop all services
./scripts/manage.sh stop
# Restart services
./scripts/manage.sh restart
# View service status
./scripts/manage.sh status
# View logs (all services)
./scripts/manage.sh logs
# View logs (specific service)
./scripts/manage.sh logs scriptshare-api
Database Management
# Connect to database
./scripts/manage.sh db
# Create backup
./scripts/manage.sh backup
# Run migrations (from API container)
docker-compose -f docker-compose.prod.yml exec scriptshare-api npm run db:migrate:prod
Maintenance
# Update application
./scripts/manage.sh update
# Clean up Docker resources
./scripts/manage.sh clean
# Open shell in container
./scripts/manage.sh shell scriptshare-api
Port Configuration
Service | Internal Port | External Port | Description |
---|---|---|---|
Proxy | 80, 443 | 8080, 8443 | Main entry point |
Frontend | 80 | - | React application |
API | 3000 | 3001 | REST API |
Database | 3306 | 3306 | MySQL database |
Redis | 6379 | 6379 | Cache store |
Monitoring
Health Checks
All services include health checks:
# Check health status
curl http://localhost:8080/health
# API health
curl http://localhost:3001/api/health
# Individual service health
docker ps --format "table {{.Names}}\t{{.Status}}"
Logging
Logs are stored in Docker volumes and can be accessed via:
# All services
docker-compose -f docker-compose.prod.yml logs -f
# Specific service
docker-compose -f docker-compose.prod.yml logs -f scriptshare-api
# Save logs to file
docker-compose -f docker-compose.prod.yml logs > scriptshare.log
Backup & Recovery
Automated Backups
Configure automated backups by adding to crontab:
# Edit crontab
crontab -e
# Add daily backup at 2 AM
0 2 * * * /path/to/scriptshare/scripts/backup.sh
Manual Backup
# Create backup
./scripts/backup.sh
# Backups are stored in ./backups/
ls -la backups/
Recovery
# Stop database
docker-compose -f docker-compose.prod.yml stop scriptshare-db
# Restore from backup
gunzip -c backups/scriptshare_backup_YYYYMMDD_HHMMSS.sql.gz | \
docker exec -i scriptshare-db mysql -u root -p'your-root-password'
# Start database
docker-compose -f docker-compose.prod.yml start scriptshare-db
Security Considerations
1. Change Default Passwords
- Update all passwords in
env.production
- Use strong, unique passwords
- Consider using environment variable files
2. Network Security
- Configure firewall rules
- Use reverse proxy for SSL termination
- Implement rate limiting (configured in nginx)
3. SSL/TLS
- Use Let's Encrypt for free SSL certificates
- Configure HSTS headers
- Use modern TLS protocols only
4. Container Security
- Keep Docker images updated
- Run containers with non-root users where possible
- Use Docker secrets for sensitive data
Troubleshooting
Common Issues
-
Services won't start:
# Check logs docker-compose -f docker-compose.prod.yml logs # Check disk space df -h # Check memory free -h
-
Database connection errors:
# Test database connectivity docker exec scriptshare-db mysqladmin ping -u root -p'password' # Check database logs docker-compose -f docker-compose.prod.yml logs scriptshare-db
-
API not responding:
# Check API health curl http://localhost:3001/api/health # Check API logs docker-compose -f docker-compose.prod.yml logs scriptshare-api
Performance Tuning
-
Database Optimization:
- Adjust
innodb_buffer_pool_size
in MySQL configuration - Monitor slow query log
- Add database indexes as needed
- Adjust
-
Nginx Optimization:
- Enable gzip compression (configured)
- Adjust worker processes
- Configure caching headers
-
Resource Limits:
- Set memory and CPU limits in docker-compose.prod.yml
- Monitor resource usage with
docker stats
Scaling
Horizontal Scaling
To scale the application:
# Scale API containers
docker-compose -f docker-compose.prod.yml up -d --scale scriptshare-api=3
# Scale frontend containers
docker-compose -f docker-compose.prod.yml up -d --scale scriptshare-frontend=2
Load Balancing
Nginx automatically load balances between multiple container instances.
Production Checklist
- Update all default passwords
- Configure SSL certificates
- Set up automated backups
- Configure monitoring and alerting
- Set up log rotation
- Configure firewall rules
- Test disaster recovery procedures
- Set up domain and DNS
- Configure SMTP for emails (if applicable)
- Set up monitoring dashboard
Support
For issues and questions:
- Check the logs first
- Review this documentation
- Check Docker and system resources
- Create an issue in the repository
Your ScriptShare application is now ready for production deployment! 🚀