Găzduirea Firefly III pe un Managed VPS: finanțele pe propriul server

Găzduirea Firefly III pe un Managed VPS înseamnă să păstrați conturile, bugetele și cheltuielile dumneavoastră pe o mașină a dumneavoastră, pe care echipele noastre o țin la zi și o supraveghează zi și noapte. Firefly III este un manager de finanțe personale liber și open source, sub licență AGPL. Acest ghid urmează documentația sa oficială: instalarea cu Docker Compose, APP_KEY, HTTPS, primul cont, sarcina cron, baza de date, importatorul de date, e-mailurile, backupurile și actualizările.

Simon Vasconcelos Lee Autor: Publicat la 10 noiembrie 2026Timp de citire: 13 minute

Toate ghidurile

Esențialul

  1. Licența AGPL-3.0-or-later permite rularea liberă a Firefly III; dacă îl modificați, oferiți codul sursă al versiunii dumneavoastră celor care o folosesc.
  2. Instalați-l pornind de la cele trei fișiere oficiale: docker-compose.yml, .env și .db.env. Alegeți parola bazei de date înainte de prima pornire.
  3. APP_KEY are exact 32 de caractere, rămâne secretă și se salvează împreună cu datele.
  4. În spatele unui proxy invers în HTTPS, setați TRUSTED_PROXIES=* și adresa dumneavoastră în APP_URL, apoi creați-vă imediat contul: primul utilizator înregistrat devine proprietarul, iar înregistrările se închid după aceea.
  5. Serviciul cron din fișierul oficial rulează în fiecare noapte bugetele automate și tranzacțiile recurente. Salvați baza de date, volumul de fișiere încărcate și .env înaintea fiecărei actualizări.

Ce face Firefly III

Firefly III este un manager de finanțe personale conceput pentru găzduirea pe propriul server. El urmărește cheltuielile și veniturile dumneavoastră, cu bugete, categorii și etichete, ca să vedeți unde se duc banii. README-ul său îl descrie ca fiind complet găzduit de dumneavoastră și izolat: nu contactează niciun server extern până nu îi cereți explicit acest lucru.

O singură instanță găzduiește oricâți utilizatori doriți, fiecare cu o administrare financiară complet separată de a celorlalți. Documentația descrie un model de partajare a unei administrări comune, aflat în prezent în dezvoltare.

Ce permite licența AGPL

Firefly III este publicat sub GNU Affero General Public License, versiunea 3 sau, la alegerea dumneavoastră, orice versiune ulterioară: este identificatorul SPDX AGPL-3.0-or-later din fișierul său composer.json. Textul afirmă o permisiune nelimitată de a rula programul nemodificat. Puteți deci folosi imaginea publicată de proiect pentru dumneavoastră, familia sau firma dumneavoastră, fără nicio licență de cumpărat.

Articolul 13 adaugă o condiție specifică AGPL: dacă modificați programul, versiunea dumneavoastră trebuie să ofere tuturor celor care o folosesc de la distanță, prin rețea, posibilitatea de a obține gratuit codul sursă. Importatorul de date (Data Importer) este sub aceeași licență.

Instalarea cu Docker Compose

Documentația consideră Docker Compose cel mai simplu mod de a instala Firefly III. Pe un server unde Docker este instalat, creați un director și descărcați în el cele trei fișiere oficiale, în forma lor brută: spațierea lor contează, iar documentația cere să nu le copiați din browser.

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

Setările de modificat înainte de prima pornire

Generați două șiruri de 32 de caractere cu comanda indicată în fișierul .env: unul pentru cheie, celălalt pentru parola bazei de date.

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

Alegeți parola bazei de date înainte de prima pornire. Baza o înregistrează în volumul ei chiar de la creare: dacă o schimbați după aceea, ea nu mai corespunde, iar FAQ-ul Docker oferă o singură ieșire, ștergerea containerelor și a volumelor și reluarea de la zero.

Un port publicat local

Fișierul oficial publică aplicația pe portul 80 al tuturor adreselor serverului. Pentru a o servi în HTTPS în spatele unui proxy invers de pe aceeași mașină, modificați această singură linie din serviciul app:

