Деплой¶
Это руководство охватывает различные варианты развёртывания ncorn.
Чеклист для продакшена¶
Перед развёртыванием в продакшене:
- ✅ Используйте SSL/TLS сертификаты
- ✅ Установите соответствующие таймауты
- ✅ Настройте rate limiting
- ✅ Используйте несколько воркеров
- ✅ Настройте логирование и мониторинг
- ✅ Настройте health checks
Базовый деплой для продакшена¶
ncorn app:app --host 0.0.0.0 --port 443 \
--ssl-keyfile /path/to/key.pem \
--ssl-certfile /path/to/cert.pem \
--workers 4 \
--rate-limit 100 \
--rate-limit-window 60
Деплой с несколькими воркерами¶
Для лучшей производительности используйте несколько воркеров:
ncorn app:app --workers 4
Каждый воркер: - Запускается в отдельном процессе - Обрабатывает запросы независимо - Использует тот же порт
За reverse proxy¶
Хотя ncorn имеет нативную поддержку SSL, вы также можете запустить за nginx:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Управление процессами¶
Systemd¶
Создайте /etc/systemd/system/ncorn.service:
[Unit]
Description=ncorn ASGI server
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/path/to/project
ExecStart=/usr/bin/ncorn app:app --host 0.0.0.0 --port 8000 --workers 4
Restart=always
[Install]
WantedBy=multi-user.target
Затем:
sudo systemctl enable ncorn
sudo systemctl start ncorn
Supervisor¶
[program:ncorn]
command=/usr/bin/ncorn app:app --host 0.0.0.0 --port 8000 --workers 4
directory=/path/to/project
user=www-data
autostart=true
autorestart=true
SSL сертификаты¶
Самоподписанные (для разработки)¶
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
Let's Encrypt (для продакшена)¶
Используйте certbot:
certbot certonly --standalone -d example.com
Затем настройте ncorn:
ncorn app:app \
--ssl-keyfile /etc/letsencrypt/live/example.com/privkey.pem \
--ssl-certfile /etc/letsencrypt/live/example.com/fullchain.pem
Health Checks¶
Для балансировщиков нагрузки и оркестраторов:
from fastapi import FastAPI
app = FastAPI()
@app.get("/health")
async def health():
return {"status": "healthy"}
Оптимизация производительности¶
Количество воркеров¶
Хорошей отправной точкой будет 2-4 воркера на ядро CPU:
ncorn app:app --workers $(nproc)
Таймауты¶
Настройте под ваше приложение:
ncorn app:app \
--header-timeout 30 \
--body-timeout 60 \
--keepalive-timeout 5
Лимиты соединений¶
ncorn app:app \
--max-connections 1000 \
--max-connections-per-ip 50