Files
shell/DEPLOYMENT-GUIDE.md

201 lines
4.4 KiB
Markdown

# 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!