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

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

Комментарии (11)


  1. bonnzer
    23.02.2022 10:29
    +1

    Спасибо за наводку, отличное решение для домашенго NAS. В свое время искал нечто похожее, но firefly почему-то не нашел. Нашел homebank, которым пользуюсь около года.


  1. nik_vr
    23.02.2022 12:37
    +2

    Уже года 3 пользуюсь Firefly и даже поучаствовал в его переводе на русский язык. Единственный минус для меня - сложности с обновлением на виртуальном хостинге. Я пока извращённый способ применяю - держу базу SQLite, и обновляю локальную копию (на локальном севере есть composer).


  1. Aleho
    23.02.2022 12:40

    Есть возможность ознакомится без установки:
    https://demo.firefly-iii.org/login


  1. cdriper
    23.02.2022 13:39

    давно ищу решение под следующий набор требований:
    - бесплатное/open source
    - удобный клиент для ПК и Android
    - чтобы синкалось через Dropbox или Google Drive

    может кто сталкивался?


    1. Lexsus333 Автор
      23.02.2022 14:03

      Под 2 последних пункта отлично подходит Alzex Finance. Домашняя версия платная - 990 руб.(единоразово). С синхронизацией глюк возникал если пытаться одновременно что-то править на ПК и на телефоне, то есть она не мгновенная, а чуть с задержкой происходит.


  1. buldezir
    23.02.2022 16:57

    вау, какой прекрасный мануал.

    да, в 2022 году ставить все это отдельно напрямую в os.

    или одной командой применив пример из их же документации https://raw.githubusercontent.com/firefly-iii/docker/main/docker-compose.yml

    но тогда статья получилась бы в 3 раза короче и внезапно перестала бы быть технической, а как же еще плюсики собрать.

    спасибо хотя бы за наводку на софт.


    1. Lexsus333 Автор
      23.02.2022 17:40
      +1

      Статью писал не ради плюсов, хоть они конечно приятны. Не зря же существует несколько способов установки приложения. Кому-то удобно так, кому-то иначе. С Docker раньше не работал и разбираться было лень, даже если это на ваш взгляд и легко (признаюсь, сперва попробовал этот способ установки, но что-то у меня не заработало :-( ). Есть NAS, большая часть возможностей которого не используется, есть знания по установке приложений именно в ОС, а нормального мануала на русском языке, да и упоминаний этого приложения в русском сегменте сети, я не нашел. Решил написать свою вторую статью на Хабре =).


      1. buldezir
        23.02.2022 17:49
        -1

        с таким подходом можно тогда в статью запихать инструкцию по сборке компа и установке ОС.

        то что вы лично не дружите с докером (который по факту уже стандарт), не делает эту инструкцию полезной. просто потому что это очередная стопицотая инструкция по установке LAMP, в том числе тут же на хабре. тем более у firefly нет ничего специфичного. вся его установка сводится в конфигу .env и трем командам artisan.

        я полностью поддерживаю часть статьи "смотрите какая прога и как ей эффективно менеджить финансы + истории из личной практики" ,
        но вот часть с инструкцией - наоборот.


    1. abagnale
      24.02.2022 23:28
      +1

      Действительно, как хорошо, что без Докера. Есть ещё в 2022 нормальные люди.


  1. Colorbit
    23.02.2022 22:34

    Значительным преимуществом некоторых платных менеджеров финансов (например ДзенМани) является возможность коннектиться к ЛК большинства банков и автоматический грабить транзакции, а не заносить их руками. Возможно ли реализовать подобный функционал в Firefly III?


    1. Lexsus333 Автор
      23.02.2022 23:12
      +2

      Может быть и зря, но я как-то не доверяю подобным функциям. Как и чтению приложениями смс от банков (встречался такой метод). Но возможность есть с помощью дополнения, которое устанавливается отдельно. Судя по беглому просмотру функционала, работает к примеру со сбером. Импорт возможен как непосредственно из банка по безопасному соединению, так и из csv файла. В подробности я не вдавался, можно почитать на странице импортера, правда только на английском.