285 lines
5.3 KiB
Markdown
285 lines
5.3 KiB
Markdown
# Docker Deployment Guide
|
|
|
|
## Overview
|
|
|
|
DigiServer v2 Docker image features:
|
|
- **Base image size**: ~400MB (optimized)
|
|
- **Full HD media support**: Images, videos, PDFs
|
|
- **Optional LibreOffice**: Install on-demand for PPTX support (+500MB)
|
|
- **Auto-initialization**: Database and admin user created on first run
|
|
- **Non-root user**: Runs as `appuser` (UID 1000) for security
|
|
|
|
## Quick Start
|
|
|
|
### 1. Build and Run with Docker Compose
|
|
|
|
```bash
|
|
# Build the Docker image
|
|
docker-compose build
|
|
|
|
# Start the container
|
|
docker-compose up -d
|
|
|
|
# View logs
|
|
docker-compose logs -f
|
|
|
|
# Stop the container
|
|
docker-compose down
|
|
```
|
|
|
|
The application will be available at `http://localhost:5000`
|
|
|
|
Default credentials:
|
|
- Username: `admin`
|
|
- Password: `admin123`
|
|
|
|
### 2. Build Docker Image Only
|
|
|
|
```bash
|
|
# Build the image
|
|
docker build -t digiserver-v2:latest .
|
|
|
|
# Run the container
|
|
docker run -d \
|
|
-p 5000:5000 \
|
|
-v $(pwd)/instance:/app/instance \
|
|
-v $(pwd)/app/static/uploads:/app/app/static/uploads \
|
|
--name digiserver \
|
|
digiserver-v2:latest
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Environment Variables
|
|
|
|
Create a `.env` file based on `.env.example`:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
Edit the `.env` file to set your configuration:
|
|
- `SECRET_KEY`: Change to a random secret key
|
|
- `FLASK_ENV`: Set to `production` for production deployments
|
|
|
|
### Persistent Data
|
|
|
|
The following directories are mounted as volumes:
|
|
- `./instance`: Database storage
|
|
- `./app/static/uploads`: Uploaded media files
|
|
|
|
These persist even when containers are recreated.
|
|
|
|
## Production Deployment
|
|
|
|
### 1. Using Docker Compose (Recommended)
|
|
|
|
```bash
|
|
# Create .env file with production settings
|
|
cp .env.example .env
|
|
nano .env # Edit with your settings
|
|
|
|
# Start in production mode
|
|
docker-compose up -d
|
|
```
|
|
|
|
### 2. Behind a Reverse Proxy (Nginx/Traefik)
|
|
|
|
Example Nginx configuration:
|
|
|
|
```nginx
|
|
server {
|
|
listen 80;
|
|
server_name yourdomain.com;
|
|
|
|
location / {
|
|
proxy_pass http://localhost:5000;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
|
|
# For large file uploads
|
|
client_max_body_size 100M;
|
|
}
|
|
}
|
|
```
|
|
|
|
### 3. Enable Redis Caching (Optional)
|
|
|
|
Uncomment the Redis service in `docker-compose.yml`:
|
|
|
|
```yaml
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: digiserver-redis
|
|
restart: unless-stopped
|
|
volumes:
|
|
- redis-data:/data
|
|
|
|
volumes:
|
|
redis-data:
|
|
```
|
|
|
|
Update `.env`:
|
|
```
|
|
REDIS_URL=redis://redis:6379/0
|
|
```
|
|
|
|
## Backup
|
|
|
|
### Database Backup
|
|
|
|
```bash
|
|
# Backup database
|
|
docker exec digiserver tar -czf /tmp/backup.tar.gz /app/instance
|
|
docker cp digiserver:/tmp/backup.tar.gz ./backup-$(date +%Y%m%d).tar.gz
|
|
```
|
|
|
|
### Full Backup (Database + Uploads)
|
|
|
|
```bash
|
|
# Backup everything
|
|
tar -czf digiserver-backup-$(date +%Y%m%d).tar.gz instance/ app/static/uploads/
|
|
```
|
|
|
|
## Maintenance
|
|
|
|
### View Logs
|
|
|
|
```bash
|
|
# All logs
|
|
docker-compose logs -f
|
|
|
|
# Last 100 lines
|
|
docker-compose logs --tail=100
|
|
|
|
# Specific service
|
|
docker-compose logs -f digiserver
|
|
```
|
|
|
|
### Update Application
|
|
|
|
```bash
|
|
# Pull latest code
|
|
git pull
|
|
|
|
# Rebuild and restart
|
|
docker-compose down
|
|
docker-compose build
|
|
docker-compose up -d
|
|
```
|
|
|
|
### Shell Access
|
|
|
|
```bash
|
|
# Access container shell
|
|
docker-compose exec digiserver bash
|
|
|
|
# Or with docker directly
|
|
docker exec -it digiserver bash
|
|
```
|
|
|
|
### Installing Optional Dependencies
|
|
|
|
**LibreOffice for PowerPoint Support:**
|
|
|
|
```bash
|
|
# Method 1: Via Web UI (Recommended)
|
|
# Navigate to Admin Panel → System Dependencies
|
|
# Click "Install LibreOffice" button
|
|
|
|
# Method 2: Via Docker exec
|
|
docker exec -it digiserver bash
|
|
sudo /app/install_libreoffice.sh
|
|
exit
|
|
|
|
# Verify installation
|
|
docker exec digiserver libreoffice --version
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Port Already in Use
|
|
|
|
Change the port mapping in `docker-compose.yml`:
|
|
```yaml
|
|
ports:
|
|
- "8080:5000" # Change 8080 to your desired port
|
|
```
|
|
|
|
### Permission Issues
|
|
|
|
Ensure the volumes have correct permissions:
|
|
```bash
|
|
sudo chown -R 1000:1000 instance/ app/static/uploads/
|
|
```
|
|
|
|
### Container Won't Start
|
|
|
|
Check logs:
|
|
```bash
|
|
docker-compose logs digiserver
|
|
```
|
|
|
|
### Reset Database
|
|
|
|
```bash
|
|
# Stop containers
|
|
docker-compose down
|
|
|
|
# Remove database
|
|
rm instance/*.db
|
|
|
|
# Start fresh
|
|
docker-compose up -d
|
|
```
|
|
|
|
## System Requirements
|
|
|
|
### Base Image
|
|
- Docker 20.10+
|
|
- Docker Compose 2.0+
|
|
- 1GB RAM minimum (2GB recommended)
|
|
- 5GB disk space (base + uploads)
|
|
|
|
### With LibreOffice (Optional)
|
|
- 2GB RAM recommended
|
|
- 10GB disk space (includes LibreOffice + media)
|
|
|
|
## Security Recommendations
|
|
|
|
1. **Change default credentials** immediately after first login
|
|
2. **Set a strong SECRET_KEY** in `.env`
|
|
3. **Use HTTPS** with a reverse proxy in production
|
|
4. **Regular backups** of database and uploads
|
|
5. **Update regularly** to get security patches
|
|
6. **Restrict network access** using firewall rules
|
|
7. **Monitor logs** for suspicious activity
|
|
|
|
## Performance Tuning
|
|
|
|
### Adjust Workers
|
|
|
|
Edit `Dockerfile` CMD line:
|
|
```dockerfile
|
|
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--workers", "8", "--timeout", "120", "app.app:create_app()"]
|
|
```
|
|
|
|
### Resource Limits
|
|
|
|
Add to `docker-compose.yml`:
|
|
```yaml
|
|
services:
|
|
digiserver:
|
|
# ... existing config ...
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: '2'
|
|
memory: 2G
|
|
reservations:
|
|
cpus: '1'
|
|
memory: 1G
|
|
```
|