다양한 이유로 pypi의 mirror 서버가 필요할 수 있다.
- 다수의 서버를 세팅하는 과정에서 pypi의 속도가 느릴 때
- 정책적인 이유로 인터넷과 통신이 단절된 장비에서 pip 기능을 사용하고 싶을 때
- etc...
1번의 이유라면 kakao에서 제공하는 pypi의 mirror server의 정보를 config에 설정하는 것이 편리하다.
2022.04.16 - [Python] - pip 설치 속도 올리려면? 카카오 pypi mirror 이용하기
pip 설치 속도 올리려면? 카카오 pypi mirror 이용하기
신규 서버를 세팅할 때 오피셜 pypi서버가 느려서 답답할 때가 있다. 카카오에서 제공하는 mirror 서버가 있으니 등록해서 사용하면 상당한 속도 개선을 경험할 수 있다. 설정하기 본인이 필요한
foxybearkim.tistory.com
2번의 이유라면 직접 세팅을 진행해야하지만 여기서 자신의 상황에 맞는 솔루션을 선택해야한다.
devpi는 mirror서버를 구성하는 것이니 이 서버만큼은 인터넷이 가능해야하고, 인터넷이 불가한 서버에서 해당 서버로 접근이 가능해야한다.
세팅
- 세팅 환경
- Ubuntu 20.04.3 LTS
서버 세팅
pip를 통해 devpi-server를 설치한다.
pip3 install devpi-server
source ~/.profile

pip를 통하여 devpi-server를 설치하면 위와 같은 경고가 표시될 때 있다.
이는 실행파일이 생성되는 경로(/home/ubuntu/.local/bin)가 path로 잡혀있지 않기 때문인데 source를 통해 ~/.profile을 로드하면 바로 해결된다.
devpi-server를 세팅할 경로를 생성하고 초기화를 진행한다.
해당 경로에 캐시한 패키지 파일들이 저장되므로 이를 고려한 경로로 설정이 필요하다.
mkdir -p ~/app/devpi
cd ~/app/devpi
devpi-init --serverdir ~/app/devpi

devpi-gen-config를 통해 서비스 등록을 위한 파일을 쉽게 생성할 수 있다.
내가 서버를 세팅할 때 필요했던 옵션은 아래와 같이 3개였다. 나머지는 특별하게 세팅할 이유는 없었다.
devpi-gen-config --host=0.0.0.0 --port 3141 --serverdir ~/app/devpi
# --host if you want to accept connections from anywhere. [localhost]
# --port port to listen for http requests. [3141]
# --serverdir directory for server data. [~/.devpi/server]

앞서 생성한 파일을 바탕으로 서비스 등록을 진행하자.
# 서비스등록을 위한 컨피그 파일 복사
sudo cp /home/ubuntu/app/devpi/gen-config/devpi.service /etc/systemd/system/devpi.service
# 서비스 자동시작 등록
sudo systemctl enable devpi
# 서비스 시작
sudo systemctl start devpi
# 서비스 상태 확인
sudo systemctl status devpi

서버가 정상적으로 수행되었다면 서버의 아이피와 아까 설정했던 포트(3141)를 기입해서 아래와 같이 웹브라우저에서 접속 시도 시 아래와 같이 설정 정보가 노출된다.
# 웹브라우저에서 아래의 주소로 접속 시도
http://192.168.0.41:3141
# linux환경에서는 wget으로 접근되는지 확인 가능
wget http://192.168.0.41:3141

클라이언트 세팅
서버가 정상적으로 세팅되었으니 이 미러서버를 사용할 장비 설정을 진행해보자.
클라이언트에 접근하여 서버의 정보를 가져올 수 있는지 확인해보자.
wget http://192.168.0.41:3141/root/pypi/+simple/

정상적으로 데이터를 가져올 수 있음을 확인했으니
컨피그 파일을 생성한다.
sudo vi /etc/pip.conf
# /etc/pip.conf
[global]
index-url = http://192.168.0.41:3141/root/pypi/+simple/
trusted-host = 192.168.0.41
[search]
index = http://192.168.0.41:3141/root/pypi
설정파일 생성 후 pip를 사용해보면 아래의 붉은 박스와 같이 앞서 세팅한 서버의 장비에서 데이터를 받아 오는 것을 볼 수 있다.
mirror서버를 통해 데이터를 받아오기 때문에 인터넷이 제한된 장비에서도 내부망에 함께 존재하는 다른 서버를 통해 pip를 이용할 수 있다.
