We lack some knowledge about packaging to make Ihatemoney installable on mainstream Linux distributions. If you want to give us a hand on the topic, please check-out the issue about debian packaging.
If you are using Yunohost (a server operating system aiming to make self-hosting accessible to anyone), you can use the Ihatemoney package.
Otherwise, follow these instructions to install it manually:
«Ihatemoney» depends on:
- Python: either 2.7, 3.4, 3.5, 3.6 will work.
- A Backend: to choose among MySQL, PostgreSQL, SQLite or Memory.
- Virtualenv (recommended): virtualenv package under Debian/Ubuntu.
We recommend to use virtualenv but it will work without if you prefer.
If wondering about the backend, SQLite is the simplest and will work fine for most small to medium setups.
Note
If curious, source config templates can be found in the project git repository.
Choose an installation path, here /home/john/ihatemoney.
Create a virtualenv:
virtualenv -p /usr/bin/python3 /home/john/ihatemoney
Activate the virtualenv:
source /home/john/ihatemoney/bin/activate
Note
You will have to re-issue that source
command if you open a new
terminal.
Install the latest release with pip:
pip install ihatemoney
Once installed, you can start a test server:
ihatemoney runserver
And point your browser at http://localhost:5000.
Note
Only required if you use MySQL/MariaDB.
Install PyMySQL dependencies. On Debian or Ubuntu, that would be:
apt install python3-dev libssl-dev
Install PyMySQL (within your virtualenv):
pip install 'PyMySQL>=0.9,<0.10'
Create an empty database and a database user
Configure :ref:`SQLALCHEMY_DATABASE_URI <configuration>` accordingly
Note
Only required if you use Postgresql.
Install python driver for PostgreSQL (from within your virtualenv):
pip install psycopg2
Create the users and tables. On the command line, this looks like:
sudo -u postgres psql postgres=# create database mydb; postgres=# create user myuser with encrypted password 'mypass'; postgres=# grant all privileges on database mydb to myuser;
Configure :ref:`SQLALCHEMY_DATABASE_URI <configuration>` accordingly.
Now, if you want to deploy it on your own server, you have many options. Three of them are documented at the moment.
Of course, if you want to contribute another configuration, feel free to open a pull-request against this repository!
Initialize the ihatemoney directories:
mkdir /etc/ihatemoney /var/lib/ihatemoney
Generate settings:
ihatemoney generate-config ihatemoney.cfg > /etc/ihatemoney/ihatemoney.cfg chmod 740 /etc/ihatemoney/ihatemoney.cfg
You probably want to adjust /etc/ihatemoney/ihatemoney.cfg
contents,
you may do it later, see :ref:`configuration`.
Fix permissions (considering www-data is the user running apache):
chgrp www-data /etc/ihatemoney/ihatemoney.cfg chown www-data /var/lib/ihatemoney
Install Apache and mod_wsgi :
libapache2-mod-wsgi(-py3)
for Debian based andmod_wsgi
for RedHat based distributionsCreate an Apache virtual host, the command
ihatemoney generate-config apache-vhost.conf
will output a good starting point (read and adapt it).Activate the virtual host if needed and restart Apache
Install Gunicorn:
pip install gunicorn
Create a dedicated unix user (here called ihatemoney), required dirs, and fix permissions:
useradd ihatemoney chown ihatemoney /var/lib/ihatemoney/ chgrp ihatemoney /etc/ihatemoney/ihatemoney.cfg
Create gunicorn config file
ihatemoney generate-config gunicorn.conf.py > /etc/ihatemoney/gunicorn.conf.py
Setup Supervisord or systemd
To use Supervisord, create supervisor config file
ihatemoney generate-config supervisord.conf > /etc/supervisor/conf.d/ihatemoney.conf
To use systemd services, create
ihatemoney.service
in [2]:[Unit] Description=I hate money Requires=network.target postgresql.service After=network.target postgresql.service [Service] Type=simple User=ihatemoney ExecStart=/home/john/ihatemoney/bin/gunicorn -c /etc/ihatemoney/gunicorn.conf.py ihatemoney.wsgi:application SyslogIdentifier=ihatemoney [Install] WantedBy=multi-user.target
Obviously, adapt the
ExecStart
path for your installation folder.If you use SQLite as database: remove mentions of
postgresql.service
inihatemoney.service
. If you use MySQL or MariaDB as database: replace mentions ofpostgresql.service
bymysql.service
ormariadb.service
inihatemoney.service
.Then reload systemd, enable and start
ihatemoney
:systemctl daemon-reload systemctl enable ihatemoney.service systemctl start ihatemoney.service
Copy (and adapt) output of
ihatemoney generate-config nginx.conf
with your nginx vhosts [1]Reload nginx (and supervisord if you use it). It should be working ;)
[1] | typically, /etc/nginx/conf.d/ or /etc/nginx/sites-available, depending on your distribution. |
[2] | /etc/systemd/system/ihatemoney.service
path may change depending on your distribution. |
Build the image:
docker build -t ihatemoney --build-arg INSTALL_FROM_PYPI=True .
Start a daemonized Ihatemoney container:
docker run -d -p 8000:8000 ihatemoney
Ihatemoney is now available on http://localhost:8000.
All Ihatemoney settings can be passed with -e
parameters
e.g. with a secure SECRET_KEY
, an external mail server and an
external database:
docker run -d -p 8000:8000 \ -e SECRET_KEY="supersecure" \ -e SQLALCHEMY_DATABASE_URI="mysql+pymysql://user:pass@172.17.0.5/ihm" \ -e MAIL_SERVER=smtp.gmail.com \ -e MAIL_PORT=465 \ -e MAIL_USERNAME=your-email@gmail.com \ -e MAIL_PASSWORD=your-password \ -e MAIL_USE_SSL=True \ ihatemoney
A volume can also be specified to persist the default database file:
docker run -d -p 8000:8000 -v /host/path/to/database:/database ihatemoney
Additional gunicorn parameters can be passed using the docker CMD
parameter.
For example, use the following command to add more gunicorn workers:
docker run -d -p 8000:8000 ihatemoney -w 3