2012-04-05 3 views
3

서버에서 Django 응용 프로그램을 구성하는 가장 좋은 방법을 알고 싶습니다.Django 서버 구조 및 규칙

  • 어디에서 장고 코드를 배치합니까? (이전의) Almanac은 /home/django/domains/somesitename.com/을 말합니다. 그러나 나는 또한/opt/apps/somesitename /에있는 것들을 보았습니다. 나는/opt/idea가 글로벌이 아니기 때문에 더 좋게 들린다 고 생각하고 있지만, 전에는 opt를 보지 못했고 아마도 특정 배포자 사용자 홈 디렉토리에 앱을 배치하는 것이 더 좋을 수도 있습니다.

  • 하나의 글로벌 배포자 사용자, 사이트 당 사용자 한 명 또는 사이트 env 당 하나의 사용자 (예 : sitenamelive, sitenamestaging)를 권하고 싶습니다. 사이트마다 하나씩 생각하고 있습니다.

  • 구성 파일의 버전을 어떻게 지정합니까? 나는 현재 그것들을 소스 제어의 최상위 레벨에있는/etc/폴더에 넣었다. 예 : /etc/nginc/somesite-live.conf.

  • 어떻게 서버를 프로비저닝하고 배포합니까? 필자는 Python 기반의 무언가가 있기를 희망하여 수년간 Chef와 Puppet에 저항했습니다. Silver Lining은 아직 준비가되어 있지 않은 것 같아 패치 워크 (https://github.com/fabric/patchwork/)에 큰 기대를 걸고 있습니다. 현재 사용자 정의 패브릭 스크립트를 사용하여 배포하고 있지만 "서버 프로비저닝"은 bash 스크립트와 키를 추가하고 사용자를 생성하기위한 몇 가지 수동 단계로 처리됩니다. 실크 배치 (https://bitbucket.org/btubbs/silk-deployment)를 조사하려고합니다. 설치에 가장 가깝습니다.

고마워요!

+1

여기에는 정말로 4 가지 질문이 있으므로 아마도 닫힐 것입니다. 나는 모든 것을 간단하게 유지하고 모든 사이트를'/ sites/www.mysite.com /'에 넣는다. 특정 사이트의 폴더 내에서 구성, 설정, 추가 정보, 요구 사항 등을 포함하여 VCS에 체크인해야하는 해당 사이트와 관련된 * 모든 항목 *이 포함 된'project' 폴더가 있습니다. –

답변

1

배포하려는 사이트의 종류에 대한 자세한 정보가 있어야한다고 생각합니다. 프로그램 적으로나 '합법적으로'(비즈니스 관계에서와 같이) 사이트 간의 관계에 따라 차이가 있습니다.

  • '사이트'당 시스템 계정을 보유하면 사이트가 다른 사람들에 의해 '소유'되는 경우 편리 할 수 ​​있습니다. 웹 디자이너 나 프로그래머가 몇 명이라면 분리 혜택을 누릴 수 있습니다.
  • 사이트가 관련되어있는 경우 (예 : 포럼 사이트, 블로그 사이트 등), Google과 같은 단일 배포 시스템의 이점을 누릴 수 있습니다. 라이브러리의 경우
  • , 평판 좋은 출처 (pypy, github 등)에서 호스팅되는 경우 해당 설정을 그대로두고 배포 할 수 있습니다. 위 또는 아래의 사기성 호스트에있는 경우 사본을 가져옵니다. git repo의/thirdparty 폴더에 넣으십시오.

FABRIC 패브릭은 놀라운 일이다 -의 설정과 잘 당신을 위해 구성된 경우 :

  • 우리는 지금까지 아무도 의미 인 (서버에 로그온 할 필요가있는 여기에 정책이 대부분 사실 - 원시 nginx 로그 파일을보고 싶은 경우가 있지만 희소성이 있습니다.
  • 개별 기능 블록 (restart_nginx, restart_uwsgi 등)이되도록 우리는 직물을 가지고 구성한
  • 뿐만 아니라 올바른 순서로 모든 작은 블록을 실행
  • 높은 수준의 비즈니스 '기능 - 우리 모두 업데이트 할 우리 서버는 'fab -i secretkey live deploy'라고 입력합니다. live는 라이브 서버에 대한 설정을 지정하고 ldeploys을 배포합니다 ().ssh 키가 올바르게 설정 됨)
  • 라이브 설정을 사용하는 경우 배포를 수행하기 전에 '확실합니까?'라는 메시지가 표시되는 제어 플래그가 있습니다.

우리의 코드 레이아웃 그래서 우리의 코드베이스 레이아웃이 같은 비트 보이는

: 우리는 우리의 repo에 우리의 바이너리를로드하지만 것을 의미하기 때문에

/   <-- folder containing readme file etc 
/bin/  <-- folder containing nginx & uwsgi binaries (!) 
/config/ <-- folder containing nginx config and pip list but also things like pep8 and pylint configs 
/fabric/ <-- folder containing fabric deployment 
/logs/ <-- holding folder that nginx logs get written into (but not committed) 
/src/  <-- actual source is in here! 
/thirdparty/ <-- third party libs that we didn't trust the hosting of for pip 

아마도 논란이 있다면 상자에 nginx를 업그레이 드하고, 롤백하고 싶습니다, 전 단지 자식의 조작으로 해. 나는 무엇이 건설되는지 반대하는 것이 무엇인지 압니다.

우리의 배포가 작동하는 방법 :

우리의 모든 소스 코드는 개인의 bitbucket의 REPO에서 호스팅되는 (의 bitbucket 다음 github에 우리를 위해 더 나은 왜 우리의 repos 몇 많은 사용자를 가지고 이잖아). 우리는 bitbucket을위한 ssh 키가있는 '서버'에 대한 사용자 계정을 가지고 있습니다.

  • 는 자식 (우리의 repo에 핍 목록에서)
  • 핍 배포를 끌어

    • IRC 봇은 IRC 채널로 시작하는 발표 : 직물

      배포는 각 서버에서 다음을 수행합니다 syncdb

    • 남쪽으로 이전
    • uwsgi 다시 시작
    • 셀러리를 다시 시작
    • IRC 봇
    • 시작 가용성 테스트
    • 가 (개인 페이스트 빈에 사후보고) 가용성 테스트

    '가용성 테스트'의 결과 (단위 생각 발표 IRC를 채널로 발표 완료 테스트, 라이브 서버 반대) - 'test'계정에있는 모든 웹 페이지 및 API를 조회하여 라이브 통계에 영향을 미치지 않으면 정상적인 데이터를 반환합니다.

    의 bitbucket가 다운되면, 그것은 우아하게 그까지 떨어질 수 있도록 우리는 또한 백업 자식 서비스를, 우리는 심지어 젠킨스에게이 '배포'브랜치에 커밋에 있음 통합을 가지고, 그것은 배포가

    통과시킨다

    무서운 비트

    우리는 클라우드 컴퓨팅을 사용하고 높은 처리량, 우리의 상자 자동 산란을 기대 때문입니다. Theres는 자식 이미지 저장소의 복사본을 포함하는 기본 이미지이지만 항상 최신이 아니므로 배포를 시작하는 시작 스크립트가 클러스터에 추가 된 새 상자가 자동으로 최신 상태임을 의미합니다.

  • 관련 문제