Деплой python-проект на linux-сервере с ограниченным доступом в интернет
Недавно столкнулся с задачей, опытом выполнения которой хочу поделиться.
Задача
Необходимо выполнить деплой python-проекта со всеми его зависимостями из локального Git (Bitbucket) на сервер во внутреннем сегменте компании с ограниченным доступом в интернет.
Вводные данные по серверу:
нет доступа в глобальный интернет;
нет доступа к Python Package Index и другим индексам;
есть доступ к локальному RHEL-репозиторию;
есть доступ к локальному Git;
Python и Git уже установлены на сервере.
В нашем распоряжении:
* данные между сервером и pc/vm передавать можно
Клонирование проекта на offline-сервер
Отключим проверку SSL Сертификатов в git (опционально):
git config --global http.sslVerify false
Выполним клонирование git-репозитория проекта в домашний каталог сервера:
git clone https://company.ru/scm/nec/prefix_check.git
Cloning into 'prefix_check'...
Username: ********
Password: ********
После успешного клонирования в домашнем каталоге должна появиться директория с проектом:
ls -l
drwxrwxr-x. 5 smirnov-nk smirnov-nk 181 Jul 25 17:06 prefix_check
Подготовка архива с установочными файлами согласно requirements на online pc/vm
Вариант с Linux
Важно чтобы на pc/vm и сервере были установлены одинаковые OC и версии python, в ином случае придется скачивать все пакеты с их зависимостями в ручном режиме.
Выполним клонирование репозитория:
git config --global http.sslVerify false
git clone https://company.ru/scm/nec/prefix_check.git
Создадим папку и скачаем туда все зависимости проекта согласно файлу requirements:
mkdir dwl
cd dwl
pip3.10 download -r ~/prefix_check/requirements.txt
-r, --requirement
Install from the given requirements file. This option can be used multiple times.
Соберем архим:
tar -czvf dwl.tar.gz ./*
Вариант с Windows
Важно чтобы на pc/vm и сервере были установлены одинаковые версии python, в ином случае придется скачивать все пакеты с их зависимостями в ручном режиме.
Выполним клонирование репозитория:
git config --global http.sslVerify false
git clone https://stash.sigma.sbrf.ru/scm/nec/prefix_check.git
Создадим папку и скачаем туда все зависимости проекта согласно файлу requirements:
mkdir dwl
cd dwl
pip download -r ..\prefix_check\requirements.txt
Перечеркнутые пакеты предназначены для установки в Windows — их необходимо в ручном режиме заменить на пакеты для Linux:
C:\work\OUVP\dwl>dir Directory of C:\work\OUVP\dwl 07/27/2023 03:51 PM 07/27/2023 03:51 PM 07/27/2023 03:51 PM 158,334 certifi-2023.7.22-py3-none-any.whl 07/27/2023 03:51 PM 96,919 charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl 07/27/2023 03:51 PM 97,909 click-8.1.6-py3-none-any.whl 07/27/2023 03:51 PM 25,335 colorama-0.4.6-py2.py3-none-any.whl 07/27/2023 03:51 PM 840,896 future-0.18.3.tar.gz 07/27/2023 03:51 PM 61,538 idna-3.4-py3-none-any.whl 07/27/2023 03:51 PM 1,896,631 netaddr-0.8.0-py2.py3-none-any.whl 07/27/2023 03:51 PM 395,526 netrnd_parser-1.0.428-py3-none-any.whl 07/27/2023 03:51 PM 197,477 orjson-3.8.0-cp310-none-win_amd64.whl 07/27/2023 03:51 PM 2,119,253 pydantic-1.9.0-cp310-cp310-win_amd64.whl 07/27/2023 03:51 PM 19,482 python_dotenv-1.0.0-py3-none-any.whl 07/27/2023 03:51 PM 62,574 requests-2.31.0-py3-none-any.whl 07/27/2023 03:51 PM 11,053 six-1.16.0-py2.py3-none-any.whl 07/27/2023 03:51 PM 44,712 textfsm-1.1.2-py2.py3-none-any.whl 07/27/2023 03:51 PM 45,861 typer-0.9.0-py3-none-any.whl 07/27/2023 03:51 PM 27,736 typing_extensions-4.5.0-py3-none-any.whl 07/27/2023 03:51 PM 143,106 urllib3–1.26.16-py2.py3-none-any.whl 07/27/2023 03:51 PM 64,545 wheel-0.40.0-py3-none-any.whl 18 File (s) 6,308,887 bytes 2 Dir (s) 20,226,334,720 bytes free |
Необходимо скачать .whl файлы с сайта PyPI.
Результаты замены пакетов:
C:\work\OUVP\dwl>dir Directory of C:\work\OUVP\dwl 07/27/2023 04:12 PM 07/27/2023 04:12 PM 07/27/2023 03:51 PM 158,334 certifi-2023.7.22-py3-none-any.whl 07/27/2023 04:10 PM 201,819 charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 07/27/2023 03:51 PM 97,909 click-8.1.6-py3-none-any.whl 07/27/2023 03:51 PM 25,335 colorama-0.4.6-py2.py3-none-any.whl 07/27/2023 03:51 PM 840,896 future-0.18.3.tar.gz 07/27/2023 03:51 PM 61,538 idna-3.4-py3-none-any.whl 07/27/2023 03:51 PM 1,896,631 netaddr-0.8.0-py2.py3-none-any.whl 07/27/2023 03:51 PM 395,526 netrnd_parser-1.0.428-py3-none-any.whl 07/27/2023 04:10 PM 270,377 orjson-3.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 07/27/2023 04:11 PM 12,263,905 pydantic-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 07/27/2023 03:51 PM 19,482 python_dotenv-1.0.0-py3-none-any.whl 07/27/2023 03:51 PM 62,574 requests-2.31.0-py3-none-any.whl 07/27/2023 03:51 PM 11,053 six-1.16.0-py2.py3-none-any.whl 07/27/2023 03:51 PM 44,712 textfsm-1.1.2-py2.py3-none-any.whl 07/27/2023 03:51 PM 45,861 typer-0.9.0-py3-none-any.whl 07/27/2023 03:51 PM 27,736 typing_extensions-4.5.0-py3-none-any.whl 07/27/2023 03:51 PM 143,106 urllib3–1.26.16-py2.py3-none-any.whl 07/27/2023 03:51 PM 64,545 wheel-0.40.0-py3-none-any.whl 18 File (s) 16,631,339 bytes 2 Dir (s) 20,188,315,648 bytes free |
Далее необходимо собрать архив.
Перенос архива на offline-сервер и установка зависимостей python-проекта
Распакуем перенесенный архив:
tar -xvf dwl.tar.gz ИЛИ unzip dwl.zip
Выполним установку зависимостей проекта согласно файлу requirements:
pip3.10 install -r ~/prefix_check/requirements.txt --no-index --find-links=~/dwl
-r, --requirement
Install from the given requirements file. This option can be used multiple times.
--no-index
Ignore package index (only looking at --find-links URLs instead).
-f, --find-links
If a URL or path to an html file, then parse for links to archives such as sdist (.tar.gz) or wheel (.whl) files. If a local path or file:// URL that«s a directory, then look for archives in the directory listing. Links to VCS project URLs are not supported.
Все готово, теперь можно запускать проект в работу.