Хостване на Firefly III на Managed VPS: финансите ви на ваш сървър

Хостването на Firefly III на Managed VPS означава вашите сметки, бюджети и разходи да живеят на ваша собствена машина, която нашите екипи поддържат актуална и наблюдават денем и нощем. Firefly III е свободен софтуер с отворен код за управление на лични финанси, с лиценз AGPL. Това ръководство следва официалната му документация: инсталиране с Docker Compose, APP_KEY, HTTPS, първият акаунт, cron задачата, базата данни, импортирането на данни, имейлите, резервните копия и обновленията.

Simon Vasconcelos Lee Автор: Публикувано на 10 ноември 2026 г.Време за четене: 13 минути

Всички ръководства

Накратко

  1. Лицензът AGPL-3.0-or-later позволява свободно да пускате Firefly III; ако го промените, предлагате изходния код на своята версия на тези, които я използват.
  2. Инсталирайте го от трите официални файла: docker-compose.yml, .env и .db.env. Изберете паролата на базата данни преди първото стартиране.
  3. APP_KEY е дълъг точно 32 знака, остава таен и се архивира заедно с данните.
  4. Зад обратен прокси с HTTPS задайте TRUSTED_PROXIES=* и адреса си в APP_URL, после веднага създайте акаунта си: първият регистриран потребител става собственик, а регистрациите се затварят след това.
  5. Услугата cron от официалния файл пуска всяка нощ автоматичните бюджети и повтарящите се транзакции. Архивирайте базата, тома с прикачените файлове и .env преди всяко обновяване.

Какво прави Firefly III

Firefly III е програма за управление на лични финанси, създадена за самостоятелно хостване. Тя следи разходите и приходите ви, с бюджети, категории и етикети, за да виждате къде отиват парите ви. README го описва като изцяло самостоятелно хостван и изолиран: той не се свързва с никакъв външен сървър, докато изрично не му кажете.

Една инстанция приема колкото потребители пожелаете, всеки със своя финансова администрация, напълно отделена от останалите. Документацията описва модел за споделяне на една администрация, който в момента е в разработка.

Какво позволява лицензът AGPL

Firefly III е публикуван с GNU Affero General Public License, версия 3 или, по ваш избор, всяка по-късна версия: това е идентификаторът SPDX AGPL-3.0-or-later във файла му composer.json. Текстът потвърждава неограничено разрешение да пускате непроменената програма. Можете следователно да използвате образа, публикуван от проекта, за себе си, семейството или фирмата си, без да купувате лиценз.

Член 13 добавя условие, присъщо на AGPL: ако променяте програмата, вашата версия трябва да предложи на всеки, който я използва от разстояние, през мрежата, начин да получи безплатно нейния изходен код. Data Importer е със същия лиценз.

Инсталиране с Docker Compose

Документацията нарича Docker Compose най-лесния начин да инсталирате Firefly III. На сървър с инсталиран Docker създайте папка и изтеглете в нея трите официални файла в суров вид: отстъпите в тях имат значение, а документацията моли да не ги копирате от браузъра.

Терминал
mkdir firefly-iii && cd firefly-iii
curl -o docker-compose.yml https://raw.githubusercontent.com/firefly-iii/docker/main/docker-compose.yml
curl -o .env https://raw.githubusercontent.com/firefly-iii/firefly-iii/main/.env.example
curl -o .db.env https://raw.githubusercontent.com/firefly-iii/docker/main/database.env

Настройките, които се сменят преди първото стартиране

Генерирайте два низа от по 32 знака с командата, дадена във файла .env: един за ключа и един за паролата на базата.

Терминал
head /dev/urandom | LC_ALL=C tr -dc 'A-Za-z0-9' | head -c 32 && echo
.env, редовете за промяна
SITE_OWNER=you@example.com
APP_KEY=
DB_PASSWORD=
APP_URL=https://finances.example.com
.db.env
MYSQL_PASSWORD=

Изберете паролата на базата данни преди първото стартиране. Базата я записва в своя том още при създаването си: сменете ли я след това, тя вече не съвпада, а Docker FAQ предлага само един изход, да изтриете контейнерите и томовете и да започнете отначало.

Порт, публикуван локално

Официалният файл публикува приложението на порт 80 на всички адреси на сървъра. За да го предоставите през HTTPS зад обратен прокси на същата машина, сменете само този ред в услугата app:

