Hosting Firefly III na Managed VPS: Państwa finanse na Państwa serwerze

Hosting Firefly III na Managed VPS oznacza, że Państwa konta, budżety i wydatki trafiają na maszynę, która należy do Państwa, a nasze zespoły dbają o jej aktualność i nadzorują ją dniem i nocą. Firefly III to wolny i otwarty menedżer finansów osobistych na licencji AGPL. Ten poradnik podąża za jego oficjalną dokumentacją: instalacja przez Docker Compose, APP_KEY, HTTPS, pierwsze konto, zadanie cron, baza danych, importer danych, e-maile, kopie zapasowe i aktualizacje.

Simon Vasconcelos Lee Autor: Opublikowano 10 listopada 2026Czas czytania: 13 minut

Wszystkie poradniki

W skrócie

  1. Licencja AGPL-3.0-or-later pozwala swobodnie uruchamiać Firefly III; jeśli go Państwo zmodyfikują, kod swojej wersji udostępniają Państwo tym, którzy z niej korzystają.
  2. Proszę zainstalować go z trzech oficjalnych plików: docker-compose.yml, .env i .db.env. Hasło do bazy proszę wybrać przed pierwszym uruchomieniem.
  3. APP_KEY ma dokładnie 32 znaki, pozostaje tajny i trafia do kopii zapasowej razem z danymi.
  4. Za odwrotnym proxy z HTTPS proszę ustawić TRUSTED_PROXIES=* i swój adres w APP_URL, a następnie od razu utworzyć swoje konto: pierwszy zarejestrowany użytkownik zostaje właścicielem, a potem rejestracja się zamyka.
  5. Usługa cron z oficjalnego pliku co noc uruchamia automatyczne budżety i transakcje cykliczne. Przed każdą aktualizacją proszę wykonać kopię bazy, woluminu z załącznikami i pliku .env.

Co robi Firefly III

Firefly III to menedżer finansów osobistych przeznaczony do samodzielnego hostingu. Śledzi wydatki i przychody, z budżetami, kategoriami i tagami, aby było widać, dokąd idą Państwa pieniądze. README opisuje go jako w pełni samodzielnie hostowany i odizolowany: nie kontaktuje się z żadnym zewnętrznym serwerem, dopóki wyraźnie mu Państwo tego nie polecą.

Jedna instancja obsługuje dowolną liczbę użytkowników, a każdy z nich prowadzi administrację finansową całkowicie oddzieloną od pozostałych. Dokumentacja zapowiada model współdzielenia jednej administracji, który jest obecnie w przygotowaniu.

Na co pozwala licencja AGPL

Firefly III jest udostępniany na GNU Affero General Public License, w wersji 3 lub, według Państwa wyboru, dowolnej późniejszej: tak brzmi identyfikator SPDX AGPL-3.0-or-later w jego pliku composer.json. Tekst potwierdza nieograniczone prawo do uruchamiania niezmodyfikowanego programu. Mogą więc Państwo używać obrazu opublikowanego przez projekt dla siebie, rodziny lub firmy, bez zakupu licencji.

Artykuł 13 dodaje warunek właściwy dla AGPL: jeśli Państwo zmodyfikują program, Państwa wersja musi oferować każdemu, kto korzysta z niej zdalnie, przez sieć, możliwość bezpłatnego uzyskania jej kodu źródłowego. Importer danych jest udostępniany na tej samej licencji.

Instalacja przez Docker Compose

Dokumentacja nazywa Docker Compose najprostszym sposobem instalacji Firefly III. Na serwerze z zainstalowanym Dockerem proszę utworzyć katalog i pobrać do niego trzy oficjalne pliki w surowej postaci: liczą się w nich odstępy, a dokumentacja prosi, by nie kopiować ich z przeglądarki.

Terminal
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

Ustawienia do zmiany przed pierwszym uruchomieniem

Proszę wygenerować dwa ciągi po 32 znaki poleceniem podanym w pliku .env: jeden na klucz, drugi na hasło do bazy.

Terminal
head /dev/urandom | LC_ALL=C tr -dc 'A-Za-z0-9' | head -c 32 && echo
.env, wiersze do zmiany
SITE_OWNER=you@example.com
APP_KEY=
DB_PASSWORD=
APP_URL=https://finances.example.com
.db.env
MYSQL_PASSWORD=

