문제

당신의 설정, 트릭, 그리고 무엇보다도 워크 플로는 무엇입니까?

이러한 도구는 훌륭하지만 여전히 사용법에 첨부 된 모범 사례는 없으므로 가장 효율적인 사용 방법은 무엇인지 모르겠습니다.

  • 당신은 사용합니까? 번들 또는 항상 다운로드 하시겠습니까?
  • Apache/Cherokee/MySQL을 손으로 설정합니까, 아니면 스크립트가 있습니까?
  • 당신은 모든 것을 넣습니까? virtualenv 그리고 사용 --no-site-packages?
  • 여러 프로젝트에 하나의 virtualenv를 사용하십니까?
  • 당신은 무엇을 사용합니까? 구조 for (배포의 어떤 부분은 스크립트입니까?)?
  • 직물 스크립트를 클라이언트 나 서버에 넣습니까?
  • 데이터베이스 및 미디어 파일 마이그레이션을 어떻게 처리합니까?
  • 다음과 같은 빌드 도구가 필요합니까? 스콘?
  • 배포 단계는 무엇입니까? 당신은 그들 각각을 얼마나 자주 수행합니까?
  • 등.
도움이 되었습니까?

해결책

"모범 사례"는 상황에 따라 매우 의존적이므로 내 관행이 최선이라고 주장하지는 않습니다. 대부분의 작은 사이트에서 일하기 때문에 다중 서버 배포, CDN 등이 없습니다. 일부 클라이언트는 가장 저렴한 호스팅이 필요하기 때문에 Webfaction Shared Hosting Deployment를 지원해야합니다. 종종 다른 환경에서 사이트를 여러 번 배포해야하므로 반복 가능한 스크립트 배포가 중요합니다.

  • 나는 PIP 번들을 사용하지 않고 요구 사항에서 설치합니다 .txt. 나는 내 자신을 운영한다 Chishop 필요한 모든 것의 SDIST가있는 서버이므로 빌드 프로세스에는 여러 개의 단일 고장 지점이 없습니다. 또한 개발 기계에서 PIP_DOWNLOAD_CACHE를 사용하여 프로젝트 환경의 대부분이 상당히 겹치기 때문에 부트 스트랩 프로젝트 환경을 속도를 높입니다.
  • 나는 가지고있다 구조 Ubuntu VPS에서 Nginx + Apache/Mod_wsgi를 자동으로 설정하고 구성하거나 해당 등을 구성 할 수있는 스크립트 WebFaction 공유 호스팅 및 프로젝트를 배포하십시오.
  • 시스템 수준에 느리게 움직이는 컴파일 패키지 (Python Imaging Library, PSYCOPG2)가 설치되는 것을 선호하기 때문에 virtualEnV와 함께-파크 패키지를 사용하지 않습니다. 모든 VirtualEnV 내부에서 할 수있는 너무 느리고 번거 롭습니다. 나는 일반적으로 오염 된 시스템 사이트 패키지에 문제가 없었습니다. 일반적으로 오염되지 않기 때문입니다. 어쨌든 VirtualEnV에 다른 버전의 무언가를 설치할 수 있으며 우선합니다.
  • 각 프로젝트에는 자체 virtualEnV가 있습니다. 배쉬 스크립트가 있습니다 (그렇지 않습니다 virtualenvwrapper, 주어진 프로젝트에 대한 virtualenv 배포를 알려진 위치에 자동화하고 해당 프로젝트의 요구 사항을 설치하는 많은 사람들이 그것을 사용하고 좋아하지만).
  • 베어 Ubuntu 서버 VPS 또는 WebFaction 공유 호스팅 계정에서 실행중인 웹 사이트에 이르기까지 전체 배포 프로세스는 직물을 사용하여 스크립트됩니다.
  • 직물 스크립트는 프로젝트 소스 트리의 일부이며 지역 개발 체크 아웃에서 실행합니다.
  • 나는 스콘이 필요하지 않습니다 (내가 알고있는).

전개

현재 새로운 배포가 다음 단계로 나뉩니다.

  • fab staging bootstrap (서버 설정 및 초기 코드 배포)
  • fab staging enable (이 사이트의 Apache/Nginx 구성 활성화)
  • fab staging reload_server (Reload Apache/Nginx 구성).

물론 그 사람들은 단일 명령 줄로 결합 할 수 있습니다. fab staging bootstrap enable reload_server.

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

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

나는이 답변에 설명 된 직물 스크립트를 몇 년 동안 사용하지 않았으므로 전혀 유지되지 않으며 품질에 대한 책임을 부인하지만 다음을 볼 수 있습니다. https://bitbucket.org/carljm/django-project-template - 안에 fabfile.py repo 루트와 deploy/ 하위 디렉토리.

다른 팁

직물을 사용하여 코드를 빌드하고 배포하고 이미 시스템을 설정했다고 가정합니다. 도구가 좋아요 인형 Apache 및 MySQL과 같은 것들의 설치를 자동화하는 데 더 적합하지만 아직 워크 플로우에 포함 시키지는 않았습니다.

또한 프로젝트마다 다른 VirtualEnV가 있습니다. 그들은 Carl이 지적한 것처럼 Python의 '기본'설치로 만들어졌습니다.

따라서 워크 플로우 측면에서 다음과 같습니다.

  1. 필요한 서비스를 설치하려면 꼭두각시 (웹 서버, 데이터베이스, SSH 서버, ...)
  2. 필요한 사용자와 기본 폴더를 설정하는 꼭두각시
  3. 응용 프로그램을위한 virtualenv를 생성하는 패브릭
  4. Fabric to Pip Quielding.txt에서 설치
  5. 앱을 배포하는 패브릭
  6. 구성 파일을 배포하는 패브릭 (웹 서버, ...)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top