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