Розгортання Python веб-додатку на продакшн сервері без підключення до Інтернету

Python додаток розгортається за допомогою веб-сервера Gunicorn. Оскільки сервер у продакшн-середовищі не має доступу до Інтернету, потрібно експортувати залежності Python pip з дев-сервера разом з додатком. Переконайтеся, що версія ОС на дев-сервері (з підключенням до Інтернету) і на продакшн-сервері (без підключення до Інтернету) однакові, а також що на них встановлені однакові версії Python.

У цьому випадку на продакшн-сервері (офлайн) та на дев-сервері (онлайн) встановлена RHEL 8.10.

Кроки такі:

i) Створіть список залежностей вашого додатку на дев-сервері

$ cd $ pip freeze > /tmp/requirements.txt

ii) Створіть локальний pip-репозиторій для списку залежностей на дев-сервері

$ mkdir /tmp/myrepo$ cd /tmp/myrepo $ pip download -r /tmp/requirements.txt

iii) Скопіюйте папку з додатком, репозиторій і файл requirements.txt з дев-сервера на продакшн-сервер

4. Розгортання додатку

Виконайте наступні команди на продакшн-сервері:

i) Створіть окремого користувача та групу для додатку

# useradd -m -s /bin/bash appuser# groupadd appgroup# usermod -aG appgroup appuser

ii) Скопіюйте папку з додатком у каталог /var/www

# mkdir -p /var/www/myapp# cp -r /tmp//* /var/www/myapp# chown -R appuser:appgroup /var/www/myapp

iii) Створіть нову директорію для логів

# mkdir -p /var/log/myapp

iv) Встановіть залежності

Увійдіть як користувач додатку (наприклад, appuser) і встановіть залежності.

$ pip install — no-index — find-links=/path/to/packages *.whl

Примітка: Переконайтеся, що залежність gunicorn встановлена за допомогою root- користувача, оскільки вона буде використовуватися для хостингу додатку.

v) Створіть systemd сервіс

vim /etc/systemd/system/myapp.service

[Unit]Description=myappAfter=network.target[Service]User=appuserGroup=appgroupWorkingDirectory=/var/www/myappExecStart=/usr/bin/gunicorn -w 8 -b 192.168.1.10:5000 app:appRestart=always[Install]WantedBy=multi-user.target

vi) Перезавантажте systemd та запустіть сервіс

# systemctl daemon-reload# systemctl start myapp# systemctl status myapp# systemctl enable myapp

vii) Дозвольте вхідний трафік на порт 5000

# firewall-cmd — zone=public — add-port=5000/tcp — permanent# firewall-cmd — reload

viii) Перевірте роботу додатку

http://192.168.1.10:5000

Ось і все!

Перекладено з: Deploy a python web application to production offline server

Leave a Reply

Your email address will not be published. Required fields are marked *