mirror of
https://github.com/acedanger/shell.git
synced 2025-12-06 00:00:13 -08:00
feat: Implement comprehensive backup web application with Docker, systemd service, and Gunicorn support
This commit is contained in:
200
DEPLOYMENT-GUIDE.md
Normal file
200
DEPLOYMENT-GUIDE.md
Normal file
@@ -0,0 +1,200 @@
|
||||
# Backup Web Application Deployment Guide
|
||||
|
||||
This guide covers multiple methods to keep the backup web application running perpetually on your server.
|
||||
|
||||
## Deployment Options
|
||||
|
||||
### 1. 🚀 Systemd Service (Recommended for Production)
|
||||
|
||||
**Best for:** Production environments, automatic startup on boot, proper logging, and system integration.
|
||||
|
||||
#### Setup Steps:
|
||||
|
||||
```bash
|
||||
# Install the service
|
||||
sudo ./manage-backup-web-service.sh install
|
||||
|
||||
# Start the service
|
||||
sudo ./manage-backup-web-service.sh start
|
||||
|
||||
# Check status
|
||||
./manage-backup-web-service.sh status
|
||||
|
||||
# View logs
|
||||
./manage-backup-web-service.sh logs
|
||||
```
|
||||
|
||||
#### Service Management:
|
||||
|
||||
```bash
|
||||
# Start/Stop/Restart
|
||||
sudo systemctl start backup-web-app
|
||||
sudo systemctl stop backup-web-app
|
||||
sudo systemctl restart backup-web-app
|
||||
|
||||
# Enable/Disable auto-start on boot
|
||||
sudo systemctl enable backup-web-app
|
||||
sudo systemctl disable backup-web-app
|
||||
|
||||
# Check logs
|
||||
sudo journalctl -u backup-web-app -f
|
||||
```
|
||||
|
||||
### 2. 🐳 Docker (Recommended for Isolation)
|
||||
|
||||
**Best for:** Containerized environments, easy deployment, consistent runtime.
|
||||
|
||||
#### Using Docker Compose:
|
||||
|
||||
```bash
|
||||
# Build and start
|
||||
docker-compose up -d
|
||||
|
||||
# View logs
|
||||
docker-compose logs -f
|
||||
|
||||
# Stop
|
||||
docker-compose down
|
||||
|
||||
# Rebuild and restart
|
||||
docker-compose up -d --build
|
||||
```
|
||||
|
||||
#### Using Docker directly:
|
||||
|
||||
```bash
|
||||
# Build image
|
||||
docker build -t backup-web-app .
|
||||
|
||||
# Run container
|
||||
docker run -d \
|
||||
--name backup-web-app \
|
||||
-p 5000:5000 \
|
||||
-v /mnt/share/media/backups:/data/backups:ro \
|
||||
-e BACKUP_ROOT=/data/backups \
|
||||
--restart unless-stopped \
|
||||
backup-web-app
|
||||
```
|
||||
|
||||
### 3. 📺 Screen Session (Quick & Simple)
|
||||
|
||||
**Best for:** Development, testing, quick deployments.
|
||||
|
||||
```bash
|
||||
# Start the application
|
||||
./run-backup-web-screen.sh start
|
||||
|
||||
# Check status
|
||||
./run-backup-web-screen.sh status
|
||||
|
||||
# View logs (connect to session)
|
||||
./run-backup-web-screen.sh logs
|
||||
|
||||
# Stop the application
|
||||
./run-backup-web-screen.sh stop
|
||||
```
|
||||
|
||||
### 4. ⚡ Production with Gunicorn
|
||||
|
||||
**Best for:** High-performance production deployments.
|
||||
|
||||
```bash
|
||||
# Install gunicorn
|
||||
pip install gunicorn
|
||||
|
||||
# Run with production settings
|
||||
./run-production.sh
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Environment Variables
|
||||
|
||||
- `BACKUP_ROOT`: Path to backup directory (default: `/mnt/share/media/backups`)
|
||||
- `PORT`: Application port (default: `5000`)
|
||||
- `FLASK_ENV`: Environment mode (`development` or `production`)
|
||||
- `FLASK_DEBUG`: Enable debug mode (`true` or `false`)
|
||||
|
||||
### Security Considerations
|
||||
|
||||
1. **Firewall**: Ensure port 5000 is properly secured
|
||||
2. **Reverse Proxy**: Consider using nginx for SSL termination
|
||||
3. **Authentication**: Add authentication for production use
|
||||
4. **File Permissions**: Ensure proper read permissions for backup directories
|
||||
|
||||
## Monitoring & Maintenance
|
||||
|
||||
### Health Checks
|
||||
|
||||
The application provides a health endpoint:
|
||||
```bash
|
||||
curl http://localhost:5000/health
|
||||
```
|
||||
|
||||
### Log Locations
|
||||
|
||||
- **Systemd**: `sudo journalctl -u backup-web-app`
|
||||
- **Docker**: `docker-compose logs` or `docker logs backup-web-app`
|
||||
- **Screen**: Connect to session with `screen -r backup-web-app`
|
||||
- **Gunicorn**: `/tmp/backup-web-app-access.log` and `/tmp/backup-web-app-error.log`
|
||||
|
||||
### Automatic Restarts
|
||||
|
||||
- **Systemd**: Built-in restart on failure
|
||||
- **Docker**: Use `--restart unless-stopped` or `restart: unless-stopped` in compose
|
||||
- **Screen**: Manual restart required
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
1. **Port already in use**:
|
||||
```bash
|
||||
sudo lsof -i :5000
|
||||
sudo netstat -tulpn | grep :5000
|
||||
```
|
||||
|
||||
2. **Permission denied for backup directory**:
|
||||
```bash
|
||||
sudo chown -R acedanger:acedanger /mnt/share/media/backups
|
||||
chmod -R 755 /mnt/share/media/backups
|
||||
```
|
||||
|
||||
3. **Service won't start**:
|
||||
```bash
|
||||
sudo journalctl -u backup-web-app -n 50
|
||||
```
|
||||
|
||||
### Performance Tuning
|
||||
|
||||
1. **Gunicorn Workers**: Adjust in `gunicorn.conf.py`
|
||||
2. **Memory Limits**: Set in systemd service or docker-compose
|
||||
3. **Log Rotation**: Configure logrotate for production
|
||||
|
||||
## Quick Start Commands
|
||||
|
||||
```bash
|
||||
# For development/testing (Screen)
|
||||
./run-backup-web-screen.sh start
|
||||
|
||||
# For production (Systemd)
|
||||
sudo ./manage-backup-web-service.sh install
|
||||
sudo ./manage-backup-web-service.sh start
|
||||
|
||||
# For containerized (Docker)
|
||||
docker-compose up -d
|
||||
|
||||
# Check if running
|
||||
curl http://localhost:5000/health
|
||||
```
|
||||
|
||||
## Recommended Setup
|
||||
|
||||
For a production server, use this combination:
|
||||
|
||||
1. **Primary**: Systemd service for reliability
|
||||
2. **Backup**: Docker setup for easy maintenance
|
||||
3. **Monitoring**: Set up log monitoring and alerts
|
||||
4. **Security**: Add reverse proxy with SSL
|
||||
|
||||
Choose the method that best fits your infrastructure and requirements!
|
||||
Reference in New Issue
Block a user