Firefly III: домашняя бухгалтерия

Автор: | 30/12/2017
 

В прошлом я делал две попытки создать свою домашнюю бухгалтерию, первый вариант был консольный, на bash + MySQL, второй – более “продвинутый” – на Django. Вторым вариантом я пользовался очень долго, вплоть до начала 2017 года.

После этого пробовал сервисы типа https://homemoney.ua и http://www.drebedengi.ru (не реклама) – но все они как-то не пришлись по душе.

Вчера узнал о Firefly III – ещё одном варианте домашней бухгалтерии (“financial manager for your personal finances“), в которой во-первых понравилось, что она self-hosted, а во вторых – сравнительная простота запуска, ну и документация у проекта отличная.

Есть демо-версия – https://demo.firefly-iii.org/login.

Документация – тут>>>.

Написана на PHP, в качестве бекенда – MySQL.

Ниже описан процесс запуска и первоначальной минимальной настройки Firefly III на Debian из docker-образа, с базой на отдельном сервере MySQL, с NGINX и SSL от Let’s Encrypt.

MySQL

Логинимся на сервер БД и создаём базу для сервиса:

[simterm]

MariaDB [(none)]> create database firefly_iii_dev;
Query OK, 1 row affected (0.01 sec)

[/simterm]

Добавляем пользователя и права на эту базу:

[simterm]

MariaDB [(none)]> grant all on firefly_iii_dev.* to 'firefly_iii_dev'@'%' identified by 'password';
Query OK, 0 rows affected (0.00 sec)

[/simterm]

NGINX

Добавляем каталог:

[simterm]

# mkdir /var/www/vhosts/dev.money.domain.org.ua

[/simterm]

Создаём конфиг виртуалхоста /etc/nginx/conf.d/dev.money.domain.org.ua.conf:

upstream firefly_iii_dev {
    server 127.0.0.1:9091;
}

server {

    listen 80;
    server_name     dev.money.domain.org.ua;
    root /var/www/vhosts/dev.money.domain.org.ua;
    access_log /var/log/nginx/vhosts/dev.money.domain.org.ua-access.log main;
    error_log /var/log/nginx/vhosts/dev.money.domain.org.ua-error.log;

    location ~ /.well-known {
        allow all;
    }

    location / {

        allow 188.***.***7.114;

        auth_basic_user_file /var/www/vhosts/.htpasswd;
        auth_basic "Password-protected Area";

        fastcgi_pass firefly_iii_dev;
    }
}

Проверяем, перезагружаем файлы настроек:

[simterm]

# nginx -t && service nginx reload
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

[/simterm]

SSL и Let’s Encrypt

Предполагается, что Let’s Encrypt уже установлен, получаем сертификат:

[simterm]

# /opt/letsencrypt/letsencrypt-auto certonly -a webroot --webroot-path=/var/www/vhosts/dev.money.domain.org.ua/ -d dev.money.domain.org.ua

[/simterm]

Возвращаемся к файлу /etc/nginx/conf.d/money.domain.org.ua.conf, добавляем редирект с 80 на 443, SSL и приводим его к виду:

upstream firefly_iii_dev {
    server 127.0.0.1:9091;
}

server {

    listen 80;
    server_name dev.money.domain.org.ua;
    return 301 https://dev.money.domain.org.ua$request_uri;
}

server {

    listen 443 ssl;
    server_name dev.money.domain.org.ua;
    root /var/www/vhosts/dev.money.domain.org.ua;

    access_log /var/log/nginx/vhosts/dev.money.domain.org.ua-access.log main;
    error_log /var/log/nginx/vhosts/dev.money.domain.org.ua-error.log;

    ssl_certificate /etc/letsencrypt/live/dev.money.domain.org.ua/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/dev.money.domain.org.ua/privkey.pem;

    location ~ /.well-known {
        allow all;
    }

    location / {

        allow 188.***.***.114;

        auth_basic_user_file /var/www/vhosts/.htpasswd;
        auth_basic "Password-protected Area";

        add_header X-Forwarded-Proto "https";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://firefly_iii_dev;
    }
}