Hasło do bazy proszę wybrać przed pierwszym uruchomieniem. Baza zapisuje je w swoim woluminie od chwili utworzenia: zmienione później przestaje się zgadzać, a FAQ Dockera podaje tylko jedno wyjście, czyli usunięcie kontenerów i woluminów i rozpoczęcie od nowa.

Port opublikowany lokalnie

Oficjalny plik publikuje aplikację na porcie 80 wszystkich adresów serwera. Aby udostępnić ją przez HTTPS za odwrotnym proxy na tej samej maszynie, proszę zmienić ten jeden wiersz w usłudze app:

docker-compose.yml, w usłudze app
ports:
  - 127.0.0.1:8080:8080
Terminal
docker compose -f docker-compose.yml up -d --pull=always
docker compose -f docker-compose.yml logs -f

Przy pierwszym uruchomieniu kontener sam tworzy bazę i wykonuje jej migracje. Gdy instalacja dobiegnie końca, Firefly III dziękuje w dzienniku za jej wykonanie: wtedy proszę przejść do odwrotnego proxy.

Dokumentacja nie podaje wymagań dotyczących pamięci; FAQ Dockera sugeruje PHP_MEMORY_LIMIT=512M lub więcej, jeśli PHP zabraknie pamięci. Rozmiar zależy od liczby użytkowników, liczby transakcji i importera danych. Na Managed VPS wystarczy opisać nam swoje zastosowanie, a polecimy odpowiedni rozmiar.

HTTPS i odwrotne proxy

Firefly III udostępnia aplikację przez HTTP na porcie 8080 wewnątrz kontenera, a HTTPS zapewnia odwrotne proxy umieszczone przed nim. Aplikacja odczytuje nagłówek X-Forwarded-Proto, aby wiedzieć, że odwiedzający przyszedł przez HTTPS, pod warunkiem że ufa proxy:

.env
TRUSTED_PROXIES=*

FAQ Dockera jest w tej kwestii jednoznaczne: bez TRUSTED_PROXIES=* linki pozostają w http, formularze i wykresy przestają działać, a nagłówki bezpieczeństwa CSP zawodzą. Przy porcie opublikowanym na 127.0.0.1 do aplikacji dociera wyłącznie proxy samego serwera. Po każdej zmianie pliku .env proszę utworzyć kontener na nowo:

Terminal
docker compose up -d --force-recreate app

Z Caddy

Caddy sam uzyskuje certyfikat Let’s Encrypt, a jego dyrektywa reverse_proxy domyślnie ustawia nagłówki X-Forwarded-For, X-Forwarded-Proto i X-Forwarded-Host:

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

Z Nginx i Certbotem

Ten blok stosuje nagłówki z FAQ instalacji oraz bufory, które FAQ proponuje przeciw błędom 502, gdy aplikacja zwraca token w długim nagłówku. Nasłuchuje na porcie 80, aby Certbot mógł zainstalować HTTPS:

Blok 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 następnie instaluje certyfikat i zajmuje się jego odnawianiem:

Terminal
sudo certbot --nginx

Pierwsze konto i rejestracja

Pierwszy użytkownik, który się zarejestruje, zostaje właścicielem instancji. Ze względów bezpieczeństwa rejestracja zamyka się wtedy sama: większość osób instaluje Firefly III wyłącznie dla siebie.

  1. Proszę otworzyć swój adres HTTPS, gdy tylko proxy odpowiada, i utworzyć konto: otrzymuje ono rolę właściciela.
  2. Proszę włączyć uwierzytelnianie dwuskładnikowe w swoim profilu i zachować osiem wyświetlonych kodów zapasowych.
  3. Aby otworzyć instancję dla innych osób, proszę przejść do /settings, otworzyć opcje konfiguracji Firefly III, odznaczyć opcję wyłączającą rejestrację i zapisać.

Zadanie cron

Kilka funkcji działa tylko z zadaniem cyklicznym: automatyczne budżety, transakcje cykliczne, ostrzeżenia o subskrypcjach i aktualne kursy walut. Obraz Docker sam nie uruchamia crona; oficjalny plik dodaje w tym celu niewielką usługę cron, która wywołuje aplikację codziennie o 3:00.

Uwierzytelnia się ona statycznym tokenem. Proszę wygenerować trzeci ciąg tym samym poleceniem i umieścić go w .env:

.env
STATIC_CRON_TOKEN=

