إعداد الإنتاج
نشر Potato للإنتاج مع مستخدمين متعددين.
إعداد الإنتاج
انشر Potato لمهام التعليق التوضيحي الفعلية مع مستخدمين متعددين واستمرارية البيانات والأمان المناسب.
إعداد الخادم
إعداد الإنتاج الأساسي
yaml
server:
host: 0.0.0.0
port: 8000
workers: 4
timeout: 120استخدام HTTPS
للاتصالات الآمنة (موصى به للإنتاج):
yaml
server:
host: 0.0.0.0
port: 443
ssl:
cert: /path/to/cert.pem
key: /path/to/key.pemالتشغيل مع Gunicorn
لأداء وموثوقية أفضل:
bash
gunicorn "potato.server:create_app('config.yaml')" \
--workers 4 \
--bind 0.0.0.0:8000 \
--timeout 120مع 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إعداد الوكيل العكسي
إعداد 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;
}إعداد 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>نشر 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مصادقة المستخدمين
الوصول المقيد
yaml
allow_all_users: false
authorized_users:
- user1@example.com
- user2@example.com
- user3@example.comوصول المسؤول
yaml
admin_users:
- admin@example.com
admin_dashboard:
enabled: true
path: /adminإدارة الجلسات
yaml
session:
secret_key: "your-secure-secret-key-here"
timeout: 3600 # 1 hour
secure_cookie: true # Requires HTTPSاستمرارية البيانات
التخزين المستند إلى الملفات
yaml
output:
path: /var/potato/annotations/
format: json
backup_interval: 3600 # Hourly backupsقاعدة البيانات الخلفية
لعمليات النشر الأكبر، استخدم MySQL:
yaml
database:
type: mysql
host: localhost
port: 3306
name: potato_db
user: potato
password: ${DB_PASSWORD} # Use environment variableراجع MySQL Backend للتفاصيل.
المراقبة
نقطة نهاية فحص الصحة
yaml
monitoring:
health_check: /health
metrics: /metricsإعداد التسجيل
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"مقاييس Prometheus
yaml
monitoring:
prometheus:
enabled: true
port: 9090التوسع
التوسع الأفقي
لعمليات النشر ذات الحركة العالية:
yaml
# docker-compose.yml
services:
potato:
deploy:
replicas: 3
# ... rest of config
nginx:
# Load balancer
volumes:
- ./nginx-lb.conf:/etc/nginx/nginx.confإعداد موازن الحمل
nginx
upstream potato_cluster {
least_conn;
server potato_1:8000;
server potato_2:8000;
server potato_3:8000;
}استراتيجية النسخ الاحتياطي
النسخ الاحتياطي التلقائي
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أضف إلى crontab:
bash
0 2 * * * /var/potato/backup.shقائمة التحقق الأمنية
- استخدم HTTPS مع شهادة SSL صالحة
- عيّن مفتاح جلسة سري قوي
- قيّد وصول المستخدمين باستخدام
authorized_users - حافظ على تحديث Potato والتبعيات
- استخدم متغيرات البيئة للبيانات الحساسة
- قم بإعداد قواعد جدار الحماية
- قم بتمكين التسجيل والمراقبة
- قم بإعداد نسخ احتياطية منتظمة
- استخدم قاعدة البيانات الخلفية للإنتاج
- راجع وصول المسؤول بانتظام
متغيرات البيئة
bash
# .env file
POTATO_SECRET_KEY=your-super-secret-key
POTATO_DB_PASSWORD=database-password
POTATO_ADMIN_EMAIL=admin@example.comالتحميل في Docker Compose:
yaml
services:
potato:
env_file:
- .envاستكشاف الأخطاء وإصلاحها
فحص السجلات
bash
# Gunicorn logs
journalctl -u potato -f
# Docker logs
docker-compose logs -f potatoالمشاكل الشائعة
502 Bad Gateway: تحقق مما إذا كان Potato قيد التشغيل ومرتبطاً بالمنفذ الصحيح
مشاكل الجلسة: تأكد من أن المفتاح السري متسق عبر عمليات إعادة التشغيل
أداء بطيء: قم بزيادة عدد العمال أو أضف قاعدة بيانات خلفية
الخطوات التالية
- MySQL Backend - تخزين قاعدة البيانات
- التعهيد الجماعي - تكامل Prolific/MTurk
- إدارة المستخدمين - التحكم في الوصول