Менеджер личных финансов Firefly III

Для оптимизации личных финансов часто рекомендуют записывать и анализировать свои, по крайней мере основные, расходы и доходы, планировать бюджет. Для этого создано множество приложений на различных платформах. Многие из них, как правило, платные или требуют платной подписки для разблокировки продвинутых функций — 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 по введенным тратам может строить графики и составлять различные отчеты.

Основное окно Firefly III
Основное окно Firefly III

На этом все. Надеюсь инструкция по настройке будет кому-то полезной.

Читайте так же:

  • Google Ads тестирует показ фавиконов в текстовых объявленияхGoogle Ads тестирует показ фавиконов в текстовых объявлениях Google тестирует показ фавиконов в текстовых объявлениях в поисковой выдаче. Фавикон отображается в объявлении рядом с адресом сайта. Эксперимент заметил интернет-маркетолог Дарси Берк и поделился скриншотом в Twitter: Фавикон на первый взгляд напоминает эмодзи, но на самом деле это […]
  • Google находит ежедневно 40 млрд спамных страницGoogle находит ежедневно 40 млрд спамных страниц Google представил отчет по веб-спаму за 2020 год. Согласно данным. Компания ежедневно обнаруживала 40 млрд спамных страниц. Что на 60% больше. Чем в 2019 году. В эти 40 млрд входят взломанные сайты. А также сайты. Созданные для обмана. Спама и мошенничества.  Google сообщает. Что […]
  • Huawei показала сразу два новых видео, посвящённых камере Huawei P50Huawei показала сразу два новых видео, посвящённых камере Huawei P50 Компания Huawei опубликовала два новых трейлера, которые посвящены камере нового флагманского смартфона Huawei P50. Первый ролик нахваливает возможность смартфона передавать естественные цвета. А второй намекает на расширенные возможности съёмки при использовании разных модулей. […]
  • Новосибирские ученые представили материал, который определяет болезни легких по выдохуНовосибирские ученые представили материал, который определяет болезни легких по выдоху Ученые Института неорганической химии имени Николаева в Новосибирске сообщили, что им удалось разработать материал для сенсоров, определяющих монооксид азота в выдыхаемом воздухе. Это позволит определять наличие заболеваний легких при выдохе.Как пояснила научный сотрудник ИНХ Светлана […]