Новые релизы
Сравнение версии рецепта с последним известным релизом upstream. Это номер версии, а не разбор изменений.
Firefly III учитывает доходы, расходы, переводы и вложения, распределяет траты по категориям и бюджетам, отслеживает подписки и цели накопления. Рецепт запускает веб-приложение с PostgreSQL и ежедневной задачей cron; банковские подключения и отдельный Data Importer не входят в установку.
Firefly III — учёт личных финансов для тех, кто хочет хранить остатки по счетам, доходы, расходы, переводы, бюджеты, подписки и цели накопления на своём сервере. К операции можно прикрепить чек, разнести траты по категориям и проследить движение денег. Приложение заменяет учётную часть Quicken или Monarch Money, но не воспроизводит их готовые банковские подключения.
В отличие от Actual Budget, где основной сценарий — распределение доступных денег по конвертам, Firefly III строится вокруг счетов и операций, а бюджеты и правила дополняют этот журнал. Он удобен для подробной истории расходов и нескольких счетов. Для планирования каждой доступной денежной единицы лучше подходит инструмент с конвертами.
Рецепт запускает Firefly III 6.7.9, PostgreSQL 18.6 и cron в Alpine 3.22.2. Ежедневные задачи выполняются в 03:00 UTC, включая повторяющиеся операции и автоматические бюджеты. Отдельный Data Importer и внешние банковские сервисы не установлены. SMTP тоже не настроен: письма попадают в защищённый журнал приложения.
Основной клиент — браузер. Android и iOS поддерживают сторонние проекты, включая Waterfly III и Abacus из официального списка интеграций; настольного клиента в установке нет, мобильные приложения не проверялись. Интерфейс доступен на русском и английском. Приложение и логотип распространяются по AGPL-3.0-or-later, файлы установки — по MIT; уведомление о логотипе находится в assets/NOTICE.
Доступны локальный вход по email и паролю и встроенный TOTP. Второй фактор включается в профиле; коды восстановления нужно сохранить отдельно. Встроенных OIDC и SAML нет. Upstream поддерживает дополнительный remote-user guard, однако рецепт сохраняет вход по паролю: сам guard не проверяет подлинность переданной личности.
Стандартный однопользовательский режим закрывает публичную регистрацию после создания владельца. До этого первым владельцем может стать любой посетитель. Завершите регистрацию через loopback или SSH-туннель до открытия прокси и доступа из локальной сети.
Финансовые записи находятся в PostgreSQL; вложения и ключи подписи OAuth хранятся в постоянных томах. Рецепт сохраняет весь каталог Laravel storage и отдельный том загрузок, чтобы пересоздание контейнера или восстановление архива не лишало API-токены их ключей подписи. Защищайте все три тома и .env. Архив включает незашифрованные финансовые записи и ключи чтения зашифрованных вложений.
Smoke-тест на amd64 проверяет регистрацию, вход, персональный API-токен, счёт, расход, категорию и тег, настоящее вложение, endpoint cron и восстановление после удаления всех томов. arm64, ночное расписание, TOTP, почта, банки и мобильные клиенты не проверялись. В снимке безопасности сохранены восемь CRITICAL-находок в пакетах закреплённых образов. Функциональная проверка не является сертификатом безопасности.
Домашний и VPS-уровни поддерживаются после безопасного создания владельца. Надёжный уровень частичен: PostgreSQL и healthcheck есть, но лимиты ресурсов, внешний мониторинг и расписание резервирования настраивает оператор. Минимальный ориентир — 1 CPU, 1 ГиБ RAM и 5 ГиБ диска; 2 ГиБ RAM оставляют больше места для PHP и PostgreSQL. Большим вложениям и истории понадобится больше диска.
Официальные источники: установка Docker, резервирование, аутентификация, cron и изменения 6.7.9.
Это сохранённые результаты отдельных проверок, а не данные в реальном времени. Неизвестный статус означает, что проверка ещё не выполнялась.
Сравнение версии рецепта с последним известным релизом upstream. Это номер версии, а не разбор изменений.
Результат отдельного сканирования Docker-образов, а не проверки Compose.
Новый major находится сравнением номеров версий. Вердикт о совместимости заносится вручную после чтения release notes и порядка миграции.
Изменения upstream Compose относительно проверенного рецепта.
Проверка закреплённых тегов образов на наличие новых версий.
От наблюдения к действию
Рецепт уже закрепляет последний известный релиз. Ниже показаны сохранённые основания для этой версии.
6.7.96.7.9Открыть релиз на GitHub ↗ Ссылка нужна для ревизии и сама по себе не доказывает совместимость.
Номера версий не пересекают major-границу совместимости. Вердикт о совместимости не записан.
Смена тегов образов сейчас не планируется.
Смена тега и перезапуск. Шаги конкретного релиза всё равно берутся из release notes и инструкции по установке.
Смена версии сейчас не планируется. Рецепт содержит процедуру backup. Restore проверен.
Точная проверка уровня «Проверен полностью» для этой версии записана 2026-10-29.
Статус показывает, насколько опубликованный рецепт покрывает требования каждого уровня.
Минимальная конфигурация для локальной сети или доступа через VPN.
Рецепт закрывает все требования этого уровня.
Публичная установка с защищённым доступом и резервными копиями.
Рецепт закрывает все требования этого уровня.
Конфигурация для предсказуемой эксплуатации и наблюдаемости.
Нужно добавить вручную: внешний мониторинг, лимиты cpu и памяти.
Собрать под свой сервер
Ответьте на пять вопросов и скачайте готовый комплект Firefly III.
Сначала прочитайте полную инструкцию: в ней описаны доступ извне, backup и расположение данных.
cp .env.example .envdocker compose up -ddocker compose psПодойдут Ubuntu 24.04/26.04 LTS или Debian 12/13 с Docker Engine и Docker Compose от v2.24; установите их по инструкции Docker. Команды выполняются из каталога рецепта. Установите openssl; Python 3 и curl нужны только для smoke-теста. Доступ к Docker даёт административный контроль над хостом.
cp .env.example .env
chmod 600 .env
openssl rand -hex 16 # FIREFLY_APP_KEY: ровно 32 символа
openssl rand -hex 16 # FIREFLY_CRON_TOKEN: ровно 32 символа
openssl rand -hex 24 # FIREFLY_DB_PASSWORD
Вставьте три разных результата в .env, задайте FIREFLY_SITE_OWNER и оставьте привязку к loopback до первой регистрации. Entrypoint отклоняет шаблонный ключ, шаблонный пароль БД и неверную длину ключа или токена до запуска HTTP. Пароль администратора создаётся в браузере, а не в .env.
docker compose --env-file .env config --quiet
docker compose --env-file .env pull
docker compose --env-file .env up -d --wait --wait-timeout 600
docker compose ps
Создайте владельца до публикации через прокси. Для удалённого сервера откройте туннель со своего компьютера:
ssh -L 8088:127.0.0.1:8088 user@server
Откройте http://localhost:8088, зарегистрируйтесь с уникальным паролем от 16 символов и завершите настройку счетов и валюты. Стандартный однопользовательский режим закрывает регистрацию после первого аккаунта. Включите TOTP в профиле и сохраните коды восстановления отдельно. Затем открывайте публичный HTTPS. Не публикуйте порты PostgreSQL и cron; настройте firewall, обновления и зашифрованные внешние копии.
Для первого входа используйте тот же туннель. После регистрации замените 127.0.0.1 в пробросе веб-порта на частный адрес сервера, задайте FIREFLY_URL=http://<частный-адрес>:8088 и пересоздайте сервисы. Разрешайте доступ только доверенным клиентам или через VPN. Частный адрес без HTTPS всё равно передаёт сессии входа и финансовую информацию открытым текстом.
Направьте money.example.com на сервер и задайте FIREFLY_URL=https://money.example.com. Укажите в FIREFLY_TRUSTED_PROXIES точный адрес или CIDR прокси, видимый приложению, затем выполните docker compose up -d --wait --wait-timeout 600. Не используйте **, если не контролируете весь прямой доступ. Сохраняйте AUTHENTICATION_GUARD=web: заголовки протокола от прокси не включают единый вход.
proxy/Caddyfile направляет HTTPS-домен на loopback-порт. Для proxy/nginx.conf укажите пути сертификатов; перед перезагрузкой выполните nginx -t. proxy/traefik.yaml — динамическая конфигурация file provider для уже установленного Traefik с указанным certificate resolver. Примеры предполагают прокси на Docker-хосте. Контейнерному прокси нужна контролируемая общая сеть или доступный адрес хоста: его 127.0.0.1 указывает на него самого.
Compose создаёт тома проекта database, storage и uploads. PostgreSQL 18 хранит данные в /var/lib/postgresql; Laravel storage — в /var/www/html/storage; отдельный том загрузок перекрывает /var/www/html/storage/upload. В storage находятся ключи подписи OAuth. .env содержит ключ шифрования вложений и сессий; потеря FIREFLY_APP_KEY может сделать зашифрованные данные нечитаемыми.
| Переменная | Назначение |
|---|---|
FIREFLY_VERSION |
Версия приложения 6.7.9; тег образа — version-6.7.9. |
FIREFLY_PORT |
HTTP-порт loopback, 8088. |
FIREFLY_URL |
Внешний URL со схемой и нестандартным портом, если нужен. |
FIREFLY_APP_KEY |
Секрет ровно из 32 символов; сохраняйте для восстановления. |
FIREFLY_DB_PASSWORD |
Уникальный пароль PostgreSQL. Задайте до первого запуска; правка только .env не меняет пароль роли в существующей БД. |
FIREFLY_CRON_TOKEN |
Отдельный 32-символьный секрет для плановых HTTP-задач. |
FIREFLY_SITE_OWNER |
Email оператора в некоторых сообщениях об ошибках; укажите подходящий контакт. |
FIREFLY_LANGUAGE |
Начальный язык en_US или ru_RU; пользователь может изменить его. |
FIREFLY_TRUSTED_PROXIES |
Доверенный IP/CIDR прокси; по умолчанию пусто. |
TZ |
Часовой пояс приложения, стандартно UTC. Сервис cron всегда запускает задачи в 03:00 UTC. |
Скрипты также принимают необязательные FOSSARY_ENV_FILE, COMPOSE_PROJECT_NAME и FIREFLY_BACKUP_DIR. По умолчанию это .env, проект firefly-iii и backups/. Если запускали docker compose -p с другим именем, экспортируйте тот же COMPOSE_PROJECT_NAME для каждого резервирования и восстановления. Ежедневный cron обслуживает повторяющиеся операции и автоматические бюджеты; импорт из банка и расписание резервирования настраиваются отдельно. SMTP не настроен; почтовые ссылки попадают в журналы, которые нужно защищать.
bash backup.sh
Скрипт останавливает cron и приложение, делает логический дамп PostgreSQL и два архива хранилищ, добавляет .env и Compose, затем запускает только ранее работавшие сервисы. Архивы имеют режим 600 и уникальные имена. Зашифруйте копию на другой машине и регулярно проверяйте восстановление. Экспорт операций не является полной резервной копией.
Используйте только доверенные архивы. Сохраните старый .env, особенно FIREFLY_APP_KEY, и совпадающие версии приложения и базы. На новом сервере запустите только БД и создайте контейнеры приложения без запуска:
docker compose up -d --wait database
docker compose create --no-deps firefly cron
Затем восстановите архив:
bash restore.sh /absolute/path/firefly-iii-<timestamp>.tar
Скрипт проверяет состав архива, создаёт страховочную копию, останавливает запись, пересоздаёт базу приложения, заменяет оба тома хранилища и ждёт healthcheck. Архивный .env автоматически не активируется. Проверьте остатки по счетам, операции, вложения и API-токены до открытия доступа. При сбое сервисы записи остаются остановленными; изучите журналы и устраните причину до запуска. Для другой машины нужны архивные секреты и исправленный внешний URL.
Прочитайте release notes и инструкцию обновления. Сохраните .env, Compose и проверенный архив. Остановите cron и приложение, измените только FIREFLY_VERSION на изученную закреплённую версию, загрузите и запустите её:
bash backup.sh
docker compose stop cron firefly
# Измените FIREFLY_VERSION в .env; сохраняйте мажорную версию БД.
docker compose pull firefly
docker compose up -d --wait --wait-timeout 600
docker compose logs --tail=100 firefly
Миграции базы выполняются при запуске автоматически. Проверьте остатки, скачивание чеков, плановые задачи и API. Для мажорного обновления PostgreSQL нужен отдельный план экспорта и импорта; не подключайте существующий каталог к другой мажорной версии.
cron и firefly..env, сохраняя правильный ключ шифрования и ту же мажорную версию БД. Укажите прежний FIREFLY_VERSION.docker compose up -d --wait database, затем docker compose create --no-deps firefly cron. Оставьте приложение остановленным, чтобы старый код не мигрировал текущую базу.bash restore.sh /path/to/pre-upgrade.tar. Страховочная копия сохранит текущее состояние, затем прежние база и хранилища заменят его.docker compose down сохраняет тома. Для полного удаления после проверки внешней копии выполните docker compose down --volumes --remove-orphans. Команда уничтожает финансовые записи, вложения и ключи OAuth. .env и локальные архивы удаляйте отдельно, когда они больше не нужны.
Перед изменением модели безопасности изучите официальные руководства по резервированию и по аутентификации.
Сообщить о проблеме с рецептом
Рассказать, как прошло на вашем сервере
Откроется предзаполненный issue на GitHub. Нужен аккаунт GitHub; после отправки сообщение будет публичным.
Начните с docker compose ps --all, docker compose logs --tail=200 firefly database cron, docker compose --env-file .env config --quiet и curl -i http://127.0.0.1:8088/health. Не публикуйте разрешённую конфигурацию, токены, финансовые записи и ссылки сброса пароля в issue.
FIREFLY_APP_KEY и FIREFLY_CRON_TOKEN должны быть разными 32-символьными значениями; замените шаблонный пароль БД. Не меняйте существующий ключ шифрования ради устранения ошибки запуска..env не меняет пароль в инициализированном томе PostgreSQL. Верните исходный секрет или осознанно измените пароль роли базы; не удаляйте тома с финансовыми данными.FIREFLY_URL с адресом браузера, передавайте исходные host/protocol и доверяйте только адресу прокси. После правки env пересоздайте сервис. Проверьте, что прокси не направляет запросы на свой loopback.docker compose exec cron crontab -l. Задача запускается в 03:00 UTC независимо от TZ. Для ручной проверки выполните docker compose exec firefly php artisan firefly-iii:cron; ежедневная задача может сообщить, что уже выполнялась. Считайте статический HTTP-токен и журналы доступа секретными.FIREFLY_APP_KEY, дамп PostgreSQL, ключи storage и uploads вместе. Одной базы недостаточно. До новой попытки сохраните копию текущих томов.Источники: Docker FAQ, резервирование, cron и upstream issues.
Fossary — независимый информационный каталог, не связанный с разработчиками представленных приложений. Мы собираем сведения из открытых источников и проверяем опубликованные рецепты, но не разрабатываем, не распространяем и не контролируем эти приложения.
Публикация карточки или статус проверки не являются требованием, навязыванием либо персональной рекомендацией использовать приложение. Вы самостоятельно решаете, подходит ли оно вам, и используете его на свой риск. Мы не гарантируем безопасность, доступность или пригодность приложения и, в пределах, допускаемых законом, не отвечаем за вызванные им потери или ущерб. До установки проверьте лицензию, настройки безопасности, обработку данных и резервное копирование.