В прошлом я делал две попытки создать свою домашнюю бухгалтерию, первый вариант был консольный, на 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:
В целом – на этом всё.
Перевод на русский – в процессе, присоединиться можно тут>>>.