docker-compose.yml, în serviciul 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

La prima pornire, containerul creează și migrează singur baza de date. Când instalarea s-a încheiat, Firefly III vă mulțumește în jurnal pentru instalare: treceți la proxy-ul invers.

Documentația nu indică nicio cifră pentru memorie; FAQ-ul său Docker sugerează PHP_MEMORY_LIMIT=512M sau mai mult dacă PHP rămâne fără memorie. Dimensiunea depinde de numărul de utilizatori, de volumul tranzacțiilor și de importatorul de date. Pe un Managed VPS, descrieți-ne utilizarea dumneavoastră și vă recomandăm dimensiunea potrivită.

HTTPS și proxy-ul invers

Firefly III servește aplicația în HTTP pe portul 8080 din interiorul containerului, iar HTTPS-ul se află pe proxy-ul invers plasat în față. Aplicația citește antetul X-Forwarded-Proto pentru a ști că vizitatorul a sosit în HTTPS, cu condiția să aibă încredere în proxy:

.env
TRUSTED_PROXIES=*

FAQ-ul Docker este clar în această privință: fără TRUSTED_PROXIES=*, linkurile rămân în http, formularele și graficele nu mai funcționează, iar antetele de securitate CSP eșuează. Cu portul publicat pe 127.0.0.1, doar proxy-ul serverului ajunge la aplicație. Recreați containerul după fiecare modificare a fișierului .env:

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

Cu Caddy

Caddy obține singur certificatul Let’s Encrypt, iar directiva sa reverse_proxy setează implicit antetele X-Forwarded-For, X-Forwarded-Proto și X-Forwarded-Host:

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

Cu Nginx și Certbot

Acest bloc preia antetele din FAQ-ul de instalare și bufferele pe care acesta le sugerează împotriva erorilor 502, atunci când aplicația returnează un token într-un antet lung. El ascultă pe portul 80, pentru a lăsa Certbot să instaleze HTTPS:

Bloc 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 instalează apoi certificatul și se ocupă de reînnoirea lui:

Terminal
sudo certbot --nginx

Primul cont și înregistrările

Primul utilizator care se înregistrează devine proprietarul instanței. Ca măsură de securitate, înregistrările se închid apoi singure: majoritatea oamenilor instalează Firefly III doar pentru ei înșiși.

  1. Deschideți adresa dumneavoastră HTTPS de îndată ce proxy-ul răspunde și creați-vă contul: el primește rolul de proprietar.
  2. Activați autentificarea în doi pași în profilul dumneavoastră și păstrați cele opt coduri de rezervă pe care le afișează.
  3. Pentru a deschide instanța altor persoane, mergeți la /settings, deschideți opțiunile de configurare Firefly III, debifați opțiunea care dezactivează înregistrările și salvați.

Sarcina cron

Mai multe funcții merg doar cu o sarcină programată: bugetele automate, tranzacțiile recurente, alertele de abonament și cursurile de schimb actualizate. Imaginea Docker nu rulează singură cron; fișierul oficial adaugă în acest scop un mic serviciu cron, care apelează aplicația în fiecare zi la ora 3 dimineața.

El se autentifică printr-un token static. Generați un al treilea șir cu aceeași comandă și puneți-l în .env:

.env
STATIC_CRON_TOKEN=

Acest token are exact 32 de caractere: codul versiunii 6.7.9 nu acceptă altă lungime. Iată serviciul așa cum îl declară fișierul oficial; dublul $$ este intenționat și trimite la liniile TZ și STATIC_CRON_TOKEN din fișierul .env:

docker-compose.yml, serviciul 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

O singură sarcină este suficientă pentru toți utilizatorii instanței. Pentru a verifica dacă a rulat, citiți jurnalul containerului: fiecare sarcină raportează în JSON, cu job_fired și job_succeeded.

Terminal
docker logs firefly_iii_cron

Pentru a o rula manual, FAQ-ul Docker cere să treceți prin utilizatorul www-data, nu prin root: FAQ-ul leagă această capcană de erorile de permisiuni pe fișierele de jurnal:

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