Ten token ma dokładnie 32 znaki: kod wersji 6.7.9 nie przyjmuje innej długości. Oto usługa w postaci, w jakiej deklaruje ją oficjalny plik; podwójne $$ jest zamierzone i odwołuje się do wierszy TZ i STATIC_CRON_TOKEN pliku .env:

docker-compose.yml, usługa 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

Jedno zadanie wystarcza dla wszystkich użytkowników instancji. Aby sprawdzić, czy zostało wykonane, proszę przeczytać dziennik kontenera: każde zadanie zdaje w nim sprawozdanie w formacie JSON, z polami job_fired i job_succeeded.

Terminal
docker logs firefly_iii_cron

Aby uruchomić je ręcznie, FAQ Dockera prosi o użycie użytkownika www-data zamiast root: FAQ wiąże tę pułapkę z błędami uprawnień do plików dziennika:

Terminal
docker exec --user www-data firefly_iii_core /usr/local/bin/php /var/www/html/artisan firefly-iii:cron --force

MariaDB, PostgreSQL czy SQLite

Oficjalny plik dostarcza MariaDB, z obrazem mariadb:lts. Firefly III obsługuje też PostgreSQL i SQLite, wybierane przez DB_CONNECTION w .env:

BazaKonfiguracjaKopia zapasowa
MariaDB lub MySQLUsługa db z oficjalnego pliku; DB_CONNECTION=mysql, port 3306Zrzut przez mariadb-dump albo wolumin bazy przy zatrzymanej usłudze
PostgreSQLDB_CONNECTION=pgsql, port 5432, obraz postgres i zmienne POSTGRES_* w .db.envZrzut przez pg_dump albo wolumin bazy przy zatrzymanej usłudze
SQLiteDB_CONNECTION=sqlite, bez usługi db, z woluminem zamontowanym w /var/www/html/storage/databaseWolumin bazy, przy zatrzymanej usłudze
.env (PostgreSQL)
DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432

Dla PostgreSQL dokumentacja kieruje też usługę db na obraz postgres, który instaluje PostgreSQL 18, i montuje jej wolumin w /var/lib/postgresql. W .db.env zmienne MYSQL_* ustępują miejsca POSTGRES_USER, POSTGRES_DB i POSTGRES_PASSWORD.

Wyboru proszę dokonać przed wprowadzeniem pierwszych transakcji. FAQ podaje, że przejście z jednej bazy na inną pozostaje możliwe, choć sam Firefly III go nie wspiera, a eksport aplikacji nie przenosi wszystkich danych.

Importer danych

Firefly III Data Importer to osobne narzędzie, z własną instalacją i własnymi aktualizacjami; jego wersja 2.3.5 ukazała się 23 września 2026 roku. Importuje pliki CSV i CAMT.053, a także potrafi pobierać transakcje z Państwa banków przez zewnętrznych dostawców danych, z których każdy ma własne warunki.

Oficjalne repozytorium Docker dostarcza go w drugim pliku, docker-compose-importer.yml, który zachowuje te same usługi i dodaje importer. Jego ustawienia trafiają do pliku .importer.env, utworzonego na podstawie .env.example importera. Proszę udostępnić go pod własną nazwą domeny, z portem opublikowanym lokalnie i drugim blokiem proxy: FAQ prosi, by nie umieszczać go w podkatalogu.

.importer.env, wiersze do zmiany
FIREFLY_III_URL=http://app:8080
VANITY_URL=https://finances.example.com
TRUSTED_PROXIES=*

E-maile: konfiguracja SMTP

Domyślnie MAIL_MAILER=log zapisuje wiadomości w dziennikach zamiast je wysyłać. Aby otrzymywać powiadomienia, na przykład ostrzeżenia o subskrypcjach, proszę skonfigurować wysyłkę w .env. Dokumentacja prosi, by zawsze zmienić MAIL_FROM i SITE_OWNER, w przeciwnym razie żaden e-mail nigdy nie wyjdzie.

Na VPS Simafri wysyłka odbywa się przez uwierzytelniony przekaźnik SMTP, na porcie 587: adres posiadanego już konta pocztowego albo 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

Kopie zapasowe

Firefly III nie ma wbudowanej procedury kopii zapasowych: dokumentacja zaleca narzędzia samego systemu i zaznacza, że funkcja eksportu aplikacji nie jest kopią zapasową. Przy Dockerze należy zachować następujące elementy:

