Для оптимизации личных финансов часто рекомендуют записывать и анализировать свои, по крайней мере основные, расходы и доходы, планировать бюджет. Для этого создано множество приложений на различных платформах. Многие из них, как правило, платные или требуют платной подписки для разблокировки продвинутых функций - CoinKeeper, Дребеденьги, Дзен-Мани, Alzex Finance и др., с другой стороны домашние финансы можно вести в Google таблицах или в Excel, но последние два варианта не особо удобно.
Какие-то из перечисленных приложений работают только на смартфоне, какие-то имеют версию, для ПК или web-версию. Многие поддерживают большое количество счетов и категорий расходов/доходов, имеют функцию планирования бюджета. Какие-то из них поддерживают работу с несколькими пользователями. За большинство продвинутых функций надо платить - либо единоразово, либо периодически.
Некоторые из перечисленных приложений я использовал. Так приложением Дребеденьги для android и его web-версией пользовался несколько лет. Устраивало все, кроме того, что за пользование доп. функциями, в том числе за работу синхронизации и количество записей, надо оплачивать ежегодную подписку. Кроме того, база данных хранится непонятно где, хоть пользы от этих данных стороннему лицу немного, но все таки. Пользовался приложением Alzex Finance - тоже весьма удобное приложение, имеется версия для ПК. Одна из интересных функций мобильной версии - импорт данных JSON из приложения налоговой “Проверка чеков”, чтение смс от банков. Периодически в приложении возникали ошибки при синхронизации через Google Drive.
В поисках лучшего приложения наткнулся на Firefly III - персональный менеджер финансов с открытым исходным кодом, с поддержкой русского языка, лишенный рекламы, подписок и какого-либо отслеживания, доступный для установки на своем сервере (отдельных приложений для смартфона или ПК нет). В качестве сервера может выступать слабый облачный сервер, виртуальная машина, Raspberry Pi - все то, на чем можно установить стек LAMP или его аналоги. Полностью рабочей инструкции по установке на русском языке я не встречал, поэтому решил написать свою. Итак начнем.
В качестве сервера выступает виртуальная машина на домашнем NAS. Конфигурация ее минимальна - 1 процессор, 1 ГБ оперативной памяти, жесткий диск выделен с запасом - 30 ГБ. Работать скорее всего будет и на серверах с более слабой конфигурацией. На сервер установлен Ubuntu Server 20.04 без каких-либо предустановленных приложений. Установка и настройка Firefly III производится через терминал. В данной инструкции я опишу установку веб-сервера на базе nginx, mariaDB, php и первоначальную настройку Firefly III.
Для начала следует обновить пакеты на сервере и установить git, nginx (можно использовать и Apache при желании), curl:
sudo apt update && sudo apt upgrade
sudo apt install git nginx curl -y
Для корректной работы Firefly III рекомендуется установить php-fpm не ниже 8 версии и ряд модулей:
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install -y php8.0 php8.0-{cli,zip,gd,fpm,common,mysql,zip,mbstring,curl,xml,bcmath,imap,ldap,intl}
После установки php проверим успешна ли она:
sudo systemctl status php8.0-fpm
Ответ должен быть похож на это:
php8.0-fpm.service - The PHP 8.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php8.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-02-22 13:08:53 UTC; 6h ago
Docs: man:php-fpm8.0(8)
Process: 20421 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock />
Main PID: 20415 (php-fpm8.0)
Status: "Processes active: 0, idle: 3, Requests: 728, slow: 0, Traffic: 0req/sec"
Tasks: 4 (limit: 1062)
Memory: 79.0M
CGroup: /system.slice/php8.0-fpm.service
├─20415 php-fpm: master process (/etc/php/8.0/fpm/php-fpm.conf)
├─20624 php-fpm: pool www
├─20626 php-fpm: pool www
└─20631 php-fpm: pool www
Немного скорректируем базовые настройки php увеличив лимит памяти и указал часовой пояс, для этого отредактируем файл конфигурации:
sudo nano /etc/php/8.0/fpm/php.ini
Необходимо найти строку "memory_limit = 128M" и увеличить значение до 512М, и изменить переменную date.timezone в соответствии с вашим расположением (уточнить корректное написание зоны можно в google, для Москвы - Europe/Moscow). Для поиска строки используйте комбинацию ctrl + w, для сохранения изменений ctrl + o, для выхода из редактора ctrl + x.
Следующий шаг - добавим конфигурацию nginx:
sudo nano /etc/nginx/sites-enabled/firefly.conf
В открывшемся пустом окне вставим следующий код заменив server_name на имя вашего сервера при необходимости:
server {
listen 8080 default_server;
listen [::]:8080 default_server;
server_name example.com;
root /var/www/html/firefly-iii/public;
index index.html index.htm index.php;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
fastcgi_index index.php;
fastcgi_read_timeout 240;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_split_path_info ^(.+.php)(/.+)$;
}
}
Следующий шаг установка сервера базы данных MariaDB. Для установки более свежей версии в Ubuntu 20.04 добавим репозиторий:
sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
sudo add-apt-repository 'deb [arch=amd64] http://mariadb.mirror.globo.tech/repo/10.5/ubuntu focal main'
Выполним обновление и установим MariaDB:
sudo apt update
sudo apt install mariadb-server mariadb-client
sudo mysql_secure_installation
После третей команды установщик задаст ряд вопросов - необходимо будет сменить пароль root (первоначально при запросе пароля следует нажать Enter, так как пароль не задан), новый пароль обязательно запоминаем. На вопросы об удалении анонимных пользователей и тестовых баз, запрета удаленного доступа и др. отвечаем утвердительно.
После завершения установки и настройки сервера баз данных необходимо создать пользователя базы данных и базу данных для Firefly III. Запускаем клиент командой:
sudo mysql -u root -p
При запросе пароля вводим ранее установленный пароль. И выполняем следующие команды:
CREATE DATABASE firefly_database;
CREATE USER 'fireflyuser'@'localhost' IDENTIFIED BY 'StrongPassword';
GRANT ALL PRIVILEGES ON firefly_database. * TO 'fireflyuser'@'localhost';
FLUSH PRIVILEGES;
exit;
В первой строке создаем базу данных firefly_database (можно задать свое имя БД, имя пользователя и пароль), вторая строка - создаем пользователя БД и прописываем в кавычках пароль для него, в третей строке предоставляем пользователю доступ к ранее созданной БД, затем обновляем права и выходим. Обратите внимание, что каждая строчка заканчивается ;. После каждой команды сервер сообщает о ее успешном исполнении.
Для дальнейшей установки Firefly III устанавливаем PHP Composer:
cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
Для теста установки проверяем версию PHP Composer
composer -V
Переходим в основную директорию веб-сервера и запускаем установку Firefly III. Firefly III постоянно обновляется, текущая версия 5.6.14, актуальную можно узнать тут . Во второй команде требуется изменить номер версии на актуальный:
cd /var/www/html/
sudo composer create-project grumpydictator/firefly-iii --no-dev --prefer-dist firefly-iii 5.6.14
В процессе установки могут появляться ряд вопросов, отвечаем утвердительно. После установки необходимо отредактировать файл конфигурации Firefly III, указав информацию о созданной ранее базе данных:
sudo nano /var/www/html/firefly-iii/.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=firefly_database
DB_USERNAME=fireflyuser
DB_PASSWORD=StrongPassword
После редактирования сохраняем и закрываем файл ctrl + o, ctrl + x:
Перезапускаем веб-сервер и php:
sudo systemctl restart nginx php8.0-fpm
Инициализируем базу данных Firefly III, на слабой конфигурации сервера это может занять некоторое время:
cd /var/www/html/firefly-iii
sudo php artisan migrate:refresh --seed
sudo php artisan firefly-iii:upgrade-database
sudo php artisan passport:install
В завершении предоставляем права на папку Firefly III веб-серверу
sudo chown -R www-data:www-data firefly-iii
sudo chmod -R 775 firefly-iii/storage
Для доступа к Firefly III в адресной строке браузера набираем IP адрес сервера с портом указанным при конфигурации nginx (с учетом инструкций выше это будет выглядеть примерно так: 192.168.0.22:8080). Откроется страничка регистрации нового пользователя, после регистрации она будет автоматически отключена. Указываем email и пароль.
При первоначальной настройке выбирается язык интерфейса, и базовая валюта. В дальнейшем ее можно изменить. Если при установке Ububntu русский язык не был выбран, то могут не корректно отображаться различные языковые стандарты о чем Firefly III будет предупреждать. Для устранения ошибки необходимо установить русскую локализацию и выбрать ее по умолчанию:
sudo dpkg-reconfigure locales
В появившемся списке выбираем ru_RU.UTF-8, а на следующем шаге устанавливаем ее по умолчанию. Для применения изменений перезагружаем ngnix и php.
При желании для доступа не только из локальной сети в дальнейшем можно настроить https и получить сертификат и спрятать сервер за reverse-proxy (в последнем случае доверенный прокси надо будет указать в файле настроек Firefly III).
Кроме непосредственной установки на сервер можно использовать образ Docker, но в официальном образе присутствует только Firefly III, отдельно придется настраивать образ веб-сервера и сервера БД и связь между ними. Так же есть скрипт автоматической установки, но он давно не обновлялся в моем случае он работал не корректно. Информацию о проекте и возможностей сервиса можно посмотреть на сайте проекта https://docs.firefly-iii.org/.
Немного о Firefly III. Структура работы с менеджером финансов может быть не совсем привычна тем, кто пользовался другими приложениями учета. К примеру необходимо создать счета доходов и расходов. Создадим счет доходов "Работодатель" и основной счет. При создании транзакции дохода (к примеру получение зарплаты) указывает необходимые счета и сумму. В итоге видим, что на основном счете указанная сумма прибавилась, а на счету "Работодатель" эта же сумма с отрицательным знаком. При создании транзакции можно добавлять различную информацию - категорию затрат, теги, добавить заметку, прикрепить файл или конвертировать в другую валюту, а так же разделить транзакцию на составные части. Firefly III по введенным тратам может строить графики и составлять различные отчеты.
На этом все. Надеюсь инструкция по настройке будет кому-то полезной.