====== Firefly III ======


"Firefly III" ist ein (selbstgehosteter) Manager für Ihre persönlichen Finanzen. Er hilft Ihnen, den Überblick über Ihre Ausgaben und Einnahmen zu behalten, so dass Sie weniger ausgeben und mehr sparen können. Firefly III unterstützt die Verwendung von Budgets, Kategorien und Tags. Mit einer Reihe von externen Tools können Sie Daten importieren. Außerdem stehen Ihnen viele übersichtliche Finanzberichte zur Verfügung.

Firefly III soll Ihnen **Einblick** in und **Kontrolle** über Ihre Finanzen geben. Geld sollte nützlich sein, nicht beängstigend. Sie sollten in der Lage sein, zu sehen, wohin es fließt, Ihre Ausgaben zu spüren und zu... wow, ich übertreibe, nicht wahr?

Aber Sie verstehen schon: Es ist Ihr Geld. Das sind Ihre Ausgaben. Halten Sie sie davon ab, Sie zu kontrollieren. Ich habe dieses Tool entwickelt, weil ich anfing, Geld zu hassen. Geld zu haben, kein Geld zu haben, Rechnungen mit Geld zu bezahlen - Sie verstehen, was ich meine. Aber jetzt nicht mehr. Ich möchte mich "sicher" fühlen, egal wie hoch mein Kontostand ist. Und ich hoffe, dieses Tool kann Ihnen helfen. Ich weiß, dass es mir hilft.
Zweck

Firefly III auf dem iPad 

Persönliches Finanzmanagement ist ziemlich schwierig, und jeder hat seinen eigenen Ansatz dazu. Manche Leute machen Budgets, andere begrenzen ihren Geldfluss, indem sie ihre Kreditkarten wegwerfen, wieder andere versuchen, ihren aktuellen Geldfluss zu erhöhen. Es gibt unzählige Möglichkeiten, Geld zu sparen und zu verdienen. Firefly III basiert auf dem Prinzip, dass Sie, wenn Sie wissen, wohin Ihr Geld fließt, verhindern können, dass es dorthin fließt.

Indem Sie Ihre Ausgaben und Einnahmen im Auge behalten, können Sie Ihr Budget entsprechend planen und Geld sparen. Hören Sie auf, von Gehaltsscheck zu Gehaltsscheck zu leben, sondern geben Sie sich den finanziellen Spielraum, den Sie brauchen.