Проверяем, перезагружаем файлы настроек:

[simterm]

# nginx -t && service nginx reload
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

[/simterm]

Запуск Firefly III

Документация по запуску из Docker – тут>>>.

Запускать будем из образа, со своего Compose файла, создаём каталог:

[simterm]

# mkdir /opt/firefly-iii/
# cd /opt/firefly-iii

[/simterm]

Генерируем ключ длиной 32 символа:

[simterm]

$ pwgen 32
Naes7oheisahga8ahp0aeshoof3OuFei Kohmahjaik2ied9EphooB1ezeebeewuo
iejohchaeQu2aeb8she5oamuLo1zeu0e hu1she4bae6Dei9Shahgieghebohquai
...

[/simterm]

Создаём docker-compose.yml:

version: '3.2'

services:

    firefly_iii_app_dev:
        image: jc5x/firefly-iii
        environment:
          - FF_DB_HOST=172.***.***.60
          - FF_DB_NAME=firefly_iii_dev
          - FF_DB_USER=firefly_iii_dev
          - FF_DB_PASSWORD=password
          - FF_APP_KEY=Naes7oheisahga8ahp0aeshoof3OuFei
          - FF_APP_ENV=local
          - APP_URL=https://dev.money.domain.org.ua
          - TRUSTED_PROXIES=**
        ports:
          - "9091:80"
        volumes:
          - type: volume
            source: firefly_iii__dev_export
            target: /var/www/firefly-iii/storage/export
          - type: volume
            source: firefly_iii_dev_upload
            target: /var/www/firefly-iii/storage/upload
volumes: 
  firefly_iii_dev_export: 
  firefly_iii_dev_upload:

Запускаем его:

[simterm]

# docker-compose up
Creating network "fireflyiii_default" with the default driver
Creating volume "fireflyiii_firefly_iii_dev_export" with default driver
Creating volume "fireflyiii_firefly_iii_dev_upload" with default driver
Pulling firefly_iii_app_dev (jc5x/firefly-iii:latest)...
latest: Pulling from jc5x/firefly-iii
f49cf87b52c1: Pull complete
185616061386: Pull complete
...

[/simterm]

Проверяем контейнер:

[simterm]

# docker-compose ps
              Name                       Command          State          Ports
--------------------------------------------------------------------------------------
fireflyiii_firefly_iii_app_dev_1   docker/entrypoint.sh   Up      0.0.0.0:9091->80/tcp

[/simterm]

Проверяем в браузере:

Be right back” – всё ОК, переходим к инициализации, выполняем:

[simterm]

# docker exec fireflyiii_firefly_iii_app_dev_1 php artisan migrate --seed
Migration table created successfully.
Migrating: 2016_06_16_000000_create_support_tables
...
Seeding: LinkTypeSeeder

[/simterm]

Обновляем базу:

[simterm]

# docker exec fireflyiii_firefly_iii_app_dev_1 php artisan firefly:upgrade-database
Updating currency information..
Done updating currency information..
Firefly III database is up to date.

[/simterm]

Проверяем её:

[simterm]

# docker exec fireflyiii_firefly_iii_app_dev_1 php artisan firefly:verify
No orphaned transactions!
No orphaned journals!
All link types OK!
All access tokens OK!
Amount integrity OK!

[/simterm]

Проверяем таблицы:

[simterm]

MariaDB [firefly_iii_dev]> show tables;
+------------------------------+
| Tables_in_firefly_iii_dev    |
+------------------------------+
| account_meta                 |
...
| transactions                 |
| users                        |
+------------------------------+
45 rows in set (0.00 sec)

[/simterm]

И проверяем в браузере ещё раз:

Кликаем на “Register a new account“, регистрируемся и логинимся:

 

Добавление валюты

Что бы добавить валюту, например украинскую гривну – переходим в Currencies, кликаем Create new currency:

В целом – на этом всё.

Перевод на русский – в процессе, присоединиться можно тут>>>.