Installer Kresus sur un Raspberry 3
-
Salouté,
Voici un cht’y tuté sur celui de Phyks qui vous permet d’installer Kresus sur un Raspberry 3 en local.
Prérequis :
- Raspbian d’installer sur votre RPI
- Accès SSH actif
Préparation à l’installation de Kresus
Installation de nodejs et yarn :
Récupérer les repository et les installer avec les commandes suivantes
curl -sL https://deb.nodesource.com/setup_10.x | sudo bash - sudo apt-get install -y nodejs
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - sudo echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt-get update && sudo apt-get install yarn
Installer Weboob
Préparer l’installation de weeboob en ajoutant les outils suivants :
sudo apt-get update && sudo apt-get install git python3-dev python3-pip libffi-dev libxml2-dev libxslt-dev libyaml-dev libtiff-dev libjpeg-dev libwebp-dev python3-pil python3-lxml autotools-dev automake autoconf libtool
Installer la dernière version git de weboob
git clone https://git.weboob.org/weboob/devel/ weboob cd weboob && sudo pip3 install .
Ajouter une tache cron qui vous permet de garder weboob à jour
crontab -e
On ajoute la règle qui mettra à jour weboob tout les mois à 23h23 :magie:
23 23 * * * cd /home/pi/weboob && git pull origin master
Créer un utilisateur kresus
sudo adduser kresus --disabled-password
sudo chsh kresus
Utiliser l’utilisateur kresus
sudo su kresus -s /bin/bash
Installation de Kresus
Récupérer et lancer l’installation de kresus
cd && git clone https://framagit.org/kresusapp/kresus cd kresus && npm install prebuild && npm install
Construisez la version de production
NODE_ENV=production make build
Tester si l’installation est fonctionnelle
NODE_ENV=production KRESUS_PYTHON_EXEC=python3 KRESUS_WEBOOB_DIR=/usr/bin/weboob node bin/kresus.js
Ajouter un service Kresus
Créer une commande de lancement automatique de kresus
sudo nano /etc/systemd/system/kresus.service
Copier/coller le code ci-dessous
[Unit] Description=Gestionnaire de finances personnelles After=network.target [Service] WorkingDirectory=/home/kresus/kresus Environment=NODE_ENV=production Environment=KRESUS_PYTHON_EXEC=python3 Environment=KRESUS_WEBOOB_DIR=/home/pi/weboob ExecStart=/usr/bin/node bin/kresus.js Type=simple Restart=always User=kresus StandardOutput=journal StandardError=inherit SyslogIdentifier=kresus [Install] WantedBy=multi-user.target
Relancer les daemon, Activer au démarrage et démarrer kresus
sudo systemctl daemon-reload sudo systemctl enable kresus.service sudo systemctl start kresus.service
Installer nginx
sudo apt install nginx apache2-utils -y sudo systemctl enable nginx
Editer le vhost nginx
server { listen 80 default_server; listen [::]:80 default_server; root /home/kresus/kresus/build/client; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name _; location / { # Only proxy the API calls location /api { proxy_pass http://127.0.0.1:9876; proxy_set_header Host $host; proxy_set_header Proxy ""; # Longer timeouts on my (slow) Raspberry Pi proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; send_timeout 300; } } }
Sécuriser Kresus
Ajout d’une authentification d’accès
Pour demander une authentification d’accès il vous suffit de créer un ou des utilisateur :
sudo htpasswd -c /home/kresus/kresus/.htpasswd theworms
Et d’ajouter ces lignes à votre configuration nginx
## Authentificates auth_basic "Private Area"; auth_basic_user_file /home/kresus/kresus/.htpasswd;
Restreindre l’accès
Pour restreindre l’accès il vous suffit d’ajouter ces lignes à votre configuration nginx
# Bloquer une ip #deny 192.168.1.1; # Autoriser une plage ip 192.168.1.0/24 allow 192.168.1.0/24; # Bloquer tout le reste deny all;
Ajout d’un nom de domaine
Après je vous conseil de créer un nom de domaine et d’éditer votre hosts
sudo nano /etc/hosts
Ajouter :
192.168.1.3 mabanque.perso
votre kresus est désormais accessible via le lien http://mabanque.perso
Du coup vous devez activer votre fichier host et supprimer les anciens
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/mabanque.perso sudo ln -s /etc/nginx/sites-available/mabanque.perso /etc/nginx/sites-enabled/ sudo rm /etc/nginx/sites-available/default sudo rm /etc/nginx/sites-enable/default
Ensuite éditer votre configuration pour la mettre à jour:
sudo nano /etc/nginx/sites-available/mabanque.perso
modifier le début :
server { listen 80; listen [::]:80; server_name mabanque.perso www.mabanque.perso;
sudo systemctl restart nginx
Mise en place d’un certificat SSL
Pour ma part j’ai créé un certificat de 10 ans :oui:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
Dès que vos clés sont générés, il vous faut renseigner nginx.
vhost :# Forcer le https server { listen 80; listen [::]:80; server_name mabanque.perso www.mabanque.perso 192.168.1.3; #Si accès IP renvoi sur ndd return 301 https://$server_name$request_uri; #Redirection } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name mabanque.perso www.mabanque.perso; root /home/kresus/kresus/build/client; try_files $uri $uri/index.html @kresus; location / { # Only proxy the API calls location /api { proxy_pass http://127.0.0.1:9876; proxy_set_header Host $host; proxy_set_header Proxy ''; proxy_redirect off; client_max_body_size 8M; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; send_timeout 300; } # Block ip #deny 192.168.1.1; # Enable IP Range 192.168.1.0/24 allow 192.168.1.0/24; # Deny deny all; } location /\.(css|js|png|jpe?g|svg|eot|woff2?)$ { add_header Cache-Control 'max-age=2592000, must-revalidate, public'; gzip_types text/plain text/css application/javascript text/javascript; gzip on; try_files $uri $uri/index.html @kresus; } ## Authentificates auth_basic "Private Area"; auth_basic_user_file /home/kresus/kresus/.htpasswd; ## Certificates ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; ## Protocol ssl_protocols TLSv1.2; ## Diffie-Hellman ssl_ecdh_curve secp384r1; ## Ciphers ssl_ciphers EECDH+CHACHA20:EECDH+AESGCM:EECDH+AES; ssl_prefer_server_ciphers on; ## TLS parameters ssl_session_cache shared:SSL:10m; ssl_session_timeout 5m; ssl_session_tickets off; ## HSTS add_header Strict-Transport-Security "max-age=15552000; includeSubdomains; preload"; add_header x-xss-protection "1; mode=block"; add_header x-frame-options "DENY"; add_header X-Content-Type-Options "nosniff"; add_header Content-Security-Policy "worker-src 'none'; object-src 'none'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; "; add_header Referrer-Policy "no-referrer"; }
Relancer nginx
sudo systemctl restart nginx
Valider le certificat
Et le tour est joué
Sauf mention contraire, le site est placé sous double licence Creative Commons BY-SA et GNU Free Documentation License propulsé par NodeBB