====== I hate money ======
===== Introduction =====
[[https://github.com/spiral-project/ihatemoney|I hate money]] est un logiciel permettant de gérer les budgets partagés, comme pour le jour de l'an par exemple. Chaque participant peut rentrer de nouvelles factures et le logiciel calcule automatiquement qui doit combien à qui. Ça fait comme tricount sauf que c'est libre et peut être auto-hébergé
===== Installation =====
L'accès au logiciel se fait via une interface web. Il vous faudra donc un serveur web, qui sera Apache dans mon cas, et un nom de domaine. Je vais installer I hate money sur mon Raspberry (Raspbian 11).
Commençons par installer les pré-requis
sudo aptitude install python3-dev libssl-dev libapache2-mod-wsgi-py3 python3-venv
Créez un environnement virtuel dans /var/www
sudo -u www-data python3 -m venv /var/www/ihatemoney
Puis accédez-y
cd /var/www/ihatemoney
Activez l'environnement virtuel
source bin/activate
Installez I hate money
sudo -u www-data pip install ihatemoney
Installez PyMySQL
sudo -u www-data pip install 'PyMySQL>=0.9,<1.1'
C'est terminé pour l'installation. Passons à la configuration
===== Configuration =====
Créez les répertoires de I hate money
sudo mkdir /etc/ihatemoney /var/lib/ihatemoney
Générez le fichier de configuration
ihatemoney generate-config ihatemoney.cfg > ihatemoney.cfg
Copiez le fichier dans /etc/ihatemoney :
sudo cp ihatemoney.cfg /etc/ihatemoney/
Mettez les droits adéquats
sudo chmod 740 /etc/ihatemoney/ihatemoney.cfg
sudo chgrp www-data /etc/ihatemoney/ihatemoney.cfg
sudo chown www-data /var/lib/ihatemoney
Ouvrez le fichier de configuration
sudo nano /etc/ihatemoney/ihatemoney.cfg
Modifiez le fichier de configuration afin qu'il ressemble à ceci
# You can find more information about what these settings mean in the
# documentation, available online at
# http://ihatemoney.readthedocs.io/en/latest/installation.html#configuration
# Turn this on if you want to have more output on what's happening under the
# hood. DO NOT TURN IT ON IN PRODUCTION.
DEBUG = False
# The database URI, reprensenting the type of database and how to connect to it.
# Enter an absolute path here.
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://ihatemoney:motdepasse@localhost/ihatemoney' #à adapter
SQLACHEMY_ECHO = DEBUG
# Will likely become the default value in flask-sqlalchemy >=3 ; could be removed
# then:
SQLALCHEMY_TRACK_MODIFICATIONS = False
# This secret key is random and auto-generated, it protects cookies and user sessions
SECRET_KEY = "ipuw14#=*m5_%1f7mg-!z8-bunv@xod65_19*umx)4cy#4f-^0"
# A python tuple describing the name and email adress of the sender of the mails.
MAIL_DEFAULT_SENDER = ("Budget manager", "adresse mail") #à adapter
# If set to True, a demonstration project will be activated.
ACTIVATE_DEMO_PROJECT = False
# If not empty, the specified password must be entered to create new projects.
# DO NOT enter the password in cleartext. Generate a password hash with
# "ihatemoney generate_password_hash" instead.
ADMIN_PASSWORD = ""
# If set to True (default value) anyone can create a new project.
ALLOW_PUBLIC_PROJECT_CREATION = True
# If set to True, an administration dashboard is available.
ACTIVATE_ADMIN_DASHBOARD = True
# You can change the timezone used to display time. By default it will be
#derived from the server OS.
#BABEL_DEFAULT_TIMEZONE = "Europe/Paris"
# Enable secure cookies. Requires HTTPS. Disable if you run your ihatemoney
# service over plain HTTP.
SESSION_COOKIE_SECURE = True
# You can activate an optional CAPTCHA if you want to. It can be helpful
# to filter spammer bots.
# ENABLE_CAPTCHA = True
# You may want to point to a special legal page, for instance to give information
# about GDPR, or how you handle the data of your users.
# Set this variable to the URL you want.
# LEGAL_LINK = ""
MAIL_SERVER = "adresse serveur mail" #à adapter
MAIL_PORT = 587 #à adapter
MAIL_USE_TLS = True #à adapter
MAIL_USERNAME = "nom d'utilisateur" #à adapter
MAIL_PASSWORD = "mot de passe" #à adapter
Pensez à adapter les lignes où il est indiqué "#à adapter".
Créez la base de donnée mysql ihatemoney ainsi que l'utilisateur ihatemoney ayant pour mot de passe celui que vous avez indiqué dans le fichier de configuration.
Créez le mot de passe admin :
ihatemoney generate_password_hash
Ca va vous générer un hash qu'il faudra mettre dans le fichier de configuration.
Il ne reste plus qu'à créer le vhost Apache
===== Configuration Apache2 =====
Créez un fichier de configuration Apache2 :
sudo nano /etc/apache2/sites-available/budget.nomdedomaine.conf
Collez-y le retour de la commande précédente et complétez pour qu'il ressemble à ceci :
ServerName budget.nomdedomaine.fr
Redirect / https://budget.nomdedomaine.fr/
ServerName budget.nomdedomaine.fr
WSGIDaemonProcess ihatemoney user=www-data group=www-data threads=5 python-home=/var/www/ihatemoney
WSGIScriptAlias / /var/www/ihatemoney/lib/python3.9/site-packages/ihatemoney/wsgi.py
WSGIPassAuthorization On
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/budget.access.log combined
ErrorLog ${APACHE_LOG_DIR}/budget.error.log
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/nomdedomaine.fr/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/nomdedomaine.fr/privkey.pem
WSGIProcessGroup ihatemoney
WSGIApplicationGroup %{GLOBAL}
Require all granted
Alias /static/ /var/www/ihatemoney/lib/python3.9/site-packages/ihatemoney/static/
Activez le vhost
sudo a2ensite budget.nomdedomaine.conf
Redémarrez Apache
sudo systemctl restart apache2
I hate money est maintenant accessible depuis l'adresse configuré dans le vhost Apache. Si vous cliquez sur la roue crantée en bas à droite, après avoir rentré le mot de passe admin vous aurez accès à la zone d'administration.
===== Mise à jour =====
Si vous voulez mettre à jour Ihatemoney dans le futur, il vous suffit de vous rendre dans le répertoire /var/www/ihatemoney puis d'activer l'environnement virtuel :
source bin/activate
puis de lancer :
pip install -U ihatemoney