Mehr über den Zweck von Firefly III erfahren Sie in der [[https://docs.firefly-iii.org/|documentation]].

[[https://github.com/firefly-iii/firefly-iii|Github]]

[[https://www.firefly-iii.org/|Website]]

Siehe auch [[https://techsaviours.org/news/de/blog/your-own-open-source-finance-tool-firefly-iii|unsere News]], die einige Erklärungen und Screenshots enthält. Die Installation dort ist Docker-basiert, du diesen Weg bevorzugst. 


===== Packete =====

<code>
pacman -S composer php-sodium
</code>


===== PHP konfiguration =====

See also [[/de/server/services/php|php installation]]

<code>
nano /etc/php/php.ini
</code>

<code>
extension=bcmath
extension=curl
extension=gd
extension=iconv
extension=intl
extension=pdo_mysql
extension=sodium
extension=zip
</code>

<code>
systemctl restart php-fpm.service
</code>


===== Firefly III =====


==== Installation ====

Siehe [[https://version.firefly-iii.org/|neueste Versions]] Nummer und ändere den Befehl wie folgt:

<code>
cd /srv/http
composer create-project grumpydictator/firefly-iii --no-dev --prefer-dist firefly-iii 5.7.18
chown -R http: firefly-iii/
chmod -R 775 firefly-iii/storage
</code>


==== Konfiguriere .env ====

Siehe auch dazu [[/de/server/services/redis|redis]] und erstelle einen [[/de/server/services/mariadb#lokalen_benutzer_anlegen|user]] und [[/de/server/services/mariadb#datenbank_erstellen|database]].

Hier werden nur die wichtigsten aufgeführt. Änder den Rest nach deinen Bedürfnissen: 

<code>
nano .env
</code>

<code>
TRUSTED_PROXIES=**
DB_CONNECTION=mysql
DB_DATABASE=firefly
DB_USERNAME=firefly
DB_PASSWORD=PASSWORD
DB_SOCKET=/run/mysqld/mysqld.sock
CACHE_DRIVER=redis
SESSION_DRIVER=redis
REDIS_SCHEME=unix
REDIS_PATH=/run/redis/redis.sock
# Leave it empty
REDIS_HOST=
REDIS_PORT=
REDIS_PASSWORD=yourPASSWORD
REDIS_DB="0"
REDIS_CACHE_DB="1"
APP_URL=https:/firefly.home
</code>


==== Upgrade ====

Erstelle das Update-Skript in ''/srv/http'':

<code>
nano update_firefly.sh
</code>

<code>
#!/bin/bash

# Modify next line to where your firefly-iii instance is installed to.
cd /srv/http 

# Remove old version of firefly-iii
rm -r firefly-iii-old

# Get latest version of firefly
latestversion=$(curl -s https://api.github.com/repos/firefly-iii/firefly-iii/releases/latest  | grep -oP '"tag_name": "\K(.*)(?=")')

# Install latest version
yes | composer create-project grumpydictator/firefly-iii --no-dev --prefer-dist firefly-iii-updated $latestversion
cp firefly-iii/.env firefly-iii-updated/.env
cp firefly-iii/storage/upload/* firefly-iii-updated/storage/upload/
cp firefly-iii/storage/export/* firefly-iii-updated/storage/export/
cd firefly-iii-updated
rm -rf bootstrap/cache/*
php artisan cache:clear
php artisan migrate --seed
php artisan firefly-iii:upgrade-database
php artisan passport:install
php artisan cache:clear

# Serve next version, make sure rights are ok, restart nginx
cd ..
mv firefly-iii firefly-iii-old
mv firefly-iii-updated firefly-iii
sleep 10
cd firefly-iii
php artisan cache:clear
sleep 10
cd ..
chown -R http: firefly-iii
sleep 10
chmod -R 775 firefly-iii/storage
sleep 10
systemctl restart nginx.service
</code>

<code>
chmod u+x update_firefly.sh
./update_firefly.sh
</code>


===== Data importer =====

Dieser Datenimporteur ist ein Universalimporteur, d.h. er kann aus allen erdenklichen Quellen importieren. Und wenn er das nicht kann, dann schreiben Sie mir eine Nachricht und lassen Sie mich Ihre Lieblingsdatenquelle hinzufügen.

Der Datenimport unterstützt eine Vielzahl von Quellen:

  * Sie können **CSV-Dateien** aus jeder beliebigen Quelle importieren: Ihrer Bank, YNAB, Tiller oder jeder anderen Quelle für Finanzdaten.
  * Sie können direkt von Ihrer Bank über eine sichere Verbindung importieren.

Da es für einen armen Open-Source-Entwickler wie mich sehr schwierig ist, maßgeschneiderte sichere Verbindungen zu jeder einzelnen Bank aufzubauen, habe ich die Hilfe von zwei Unternehmen in Anspruch genommen, die dieses Rätsel bereits gelöst haben. Sie können nicht genug Anerkennung bekommen:

  * Salt Edge ist eine Fintech-Lösung, deren Spectre-API über 5000 Banken unterstützt.
  * Nordigen ist eine Fintech-Lösung, deren API über 2100 Banken unterstützt.

Wenn diese Institute Ihr Finanzinstitut nicht unterstützen, können Sie sicher sein, dass Sie trotzdem CSV-Dateien importieren können. Andere Formate sind noch in Planung. Das sollte Ihre Bedürfnisse abdecken.


==== Installation ====

Siehe [[https://version.firefly-iii.org/|neueste Versions]] Nummer und ändere den Befehl wie folgt:

<code>
cd /srv/http
composer create-project firefly-iii/data-importer --no-dev --prefer-dist firefly-iii-data-importer 0.9.17
chown -R http: firefly-iii-data-importer/
chmod -R 775 firefly-iii-data-importer/storage
</code>


=== Erstelle einen access token ===

Gehe zu deinem https://firefly.home/profile und erstelle ein neuen Access Token und nenne es `Importer` oder wie immer du willst.


==== Konfiguriere .env ====

Siehe auch dazu [[/de/server/services/redis|redis]].

Hier werden nur die wichtigsten aufgeführt. Änder den Rest nach deinen Bedürfnissen: 

<code>
nano .env
</code>

<code>
FIREFLY_III_URL=https://firefly.home
FIREFLY_III_ACCESS_TOKE=yourTOKEN
TRUSTED_PROXIES=**
REDIS_SCHEME=unix
REDIS_PATH=/run/redis/redis.sock
# Leave it empty
REDIS_HOST=
REDIS_PORT=
REDIS_PASSWORD=yourPASSWORD
REDIS_DB="0"
REDIS_CACHE_DB="1"
APP_URL=https://firefly-import.home
</code>


==== Upgrade ====

Erstelle das Update-Skript in ''/srv/http'':

<code>
nano update_firefly-importer.sh
</code>

<code>
#!/bin/bash

# Modify next line to where your firefly-iii instance is installed to.
cd /srv/http 

# Remove old version of firefly-iii
rm -r firefly-iii-data-importer-old

# Get latest version of firefly
latestversion=$(curl -s https://api.github.com/repos/firefly-iii/data-importer/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')

# Install latest version
yes | composer create-project firefly-iii/data-importer --no-dev --prefer-dist firefly-iii-data-importer-updated $latestversion
cp firefly-iii-data-importer/.env firefly-iii-data-importer-updated/.env
cp firefly-iii-data-importer/storage/configurations/*.json firefly-iii-data-importer-updated/storage/configurations/

# Serve next version, make sure rights are ok, restart nginx
mv firefly-iii-data-importer firefly-iii-data-importer-old
mv firefly-iii-data-importer-updated firefly-iii-data-importer
sleep 10
chown -R http: firefly-iii-data-importer/
sleep 10
chmod -R 775 firefly-iii-data-importer/storage
sleep 10
systemctl restart nginx.service
</code>

<code>
chmod u+x update_firefly-importer.sh
./update_firefly-importer.sh
</code>


===== Nginx =====

Siehe auch [[/de/server/services/nginx]] und [[/de/server/services/ssl|ssl]].


==== Firefly ====

<code>
nano /etc/nginx/sites-available/firefly.home
</code>

<code>
server {
        listen 80;
        server_name firefly.home;

        rewrite ^ https://$host$request_uri? permanent;
}
server {

        listen 443 ssl http2;
        server_name firefly.home;

        ssl_certificate /etc/nginx/ssl/firefly.home.crt;
        ssl_certificate_key /etc/nginx/ssl/firefly.home.key;
        include conf.d/ssl-params.conf;

        root /srv/http/firefly-iii/public;
        index index.html index.htm index.php;

        location / {
                try_files $uri /index.php$is_args$args;
                autoindex on;
                sendfile off;
       }

        location ~ \.php$ {
                fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
                fastcgi_index index.php;
                fastcgi_read_timeout 240;
#               fastcgi_param SCRIPT_FILENAME /srv/http/firefly-iii/public/index.php;
                include fastcgi_params;
                fastcgi_split_path_info ^(.+.php)(/.+)$;
                fastcgi_param modHeadersAvailable true;
                fastcgi_param SCRIPT_FILENAME $request_filename;
        }

         access_log /var/log/nginx/firefly-access.log;
         error_log /var/log/nginx/firefly_error.log;

}
</code>

==== Importer ====

<code>
nano /etc/nginx/sites-available/firefly-importer.home
</code>

<code>
server {
        listen 80;
        server_name firefly-importer.home;

        rewrite ^ https://$host$request_uri? permanent;
}
server {
        listen 443 ssl http2;
        server_name firefly-importer.home;

        ssl_certificate /etc/nginx/ssl/firefly-importer.home.crt;
        ssl_certificate_key /etc/nginx/ssl/firefly-importer.home.key;
        include conf.d/ssl-params.conf;

        root /srv/http/firefly-iii-data-importer/public;
        index index.html index.htm index.php;

        location / {
                try_files $uri /index.php$is_args$args;
                autoindex on;
                sendfile off;
       }

        location ~ \.php$ {
                fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
                fastcgi_index index.php;
                fastcgi_read_timeout 240;
#                fastcgi_param SCRIPT_FILENAME /srv/http/firefly-iii-data-importer/public/index.php;
                include fastcgi_params;
                fastcgi_split_path_info ^(.+.php)(/.+)$;
                fastcgi_param modHeadersAvailable true;
                fastcgi_param SCRIPT_FILENAME $request_filename;

                client_max_body_size 64M;
                fastcgi_buffer_size 128k;
                fastcgi_buffers 4 256k;
                fastcgi_busy_buffers_size 256k;
        }

        access_log /var/log/nginx/firefly-importer-access.log;
        error_log /var/log/nginx/firefly-importer_error.log;
        
}
</code>


===== Conjob =====

<code>
# Firefly III
0 3 * * * /usr/bin/php /srv/http/firefly-iii/artisan firefly-iii:cron
</code>