Недавно столкнулся с задачей, опытом выполнения которой хочу поделиться.
Задача
Необходимо выполнить деплой 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 Directory of C:\work\OUVP\dwl 07/27/2023 03:51 PM <DIR> . |
Необходимо скачать .whl файлы с сайта PyPI.
Результаты замены пакетов:
C:\work\OUVP\dwl>dir Directory of C:\work\OUVP\dwl 07/27/2023 04:12 PM <DIR> . |
Далее необходимо собрать архив.
Перенос архива на 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.
Все готово, теперь можно запускать проект в работу.