Installation de Firefly III : un gestionnaire de finances personnelles

Rédigé par J'informatique Aucun commentaire
Classé dans : Développeur Mots clés : aucun

Introduction

Firefly III est un gestionnaire de finances personnelles gratuit et open source à installer sur un serveur web. Avant de l'utiliser, il faut bien comprendre son fonctionnement car il est basé sur les règles que YNAB utilise, c'est à dire gérer son budget par attribution d'enveloppe pour chaque catégorie. Vous pouvez apprendre les 4 règles d'or  pour gérer votre argent avec la méthode de YNAB décrite en anglais. Le programme YNAB est un logiciel payant avec un abonnement au mois. Ici avec Firefly III vous avez une alternative gratuite et open source. Pour soutenir le développeur par cet excellent travail, vous pouvez lui faire un don.

Je vais détailler ici son installation pour que vous puissiez faire de même du 1er coup.

Ancienne version de composer

J'ai obtenu l'erreur suivante sur un hébergement mutualisé (o2switch) qui utilise une ancienne version de composer. Installez d'abord la dernière version de composer plutôt que le composer fourni.

Generating autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
You made a reference to a non-existent script @php artisan package:discover
> php artisan optimize

  [InvalidArgumentException]                                                 
  Cannot instantiate Twig extension 'TwigBridge\Extension\Laravel\Session': N
  o application encryption key has been specified.                                                                                 

Script php artisan optimize handling the post-install-cmd event returned with an error

  [RuntimeException]
  Error Output:      

create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--no-install] [--ignore-platform-reqs] [--] [<package>] [<directory>] [<version>]

Et dans le dossier de logs : firefly-iii/storage/logs/

[2017-11-30 13:54:03] production.ERROR: Cannot instantiate Twig extension 'TwigBridge\Extension\Laravel\Session': No application encryption key has been specified. {"exception":"[object] (InvalidArgumentException(code: 0): Cannot instantiate Twig extension 'TwigBridge\\Extension\\Laravel\\Session': No application encryption key has been specified. at /home/jinforma/t.jinformatique.net/firefly-iii/vendor/rcrowe/twigbridge/src/ServiceProvider.php:236)"}

 

Installation Firefly III - Base MySQL

Après avoir installé une version récente de composer, on lance la commande :

php ~/composer create-project grumpydictator/firefly-iii --no-dev --prefer-dist firefly-iii <latest>

Configurer le fichier de config .env en se basant sur l'aide fourni en ligne avec les données de connexion à la base de données que vous aurez crée au préalable. Ensuite lancez :

php artisan migrate:refresh --seed

Si vous obtenez l'erreur suivante :

Migration table not found.
Migration table created successfully.
  [Illuminate\Database\QueryException]                                                                                                                                                                                            
  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL: alter table `link_types` add unique `link_types_name_outward_inward_unique`(`name`, `outward`, `inward`))
  [Doctrine\DBAL\Driver\PDOException]                                                                             
  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes                                                                                                                                                                                                                                     
  [PDOException]                                                                                                  
  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes

Relancez simplement la même commande une 2ème fois.

Vous pourrez ensuite vous connecter sur l'interface web et créer votre compte.

Installation Firefly III - Base SQLITE (en local)

D'abord rajouter quelques dépendances pour PHP

sudo apt install php7.1-intl php7.1-bcmath php7.1-sqlite3

php ~/bin/composer create-project grumpydictator/firefly-iii --no-dev --prefer-dist firefly-iii <latest>
cd firefly-iii/

Changer la connexion dans le fichier .env pour avoir :

APP_URL=http://localhost/firefly-iii/public/

DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
#DB_DATABASE=homestead
DB_USERNAME=homestead
#DB_PASSWORD=secret

DB_DATABASE et DB_PASSWORD ne sont pas nécessaire. Pour que cela fonctionne vous aurez besoin du fichie base de donnée format sqlite. Vous pouvez le créer en executant la commande suivante depuis votre dossier Firefly III :

touch ./storage/database/database.sqlite

Ensuite vous pourrez initialiser la base de donnée de cette façon :

php artisan migrate:refresh --seed

Puis mettre les droits qui vont bien :

cd ..
sudo chown -R www-data:www-data firefly-iii/
sudo chmod -R 775 firefly-iii/storage


Conversion BDD MySQL vers SQLITE

Si vous avez déjà commencé à utiliser MySQL et que vous souhaitez passer à SQLITE, utilisez le script suivant :

https://github.com/dumblob/mysql2sqlite

