{"id":2795,"date":"2026-04-15T22:20:39","date_gmt":"2026-04-15T22:20:39","guid":{"rendered":"https:\/\/www.serverspan.com\/blog\/"},"modified":"2026-04-15T22:20:39","modified_gmt":"2026-04-15T22:20:39","slug":"firefly-iii-pe-un-vps-fii-stapan-pe-datele-tale-financiare-inainte-ca-banca-sa-fie-stapana-pe-tine","status":"publish","type":"post","link":"https:\/\/www.serverspan.ro\/blog\/firefly-iii-pe-un-vps-fii-stapan-pe-datele-tale-financiare-inainte-ca-banca-sa-fie-stapana-pe-tine\/","title":{"rendered":"Firefly III pe un VPS: fii st\u0103p\u00e2n pe datele tale financiare \u00eenainte ca banca s\u0103 fie st\u0103p\u00e2n\u0103 pe tine"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Po\u021bi rula Firefly III pe propriul VPS \u00een mai pu\u021bin de 20 de minute, cu Docker Compose. Ob\u021bii un manager de finan\u021be personale complet privat, cu datele tranzac\u021biilor stocate \u00een propriul container MariaDB, accesibil prin HTTPS \u00een spatele unui proxy Nginx, gata s\u0103 importe extrase CSV din orice banc\u0103. Ghidul acesta acoper\u0103 configurarea complet\u0103, inclusiv containerul Data Importer, \u0219i se opre\u0219te explicit la singura gre\u0219eal\u0103 de configurare care \u00ee\u021bi deterioreaz\u0103 datele criptate f\u0103r\u0103 niciun avertisment la fiecare actualizare de versiune.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ce face Firefly III de fapt<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Firefly III este un manager de finan\u021be personale open-source construit pentru cei care vor un registru real de tranzac\u021bii cu dubl\u0103 \u00eenregistrare, nu imaginea prelucrat\u0103 pe care o ofer\u0103 aplica\u021bia b\u0103ncii. \u00ce\u021bi define\u0219ti conturile (curent, economii, card de credit, numerar, investi\u021bii), \u00eenregistrezi tranzac\u021biile manual sau le impor\u021bi din CSV ori conexiuni bancare directe, \u0219i construie\u0219ti pe baza lor bugete, categorii \u0219i rapoarte. Totul ruleaz\u0103 pe propria ta infrastructur\u0103. Niciun serviciu ter\u021b nu \u00ee\u021bi atinge istoricul financiar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Scenariul obi\u0219nuit pe un VPS arat\u0103 astfel: expor\u021bi un CSV din portalul b\u0103ncii o dat\u0103 pe s\u0103pt\u0103m\u00e2n\u0103, \u00eel procesezi prin containerul Data Importer, iar Firefly III categorizeaz\u0103 \u0219i stocheaz\u0103 tranzac\u021biile. \u00cen timp ob\u021bii un istoric curat al cheltuielilor, suport multi-valut\u0103, tranzac\u021bii recurente automatizate \u0219i rapoarte financiare care altfel ar presupune un abonament lunar la o aplica\u021bie cloud ce stocheaz\u0103 datele pe serverele altcuiva. Pe un plan ct.Steady (4 nuclee, 4 GB RAM, 50 GB SSD), Firefly III ruleaz\u0103 confortabil al\u0103turi de alte servicii, f\u0103r\u0103 s\u0103 pun\u0103 presiune vizibil\u0103 pe resurse.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ce \u00ee\u021bi trebuie \u00eenainte de a \u00eencepe<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ai nevoie de un VPS cu Debian 12 sau Ubuntu 22.04\/24.04, cu Docker \u0219i plugin-ul Compose instalate. Cerin\u021ba minim\u0103 oficial\u0103 este de 512 MB RAM, dar cu MariaDB \u0219i containerul cron pornite \u00een paralel, 1 GB devine insuficient \u00een condi\u021bii normale de operare. Planific\u0103 pentru cel pu\u021bin 2 GB ca s\u0103 evi\u021bi situa\u021biile limit\u0103. Ai nevoie \u0219i de un domeniu sau subdomeniu \u00eendreptat spre IP-ul serverului \u00eenainte de a configura proxy-ul Nginx. Blocul implicit de SMTP de pe instan\u021bele VPS noi nu afecteaz\u0103 func\u021bionarea Firefly III, deoarece email-ul este op\u021bional.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dac\u0103 Docker nu este \u00eenc\u0103 instalat, ruleaz\u0103:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -fsSL https:\/\/get.docker.com | sh\nsystemctl enable --now docker<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verific\u0103 c\u0103 plugin-ul Compose este disponibil:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose version<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dac\u0103 ob\u021bii un num\u0103r de versiune v2.x, e\u0219ti preg\u0103tit. Dac\u0103 comanda nu este recunoscut\u0103, instaleaz\u0103 plugin-ul manual:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt install docker-compose-plugin -y<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Structura directorului \u0219i desc\u0103rcarea fi\u0219ierelor<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Creeaz\u0103 un director dedicat pentru implementare \u0219i intr\u0103 \u00een el:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p \/opt\/firefly-iii &amp;&amp; cd \/opt\/firefly-iii<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Descarc\u0103 cele trei fi\u0219iere de configurare direct din repository-urile oficiale Firefly III:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -O https:\/\/raw.githubusercontent.com\/firefly-iii\/docker\/main\/docker-compose.yml\ncurl -o .env https:\/\/raw.githubusercontent.com\/firefly-iii\/firefly-iii\/main\/.env.example\ncurl -o .db.env https:\/\/raw.githubusercontent.com\/firefly-iii\/docker\/main\/database.env<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Numele fi\u0219ierelor conteaz\u0103. Fi\u0219ierul compose le referen\u021biaz\u0103 literal: <code>env_file: .env<\/code> \u0219i <code>env_file: .db.env<\/code>. Dac\u0103 le redenume\u0219ti, trebuie s\u0103 actualizezi \u0219i fi\u0219ierul compose \u00een consecin\u021b\u0103. Descarc\u0103 fi\u0219ierele brute cu <code>curl<\/code> \u00een loc s\u0103 copiezi din browser, pentru c\u0103 YAML este sensibil la spa\u021bii albe, iar paginile redate pot introduce format\u0103ri invizibile.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fi\u0219ierul Docker Compose<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fi\u0219ierul compose implicit din repository-ul Docker al Firefly III porne\u0219te trei servicii: aplica\u021bia principal\u0103 (<code>app<\/code>), baza de date (<code>db<\/code> cu MariaDB LTS) \u0219i un container Alpine cron care declan\u0219eaz\u0103 noaptea procesarea tranzac\u021biilor recurente. Un fi\u0219ier compose minimal configurat pentru produc\u021bie arat\u0103 astfel:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n  app:\n    image: fireflyiii\/core:latest\n    hostname: app\n    container_name: firefly_iii_core\n    restart: always\n    volumes:\n      - firefly_iii_upload:\/var\/www\/html\/storage\/upload\n    env_file: .env\n    networks:\n      - firefly_iii\n    ports:\n      - \"127.0.0.1:8080:8080\"\n    depends_on:\n      - db\n\n  db:\n    image: mariadb:lts\n    hostname: db\n    container_name: firefly_iii_db\n    restart: always\n    env_file: .db.env\n    networks:\n      - firefly_iii\n    volumes:\n      - firefly_iii_db:\/var\/lib\/mysql\n\n  cron:\n    image: alpine\n    container_name: firefly_iii_cron\n    restart: always\n    command: &gt;\n      sh -c \"echo '0 3 * * * wget -qO- http:\/\/app:8080\/api\/v1\/cron\/REPLACE_WITH_CRON_TOKEN' | crontab - &amp;&amp; crond -f -L \/dev\/stdout\"\n    networks:\n      - firefly_iii\n\nvolumes:\n  firefly_iii_upload:\n  firefly_iii_db:\n\nnetworks:\n  firefly_iii:\n    driver: bridge<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Portul este legat la <code>127.0.0.1:8080:8080<\/code>, nu la <code>0.0.0.0:8080:8080<\/code>. Accesul direct la container r\u0103m\u00e2ne restric\u021bionat la interfa\u021ba loopback a serverului, iar singura cale de acces din exterior trece prin proxy-ul Nginx configurat mai jos. Legarea la <code>0.0.0.0<\/code> este una dintre gre\u0219elile frecvente pe VPS-urile noi \u0219i ocole\u0219te complet regulile de firewall definite pentru portul 8080.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configurarea .env \u0219i de ce APP_KEY este cea mai important\u0103 variabil\u0103 din fi\u0219ier<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Deschide <code>.env<\/code> \u0219i seteaz\u0103 cel pu\u021bin aceste valori \u00eenainte de prima pornire a containerelor. Parola bazei de date trebuie s\u0103 fie identic\u0103 \u00een <code>.env<\/code> \u0219i <code>.db.env<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># .env\nAPP_KEY=                              # Genereaz\u0103 aceast\u0103 valoare PRIMUL - vezi mai jos\nAPP_URL=https:\/\/finance.domeniultau.ro\nSITE_OWNER=tu@domeniultau.ro\nDB_CONNECTION=mysql\nDB_HOST=db\nDB_PORT=3306\nDB_DATABASE=firefly\nDB_USERNAME=firefly\nDB_PASSWORD=o_parola_puternica_aici\nSTATIC_CRON_TOKEN=un_sir_aleatoriu_de32caractere00\nTZ=Europe\/Bucharest<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># .db.env\nMYSQL_RANDOM_ROOT_PASSWORD=yes\nMYSQL_USER=firefly\nMYSQL_PASSWORD=o_parola_puternica_aici\nMYSQL_DATABASE=firefly<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Seteaz\u0103 parola \u00een ambele fi\u0219iere \u00eenainte de primul <code>docker compose up<\/code>. MariaDB \u00ee\u0219i ini\u021bializeaz\u0103 directorul de date la prima pornire \u0219i stocheaz\u0103 creden\u021bialele \u00een volum. Dac\u0103 porne\u0219ti stack-ul cu o parol\u0103 \u0219i o schimbi ulterior \u00een fi\u0219ierele env, volumul r\u0103m\u00e2ne cu creden\u021bialele ini\u021biale. Vei ob\u021bine erori de autentificare la fiecare repornire ulterioar\u0103, remediabile numai prin \u0219tergerea volumului <code>firefly_iii_db<\/code> \u0219i reini\u021bializarea bazei de date.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cum generezi APP_KEY corect<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">APP_KEY este cheia de criptare Laravel pe care Firefly III o folose\u0219te pentru to\u021bi tokenii OAuth, cheile API \u0219i c\u00e2mpurile sensibile din baza de date. Trebuie s\u0103 aib\u0103 exact 32 de caractere. Genereaz\u0103-o \u00eenainte de prima pornire:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>head \/dev\/urandom | LC_ALL=C tr -dc 'A-Za-z0-9' | head -c 32 &amp;&amp; echo<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ia rezultatul \u0219i pune-l \u00een <code>.env<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>APP_KEY=sirul_generat_de_tine_de32caractere<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Salveaz\u0103 aceast\u0103 valoare imediat \u00eentr-un manager de parole. O vei folosi la fiecare actualizare de container, la orice reconstruire a stack-ului \u0219i la orice migrare pe alt server. Cheia este permanent legat\u0103 de datele criptate din volumul MariaDB. Nu se schimb\u0103.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Gre\u0219eala care distruge instalarea la actualiz\u0103ri<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Acesta este tiparul pe care \u00eel \u00eent\u00e2lnim cel mai des \u00een gestionarea implement\u0103rilor Docker cu Firefly III: utilizatorul vrea s\u0103 actualizeze la o versiune nou\u0103, descarc\u0103 din nou <code>.env.example<\/code> din repository pentru configur\u0103ri curate, las\u0103 <code>APP_KEY<\/code> necompletat sau genereaz\u0103 unul nou \u0219i porne\u0219te containerul actualizat pe acela\u0219i volum de baz\u0103 de date. Noua cheie nu poate decripta nimic scris cu cea veche. Aplica\u021bia arunc\u0103 <code>Illuminate\\Contracts\\Encryption\\DecryptException<\/code> \u00een log, iar to\u021bi clien\u021bii OAuth, tokenii API \u0219i c\u00e2mpurile criptate create anterior devin inutilizabile.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Inspecteaz\u0103 logul aplica\u021biei din interiorul containerului:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker exec -it firefly_iii_core tail -n 50 \/var\/www\/html\/storage\/logs\/laravel.log<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dac\u0103 g\u0103se\u0219ti intr\u0103ri <code>DecryptException<\/code>, cauza este aproape sigur o nepotrivire de APP_KEY. Recuperarea este simpl\u0103: restaurezi cheia original\u0103 \u00een <code>.env<\/code> \u0219i reporne\u0219ti stack-ul. Nu exist\u0103 utilitar automat de recriptare. Odat\u0103 schimbat\u0103 cheia dup\u0103 ce datele au fost scrise, f\u0103r\u0103 cheia original\u0103 accesul la tot ce era criptat este pierdut definitiv.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Valoarea <code>STATIC_CRON_TOKEN<\/code> merge at\u00e2t \u00een comanda containerului cron, c\u00e2t \u0219i \u00een <code>.env<\/code>. Genereaz\u0103-o \u00een acela\u0219i mod ca APP_KEY \u0219i las-o neschimbat\u0103 la actualiz\u0103ri din acela\u0219i motiv.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pornirea stack-ului \u0219i verificarea st\u0103rii<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Porne\u0219te toate containerele:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose up -d --pull=always<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Urm\u0103re\u0219te logurile aplica\u021biei p\u00e2n\u0103 la finalizarea ini\u021bializ\u0103rii:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose logs -f app<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La prima rulare, Firefly III execut\u0103 automat migra\u021biile bazei de date. Pe un plan vm.Entry sau ct.Ready, procesul se termin\u0103 de obicei \u00een 60-90 de secunde. Linia <code>Thank you for installing Firefly III<\/code> din log confirm\u0103 c\u0103 aplica\u021bia este gata. Verific\u0103 APP_KEY-ul \u0219i conexiunea la baza de date cu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker exec firefly_iii_core php artisan firefly-iii:decrypt-all<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dac\u0103 aceast\u0103 comand\u0103 se termin\u0103 f\u0103r\u0103 erori, stack-ul func\u021bioneaz\u0103 corect.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Proxy-ul invers Nginx<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Instaleaz\u0103 Nginx pe gazd\u0103 dac\u0103 nu ruleaz\u0103 deja:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt install nginx -y<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Creeaz\u0103 un bloc de server la <code>\/etc\/nginx\/sites-available\/firefly<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>server {\n    listen 80;\n    server_name finance.domeniultau.ro;\n    return 301 https:\/\/$host$request_uri;\n}\n\nserver {\n    listen 443 ssl;\n    server_name finance.domeniultau.ro;\n\n    ssl_certificate \/etc\/letsencrypt\/live\/finance.domeniultau.ro\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/finance.domeniultau.ro\/privkey.pem;\n\n    client_max_body_size 64M;\n\n    location \/ {\n        proxy_pass         http:\/\/127.0.0.1:8080;\n        proxy_set_header   Host $host;\n        proxy_set_header   X-Real-IP $remote_addr;\n        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header   X-Forwarded-Proto $scheme;\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Activeaz\u0103 site-ul \u0219i ob\u021bine un certificat Let&#8217;s Encrypt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ln -s \/etc\/nginx\/sites-available\/firefly \/etc\/nginx\/sites-enabled\/\napt install certbot python3-certbot-nginx -y\ncertbot --nginx -d finance.domeniultau.ro\nnginx -t &amp;&amp; systemctl reload nginx<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Directiva <code>client_max_body_size 64M<\/code> este obligatorie dac\u0103 impor\u021bi fi\u0219iere CSV mari. F\u0103r\u0103 ea, Nginx respinge orice fi\u0219ier care dep\u0103\u0219e\u0219te limita implicit\u0103 de 1 MB cu o eroare 413. Firefly III nu afi\u0219eaz\u0103 niciun mesaj explicit \u00een interfa\u021b\u0103 c\u00e2nd se \u00eent\u00e2mpl\u0103 asta \u2014 cererea e\u0219ueaz\u0103 silen\u021bios \u0219i importul nu porne\u0219te niciodat\u0103. Dac\u0103 pe acela\u0219i server ruleaz\u0103 un stack DirectAdmin sau cPanel cu Nginx ca front-end, adaug\u0103 configurarea proxy la virtual host-ul relevant, nu crea o instan\u021b\u0103 Nginx separat\u0103.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ad\u0103ugarea Data Importer<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Data Importer este un container separat, \u00eentre\u021binut de proiectul Firefly III. Cite\u0219te fi\u0219iere CSV sau se conecteaz\u0103 la API-uri bancare compatibile prin GoCardless \u0219i trimite tranzac\u021biile procesate \u00een Firefly III prin REST API. Cel mai simplu pe un singur VPS este s\u0103-l adaugi ca serviciu suplimentar \u00een acela\u0219i fi\u0219ier compose.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Adaug\u0103 blocul importer \u00een <code>docker-compose.yml<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  importer:\n    image: fireflyiii\/data-importer:latest\n    hostname: importer\n    container_name: firefly_iii_importer\n    restart: always\n    networks:\n      - firefly_iii\n    ports:\n      - \"127.0.0.1:8081:8080\"\n    env_file: .importer.env\n    depends_on:\n      - app<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Creeaz\u0103 <code>.importer.env<\/code> cu cele dou\u0103 variabile obligatorii:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># .importer.env\nFIREFLY_III_URL=http:\/\/app:8080\nVANITY_URL=https:\/\/finance.domeniultau.ro\nTZ=Europe\/Bucharest<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>FIREFLY_III_URL<\/code> trebuie s\u0103 fie adresa intern\u0103 din re\u021beaua bridge Docker, nu domeniul t\u0103u public. Importerul comunic\u0103 cu containerul Firefly III direct, pe re\u021beaua partajat\u0103 <code>firefly_iii<\/code>, folosind hostname-ul intern <code>app<\/code> \u0219i portul 8080. Dac\u0103 pui aici domeniul public, importerul va e\u0219ua la rezolvarea DNS din interiorul re\u021belei. <code>VANITY_URL<\/code> este adresa public\u0103 pe care importerul o folose\u0219te \u00een propria interfa\u021b\u0103 pentru a genera linkuri de redirec\u021bionare corecte.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Crearea clientului OAuth<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Reporne\u0219te stack-ul cu <code>docker compose up -d<\/code>, deschide Firefly III \u00een browser \u0219i intr\u0103 \u00een pagina de profil. Mergi la sec\u021biunea OAuth \u0219i creeaz\u0103 un client nou:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Nume: Data Importer (sau orice alt\u0103 denumire descriptiv\u0103)<\/li>\n\n\n\n<li>URL de redirect: <code>https:\/\/finance.domeniultau.ro\/callback<\/code><\/li>\n\n\n\n<li>Debifeaz\u0103 \u201eConfidential&#8221;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Noteaz\u0103 ID-ul generat, un num\u0103r \u00eentreg mic, de obicei 1 sau 2. \u00cel vei introduce prima dat\u0103 c\u00e2nd accesezi interfa\u021ba importerului. Adaug\u0103 un bloc proxy Nginx pentru importer, fie pe un subdomeniu separat, fie ca loca\u021bie pe acela\u0219i server cu Firefly III:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>server {\n    listen 443 ssl;\n    server_name importer.domeniultau.ro;\n\n    ssl_certificate \/etc\/letsencrypt\/live\/importer.domeniultau.ro\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/importer.domeniultau.ro\/privkey.pem;\n\n    client_max_body_size 64M;\n\n    location \/ {\n        proxy_pass http:\/\/127.0.0.1:8081;\n        proxy_set_header Host $host;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Primul import CSV din banc\u0103<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aproape toate b\u0103ncile ofer\u0103 export CSV din sec\u021biunea de istoric al tranzac\u021biilor din portalul online. Structura coloanelor difer\u0103 de la o institu\u021bie la alta, dar Data Importer gestioneaz\u0103 asta printr-un pas de mapare la primul import. Asociezi coloanele CSV cu c\u00e2mpurile Firefly III (dat\u0103, sum\u0103, descriere, IBAN), salvezi configurarea ca fi\u0219ier JSON, \u0219i de atunci orice import din aceea\u0219i banc\u0103 reutilizeaz\u0103 acel JSON. Procesul devine: selectezi CSV-ul, selectezi configurarea salvat\u0103, ape\u0219i import.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Importerul \u00ee\u021bi arat\u0103 o previzualizare a tranzac\u021biilor procesate \u00eenainte de a le trimite \u00een baza de date. Verific\u0103 acolo c\u0103 datele sunt parsate corect \u0219i c\u0103 direc\u021bia debit\/credit este gestionat\u0103 cum trebuie pentru formatul b\u0103ncii tale. Unele b\u0103nci export\u0103 sumele cu o coloan\u0103 separat\u0103 debit\/credit \u00een loc de valori cu semn, iar mapper-ul gestioneaz\u0103 ambele variante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pentru echipele care urm\u0103resc cheltuielile de afaceri pe un <a href=\"https:\/\/www.serverspan.ro\/virtual-servers\">VPS administrat<\/a>, REST API-ul Firefly III accept\u0103 \u0219i tranzac\u021bii trimise direct. Po\u021bi construi fluxuri de import automatizate cu n8n sau un script cron care posteaz\u0103 datele la endpoint-ul API, elimin\u00e2nd complet pasul manual CSV pentru conturile care suport\u0103 export programatic. Dac\u0103 ai nevoie de ajutor la configurarea containerelor Docker sau a proxy-ului invers pe un server nou, <a href=\"https:\/\/www.serverspan.ro\/linux-administration\">serviciul de administrare Linux al ServerSpan<\/a> acoper\u0103 exact acest tip de implementare.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rularea Firefly III al\u0103turi de alte servicii self-hosted pe acela\u0219i VPS necesit\u0103 o alocare atent\u0103 a memoriei \u0219i o gestionare corect\u0103 a re\u021belelor Docker. Dac\u0103 preferi s\u0103 te ocupi de aplica\u021bie \u0219i s\u0103 la\u0219i infrastructura pe m\u00e2ini bune, <a href=\"https:\/\/www.serverspan.ro\/virtual-servers\">hosting-ul VPS administrat al ServerSpan<\/a> vine cu Docker pre-configurat, acces SSH root, stocare NVMe SSD \u0219i suport tehnic pentru implement\u0103ri. Consult\u0103 planurile disponibile \u0219i loca\u021biile din Germania, Canada \u0219i SUA.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pentru un ghid practic despre gestionarea containerelor \u0219i limitele de resurse Docker pe un VPS, consult\u0103 articolul nostru despre <a href=\"https:\/\/www.serverspan.ro\/blog\/gestionarea-docker-si-a-containerelor-pe-un-vps-cele-mai-bune-practici-pentru-stabilitate-si-performanta\/\">cele mai bune practici pentru containere Docker pe VPS<\/a>. Dac\u0103 dimensionezi un VPS nou pentru mai multe aplica\u021bii self-hosted, ghidul nostru despre <a href=\"https:\/\/www.serverspan.ro\/blog\/linux-swap-vs-ram-ghidul-definitiv-pentru-gestionarea-memoriei-pe-vps\/\">swap Linux vs. RAM pentru gestionarea memoriei pe VPS<\/a> explic\u0103 cum s\u0103 configurezi swap-ul drept plas\u0103 de siguran\u021b\u0103 pentru sarcinile cu consum variabil de memorie.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Po\u021bi rula Firefly III pe propriul VPS \u00een mai pu\u021bin de 20 de minute, cu Docker Compose. Ob\u021bii un manager de finan\u021be personale complet privat, cu datele tranzac\u021biilor stocate \u00een propriul container MariaDB, accesibil prin HTTPS \u00een spatele unui proxy Nginx, gata s\u0103 importe extrase CSV din orice banc\u0103. Ghidul acesta acoper\u0103 configurarea complet\u0103, inclusiv [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2793,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,12],"tags":[15625,15634,15644,15636,15635,15631,15626,15649,15632,15639,15598,15633,15597,15637,15648,15628,15646,15647,15601,15614,15630,15640,15645,15627,15624,15629,15642,15643,15638,15641],"class_list":["post-2795","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","category-virtual-servers","tag-aplicatie-buget-self-hosted-vps","tag-aplicatie-finante-personale-linux-vps","tag-date-financiare-private-server-propriu","tag-docker-compose-finante-personale-vps","tag-firefly-iii-actualizare-app_key-nepotrivire","tag-firefly-iii-app_key-decryptexception-remediere","tag-firefly-iii-app_key-eroare-criptare","tag-firefly-iii-app_key-generare-32-caractere","tag-firefly-iii-client-oauth-configurare","tag-firefly-iii-container-cron-configurare","tag-firefly-iii-data-importer-docker","tag-firefly-iii-data-importer-import-csv","tag-firefly-iii-docker-compose-tutorial","tag-firefly-iii-docker-configurare-importer-env","tag-firefly-iii-docker-parola-baza-de-date-configurare","tag-firefly-iii-finante-personale-self-hosted","tag-firefly-iii-implementare-docker-productie","tag-firefly-iii-importer-env-firefly_iii_url-retea-interna","tag-firefly-iii-mariadb-docker-compose","tag-firefly-iii-mariadb-lts-container","tag-firefly-iii-nginx-proxy-invers","tag-firefly-iii-static_cron_token-vps","tag-firefly-iii-tutorial-import-csv-extras-bancar-2026","tag-firefly-iii-vps-ghid-instalare","tag-manager-finante-personale-open-source-docker","tag-self-host-firefly-iii-vps-docker-configurare","tag-tracker-buget-open-source-self-hosted","tag-vps-administrat-docker-implementare-serverspan","tag-vps-administrat-self-hosting-docker-aplicatii","tag-vps-docker-compose-aplicatii-self-hosted"],"_links":{"self":[{"href":"https:\/\/www.serverspan.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.serverspan.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.serverspan.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.serverspan.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.serverspan.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2795"}],"version-history":[{"count":1,"href":"https:\/\/www.serverspan.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2795\/revisions"}],"predecessor-version":[{"id":2796,"href":"https:\/\/www.serverspan.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2795\/revisions\/2796"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.serverspan.com\/blog\/index.php?rest_route=\/wp\/v2\/media\/2793"}],"wp:attachment":[{"href":"https:\/\/www.serverspan.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.serverspan.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.serverspan.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}