docker-compose.yml, в услугата app
ports:
  - 127.0.0.1:8080:8080
Терминал
docker compose -f docker-compose.yml up -d --pull=always
docker compose -f docker-compose.yml logs -f

При първото стартиране контейнерът сам създава и мигрира базата данни. Когато инсталирането приключи, Firefly III ви благодари в журнала, че сте го инсталирали: преминете към обратния прокси.

Документацията не дава число за паметта; нейният Docker FAQ предлага PHP_MEMORY_LIMIT=512M или повече, ако на PHP не му стига памет. Размерът зависи от броя на потребителите, от обема на транзакциите и от импортирането на данни. На Managed VPS ни опишете как го използвате и ще ви препоръчаме подходящия размер.

HTTPS и обратният прокси

Firefly III предоставя приложението през HTTP на порт 8080 в контейнера, а HTTPS се поема от обратния прокси пред него. Приложението чете заглавката X-Forwarded-Proto, за да знае, че посетителят е дошъл през HTTPS, стига да има доверие на проксито:

.env
TRUSTED_PROXIES=*

Docker FAQ е категоричен по този въпрос: без TRUSTED_PROXIES=* връзките остават на http, формулярите и графиките спират да работят, а защитните заглавки CSP не минават. С порт, публикуван на 127.0.0.1, само проксито на самия сървър достига до приложението. Създавайте контейнера наново след всяка промяна във файла .env:

Терминал
docker compose up -d --force-recreate app

С Caddy

Caddy сам получава сертификата Let’s Encrypt, а директивата му reverse_proxy поставя по подразбиране заглавките X-Forwarded-For, X-Forwarded-Proto и X-Forwarded-Host:

Caddyfile
finances.example.com {
  reverse_proxy 127.0.0.1:8080
}

С Nginx и Certbot

Този блок следва заглавките от FAQ за инсталирането и буферите, които той предлага срещу грешките 502, когато приложението връща токен в дълга заглавка. Той слуша на порт 80, за да остави на Certbot да постави HTTPS:

Блок на Nginx
server {
    listen 80;
    listen [::]:80;
    server_name finances.example.com;

    client_max_body_size 64M;
    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 300s;
    }
}

След това Certbot поставя сертификата и се грижи да го подновява:

Терминал
sudo certbot --nginx

Първият акаунт и регистрациите

Първият регистриран потребител става собственик на инстанцията. От съображения за сигурност регистрациите след това се затварят сами: повечето хора инсталират Firefly III само за себе си.

  1. Отворете своя HTTPS адрес веднага щом проксито отговори и създайте акаунта си: той получава ролята на собственик.
  2. Включете двуфакторното удостоверяване в профила си и запазете осемте резервни кода, които то показва.
  3. За да отворите инстанцията за други хора, отидете в /settings, отворете опциите за конфигуриране на Firefly III, махнете отметката от опцията, която изключва регистрациите, и запишете.

Cron задачата

Няколко функции работят само с планирана задача: автоматичните бюджети, повтарящите се транзакции, предупрежденията за абонаменти и актуалните валутни курсове. Docker образът не пуска cron сам; официалният файл добавя за целта малка услуга cron, която извиква приложението всеки ден в 3 часа сутринта.

Тя се удостоверява със статичен токен. Генерирайте трети низ със същата команда и го поставете в .env:

.env
STATIC_CRON_TOKEN=

Този токен е дълъг точно 32 знака: кодът на версия 6.7.9 не приема друга дължина. Ето услугата така, както я декларира официалният файл; двойното $$ е нарочно и сочи към редовете TZ и STATIC_CRON_TOKEN на файла .env:

docker-compose.yml, услугата cron
cron:
  image: alpine
  restart: always
  container_name: firefly_iii_cron
  env_file: .env
  init: true
  command: ["sh", "-c", "apk add tzdata && \
    (ln -s /usr/share/zoneinfo/$$TZ /etc/localtime || true) && \
    echo \"0 3 * * * wget -qO- http://app:8080/api/v1/cron/$$STATIC_CRON_TOKEN;echo\" \
    | crontab - && \
    exec crond -f -L /dev/stdout"]
  networks:
    - firefly_iii
  depends_on:
    - app

