Разворачиваем приватный pypi репозиторий с localshop

Jun 20, 2016 21:18




развернуть
Время от времени, я пишу небольшие утилиты, библиотеки и приложения на python для себя, и не всегда я готов делится этими утилитами и библиотеками, но хотелось бы иметь возможность их удобно устанавливать, и желательно привычным pip в virtualenv. Для этого я довольно давно организовал себе локальный, приватный pypi сервер. Реализаций локальный pypi серверов довольно много, и я перепробовал их все. Большинство из них откровенно неработающие, другие безбожно глючат и падают от малейшего чиха. В конечном итоге для себя я выбрал localshop. В этом небольшом посте я расскажу как настроить локальный, приватный pypi репозиторий на localshop.

Для любителей docker: да, есть ardeois/docker-localshop. Можете поставить его сразу из docker hub, но мне docker не всегда подходит.

Ставим всё необходимое:

sudo apt-get install python-virtualenv python-dev nginx supervisor zlib1g-dev build-essential

На серверах я по прежнему использую исключительно Debian Stable, поэтому название пакетов актуально для данного дистрибутива. Для других название может быть иным.

Из под обычного пользователя создаём виртуальное окружение и активируем его:

cd /home/$USER
virtualenv localshop
cd localshop
source bin/activate
pip install localshop
localshop migrate

Настроим supervisor для запуска localshop. Создадим /etc/supervisor/conf.d/ localshop.conf:

[program:localshop]
command=/home/$USER/localshop/bin/python /home/$USER/localshop/bin/gunicorn localshop.wsgi --bind 0.0.0.0:8001 --workers 2
directory=/home/$USER/localshop/
user=$USER
autostart=true
autorestart=true
redirect_stderr=true

[program:localshop-celery]
command=/home/$USER/localshop/bin/python /home/$USER/localshop/bin/localshop celery worker -B -E
directory=/home/$USER/localshop/
user=$USER
autostart=true
autorestart=true
redirect_stderr=true

Выше $USER нужно заменить на имя пользователя, под которым Вы развернули virtualenv с localshop.

Запустим:

sudo supervisorctl reread
sudo supervisorctl start localshop
sudo supervisorctl start localshop-celery

Теперь настроим nginx. Создадим /etc/nginx/sites-available/localshop :

upstream localshop {
server 127.0.0.1:8001 fail_timeout=0;
}

server {
listen 80;
server_name .localshop.yourdomain.com;
index index.html index.htm index.php;

access_log off;

location = /favicon.ico {
allow all;
log_not_found off;
access_log off;
}

location /assets/ {
alias /home/$USER/localshop/lib/python2.7/site-packages/localshop/static/;
}

location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header Pragma "no-cache";
proxy_pass http://localshop;
}

}

В листинге выше $USER так же нужно заменить на пользователя в директории которого разместили виртуальную среду с localshop.
Активируем конфигурацию nginx:

sudo ln -s /etc/nginx/sites-available/localshop /etc/nginx/sites-enabled/
nginx -t
# Если ок, то перезапускаем чтобы применить
systemctl restart nginx

Скажем systemd запускать supervisor и nginx при старте системы:

sudo systemctl enable supervisor
sudo systemctl enable nginx

После этого заходим по адресу, по которому разместили localshop. В нашем примере - это http://localshop.yourdomain.com. Перед нам откроется главная страница localshop:




Далее в верхнем меню выбираем Permissions, затем CIDRs и нажимаем Create. На странице добавления необходимо добавить IP-Адрес, или сеть из которой будет доступна возможность добавлять пакеты. В моём случае это сеть 192.168.1.0/24. Обращаю внимание, что добавлять необходимо в CIDR нотации. Например, /24 в CIDR нотации - это маска 255.255.255.0. Подробнее можно почитать, например, на википедии.




После добавления:




В localshop в отличии от многих других приватных pypi можно каждому пользователю давать разные ключи для доступа, и при надобности отключить пользователя. Добавим один ключ. Для этого так же в меню выбираем Permissions, затем Credentials и нажимаем Create. Localshop автоматически сгенерирует ключ:




Пользователи имеющие доступ к самому localshop создаются отдельно. Для кого-то это может показаться неудобным, для себя же я нашёл это весьма удобным решением.

Теперь необходимо настроить pip таким образом, чтобы он позволял использовать наш приватный pypi вместе с основным.
Откроем файл ~/.pypirc расположенный в домашней директории пользователя, из под которого планируется использовать localshop, и приведем к примерно такому виду:

[distutils]
index-servers =
pypi
localshop

[pypi]
# Реквизиты от основого pypi сервера
username:testuser
password:testpassword

[localshop]
# Реквизиты для доступа к приватному localshop pypi серверу
username: 762a796df8dc4441910fd74d5ffb03e3
password: 7fcf080c3c0040a8a5b57c3fb39d12d5
repository: http://localshop.yourdomain.com/simple

Пользователя и пароль для localshop находятся на странице Credentials. Там же можно добавить ключ, если на ранних шагах не добавили.
Теперь можно скачивать и закачивать пакеты через наш приватный сервер:

pip install -i http://localshop.yourdomain.com/simple/ localshop

Но чтобы каждый раз не указывать его, можно назначить его используемым по-умолчанию. Для этого в домашней директории откройте файл: ~/.pip/pip.conf (создайте если его нет), и добавьте следующее:

[global]
index-url = http://:@localshop.yourdomain.com/simple

Где access_key - это Access Key со страницы Credentials, secret_key - secret key с той же страницы.

https://the-bosha.ru/2016/03/21/razvorachivaem-lokalnyiy-pypi-s-localshop/

python, работа, pip, сисадм, полезное

Previous post Next post
Up