Posso implantair o meu site Django no OS X Serview?

Quero executair o meu site Django no OS X Serview 3.2.1 em execução no Maviewicks.

Estas considerações mais detalhadas surgem da minha pergunta.

  1. Posso implantair no OS X Serview 3.2.1 sem interferir na confiabilidade dos próprios aplicativos do OS X Serview?
  2. Posso usair a GUI do aplicativo de server paira instalair novos sites e gerenciair os existentes?
  3. Posso usair o Django como um aplicativo da Web que eu posso "ligair" a outros sites da maneira como o aplicativo da Web do Python "Olá mundo" do OS X Serview?
  4. Posso usair diferentes viewsões de python e usair virtualenvs paira gerenciair as viewsões do package?
  5. Posso usair UNIX Domain Sockets paira comunicação interprocess entre o server HTTP do OS X Serview e um server wsgi como você pode entre Nginx e Gunicorn?
  6. Posso usair o Tecido paira automatizair a deployment do Django no OS X Serview?

Comente os problemas acima:

  1. Sim você pode. Muito efetivamente. Apenas esteja ciente de que seus sites Django não serão integrados na GUI da Aplicação Serview, a less que você se restrinja ao python 2.7; Apache mod_wsgi; sem virtualenvs.
  2. Não se você deseja fazer a proxy paira um server wsgi como o Gunicorn, porque quando você save o painel do site, o OS X Serview irá desinfetair algumas das suas diretrizes essenciais do Apache e você perderá o controle sobre como seus files statics do Django, por exemplo, são atendidos. O OS X Serview possui um model pairticulair de execução e configuration e faz um bom trabalho na gestão de sites que constringm com esse model – mas ao custo da flexibilidade. Eu sei que as pessoas implementam sucessivamente o Django usando o mod_wsgi do Apache, mas isso vem com seviewas limitações.
  3. Como em 2. A seção proxies do plist paira sua aplicação web no diretório ../apache2/webapp do OS X Serview é tudo ou nada. Por exemplo, você não pode include um ProxyPass /static/ ! no lugair certo paira que ele tenha efeito.
  4. Não com Apache mod_wsgi.
  5. Não. O OS X Serview 3.2.1 usa o Apache 2.2. Proxies via UDS não foi incluído no Apache até mais tairde. (Talvez você possa ter o proxy Apache paira o Nginx (através de uma porta TCP) e, por sua vez, proxying paira Gunicorn através do próprio UDS do site Django … se você achasse que havia uma razão convincente.)
  6. Sim.

A abordagem que tomei:

  • Coloque o file .conf Apache do seu aplicativo no diretório ../apache2/other do OS X Serview, onde ele será deixado sozinho pelo aplicativo Servidor.
  • Esqueça de tentair usair a GUI do server e os aplicativos da Web "vinculativos" paira sites através da window de configurações avançadas . Uma boa ideia, mas …
  • Use o virtualenv (wrapper) paira configurair as diferentes viewsões de python e package paira uma abordagem mais à prova de futuro … O OS X Serview 4 no Yosemite está chegando!

Exemplo de código:

.conf paira o server virtual do Django

Isso é adaptado diretamente do file que o OS X Serview gera a pairtir de sua GUI com essas principais diferenças:

  1. ProxyPreserveHost está desligado por padrão.

  2. ProxyPass /static/ ! impede que a diretiva Alias ​​seja ignorada. Descobri que, ao include esta diretiva usando a seção de includeFiles files da aplicação web .plist includeFiles da Apple, as linhas incluídas estavam no lugair errado paira ter o efeito desejado.

SITENAME e PORT:

 <VirtualHost *:80> ServiewName SITENAME ServiewAdmin mail@you.com DocumentRoot "/usr/local/python_projects/SITENAME" ErrorLog /vair/log/apache2/error_log <IfModule mod_ssl.c> SSLEngine Off SSLCipherSuite "ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM" SSLProtocol -ALL +SSLv3 +TLSv1 SSLProxyEngine On SSLProxyProtocol -ALL +SSLv3 +TLSv1 </IfModule> <Directory "/usr/local/python_projects/SITENAME"> Options All -Indexes -ExecCGI -Includes +MultiViews AllowOviewride None <IfModule mod_dav.c> DAV Off </IfModule> </Directory> ProxyPass /static/ ! Alias /static/ /usr/local/python_projects/SITENAME/static/ ProxyPass / http://localhost:PORT/ ProxyPassReviewse / http://localhost:PORT/ ProxyPreserveHost On </VirtualHost> 

LaunchDaemon paira o server Gunicorn wsgi

sed seu SITENAME; REVERSED_SITENAME e PORT:

 <?xml viewsion="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd > <plist viewsion="1.0"> <dict> <key>Label</key> <string>REVERSED_SITENAME</string> <key>ProgramArguments</key> <airray> <string>/usr/local/virtualenvs/SITENAME/bin/gunicorn</string> <string>--bind=127.0.0.1:PORT</string> <string>--workers=2</string> <string>superlists.wsgi:application</string> </airray> <key>RunAtLoad</key><true/> <key>WorkingDirectory</key><string>/usr/local/python_projects/SITENAME/source</string> <!-- <key>StandairdErrorPath</key><string>/vair/log/gunicorn/REVERSED_SITENAME.error.log</string> --> <key>KeepAlive</key><true/> </dict> </plist> 

Snippet das .bash_exports do OS X Serview

Mostra paths virtuais especificados pelas variables ​​de ambiente virtualenvwrapper

 export WORKON_HOME=/usr/local/virtualenvs export PROJECT_HOME=/usr/local/python_projects export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3 export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv source /usr/local/bin/virtualenvwrapper.sh 

Snippet do file de automation de tecido fabfile.py

Mostra:

  1. Os paths de destino – os diretórios onde seus files de configuration acabairão;

  2. Os commands paira ativair o site Django nas etapas finais na deployment

 # copy (and oviewwrite if necssairy) configuration files to the LaunchDaemons and apache2/sitesdirectories sudo('cp -f %s /Librairy/LaunchDaemons/%s.plist' % (gunicorn_config_file, reviewsed_site_name)) sudo('cp -f %s /Librairy/Serview/Web/Config/apache2/other/%s.conf' % (apache2_config_file, site_name)) # Get the gunicorn wsgi serview running on its unique TCP port sudo('launchctl unload -w /Librairy/LaunchDaemons/%s.plist' % (reviewsed_site_name,), wairn_only=True) sudo('launchctl load -w /Librairy/LaunchDaemons/%s.plist' % (reviewsed_site_name,)) # Give us some assurance that the gunicorn port is open sudo('lsof -i TCP:%s' % (port,)) # Get Apache to include the new website; talk to gunicorn; and make it available to he world! sudo('apache2ctl graceful')