ProgramingTip

배포를 처리하기 위해 pip, virtualenv 및 Fabric을 어떻게 사용합니까?

bestdevel 2020. 11. 15. 11:35
반응형

배포를 처리하기 위해 pip, virtualenv 및 Fabric을 어떻게 사용합니까?


설정, 트릭, 그리고 무엇 추가 워크 플로는 무엇입니까?

뛰어난 도구는 훌륭하지만 사용에 대한 모범 사례가 아직 없기 때문에 가장 사용 방법이 무엇인지 모르겠습니다.

  • pip 아시아를 사용 하시는 곳, 아니면 항상 다운로드 받습니까?
  • Apache / Cherokee / MySQL을 수동으로 설정 했습니까? 아니면 어디에 있습니까?
  • 모든 것을 virtualenv에 사용하는 --no-site-packages것이 있습니까?
  • 여러 프로젝트에 하나의 virtualenv를 사용하고 있습니까?
  • Fabric 을 무엇 에 사용합니까 (배포의 어느 부분에서 스크립팅 기계)?
  • Fabric 펼쳐 클라이언트 또는 서버에 배치하고 있습니까?
  • 데이터베이스 및 미디어 파일 마이그레이션을 어떻게 처리합니까?
  • SCons 와 같은 빌드 도구가 필요 하십니까?
  • 배포 단계는 무엇입니까? 각각을 얼마나 자주 수행합니까?
  • 기타

"모범 사례"는 상황에 따라 매우 다르기 때문에 내 사례가 가장 좋다고 주장 보강해야합니다. 저는 대부분의 소규모 사이트에서 작업 사용 다중 서버 배포, CDN 등이 없습니다. 일부 클라이언트는 가장 저렴한 호스팅을 필요로하는 Webfaction 공유 호스팅 배포를 지원해야합니다. 여러 환경에서 사이트를 여러 번 배포 해야하는 경우가 많고 반복 가능한 배포가 중요합니다.

  • pip를 사용하지 않고 requirements.txt에서 설치합니다. 필요한 모든 것의 sdist로 나만의 chishop 서버를 실행 하므로 빌드 프로세스에 여러 one-실패 지점이 없습니다. 또한 대부분의 프로젝트 요구 사항이 상당히 겹치기 때문에 개발 컴퓨터에서 PIP_DOWNLOAD_CACHE를 사용하여 프로젝트 환경의 부트 속도를 높입니다.
  • 우분투 VPS에서의 nginx + 아파치 / mod_wsgi에를 자동으로 설정 및 구성하거나 Webfaction 공유 호스팅 에서 해당 항목을 구성한 다음 프로젝트를 배포 할 있는 패브릭 스크립트가 있습니다 .
  • 나는 느리게 이동하는 패키지 (Python Imaging Library, psycopg2)를 시스템 수준에 설치하는 것을 선호하기 때문에 virtualenv와 함께 --no-site-package를 사용하지 않습니다. 모든 가상 환경에서 수행하기에는 너무 느리고 귀찮습니다. 나는 일반적으로 그것을 오염시키기 때문에 오염 된 시스템 사이트 패키지에 문제가 없습니다. 그리고 virtualenv에 다른 버전의 경우 우선권이 있습니다.
  • 각 프로젝트에는 자체 virtualenv가 있습니다. 주어진 프로젝트에 대한 VIRTUALENV 알려진 위치에를 배포하고 해당 프로젝트의 요구 사항을 설치하는 것을 자동화 하는 bash는 스크립트 ( 많은 사람들이 사용하고 좋아하지만

    virtualenvwrapper가 아닙니다 )가 있습니다.
  • Ubuntu 서버 VPS 또는 Webfaction 공유 호스팅 계정에서 실행중인 웹 사이트에서 전체 베어 배포 프로세스는 Fabric을 사용하여 스크립팅됩니다.
  • 패브릭 펼쳐는 프로젝트 소스 트리의 일부이며 로컬 개발 체크 아웃에서 실행합니다.
  • 나는 (내가 알고있는) SCons가 필요하지 않습니다.

전개

현재 새로운 배포는 다음 단계로 나납니다.

  • fab staging bootstrap (서버 설정 및 초기 코드 배포)
  • fab staging enable (이 사이트에 Apache / nginx 구성 활성화에 대해)
  • fab staging reload_server (Apache / nginx 구성 다시로드).

물론 이것들은 하나의 명령 줄로 결합 될 수 있습니다 fab staging bootstrap enable reload_server.

단계가 완료되면 새 코드로 배포를 업데이트하는 것이 좋습니다 fab staging deploy.

업데이트를 롤백해야하는 경우 fab staging rollback. 롤백에서 마법 같은 것은 없습니다. 코드를 마지막으로 배포 된 버전으로 롤백하고 데이터베이스를 이전 상태로 마이그레이션합니다 (이를 수행 한 배포 후 DB의 마이그레이션 상태에 대한 일부 메타 데이터를 기록해야합니다. 텍스트 파일로만 메타 데이터를 기록해야합니다.).

이 답변에 설명 된 Fabric 전개를 몇 년 동안 사용하지 않습니까? 전혀 유지 관리되지 않습니다. :-) 그러나 https://bitbucket.org/carljm 에서 볼 수 있습니다. / 장고 프로젝트 템플릿 에서- fabfile.py되찾기 루트와의 deploy/하위 디렉토리.


패브릭을 사용하여 코드를 빌드 및 배포하고 시스템이 이미 설정되어 가정합니다. 나는 꼭두각시와 같은 도구 가 설치를 자동화하는 데 더 적합 하다고 생각 하지만 아직 워크에 포함되어야한다는 apache 및 mysql 과 같은 도구 가 설치 됩니다.

또한 일반적으로 프로젝트마다 다른 virtualenv가 있습니다. Carl이 지적했듯이 Python의 '기본'설치에서 생성하고 전역 Python 라이브러리를 남길 수 있습니다.

워크 플로에서 다음과 가변합니다.

  1. 필수 서비스 (웹 서버, 데이터베이스, SSH 서버 등)를 설치하기위한 꼭두각시
  2. 필수 사용자 및 기본 폴더를 설정하기위한 꼭두각시
  3. 애플리케이션을위한 virtualenv를 생성하는 패브릭
  4. requirements.txt에서 패브릭을 pip 설치
  5. 앱 배포를위한 패브릭
  6. 구성 파일 (웹 서버 등)을 배포하기위한 패브릭

참고 URL : https://stackoverflow.com/questions/2441704/how-do-you-use-pip-virtualenv-and-fabric-to-handle-deployment

반응형