Една задача стига за всички потребители на инстанцията. За да проверите, че се е изпълнила, прочетете журнала на контейнера: всяка задача докладва в JSON, с job_fired и job_succeeded.

Терминал
docker logs firefly_iii_cron

За да я пуснете ръчно, Docker FAQ моли да минете през потребителя www-data, а не през root: FAQ свързва този капан с грешки в правата върху журналните файлове:

Терминал
docker exec --user www-data firefly_iii_core /usr/local/bin/php /var/www/html/artisan firefly-iii:cron --force

MariaDB, PostgreSQL или SQLite

Официалният файл доставя MariaDB, с образа mariadb:lts. Firefly III поддържа също PostgreSQL и SQLite, които се избират с DB_CONNECTION в .env:

БазаНастройванеРезервно копие
MariaDB или MySQLУслугата db от официалния файл; DB_CONNECTION=mysql, порт 3306Експорт с mariadb-dump или томът на базата, при спряна услуга
PostgreSQLDB_CONNECTION=pgsql, порт 5432, образът postgres и променливите POSTGRES_* в .db.envЕкспорт с pg_dump или томът на базата, при спряна услуга
SQLiteDB_CONNECTION=sqlite, без услуга db, и том, монтиран на /var/www/html/storage/databaseТомът на базата, при спряна услуга
.env (PostgreSQL)
DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432

За PostgreSQL документацията насочва и услугата db към образа postgres, който инсталира PostgreSQL 18, и монтира тома ѝ на /var/lib/postgresql. В .db.env променливите MYSQL_* стават POSTGRES_USER, POSTGRES_DB и POSTGRES_PASSWORD.

Направете този избор, преди да въведете първите си транзакции. FAQ посочва, че преминаването от една база към друга остава възможно, без да се поддържа от самия Firefly III, и че експортът на приложението не пренася всички данни.

Data Importer

Firefly III Data Importer е отделен инструмент, със собствено инсталиране и собствени обновления; версията му 2.3.5 излезе на 23 септември 2026 г. Той импортира файлове CSV и CAMT.053 и може също да изтегля транзакциите от банките ви чрез доставчици на данни от трети страни, всеки със свои условия.

Официалното Docker хранилище го доставя във втори файл, docker-compose-importer.yml, който запазва същите услуги и добавя importer. Настройките му отиват във файл .importer.env, взет от .env.example на импортера. Предоставяйте го на собствено име на домейн, с порт, публикуван локално, и втори блок в проксито: FAQ моли да не го поставяте в поддиректория.

.importer.env, редовете за промяна
FIREFLY_III_URL=http://app:8080
VANITY_URL=https://finances.example.com
TRUSTED_PROXIES=*

Имейлите: SMTP конфигурацията

По подразбиране MAIL_MAILER=log записва съобщенията в журналите, вместо да ги изпраща. За да получавате известията, като предупрежденията за абонаменти, настройте изпращането в .env. Документацията моли винаги да сменяте MAIL_FROM и SITE_OWNER, иначе нито един имейл няма да излезе.

На VPS на Simafri изпращането минава през удостоверено SMTP реле, на порт 587: адресът на пощенски акаунт, който вече имате, или Simafri Suite.

.env
MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_FROM=finances@example.com
MAIL_USERNAME=finances@example.com
MAIL_PASSWORD=account_password
MAIL_ENCRYPTION=tls

Резервните копия

Firefly III няма вградена процедура за архивиране: документацията препоръчва инструментите на самата система и посочва, че функцията за експорт на приложението не е резервно копие. С Docker ето какво трябва да пазите:

ЕлементКакво пазиЗа архивиране
Базата данни (firefly_iii_db)Сметки, транзакции, бюджети, правила и потребителиЗадължително
Прикачените файлове (firefly_iii_upload)Файловете, прикачени към транзакциитеЗадължително
.envНастройките и преди всичко APP_KEYЗадължително, шифровано
.db.envДанните за достъп до базатаЗадължително, шифровано
docker-compose.yml и .importer.envВашата версия на официалните файловеПрепоръчително

Базата, при работеща услуга

С MariaDB mariadb-dump експортира базата, без да спира услугата; опцията му --single-transaction дава съгласувано копие на таблиците InnoDB, без да ги заключва. Изпълнена от папката на файла Compose, командата чете данните за достъп от средата на контейнера:

