Деплой python-проект на linux-сервере с ограниченным доступом в интернет

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Недавно столкнулся с задачей, опытом выполнения которой хочу поделиться.

Задача

Необходимо выполнить деплой python-проекта со всеми его зависимостями из локального Git (Bitbucket) на сервер во внутреннем сегменте компании с ограниченным доступом в интернет.

Вводные данные по серверу:

  • нет доступа в глобальный интернет;

  • нет доступа к Python Package Index и другим индексам;

  • есть доступ к локальному RHEL-репозиторию;

  • есть доступ к локальному Git;

  • Python и Git уже установлены на сервере.

В нашем распоряжении:

  • pc или vm c доступом в интернет

  • ну и собственно сам сервер в изолированном сегменте

* данные между сервером и 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 <file>: 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
Volume in drive C is OSDisk
Volume Serial Number is 1ED5-1624

Directory of C:\work\OUVP\dwl

07/27/2023 03:51 PM <DIR> .
07/27/2023 03:51 PM <DIR> ..
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
Volume in drive C is OSDisk
Volume Serial Number is 1ED5-1624

Directory of C:\work\OUVP\dwl

07/27/2023 04:12 PM <DIR> .
07/27/2023 04:12 PM <DIR> ..
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 <file>: 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 <url>: 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.

Все готово, теперь можно запускать проект в работу.

Источник: https://habr.com/ru/articles/781424/


Интересные статьи

Интересные статьи

Как менялись цвета на сайтах с начала века до наших дней? Правда ли, что веб бесповоротно потемнел? Почему веб-дизайнеры больше не любят зеленый? Об истории изменений, текущих и будущих тенденциях в н...
О выходе в интернет с помощью старой, почтенной (но не всегда почившей) техники написано немало статей. Возможно, для кого-то именно эта статья окажется первой, человек вполне может заинтересовать...
Континенты, острова и другие географические объекты соединяются друг с другом интернет-магистралями. Чем их больше, и чем выше пропускная способность таких каналов связи, тем лучше для глобальной се...
Сидя за столом, вы используете мышку и клавиатуру, сидя на диване — скорей всего тачпад ноутбука или тачскрин планшета. Возможно, вы даже используете Leap Motion и управляете компьютером с помо...
В прошлом посте я начал рассказ про Школу 42, которая славится своей революционной системой обучения: там нет учителей, студенты сами проверяют друг у друга работы, платить за учебу не нужно. В...