Как сделать локальное зеркало Pypi без доступа в интернет и с возможностью поиска?
Я пытаюсь создать полное локальное зеркало Pypi-репозитория с функцией поиска pip на сервере, к которому я могу подключить только внешний жесткий диск. Чтобы было ясно, я не хочу простой системы кеширования, сервер подключен к другим машинам в полностью закрытой сети, нет доступа к Интернету вообще.
До сих пор я делал дамп всех пакетов pypi с помощью bandersnatch, и я могу выполнить установку pip с помощью простого http-сервера перед ним. Я также получил унаследованный исходный код pypi и заставил его работать без пакетов Python внутри. Проблема, с которой я сталкиваюсь сейчас, состоит в том, чтобы связать обе стороны, и я даже не уверен, что это можно сделать таким образом.
Я также тестировал pypiserver. Он мог бы сделать то, что я хотел, но он слишком медленный и заканчивался тайм-аутом поиска в пипсах (похоже, он не был создан для обработки такого количества пакетов).
Наконец, я взглянул на devpi. Кажется, хорошо справляется со своей работой, но я ищу способ легко импортировать в нее мой дамп Bandersnatch. Не похоже, что я могу создать индекс на основе локального каталога.
Спасибо за любой ответ.
1 ответ
Я мог бы также дать правильный ответ на это о том, как мы получили DevPi
работает довольно хорошо в нашей среде:
- Установите DevPi
DevPi
требует Python 3! Поэтому убедитесь, что у вас есть версия Python 3 pip
установлены. Используя это:
pip install -U devpi
(вероятно, как корень) должен сделать свое дело.
- Убедитесь, что ваш сервер брандмауэр открыт
DevPi
использует порт 3141 по умолчанию. Если у вас есть firewall-cmd
установлено что-то вроде
firewall-cmd --zone=public --add-port=3141/tcp --permanent
firewall-cmd --reload
или эквивалентная команда в вашей системе.
- конфигурировать
DevPi
DevPi
буду использовать PyPi
из коробки. Мы также хотели иметь возможность "наложения" наших собственных пакетов, которые предоставляются только внутри организации. Для локальных пакетов nabCERT необходим внутренний индекс. Хорошо, что этот сам по себе может использовать PyPi как запасной вариант!
Выберите сервер devpi для работы - какой сервер вы используете
devpi use http://localhost:3141
Теперь создайте пользователя, который может добавлять и управлять внутренними пакетами и входить с ними
devpi user -c myuser password=mypassword
devpi login myuser --password mypassword
Теперь создайте наш внутренний индекс для хранения локальных пакетов, гарантируя, что он будет использовать PyPi как "запасной вариант"
devpi index -c myindex bases=/root/pypi volatile=True
Начни это
devpi-server --host=0.0.0.0 --port=3141 --serverdir=/var/www/pypi
Попробуйте установить пакет
pip install -i http://localhost:3141/root/pypi/ simplejson
Если что-то пойдет не так, проверьте логи, в нашем случае они были в /var/www/pypi/.xproc/devpi-server/xprocess.log
На этом этапе, если все вышеуказанные настройки были успешно выполнены, вы сможете открыть веб-браузер и указать его на devpi
сервер с
http://localhost:3141/myuser/myindex
- Сделайте так, чтобы DevPi запускался автоматически
Это меняется. Мы используем systemd
поэтому я создал файл /usr/lib/systemd/system/devpi.service
[Unit]
Requires=network-online.target
After=network-online.target
[Service]
EnvironmentFile=-/etc/sysconfig/devpi
Type=forking
PIDFile=/var/www/pypi/.xproc/devpi-server/xprocess.PID
Restart=always
ExecStart=/bin/devpi-server --host=0.0.0.0 --port 3141 --serverdir /var/www/pypi --start
ExecStop=/bin/devpi-server --host=0.0.0.0 --port 3141 --serverdir /var/www/pypi --stop
User=root
[Install]
WantedBy=multi-user.target
Сохраните файл и сообщите systemd.
systemctl daemon-reload
systemctl enable devpi
- Настроить клиента
Чтобы указать вашим клиентам pip
использовать новый DevPi
хранилище создать /etc/pip.conf
файл с чем-то вроде этого
[global]
trusted-host = <server IP or FQDN>
[install]
index-url = http://<server IP or FQDN>:3141/myuser/myindex/+simple/
[search]
index = http://<server IP or FQDN>:3141/myuser/myindex/