From 69116884b9e712b3682c1933fc2f2ea58218959b Mon Sep 17 00:00:00 2001 From: 0livd <0livd@users.noreply.github.com> Date: Wed, 29 Mar 2017 13:05:17 +0200 Subject: [PATCH] Add the possibilty to run ihatemoney via Apache mod_wsgi ihatemoney.wsgi is the entry point for mod_wsgi. A virtualenv can be activated if its path is specified as an env var in the apache virtual host file --- README.rst | 26 +++++++++++++++++++++++++- conf/apache-vhost.conf | 17 +++++++++++++++++ ihatemoney.wsgi | 14 ++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 conf/apache-vhost.conf create mode 100644 ihatemoney.wsgi diff --git a/README.rst b/README.rst index 5b7bb4d0..834bf907 100644 --- a/README.rst +++ b/README.rst @@ -33,7 +33,31 @@ You can also set the `TESTING` flag to `True` so no mails are sent Deploy it ========= -To deploy it, I'm using gunicorn and supervisord. +With Apache and mod_wsgi +------------------------ + +1. Install Apache and mod_wsgi:: + + $ sudo apt-get install apache2 + # If you use Python3 + $ sudo apt-get install libapache2-mod-wsgi-py3 + # Or if you use Python2 + $ sudo apt-get install libapache2-mod-wsgi + +2. Create an Apache virtual host based on the sample configuration file + + $ sudo cp conf/apache-vhost.conf /etc/apache2/sites-available/ihatemoney.conf + +3. Adapt it to your paths and specify your virtualenv path if you use one + +4. Activate the virtual host and reload Apache :: + + $ sudo a2ensite ihatemoney + $ sudo service apache2 restart + + +With Nginx, Gunicorn and Supervisord +------------------------------------ 1. Add the lines in conf/supervisord.conf to your supervisord.conf file. **adapt them to your paths!** diff --git a/conf/apache-vhost.conf b/conf/apache-vhost.conf new file mode 100644 index 00000000..53926b3e --- /dev/null +++ b/conf/apache-vhost.conf @@ -0,0 +1,17 @@ + + # Uncomment the following line if you use a virtualenv + # SetEnv IHATEMONEY_VENV_PATH /path/to/your/venv + ServerAdmin admin@example.com + ServerName ihatemoney.example.com + WSGIDaemonProcess ihatemoney user=www-data group=www-data threads=5 + WSGIScriptAlias / /path/to/ihatemoney/ihatemoney.wsgi + ErrorLog /var/log/apache2/ihatemoney.example.com_error.log + CustomLog /var/log/apache2/ihatemoney.example.com_access.log combined + + WSGIProcessGroup ihatemoney + WSGIApplicationGroup %{GLOBAL} + Order deny,allow + Allow from all + +Alias /static/ /path/to/ihatemoney/budget/static/ + diff --git a/ihatemoney.wsgi b/ihatemoney.wsgi new file mode 100644 index 00000000..765e2831 --- /dev/null +++ b/ihatemoney.wsgi @@ -0,0 +1,14 @@ +import sys +import os + +__HERE__ = os.path.dirname(os.path.abspath(__file__)) + +# Wrapper around application to get the env var set by Apache +def application(environ, start_response): + if environ.get('IHATEMONEY_VENV_PATH'): + activate_this = os.path.join(environ.get('IHATEMONEY_VENV_PATH'), 'bin/activate_this.py') + execfile(activate_this, dict(__file__=activate_this)) + # Add the budget directory to the path so we can then import from run + sys.path.insert(0, os.path.join(__HERE__, 'budget')) + from run import app as _application + return _application(environ, start_response)