per i problemi precedenti:
- Sì, puoi. Molto efficace Tieni presente che i tuoi siti Django non si integreranno nella GUI di Server App a meno che tu non ti limiti a Python 2.7; Apache mod_wsgi; nessun virtualenvs.
- Non se desideri eseguire il proxy su un server wsgi come Gunicorn, perché quando salvi il pannello del sito web, OS X Server disinfetterà alcune delle tue direttive Apache essenziali e perderai il controllo su come i tuoi file statici Django, ad esempio, sono serviti OS X Server ha in mente un particolare modello di esecuzione e configurazione e fa un buon lavoro di gestione di siti Web che si accordano con quel modello, ma al costo della flessibilità. So che le persone distribuiscono con successo Django usando il mod_wsgi di Apache, ma ciò comporta gravi limitazioni.
- Come in 2. La sezione
proxies
del plist per la tua app Web nella directory ../apache2/webapp
di OS X Server è tutto-o-niente. per esempio. Non puoi includere ProxyPass /static/ !
nel posto giusto perché abbia effetto.
- Non con Apache mod_wsgi.
- Nessun. OS X Server 3.2.1 utilizza Apache 2.2. I proxy via UDS non sono stati inclusi in Apache fino a più tardi. (Forse potresti avere il proxy Apache su Nginx (tramite una porta TCP) e, a turno, passare a Gunicorn tramite il proprio UDS di ogni sito Django ... se pensavi che ci fosse un motivo valido.
- Sì.
L'approccio che ho preso:
- Inserisci il file apache
.conf
dell'applicazione nella directory ../apache2/other
di OS X Server in cui verrà lasciato solo dall'app Server.
- Dimentica di provare a utilizzare la GUI del server e "legare" le app web ai siti tramite la sua finestra Impostazioni avanzate . Una bella idea ma ...
- Usa virtualenv (wrapper) per configurare le diverse versioni di python e package per un approccio più a prova di futuro ... OS X Server 4 su Yosemite in arrivo!
Codice di esempio:
.conf per il server virtuale Django
Questo è adattato direttamente dal file che OS X Server genera dalla sua GUI con queste differenze principali:
-
ProxyPreserveHost
è disattivato per impostazione predefinita.
-
ProxyPass /static/ !
impedisce l'ignoranza della direttiva Alias. Ho scoperto che, quando si includeva questa direttiva utilizzando l'app web consigliata da Apple, la sezione% plos includeFiles
, le righe incluse erano nel posto sbagliato per ottenere l'effetto desiderato.
sed
di SITENAME e PORT:
<VirtualHost *:80>
ServerName SITENAME
ServerAdmin [email protected]
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 per il server wsgi di Gunicorn
sed
del tuo SITENAME; REVERSED_SITENAME e 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>
Snippet dal .bash_exports
del server OS X
Mostra i percorsi virtualenv specificati dalle variabili di 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 dal file di automazione Fabric fabfile.py
Mostra:
-
I percorsi di destinazione: le directory in cui finiranno i file di configurazione;
-
I comandi per attivare il sito Django nei passaggi finali della distribuzione
# 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')