Fix production config: use simple cache instead of Redis, fix Gunicorn to use production config

This commit is contained in:
DigiServer Developer
2025-12-05 21:46:31 +02:00
parent 8e43f2bd42
commit 3921a09c4e
5 changed files with 3 additions and 6 deletions

View File

@@ -0,0 +1,284 @@
# 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
```