MariaDB, PostgreSQL sau SQLite

Fișierul oficial livrează MariaDB, cu imaginea mariadb:lts. Firefly III suportă și PostgreSQL și SQLite, alese prin DB_CONNECTION în .env:

BazaConfigurareBackup
MariaDB sau MySQLServiciul db din fișierul oficial; DB_CONNECTION=mysql, portul 3306Un export cu mariadb-dump sau volumul bazei, cu serviciul oprit
PostgreSQLDB_CONNECTION=pgsql, portul 5432, imaginea postgres și variabilele POSTGRES_* în .db.envUn export cu pg_dump sau volumul bazei, cu serviciul oprit
SQLiteDB_CONNECTION=sqlite, fără serviciul db, și un volum montat pe /var/www/html/storage/databaseVolumul bazei, cu serviciul oprit
.env (PostgreSQL)
DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432

Pentru PostgreSQL, documentația îndreaptă și serviciul db spre imaginea postgres, care instalează PostgreSQL 18, și îi montează volumul pe /var/lib/postgresql. În .db.env, variabilele MYSQL_* devin POSTGRES_USER, POSTGRES_DB și POSTGRES_PASSWORD.

Faceți această alegere înainte de a introduce primele tranzacții. FAQ-ul precizează că trecerea de la o bază la alta rămâne posibilă, fără a fi suportată de Firefly III însuși, și că exportul aplicației nu preia toate datele.

Importatorul de date (Data Importer)

Firefly III Data Importer este un instrument separat, cu propria instalare și propriile actualizări; versiunea sa 2.3.5 a apărut la 23 septembrie 2026. El importă fișiere CSV și CAMT.053 și poate prelua și tranzacțiile de la băncile dumneavoastră prin furnizori de date terți, fiecare cu propriile condiții.

Depozitul Docker oficial îl livrează într-un al doilea fișier, docker-compose-importer.yml, care păstrează aceleași servicii și adaugă importer. Setările sale se pun într-un fișier .importer.env, preluat din .env.example al importatorului. Serviți-l pe un nume de domeniu propriu, cu un port publicat local și un al doilea bloc de proxy: FAQ-ul cere să nu îl plasați într-un subdirector.

.importer.env, liniile de modificat
FIREFLY_III_URL=http://app:8080
VANITY_URL=https://finances.example.com
TRUSTED_PROXIES=*

E-mailurile: configurarea SMTP

Implicit, MAIL_MAILER=log scrie mesajele în jurnale în loc să le trimită. Pentru a primi notificările, precum alertele de abonament, configurați trimiterea în .env. Documentația cere să schimbați întotdeauna MAIL_FROM și SITE_OWNER, altfel niciun e-mail nu va pleca.

Pe un VPS Simafri, trimiterea trece printr-un releu SMTP autentificat, pe portul 587: adresa unui cont de e-mail pe care îl aveți deja sau 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

Backupurile

Firefly III nu are o rutină de backup integrată: documentația recomandă instrumentele sistemului și subliniază că funcția de export a aplicației nu este un backup. Cu Docker, iată ce trebuie păstrat:

ElementCe păstreazăBackup
Baza de date (firefly_iii_db)Conturi, tranzacții, bugete, reguli și utilizatoriObligatoriu
Atașamentele (firefly_iii_upload)Fișierele atașate tranzacțiilorObligatoriu
.envSetările și, mai ales, APP_KEYObligatoriu, criptat
.db.envDatele de acces la baza de dateObligatoriu, criptat
docker-compose.yml și .importer.envVersiunea dumneavoastră a fișierelor oficialeRecomandat

Baza, cu serviciul în funcțiune

Cu MariaDB, mariadb-dump exportă baza fără oprirea serviciului; opțiunea sa --single-transaction oferă o copie coerentă a tabelelor InnoDB, fără a le bloca. Rulată din directorul fișierului Compose, comanda citește datele de acces din mediul containerului:

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

Cu PostgreSQL, aceeași idee trece prin pg_dump:

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

