هذه الصفحة غير متوفرة بلغتك بعد. يتم عرض النسخة الإنجليزية.
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: 120Utilizzo 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.pemEsecuzione con Gunicorn
Per prestazioni e affidabilità migliori:
bash
gunicorn "potato.server:create_app('config.yaml')" \
--workers 4 \
--bind 0.0.0.0:8000 \
--timeout 120Con 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.pemConfigurazione 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-stoppedAutenticazione utente
Accesso limitato
yaml
allow_all_users: false
authorized_users:
- user1@example.com
- user2@example.com
- user3@example.comAccesso amministratore
yaml
admin_users:
- admin@example.com
admin_dashboard:
enabled: true
path: /adminGestione delle sessioni
yaml
session:
secret_key: "your-secure-secret-key-here"
timeout: 3600 # 1 hour
secure_cookie: true # Requires HTTPSPersistenza dei dati
Archiviazione basata su file
yaml
output:
path: /var/potato/annotations/
format: json
backup_interval: 3600 # Hourly backupsBackend 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 variableConsulta MySQL Backend per i dettagli.
Monitoraggio
Endpoint health check
yaml
monitoring:
health_check: /health
metrics: /metricsConfigurazione 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: 9090Scalabilità
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.confConfigurazione 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 -deleteAggiungi al crontab:
bash
0 2 * * * /var/potato/backup.shLista 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.comCarica in Docker Compose:
yaml
services:
potato:
env_file:
- .envRisoluzione dei problemi
Controlla i log
bash
# Gunicorn logs
journalctl -u potato -f
# Docker logs
docker-compose logs -f potatoProblemi 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
- MySQL Backend - Archiviazione database
- Crowdsourcing - Integrazione Prolific/MTurk
- User Management - Controllo degli accessi