2012-04-05 3 views
3

Мне интересно выяснить, как организовать Django-приложения на сервере.Структура и соглашения сервера Django

  • Где вы размещаете код Django? (Старый сейчас) Альманах говорит /home/django/domains/somesitename.com/, но я также видел вещи, помещенные в/opt/apps/somesitename /. Я думаю, что идея/opt/idea звучит лучше, поскольку она не является глобальной, но я раньше не видел опцию, и, вероятно, было бы лучше, если бы приложения могли размещаться в домашнем каталоге.

  • Вы бы рекомендовали иметь одного пользователя глобального развертывания, одного пользователя на сайт или одного на сайт-env (например, sitenamelive, sitenamestaging). Я думаю один на сайт.

  • Как вы можете изменить конфигурационные файлы? В настоящее время я помещаю их в папку/etc/на верхнем уровне управления версиями. например, /etc/nginc/somesite-live.conf.

  • Как вы создаете свои серверы и выполняете развертывание? Я много лет сопротивлялся Шеф-повару и Куколку в надежде на что-то основанное на Питоне. Silver Lining пока не готова, и у меня большие надежды на Patchwork (https://github.com/fabric/patchwork/). В настоящее время мы просто используем некоторые настраиваемые сценарии Fabric для развертывания, но «предоставление ресурсов» обрабатывается сценарием bash и некоторыми ручными шагами для добавления ключей и создания пользователей. Я собираюсь исследовать развертывание Silk (https://bitbucket.org/btubbs/silk-deployment), поскольку он кажется самым близким к нашей настройке.

Спасибо!

+1

Это, вероятно, будет закрыто, так как здесь есть 4 вопроса. Я держу все просто и имею все мои сайты под '/ sites/www.mysite.com /'. В папке конкретного сайта у меня есть папка 'project', которая содержит * все *, специально для этого сайта, который должен быть проверен в VCS, включая конфигурацию, настройки, readme, требования и т. Д. –

ответ

1

Я думаю, что должно было бы быть больше информации о том, что виды сайтов развертываемых: было бы различия на основе отношений между сайтами, как программно и «юридически» (как в деловых отношениях):

  • Наличие системной учетной записи для каждого сайта может быть удобно, если сайты принадлежат «другим» людям - если вы являетесь веб-дизайнером или программистом с несколькими клиентами, тогда вам может понадобиться разделить.
  • Если ваши сайты связаны, то есть сайт форума, сайт блога и т. Д., Вы можете воспользоваться единой системой развертывания (например, нашей).
  • для библиотек, если они размещены в авторитетных источниках (pypy, github и т. Д.), Вероятно, это нормально оставить их там и развернуть от них - если они находятся на изворотливых хостах, которые вверх или вниз, мы берем копию и поместите их в папку/thirdparty в нашем git-репо.

ТКАНИ Ткань удивительно - если его установка и настроена правильно для Вас:

  • У нас есть политика здесь, который не означает, что никто никогда не должен войти на сервер (который основном true - бывают случаи, когда мы хотим посмотреть исходный файл журнала nginx, но это редкость).
  • У нас есть ткань, сконфигурированная так, что есть отдельные функциональные блоки (restart_nginx, restart_uwsgi и т. Д.), А также
  • функции бизнес-уровня более высокого уровня, которые управляют всеми маленькими блоками в правильном порядке - для нас, чтобы обновить все наши серверы мы набираем тип «fab -i secretkey live deploy» - live устанавливает настройки для живых серверов и развертывает ldeploys (-i является необязательным, если у вас есть.ssh ключи установлены правильно)
  • У нас даже есть флаг управления, который, если используется живая настройка, перед выполнением развертывания запросит «вы уверены».

Наш макет код

Таким образом, наш базовый код макет выглядит как это:

/   <-- 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 на ящиках и хотите откат, я просто делаю это, манипулируя git. Я знаю, что работает против того, что строится.

Как наши развернуть работы:

Всего наш исходный код размещается на отдельном Bitbucket репо (у нас есть много РЕПО и несколько пользователей, то почему Bitbucket лучше для нас тогда GitHub). У нас есть учетная запись пользователя для «серверов» со своим собственным ключом ssh для битбакета.

Deploy в ткани выполняет следующие действия на каждый сервере:

  • ИРЦ бот объявляют начало в канал IRC
  • мерзавца тянуть
  • пип развернуть (из списка пипа в нашем репо)
  • SyncDB
  • юг мигрируют
  • uwsgi перезагружать
  • сельдерея рестарт
  • ИРЦ боты объявляют о завершении в канал IRC
  • тестирование начало наличие
  • огласить результаты тестирования доступности (и после доклада в частную Pastebin)

«тест доступности» (думает, что блок тест, но против сервера в реальном времени) - попадает на все веб-страницы и API в учетную запись «test», чтобы убедиться, что она вернет нормальные данные, не влияя на статистику в реальном времени.

У нас также есть служба резервного копирования GIT, так что если Bitbucket вниз, он падает к тому, что изящно, и мы даже Дженкинс интеграция, на совершение в «развернуть» ветвь, это приводит к тому, развертыванию, чтобы пройти через

страшная бит

Поскольку мы используем облачные вычисления и ожидаем высокие пропускную способность, наши коробки авто икры. Theres изображение по умолчанию, которое содержит копию git repo и т. Д., Но неизменно оно будет устаревшим, поэтому theres сценарий запуска, который делает развертывание для себя, то есть новые поля, добавленные в кластер, автоматически обновляется.