Терминал
docker exec firefly_iii_db sh -c 'mariadb-dump --single-transaction -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' > firefly-$(date +%F).sql

С PostgreSQL същата идея минава през pg_dump:

Терминал
docker exec firefly_iii_db sh -c 'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' > firefly-$(date +%F).sql

Планирайте този експорт на сървъра поне веднъж дневно и подреждайте файловете, които се трупат.

Томовете, при спряна услуга

Документацията архивира всеки том с временен контейнер. Docker Compose добавя пред имената на томовете името на проекта, което по подразбиране е името на папката: проверете точните имена, преди да пуснете архивирането.

Терминал, в папката firefly-iii
docker volume ls
docker compose stop
docker run --rm -v "firefly-iii_firefly_iii_db:/tmp" -v "$HOME/backups/firefly:/backup" \
    ubuntu tar -czvf /backup/firefly_db.tar /tmp
docker run --rm -v "firefly-iii_firefly_iii_upload:/tmp" -v "$HOME/backups/firefly:/backup" \
    ubuntu tar -czvf /backup/firefly_upload.tar /tmp
docker compose start

Грешно изписано име на том не предизвиква никаква грешка: Docker създава празен том с това име и го архивира, което презаписва предишното резервно копие. Документацията моли да проверявате, че томът съществува, преди всяко архивиране.

Пазете копие на .env и на тези архиви извън сървъра, шифровано, защото то носи ключа и данните за достъп до базата. Поставени на диска на сървъра, тези файлове влизат и в нощните му резервни копия.

Възстановяване

Документацията възстановява том с обратната команда, при спряна услуга; томът с прикачените файлове се възстановява по същия начин:

Терминал
docker run --rm -v "firefly-iii_firefly_iii_db:/recover" -v "$HOME/backups/firefly:/backup" \
    ubuntu tar -xvf /backup/firefly_db.tar -C /recover --strip 1

SQL експорт се зарежда обратно в работещата база:

Терминал
docker exec -i firefly_iii_db sh -c 'mariadb -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' < firefly-YYYY-MM-DD.sql

Възстановете и .env с неговия APP_KEY, после стартирайте отново и отворете сметките си. Документацията го повтаря след всеки метод: първото, което се прави с резервно копие, е да се възстанови, за да се провери, че работи.

Обновленията и миграциите

Firefly III се обновява сам, дори от версии толкова стари като 4.7, и мигрира базата си при стартирането на контейнера. Документацията предупреждава, че някои обновления премахват или почистват данни, и иска резервно копие на базата и на томовете преди всяко от тях, особено при смяна на основна версия. От папката на файла Compose:

Терминал
docker compose stop
docker compose pull
docker compose -f docker-compose.yml up -d --remove-orphans

Импортерът се обновява по същия начин, с docker compose rm -f между спирането и изтеглянето на образите, според документацията му.

Кой какво прави на Managed VPS

Самостоятелното хостване изисква да поддържате сървъра освен приложението. На Managed VPS нашите екипи поемат сървъра и следят проактивно вашата инстанция; Firefly III остава ваш софтуер, с неговите настройки и вашите финансови данни.

ТемаНашите екипиВие
СървърътОбновления на системата и на сигурността, включително намеси на сървъраМоментът, който пасва на вашата дейност
НаблюдениетоСървър, следен денонощно, 7 дни в седмицата, с намеса, без да се чака обаждането виЧетенето на журналите на вашата инстанция
Firefly IIIПроактивно проследяване: грешки, забавяния, cron задачата и дисковото пространство се следят, препоръчва се корекцияИнсталирането, обновяванията и настройките му, които прилагате вие или вашият AI асистент
Акаунтите и даннитеСървърът, който ги носи, наблюдаван и архивиранПотребителите, двуфакторното удостоверяване, импортирането на данни и доставчиците на данни
Резервните копияВсяка нощ, криптирани и пазени извън машината; възстановяването е включеноЕкспортите, специфични за Firefly III, и заявката за възстановяване, когато ви потрябва
МиграциятаСегашният ви сървър е мигриран, безплатноМоментът на превключването

Ако предпочитате нашите екипи да се намесват в самото приложение, тази услуга се фактурира на час или на фиксирана цена, с оферта, съобщена преди намесата.

Firefly III, на сървър, поддържан вместо вас