ElementCo przechowujeDo skopiowania
Baza danych (firefly_iii_db)Konta, transakcje, budżety, reguły i użytkownikówObowiązkowo
Załączniki (firefly_iii_upload)Pliki dołączone do transakcjiObowiązkowo
.envUstawienia, a przede wszystkim APP_KEYObowiązkowo, w postaci szyfrowanej
.db.envDane dostępowe do bazyObowiązkowo, w postaci szyfrowanej
docker-compose.yml i .importer.envPaństwa wersję oficjalnych plikówZalecane

Baza, przy działającej usłudze

Przy MariaDB mariadb-dump eksportuje bazę bez zatrzymywania usługi; jego opcja --single-transaction daje spójną kopię tabel InnoDB bez ich blokowania. Uruchomione z katalogu pliku Compose, polecenie odczytuje dane dostępowe ze środowiska kontenera:

Terminal
docker exec firefly_iii_db sh -c 'mariadb-dump --single-transaction -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' > firefly-$(date +%F).sql

Przy PostgreSQL ta sama metoda działa przez pg_dump:

Terminal
docker exec firefly_iii_db sh -c 'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' > firefly-$(date +%F).sql

Proszę zaplanować ten zrzut na serwerze co najmniej raz dziennie i porządkować pliki, które się gromadzą.

Woluminy, przy zatrzymanej usłudze

Dokumentacja archiwizuje każdy wolumin za pomocą jednorazowego kontenera. Docker Compose poprzedza nazwy woluminów nazwą projektu, którą domyślnie jest nazwa katalogu: przed uruchomieniem archiwizacji proszę sprawdzić dokładne nazwy.

Terminal, w katalogu 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

Błędnie wpisana nazwa woluminu nie wywołuje żadnego błędu: Docker tworzy pod tą nazwą pusty wolumin i go archiwizuje, co nadpisuje poprzednią kopię. Dokumentacja prosi, by przed każdą archiwizacją sprawdzić, czy wolumin istnieje.

Kopię .env i tych archiwów proszę przechowywać poza serwerem, w postaci szyfrowanej, ponieważ zawiera klucz i dane dostępowe do bazy. Umieszczone na dysku serwera, pliki te trafiają także do jego nocnych kopii zapasowych.

Przywracanie

Dokumentacja przywraca wolumin odwrotnym poleceniem, przy zatrzymanej usłudze; wolumin z załącznikami przywraca się w ten sam sposób:

Terminal
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

Zrzut SQL wczytuje się z powrotem do działającej bazy:

Terminal
docker exec -i firefly_iii_db sh -c 'mariadb -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' < firefly-YYYY-MM-DD.sql

Proszę przywrócić także .env wraz z jego APP_KEY, a następnie uruchomić ponownie i otworzyć swoje konta. Dokumentacja powtarza to po każdej metodzie: kopię zapasową należy najpierw przywrócić, aby sprawdzić, że działa.

Aktualizacje i migracje

Firefly III aktualizuje się sam, nawet z wersji tak dawnych jak 4.7, i wykonuje migracje bazy przy starcie kontenera. Dokumentacja ostrzega, że niektóre aktualizacje usuwają lub porządkują dane, i prosi o kopię bazy i woluminów przed każdą z nich, zwłaszcza między wersjami głównymi. Z katalogu pliku Compose:

Terminal
docker compose stop
docker compose pull
docker compose -f docker-compose.yml up -d --remove-orphans

Importer aktualizuje się w ten sam sposób, z docker compose rm -f między zatrzymaniem a pobraniem obrazów, zgodnie z jego dokumentacją.

Kto za co odpowiada na Managed VPS

Samodzielny hosting wymaga prowadzenia serwera, oprócz samej aplikacji. Na Managed VPS nasze zespoły przejmują serwer i proaktywnie czuwają nad Państwa instancją; Firefly III pozostaje Państwa oprogramowaniem, z jego ustawieniami i Państwa danymi finansowymi.

TematNasze zespołyPaństwo
SerwerAktualizacje systemu i zabezpieczeń, w tym interwencje na serwerzeMoment dogodny dla Państwa działalności
NadzórSerwer pod opieką całą dobę, 7 dni w tygodniu, z interwencją bez czekania na Państwa telefonCzytanie dzienników Państwa instancji
Firefly IIIProaktywna opieka: wychwytujemy błędy, spowolnienia, zatrzymanie zadania cron i brak miejsca na dysku oraz polecamy poprawkęInstalacja, aktualizacje i ustawienia, które wdrażają Państwo sami albo Państwa asystent AI
Konta i daneSerwer, który je utrzymuje, nadzorowany i objęty kopiami zapasowymiUżytkownicy, uwierzytelnianie dwuskładnikowe, importer danych i jego dostawcy danych
Kopie zapasoweCo noc, szyfrowane i przechowywane poza maszyną; przywracanie w cenieZrzuty właściwe dla Firefly III oraz zgłoszenie prośby o przywrócenie, gdy będzie potrzebne
MigracjaMigracja Państwa obecnego serwera, bezpłatnaMoment przełączenia