Programați acest export pe server cel puțin o dată pe zi și faceți ordine printre fișiere, care se acumulează.

Volumele, cu serviciul oprit

Documentația arhivează fiecare volum cu un container de unică folosință. Docker Compose prefixează numele volumelor cu numele proiectului, care este implicit numele directorului: verificați numele exacte înainte de a lansa arhivarea.

Terminal, în directorul 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

Un nume de volum scris greșit nu produce nicio eroare: Docker creează un volum gol cu acest nume și îl arhivează, ceea ce suprascrie backupul precedent. Documentația cere să verificați existența volumului înaintea fiecărei arhivări.

Păstrați o copie a fișierului .env și a acestor arhive în afara serverului, criptată, căci ea conține cheia și datele de acces la baza de date. Puse pe discul serverului, aceste fișiere intră și în backupurile sale de noapte.

Restaurarea

Documentația restaurează un volum cu comanda inversă, cu serviciul oprit; volumul atașamentelor se restaurează în același fel:

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

Un export SQL se reîncarcă în baza în funcțiune:

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

Restaurați și .env cu APP_KEY, apoi reporniți și deschideți-vă conturile. Documentația o repetă după fiecare metodă: primul lucru de făcut cu un backup este să îl restaurați, ca să verificați că funcționează.

Actualizările și migrările

Firefly III se actualizează singur, chiar și de la versiuni vechi precum 4.7, și își migrează baza de date la pornirea containerului. Documentația avertizează că unele actualizări șterg sau curăță date și cere un backup al bazei și al volumelor înaintea fiecăreia, mai ales între versiuni majore. Din directorul fișierului Compose:

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

Importatorul se actualizează în același fel, cu docker compose rm -f între oprire și descărcarea imaginilor, potrivit documentației sale.

Cine ce face pe un Managed VPS

Găzduirea pe propriul server cere să țineți serverul pe lângă aplicație. Pe un Managed VPS, echipele noastre preiau serverul și vă urmăresc proactiv instanța; Firefly III rămâne software-ul dumneavoastră, cu setările sale și datele dumneavoastră financiare.

SubiectEchipele noastreDumneavoastră
ServerulActualizări de sistem și de securitate, intervenții pe server incluseMomentul potrivit activității dumneavoastră
MonitorizareaServer urmărit 24 de ore din 24, 7 zile din 7, cu intervenție fără a vă aștepta apelulCitirea jurnalelor instanței dumneavoastră
Firefly IIIUrmărire proactivă: erori, încetiniri, sarcina cron și spațiu pe disc depistate, corectură recomandatăInstalarea, actualizările și setările sale, pe care le aplicați dumneavoastră sau asistentul dumneavoastră AI
Conturile și dateleServerul care le poartă, supravegheat și salvatUtilizatorii, autentificarea în doi pași, importatorul de date și furnizorii săi de date
BackupurileÎn fiecare noapte, criptate și păstrate în afara mașinii; restaurare inclusăExporturile proprii Firefly III și cererea de restaurare, când aveți nevoie de ea
MigrareaServerul dumneavoastră actual migrat, gratuitMomentul trecerii

Dacă preferați ca echipele noastre să intervină în aplicația însăși, această prestație se facturează la oră sau la preț fix, cu o ofertă comunicată înainte de intervenție.

Firefly III, pe un server întreținut pentru dumneavoastră

Cu un Managed VPS Simafri, echipele noastre țin la zi serverul instanței dumneavoastră Firefly III, îl monitorizează zi și noapte și intervin fără a vă aștepta apelul; ele vă urmăresc proactiv și instanța și vă recomandă corecturile utile, pe care le aplicați dumneavoastră sau asistentul dumneavoastră AI. Backupurile sunt criptate în fiecare noapte și păstrate în afara mașinii, restaurarea lor este inclusă, iar migrarea serverului actual este gratuită.

Descoperiți gama Managed VPS

Întrebări frecvente

Este Firefly III gratuit?

