Skip to content

إعداد الإنتاج

نشر 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 قيد التشغيل ومرتبطاً بالمنفذ الصحيح

مشاكل الجلسة: تأكد من أن المفتاح السري متسق عبر عمليات إعادة التشغيل

أداء بطيء: قم بزيادة عدد العمال أو أضف قاعدة بيانات خلفية

الخطوات التالية