1 votos

¿Puedo desplegar mi sitio Django en OS X Server?

Quiero ejecutar mi sitio web Django en OS X Server 3.2.1 corriendo en Mavericks.

Estas consideraciones más detalladas surgen de mi pregunta.

  1. ¿Puedo implementar en OS X Server 3.2.1 sin interferir con la fiabilidad de las aplicaciones propias de OS X Server?
  2. ¿Puedo utilizar la interfaz gráfica de usuario de Server App para instalar nuevos sitios y gestionar los existentes?
  3. ¿Puedo usar Django como una aplicación web que pueda 'enlazar' a otros sitios web a la manera de la aplicación web Python "hola mundo" de OS X Server?
  4. ¿Puedo utilizar diferentes versiones de Python y utilizar virtualenvs para gestionar las versiones de los paquetes?
  5. ¿Puedo utilizar UNIX Domain Sockets para la comunicación entre procesos entre el servidor http de OS X Server y un servidor wsgi como se puede hacer entre Nginx y Gunicorn?
  6. ¿Puedo utilizar Fabric para automatizar el despliegue de Django en OS X Server?

0voto

Adam Driscoll Puntos 5117

en relación con las cuestiones anteriores:

  1. Sí se puede. De forma muy efectiva. Sólo ten en cuenta que tus sitios Django no se integrarán en la GUI de Server App a menos que te restrinjas a Python 2.7; Apache mod_wsgi; sin virtualenvs.
  2. No si deseas hacer un proxy a un servidor wsgi como Gunicorn, porque cuando guardes el panel del sitio web, OS X Server saneará algunas de tus directivas esenciales de Apache y perderás el control sobre cómo se sirven tus archivos estáticos de Django, por ejemplo. OS X Server tiene un modelo particular de ejecución y configuración en mente y hace un buen trabajo en la gestión de sitios web que concuerdan con ese modelo - pero a costa de la flexibilidad. Sé que la gente despliega con éxito Django usando el mod_wsgi de Apache, pero eso viene con severas limitaciones.
  3. Como en 2. El proxies del plist de su aplicación web en la sección de OS X Server ../apache2/webapp es todo o nada. Por ejemplo, no se puede incluir un ProxyPass /static/ ! en el lugar adecuado para que tenga efecto.
  4. No con Apache mod_wsgi.
  5. No. OS X Server 3.2.1 utiliza Apache 2.2. Los proxies vía UDS no se incluyeron en Apache hasta más tarde. (Tal vez podría tener Apache proxy a Nginx (a través de un puerto TCP) y, a su vez, proxy a Gunicorn a través de cada UDS propio del sitio Django ... si usted pensó que había una razón de peso).
  6. Sí.

El enfoque que tomé:

  • Ponga el Apache de su aplicación .conf en el archivo de OS X Server ../apache2/other donde será dejada por la aplicación del servidor.
  • Olvídese de intentar utilizar la interfaz gráfica de usuario del servidor y de "vincular" las aplicaciones web a los sitios a través de su Configuración avanzada ventana. Una buena idea, pero ...
  • Utilice virtualenv(wrapper) para configurar las diferentes versiones de Python y de los paquetes para un enfoque más a prueba de futuro ... ¡OS X Server 4 en Yosemite se acerca!

Ejemplo de código:

.conf para el servidor virtual Django

Está adaptado directamente del archivo que genera OS X Server desde su GUI con estas diferencias principales:

  1. ProxyPreserveHost está desactivado por defecto.

  2. ProxyPass /static/ ! evita que la directiva Alias sea ignorada. Encontré que, al incluir esta directiva utilizando el .plist de la aplicación web recomendado por Apple includeFiles sección, las líneas incluidas estaban en el lugar equivocado para tener el efecto deseado.

sed su SITENAME y PORT:

<VirtualHost *:80>
        ServerName SITENAME
        ServerAdmin mail@you.com
        DocumentRoot "/usr/local/python_projects/SITENAME"
        ErrorLog /var/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
                AllowOverride None
                <IfModule mod_dav.c>
                        DAV Off
                </IfModule>
        </Directory>
        ProxyPass         /static/ !
        Alias             /static/ /usr/local/python_projects/SITENAME/static/
        ProxyPass         /         http://localhost:PORT/
        ProxyPassReverse  /         http://localhost:PORT/
        ProxyPreserveHost On
</VirtualHost>

LaunchDaemon plist para el servidor wsgi de Gunicorn

sed su SITENAME; REVERSED_SITENAME y PORT:

<?xml version="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 version="1.0">
<dict>
     <key>Label</key>
     <string>REVERSED_SITENAME</string>
     <key>ProgramArguments</key>
     <array>
          <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>
     </array>
     <key>RunAtLoad</key><true/>
     <key>WorkingDirectory</key><string>/usr/local/python_projects/SITENAME/source</string>
<!--      <key>StandardErrorPath</key><string>/var/log/gunicorn/REVERSED_SITENAME.error.log</string> -->     
     <key>KeepAlive</key><true/>
</dict>
</plist>

Fragmento del servidor de OS X .bash_exports

Muestra las rutas de virtualenv especificadas por las variables de entorno de 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

Fragmento del archivo de automatización de Fabric fabfile.py

Espectáculos:

  1. Las rutas de destino - los directorios donde terminarán sus archivos de configuración;

  2. Los comandos para activar el sitio Django en los pasos finales del despliegue

    copy (and overwrite if necssary) configuration files to the LaunchDaemons and apache2/sitesdirectories

    sudo('cp -f %s /Library/LaunchDaemons/%s.plist' % (gunicorn_config_file, reversed_site_name)) sudo('cp -f %s /Library/Server/Web/Config/apache2/other/%s.conf' % (apache2_config_file, site_name))

    Get the gunicorn wsgi server running on its unique TCP port

    sudo('launchctl unload -w /Library/LaunchDaemons/%s.plist' % (reversed_site_name,), warn_only=True) sudo('launchctl load -w /Library/LaunchDaemons/%s.plist' % (reversed_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')

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X