본문 바로가기

Study/Python

폐쇄망에 docker,python 배포 할 때 pip 사용하기(feat.devpi-server)

폐쇄망에 docker,python 배포 할 때 pip 사용하기(feat.devpi-server)

제안서 문서보다는 역시 재미있는 코드 

역시 피는 속일수 없는게, 이 블로그도 한지 오래되었지만 개발자로 시작해서, 입터는 프로젝트 관리자를 하고 있는데,  개발자 팀원이 없거나 아니면, 기술스택의 문제라던가 경험이라던가 할때는 직접 손대야 할때가 있습니다.

역시 피는 못속이는게 사업적인걸 손대는것보다 기술적인게 재밌네요, 결론은 비용이겠지만 (고객 선생님, 프로젝트 끝나가는 시점에 요구사항 추가하시면, 비용이 추가될수밖에 없는데 말입니다 .. 저는 해드릴수도 있는데 개발자 팀원들 월급이 필요합니다 ㅠㅠ)

과거에 이런글을 쓴적이 잇습니다. 물론 하둡같은경우는 조금 다른케이스이지만. 요즘에는 그냥 컨테이너 하나면 다됩니다. Docker , Docker Compose 선생님 존경합니다.

폐쇄망에 배포할때 생기는 문제 

예전에 한창 개발할때 Vagrant만 해도 신세계였는데(Ambari를 Build 하기 위해서 Apache Docs를 보면 Vagrant 로 개발 환경하는 예제가 나옵니다.)  :: 너무 좋습니다. Pycham 에서 바로 지원되고(개발에서 손을 많이 안대고 있지만 아직도 계속 라이센스를 유지하고 있습니다.)

2017.11.15 - [Study/Python] - Pyenv offline (오프라인, 폐쇄망) 환경에서 사용하기

2019.05.06 - [Study/Bigdata] - 인트라넷(폐쇄망) 환경에서 Ambari, HDP 배포하기

문제는 말입니다. 폐쇄망 상황에서는 버그나 문제가 발생하면 로그를 떠서 패치 준비해서 다시 들어오지만 간혹 그렇지 못할 여러가지 사정이 생길때가 있습니다. 그럴대를 위한 대비입니다(당연히 폐쇄망에 들어가기전에 준비해야합니다)

1. 노트북에 (Rocky linux) Yum 레포 만들기(Base, Epel 등 필요한 레포)
2. 노트북에 Docker Hub에서 필요한 이미지 미리 말아놓기( 예를들어 apt-get update 하는건 미리 만들어서 노트북에 넣어놓고)
3. PyPi 로컬 레포 만들기(pytorch라던지 Darts 인터넷 빠른 환경에서 받아도 될거 너무 많을때), 애는 레포를 어떻게 만드나 봤더니, 여러방법이 있는것 같은데, 쉬운방법이 있어서 블로그에 소개해 드립니다 

devpi-sever

설치

conda install -c conda-forge devpi-server 또는 pip install devpi-sever 

미러 폴더 설정

devpi-init --serverdir /pypi
(당연히 폴더는 사용할곳을 지정하시면 됩니다.)

데몬 실행

devpi-gen-config --port 3141 --host=0.0.0.0 --serverdir /pypi

이렇게 하면 현재 위치에 (폴더)gen-config 가 생깁니다.
여기서 필요한거 가져다 쓰시면 됩니다.

mv devpi.service /etc/system
systemctl daemon-reload
systemctl start devpi
systemctl  enable devpi

PIP 미러링 서버 지정 

export PYPI=http://192.168.0.135:3141/root/pypi/+simple/
export TRUSTED_HOST=192.168.0.135
pip install -i $PYPI --trusted-host=${TRUSTED_HOST}  uwsgi

결론

더 편한 방법이 있을수 있겠지만 devpi-server 로 미러만들어서 사용하시면 됩니다. 예전에 폐쇄망에 배포한다고 pyenv 설치하고 스크립트 만들어서 설치 스크립트 만들어서 썻던것 같은데, (맙소사 github 가보니 2017년에도 있던것 같은데, 이걸 알았으면 스크립트 만드느라 고생안했을텐데 ) 쓸대없는 짓이였네요. 하지만 결국 가장 깔금한건 컨테이너 이미지 떠서 밀어버리는게 가장 깔끔한것 같습니다.