Remove deployment success documentation for ScriptShare application on DigitalOcean, streamlining project files and eliminating outdated information.
This commit is contained in:
365
DOCKER_DEPLOYMENT.md
Normal file
365
DOCKER_DEPLOYMENT.md
Normal file
@ -0,0 +1,365 @@
|
||||
# 🐳 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**
|
||||
|
||||
```bash
|
||||
# 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**
|
||||
|
||||
```bash
|
||||
# Make scripts executable (Linux/macOS)
|
||||
chmod +x scripts/*.sh
|
||||
|
||||
# Run deployment
|
||||
./scripts/deploy.sh
|
||||
```
|
||||
|
||||
### 3. **Verify Deployment**
|
||||
|
||||
```bash
|
||||
# Check service status
|
||||
./scripts/manage.sh status
|
||||
|
||||
# View logs
|
||||
./scripts/manage.sh logs
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Environment Variables
|
||||
|
||||
Edit `env.production` before deployment:
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
1. **Place SSL certificates** in `./certs/`:
|
||||
```
|
||||
certs/
|
||||
├── fullchain.pem
|
||||
└── privkey.pem
|
||||
```
|
||||
|
||||
2. **Enable HTTPS** in `nginx/conf.d/scriptshare.conf`:
|
||||
- Uncomment the SSL server block
|
||||
- Update `server_name` with your domain
|
||||
|
||||
3. **Restart proxy**:
|
||||
```bash
|
||||
./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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
|
||||
```bash
|
||||
# Edit crontab
|
||||
crontab -e
|
||||
|
||||
# Add daily backup at 2 AM
|
||||
0 2 * * * /path/to/scriptshare/scripts/backup.sh
|
||||
```
|
||||
|
||||
### Manual Backup
|
||||
|
||||
```bash
|
||||
# Create backup
|
||||
./scripts/backup.sh
|
||||
|
||||
# Backups are stored in ./backups/
|
||||
ls -la backups/
|
||||
```
|
||||
|
||||
### Recovery
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
1. **Services won't start**:
|
||||
```bash
|
||||
# Check logs
|
||||
docker-compose -f docker-compose.prod.yml logs
|
||||
|
||||
# Check disk space
|
||||
df -h
|
||||
|
||||
# Check memory
|
||||
free -h
|
||||
```
|
||||
|
||||
2. **Database connection errors**:
|
||||
```bash
|
||||
# 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
|
||||
```
|
||||
|
||||
3. **API not responding**:
|
||||
```bash
|
||||
# Check API health
|
||||
curl http://localhost:3001/api/health
|
||||
|
||||
# Check API logs
|
||||
docker-compose -f docker-compose.prod.yml logs scriptshare-api
|
||||
```
|
||||
|
||||
### Performance Tuning
|
||||
|
||||
1. **Database Optimization**:
|
||||
- Adjust `innodb_buffer_pool_size` in MySQL configuration
|
||||
- Monitor slow query log
|
||||
- Add database indexes as needed
|
||||
|
||||
2. **Nginx Optimization**:
|
||||
- Enable gzip compression (configured)
|
||||
- Adjust worker processes
|
||||
- Configure caching headers
|
||||
|
||||
3. **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:
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
|
||||
1. Check the logs first
|
||||
2. Review this documentation
|
||||
3. Check Docker and system resources
|
||||
4. Create an issue in the repository
|
||||
|
||||
**Your ScriptShare application is now ready for production deployment! 🚀**
|
Reference in New Issue
Block a user