Da. Firefly III este sub licență AGPL-3.0-or-later: îl puteți rula pentru dumneavoastră, familia sau firma dumneavoastră fără nicio licență de cumpărat. Dacă îl modificați, versiunea dumneavoastră trebuie să ofere codul sursă celor care o folosesc prin rețea. Rămâne costul serverului pe care rulează.

Cum instalez Firefly III cu Docker Compose?

Descărcați cele trei fișiere oficiale, docker-compose.yml, .env și .db.env. Setați o APP_KEY de 32 de caractere și aceeași parolă în DB_PASSWORD și MYSQL_PASSWORD, înainte de prima pornire, apoi rulați docker compose up -d. Puneți apoi în față un proxy invers în HTTPS.

La ce servește APP_KEY în Firefly III?

APP_KEY este cheia de criptare a sesiunilor. Are exact 32 de caractere, fără caractere speciale precum = sau #, și rămâne secretă. Documentația cere să o salvați împreună cu volumele: face parte din ceea ce trebuie pentru a restaura o instanță.

De ce rămân linkurile Firefly III în http în spatele unui proxy?

FAQ-ul Docker indică faptul că lipsește TRUSTED_PROXIES=* din fișierul .env: fără el, Firefly III ignoră antetul X-Forwarded-Proto al proxy-ului, linkurile rămân în http, iar formularele și graficele nu mai funcționează. Setați și adresa dumneavoastră publică în APP_URL.

Cum configurez sarcina cron a Firefly III cu Docker?

Fișierul Compose oficial include un serviciu cron care apelează aplicația în fiecare zi la ora 3 dimineața. Setați în .env un STATIC_CRON_TOKEN de exact 32 de caractere, apoi reporniți ansamblul. O singură sarcină servește toți utilizatorii instanței.

Cum deschid Firefly III mai multor utilizatori?

Primul utilizator înregistrat devine proprietarul, iar înregistrările se închid după aceea. Proprietarul le redeschide în /settings, în opțiunile de configurare Firefly III. Fiecare utilizator păstrează apoi o administrare financiară separată de a celorlalți.

Cum fac backup la Firefly III?

Salvați baza de date, cu un export mariadb-dump sau pg_dump, volumul atașamentelor și fișierele .env și .db.env, criptate. Funcția de export a aplicației nu este un backup. Testați restaurarea imediat după primul backup.

Acoperă un Managed VPS și Firefly III?

Un Managed VPS acoperă serverul: sistemul, securitatea, monitorizarea și backupurile. Echipele noastre vă urmăresc proactiv și instanța și vă recomandă corecturile utile, pe care le aplicați dumneavoastră. O intervenție în aplicație se facturează la oră sau la preț fix.

Surse și documentație oficială

Ghiduri conexe

Backupurile unui VPS: ce trebuie să verificați înainte de a semnaO ofertă de VPS anunță aproape mereu „backupuri incluse”. În spatele acestor două cuvinte se poate afla o copie făcută în fiecare noapte, păstrată în afara mașinii și restaurată de experți, sau un snapshot pus pe același disc ca serverul. Acest ghid prezintă întrebările care fac diferența, ce înseamnă fiecare răspuns și modul de a verifica faptul că un backup se poate restaura.Diferența dintre VPS administrat și neadministrat: cine ce faceDiferența dintre un VPS administrat și unul neadministrat ține de o singură întrebare: cine se ocupă de server după ce acesta funcționează. Totuși, „administrat” (managed) nu are o definiție oficială: de la un furnizor la altul, cuvântul acoperă orice, de la simpla instalare a sistemului până la exploatarea completă a serverului. Acest ghid arată cine ce face, rând cu rând, inclusiv la nivelul intermediar al asistenței, și oferă întrebările care înlătură ambiguitatea înainte de semnare.PostgreSQL pe un VPS: cum dimensionați memoria și disculO bază PostgreSQL rapidă este o bază ale cărei date consultate des încap în memorie. Întreaga dimensionare pornește de aici: volumul bazei, partea care lucrează cu adevărat, numărul de conexiuni, apoi discul și marja lui. Acest ghid prezintă metoda, setările de pornire pentru 4, 8 și 16 GB de memorie și interogările care măsoară o bază existentă.
Contactați-ne