Розробка та впровадження (deployment) додатків машинного навчання в наш час набувають все більшої популярності. Одним з важливих етапів є налаштування системи для використання в реальному середовищі. Python Flask є одним з популярних фреймворків для створення API, який відзначається гнучкістю та простотою використання, тоді як Nginx допомагає підвищити ефективність обробки запитів (request) і підтримує велику кількість користувачів. Поєднуючи ці дві технології, розробники можуть створювати ефективні та масштабовані системи, що легко адаптуються під потреби організацій чи користувачів.
Кроки
- Створіть віртуальне середовище та клонувати репозиторій
python -m venv example-env
cd example-env
git clone https://github.com/gituser/gitrepo
cd gitrepo
- Встановіть залежності за допомогою pip install або requirements.txt
source Scripts/activate
pip install -r requirements.txt
- Тестування Flask додатку локально
gunicorn --bind 127.0.0.1:5000 app:app
- Тестовий запуск
curl http://127.0.0.1:5000
- Налаштуйте Nginx
sudo nano /etc/nginx/sites-available/my_flask_app
- Додайте конфігурацію
server {
listen 80;
server_name your_domain_or_IP; # Змініть на ваш домен або IP адресу
location / {
proxy_pass http://127.0.0.1:5000; # Перенаправлення запитів до Gunicorn на порт 5000
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# За бажанням: ввімкнути SSL (HTTPS)
# Розкоментуйте ці рядки, якщо використовуєте SSL сертифікати
# listen 443 ssl;
# ssl_certificate /path/to/cert.crt;
# ssl_certificate_key /path/to/cert.key;
error_log /var/log/nginx/my_flask_app_error.log;
access_log /var/log/nginx/my_flask_app_access.log;
}
- Створіть символічне посилання для активації сайту
sudo ln -s /etc/nginx/sites-available/my_flask_app /etc/nginx/sites-enabled/
8. Перевірте конфігурацію Nginx, щоб переконатися, що немає помилок
sudo nginx -t
sudo systemctl restart nginx
- Налаштування Gunicorn як служби Systemd
- Створіть файл служби Gunicorn:
sudo nano /etc/systemd/system/my_flask_app.service
- Додайте наступну конфігурацію:
[Unit]
Description=Gunicorn instance to serve Flask App
After=network.target
[Service]
User=your_user
Group=your_group
WorkingDirectory=/path/to/your/app
Environment="PATH=/home/sammy/myproject/myprojectenv/bin"
ExecStart=/path/to/your/app/venv/bin/gunicorn --bind unix:/path/to/your/app/my_flask_app.sock app:app
[Install]
WantedBy=multi-user.target
- команду
sudo systemctl start my_flask_app
sudo systemctl enable my_flask_app
sudo systemctl status my_flask_app
curl http://your_domain_or_IP/predict
Перекладено з: [Deployment of Flask API on NGinx](https://medium.com/ckartisan/deployment-of-flask-api-on-nginx-42a2df249a39)