Jeśli wolą Państwo, aby nasze zespoły interweniowały w samej aplikacji, usługa ta jest rozliczana godzinowo lub ryczałtowo, z wyceną przekazaną przed interwencją.

Firefly III na serwerze prowadzonym za Państwa

Z Managed VPS od Simafri nasze zespoły utrzymują serwer Państwa instancji Firefly III w aktualności, nadzorują go dniem i nocą i interweniują bez czekania na Państwa telefon; proaktywnie czuwają także nad Państwa instancją i polecają przydatne poprawki, które wdrażają Państwo sami albo Państwa asystent AI. Kopie zapasowe są szyfrowane co noc i przechowywane poza maszyną, ich przywracanie jest w cenie, a migracja obecnego serwera jest bezpłatna.

Poznaj Managed VPS

Częste pytania

Czy Firefly III jest bezpłatny?

Tak. Firefly III jest udostępniany na licencji AGPL-3.0-or-later: mogą Państwo uruchomić go dla siebie, rodziny lub firmy bez zakupu licencji. Jeśli go Państwo zmodyfikują, Państwa wersja musi oferować kod źródłowy tym, którzy korzystają z niej przez sieć. Pozostaje koszt serwera, na którym działa.

Jak zainstalować Firefly III przez Docker Compose?

Proszę pobrać trzy oficjalne pliki: docker-compose.yml, .env i .db.env. Przed pierwszym uruchomieniem proszę ustawić 32-znakowy APP_KEY i to samo hasło w DB_PASSWORD i MYSQL_PASSWORD, a następnie uruchomić docker compose up -d. Potem proszę postawić przed nim odwrotne proxy z HTTPS.

Do czego służy APP_KEY w Firefly III?

APP_KEY to klucz szyfrowania sesji. Ma dokładnie 32 znaki, bez znaków specjalnych takich jak = czy #, i pozostaje tajny. Dokumentacja prosi, by kopiować go razem z woluminami: należy do tego, co jest potrzebne do przywrócenia instancji.

Dlaczego za proxy linki Firefly III pozostają w http?

FAQ Dockera wskazuje na brak TRUSTED_PROXIES=* w pliku .env: bez tego Firefly III pomija nagłówek X-Forwarded-Proto od proxy, linki pozostają w http, a formularze i wykresy przestają działać. Proszę też wpisać swój publiczny adres w APP_URL.

Jak skonfigurować zadanie cron Firefly III w Dockerze?

Oficjalny plik Compose zawiera usługę cron, która wywołuje aplikację codziennie o 3:00. Proszę ustawić w .env STATIC_CRON_TOKEN o długości dokładnie 32 znaków, a następnie ponownie uruchomić stos. Jedno zadanie obsługuje wszystkich użytkowników instancji.

Jak otworzyć Firefly III dla kilku użytkowników?

Pierwszy zarejestrowany użytkownik zostaje właścicielem, a potem rejestracja się zamyka. Właściciel otwiera ją ponownie w /settings, w opcjach konfiguracji Firefly III. Każdy użytkownik prowadzi wtedy administrację finansową oddzieloną od pozostałych.

Jak wykonać kopię zapasową Firefly III?

Proszę kopiować bazę, eksportem mariadb-dump lub pg_dump, wolumin z załącznikami oraz pliki .env i .db.env, w postaci szyfrowanej. Funkcja eksportu aplikacji nie jest kopią zapasową. Przywracanie proszę przetestować zaraz po pierwszej kopii.

Czy Managed VPS obejmuje Firefly III?

Managed VPS obejmuje serwer: system, bezpieczeństwo, nadzór i kopie zapasowe. Nasze zespoły proaktywnie czuwają też nad Państwa instancją i polecają przydatne poprawki, które wdrażają Państwo sami. Interwencja w aplikacji jest rozliczana godzinowo lub ryczałtowo.

Źródła i oficjalna dokumentacja

Skontaktuj się z nami