Skip to content
هذه الصفحة غير متوفرة بلغتك بعد. يتم عرض النسخة الإنجليزية.

Configurazione di produzione

Distribuisci Potato per l'annotazione in produzione con più utenti.

Configurazione di produzione

Distribuisci Potato per attività di annotazione nel mondo reale con più utenti, persistenza dei dati e sicurezza adeguata.

Configurazione del server

Configurazione di base per la produzione

yaml
server:
  host: 0.0.0.0
  port: 8000
  workers: 4
  timeout: 120

Utilizzo di HTTPS

Per connessioni sicure (consigliato per la produzione):

yaml
server:
  host: 0.0.0.0
  port: 443
  ssl:
    cert: /path/to/cert.pem
    key: /path/to/key.pem

Esecuzione con Gunicorn

Per prestazioni e affidabilità migliori:

bash
gunicorn "potato.server:create_app('config.yaml')" \
  --workers 4 \
  --bind 0.0.0.0:8000 \
  --timeout 120

Con SSL

bash
gunicorn "potato.server:create_app('config.yaml')" \
  --workers 4 \
  --bind 0.0.0.0:443 \
  --certfile /path/to/cert.pem \
  --keyfile /path/to/key.pem

Configurazione reverse proxy

Configurazione Nginx

nginx
upstream potato {
    server 127.0.0.1:8000;
}
 
server {
    listen 80;
    server_name annotation.example.com;
    return 301 https://$server_name$request_uri;
}
 
server {
    listen 443 ssl;
    server_name annotation.example.com;
 
    ssl_certificate /etc/letsencrypt/live/annotation.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/annotation.example.com/privkey.pem;
 
    location / {
        proxy_pass http://potato;
        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;
    }
 
    # Increase timeouts for long annotation sessions
    proxy_read_timeout 300;
    proxy_connect_timeout 300;
    proxy_send_timeout 300;
}

Configurazione Apache

apache
<VirtualHost *:443>
    ServerName annotation.example.com
 
    SSLEngine on
    SSLCertificateFile /path/to/cert.pem
    SSLCertificateKeyFile /path/to/key.pem
 
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8000/
    ProxyPassReverse / http://127.0.0.1:8000/
 
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
</VirtualHost>

Distribuzione Docker

Dockerfile

dockerfile
FROM python:3.10-slim
 
WORKDIR /app
 
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
 
COPY . .
 
EXPOSE 8000
 
CMD ["gunicorn", "potato.server:create_app('config.yaml')", \
     "--workers", "4", "--bind", "0.0.0.0:8000"]

Docker Compose

yaml
version: '3.8'
 
services:
  potato:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - ./data:/app/data
      - ./annotations:/app/annotations
    environment:
      - POTATO_DEBUG=false
    restart: unless-stopped
 
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./certs:/etc/ssl/certs
    depends_on:
      - potato
    restart: unless-stopped

Autenticazione utente

Accesso limitato

yaml
allow_all_users: false
authorized_users:
  - user1@example.com
  - user2@example.com
  - user3@example.com

Accesso amministratore

yaml
admin_users:
  - admin@example.com
 
admin_dashboard:
  enabled: true
  path: /admin

Gestione delle sessioni

yaml
session:
  secret_key: "your-secure-secret-key-here"
  timeout: 3600  # 1 hour
  secure_cookie: true  # Requires HTTPS

Persistenza dei dati

Archiviazione basata su file

yaml
output:
  path: /var/potato/annotations/
  format: json
  backup_interval: 3600  # Hourly backups

Backend database

Per distribuzioni più grandi, usa MySQL:

yaml
database:
  type: mysql
  host: localhost
  port: 3306
  name: potato_db
  user: potato
  password: ${DB_PASSWORD}  # Use environment variable

Consulta MySQL Backend per i dettagli.

Monitoraggio

Endpoint health check

yaml
monitoring:
  health_check: /health
  metrics: /metrics

Configurazione della registrazione

yaml
logging:
  level: INFO
  file: /var/log/potato/app.log
  max_size: 100MB
  backup_count: 5
  format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"

Metriche Prometheus

yaml
monitoring:
  prometheus:
    enabled: true
    port: 9090

Scalabilità

Scalabilità orizzontale

Per distribuzioni ad alto traffico:

yaml
# docker-compose.yml
services:
  potato:
    deploy:
      replicas: 3
    # ... rest of config
 
  nginx:
    # Load balancer
    volumes:
      - ./nginx-lb.conf:/etc/nginx/nginx.conf

Configurazione del bilanciatore di carico

nginx
upstream potato_cluster {
    least_conn;
    server potato_1:8000;
    server potato_2:8000;
    server potato_3:8000;
}

Strategia di backup

Backup automatici

bash
#!/bin/bash
# backup.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/var/backups/potato
 
# Backup annotations
tar -czf $BACKUP_DIR/annotations_$DATE.tar.gz /var/potato/annotations/
 
# Backup config
cp /var/potato/config.yaml $BACKUP_DIR/config_$DATE.yaml
 
# Keep only last 7 days
find $BACKUP_DIR -mtime +7 -delete

Aggiungi al crontab:

bash
0 2 * * * /var/potato/backup.sh

Lista di controllo della sicurezza

  • Usa HTTPS con certificato SSL valido
  • Imposta una chiave segreta di sessione robusta
  • Limita l'accesso utente con authorized_users
  • Mantieni Potato e le dipendenze aggiornate
  • Usa variabili d'ambiente per i dati sensibili
  • Configura le regole del firewall
  • Abilita registrazione e monitoraggio
  • Configura backup regolari
  • Usa il backend database per la produzione
  • Rivedi regolarmente l'accesso amministratore

Variabili d'ambiente

bash
# .env file
POTATO_SECRET_KEY=your-super-secret-key
POTATO_DB_PASSWORD=database-password
POTATO_ADMIN_EMAIL=admin@example.com

Carica in Docker Compose:

yaml
services:
  potato:
    env_file:
      - .env

Risoluzione dei problemi

Controlla i log

bash
# Gunicorn logs
journalctl -u potato -f
 
# Docker logs
docker-compose logs -f potato

Problemi comuni

502 Bad Gateway: Verifica che Potato sia in esecuzione e associato alla porta corretta

Problemi di sessione: Assicurati che la chiave segreta sia coerente tra i riavvii

Prestazioni lente: Aumenta il numero di worker o aggiungi il backend database

Prossimi passi