Как стать автором
Обновить

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

Время на прочтение7 мин
Количество просмотров11K

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

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

Теги:
Хабы:
Всего голосов 12: ↑12 и ↓0+12
Комментарии17

Публикации