mysqldump --skip-extended-insert --compact [options]... DB_name > dump_mysql.sql
./mysql2sqlite dump_mysql.sql | sqlite3 database.sqlite

 

Réinstallation Firefly III - Base SQLITE, migration après une sauvegarde

Il s'agit de sauvegarder 2 fichiers clés :

  • firefly-iii/.env (la configuration de l'installation)
  • firefly-iii/storage/database/database.sqlite (la base de données)

Ensuite on va pouvoir les réinstaller sur une nouvelle installation

php ~/bin/composer create-project grumpydictator/firefly-iii --no-dev --prefer-dist firefly-iii <latest>
cp .env firefly-iii #Copie du fichier sauvegardé
cd firefly-iii
touch ./storage/database/database.sqlite
php artisan migrate:refresh --seed
cp ../database.sqlite ./storage/database/database.sqlite #Copie du fichier sauvegardé
sudo php artisan cache:clear
cd ..
sudo chown -R www-data:www-data firefly-iii/
sudo chmod -R 775 firefly-iii/storage

 

Une capture d'écran du programme.
Site officiel : https://firefly-iii.org/

Installation de Cloudron

Rédigé par J'informatique 2 commentaires
Classé dans : Développeur Mots clés : cloudron, nextcloud

Pré-requis : être à l'aise pour administrer un serveur.

Cloudron c'est quoi ?

C’est une plateforme permettant de déployer en quelques minutes de nombreuses applications tel que NextCloud, RocketChat, GitLab, Etherpad, Wallabag avec un service clé en main incluant l’hébergement et le backup. L’équipe de Cloudron propose un abonnement payant géré par leurs soins ou bien, ils vous proposent de l’héberger vous même sur le serveur de votre choix.

Site officiel : https://cloudron.io/

Ayant un serveur dédié chez OVH, je détaille les étapes pour sécuriser le serveur et installer Cloudron.

Préparation du serveur

Création de la clé SSH

Sur un PC Linux ou Mac, créer la paire de clés (plus robuste contre les attaques) comme suit :

ssh-keygen -t ed25519 -f id_ed25519 -o -a 500
# ou bien
ssh-keygen -t rsa -b 4096 -o -a 500

Copier la clé publique dans le panel OVH. Puis se connecter au serveur fraichement installé avec Ubuntu 16.04 "Xenial Xerus" LTS.

ssh root@<IP> -i ~/.ssh/id_ed25519.pub

Changement du mot de passe root par défaut

passwd

Résoudre l’erreur perl: warning: Setting locale failed

locale-gen fr_FR.UTF-8
dpkg-reconfigure locales

https://memo-linux.com/resoudre-lerreur-perl-warning-setting-locale-failed/

Création d'un nouvel utilisateur pour ne pas utiliser root

adduser <user>
usermod -aG sudo <user>

Se connecter en user pour lui ajouter la clé privée SSH

su - user
mkdir ~/.ssh
chmod 0700 ~/.ssh
sudo cp /root/.ssh/authorized_keys2 /home/user/.ssh/authorized_keys2
sudo chown user:<user /home/user/.ssh/authorized_keys2
chmod 0600 /home/user/.ssh/authorized_keys2
exit
rm /root/.ssh/authorized_keys2

Sécuriser l'accès au serveur SSH.

Lire la page sécurité de Cloudron.

vi /etc/ssh/sshd_config
Port 202   # Changement du port par défaut pour éviter les attaques brute force. Uniquement ce port n'est pas bloqué par le firewall Cloudron
ServerKeyBits 4096
PermitRootLogin no
UsePAM no
PasswordAuthentication no

On enregistre et on quitte avec ":x"
Redémarrage du serveur SSH pour prendre en compte les modifications :

systemctl restart sshd

Connexion SSH avec user

ssh user@<IP> -p202 -i ~/.ssh/id_ed25519.pub
su -

 

Installation de Cloudron

wget https://cloudron.io/cloudron-setup
chmod +x ./cloudron-setup
./cloudron-setup --provider ovh

apt install fail2ban

Pour plus d'informations, lire la doc d'installation.

Installation de Cloudron CLI

J'avais besoin d'envoyer une grande quantité de données, mais plutôt que de le faire par l'interface web ou le programme nextcloud, je l'ai fais en SSH. Le transfert terminé, il faut indiquer à nextcloud de scanner les nouveaux fichiers. Cela se fait en ligne de commande depuis son poste.

Using the Cloudron CLI tool

sudo npm install -g cloudron
cloudron login my.<site>
cloudron list 
cloudron exec --app <appid>
sudo -u www-data php -f occ files:scan --all