С Managed VPS от Simafri нашите екипи поддържат актуален сървъра на вашата инстанция на Firefly III, наблюдават го денем и нощем и се намесват, без да чакат обаждането ви; те следят проактивно и вашата инстанция и ви препоръчват полезните корекции, които прилагате вие или вашият AI асистент. Резервните копия се криптират всяка нощ и се пазят извън машината, възстановяването им е включено, а миграцията от сегашния ви сървър е безплатна.

Разгледайте Managed VPS

Често задавани въпроси

Безплатен ли е Firefly III?

Да. Firefly III е с лиценз AGPL-3.0-or-later: можете да го пускате за себе си, семейството или фирмата си, без да купувате лиценз. Ако го промените, вашата версия трябва да предложи изходния си код на тези, които я използват през мрежата. Остава цената на сървъра, на който работи.

Как се инсталира Firefly III с Docker Compose?

Изтеглете трите официални файла, docker-compose.yml, .env и .db.env. Задайте APP_KEY от 32 знака и една и съща парола в DB_PASSWORD и MYSQL_PASSWORD, преди първото стартиране, после изпълнете docker compose up -d. След това поставете пред него обратен прокси с HTTPS.

За какво служи APP_KEY във Firefly III?

APP_KEY е ключът за шифроване на сесиите. Той е дълъг точно 32 знака, без специални знаци като = или #, и остава таен. Документацията моли да го архивирате заедно с томовете: той е част от необходимото за възстановяване на инстанция.

Защо връзките на Firefly III остават на http зад прокси?

Docker FAQ посочва, че във файла .env липсва TRUSTED_PROXIES=*: без него Firefly III пренебрегва заглавката X-Forwarded-Proto на проксито, връзките остават на http, а формулярите и графиките спират да работят. Въведете и публичния си адрес в APP_URL.

Как се настройва cron задачата на Firefly III с Docker?

Официалният файл Compose включва услуга cron, която извиква приложението всеки ден в 3 часа сутринта. Задайте в .env STATIC_CRON_TOKEN от точно 32 знака, после стартирайте стека отново. Една задача обслужва всички потребители на инстанцията.

Как се отваря Firefly III за няколко потребители?

Първият регистриран потребител става собственик, а регистрациите се затварят след това. Собственикът ги отваря отново в /settings, в опциите за конфигуриране на Firefly III. Всеки потребител пази после финансова администрация, отделена от останалите.

Как се архивира Firefly III?

Архивирайте базата данни, с експорт чрез mariadb-dump или pg_dump, тома с прикачените файлове и файловете .env и .db.env, шифровани. Функцията за експорт на приложението не е резервно копие. Тествайте възстановяването веднага след първото архивиране.

Покрива ли Managed VPS Firefly III?

Managed VPS покрива сървъра: система, сигурност, наблюдение и резервни копия. Нашите екипи следят проактивно и вашата инстанция и ви препоръчват полезните корекции, които прилагате вие. Намеса в самото приложение се фактурира на час или на фиксирана цена.

Източници и официална документация

Свързани ръководства

Резервни копия на VPS: какво да проверите, преди да подпишетеПочти всяко предложение за VPS обявява „включени резервни копия“. Зад тези думи може да стои копие всяка нощ, пазено извън машината и възстановявано от експерти, или моментна снимка, поставена на същия диск като сървъра. Това ръководство дава въпросите, които правят разликата, какво означава всеки отговор и как да проверите, че едно резервно копие наистина се възстановява.Разлика между управляван и неуправляван VPS: кой какво правиРазликата между управляван и неуправляван VPS се свежда до един въпрос: кой се грижи за сървъра, след като той вече работи. Думата „управляван“ обаче няма официално определение и от един хостинг доставчик до друг обхваща всичко от простото инсталиране на системата до цялостното стопанисване на сървъра. Това ръководство показва кой какво прави, ред по ред, заедно с междинното ниво на експертното съдействие, и дава въпросите, които премахват двусмислието, преди да подпишете.PostgreSQL на VPS: как да оразмерите паметта и дискаБързата PostgreSQL база е база, чиито често четени данни се побират в паметта. Цялото оразмеряване започва оттук: обемът на базата, делът, който наистина работи, броят на връзките, след това дискът и неговият резерв. Това ръководство дава метода, началните настройки за 4, 8 и 16 GB памет и заявките, които измерват съществуваща база.
Свържете се с нас