Hosta Firefly III på en Managed VPS: din privatekonomi på din egen server

Att hosta Firefly III på en Managed VPS innebär att dina konton, budgetar och utgifter finns på en egen maskin, som våra team håller uppdaterad och bevakar dag och natt. Firefly III är ett fritt program med öppen källkod för privatekonomi, under licensen AGPL. Den här guiden följer den officiella dokumentationen: installation med Docker Compose, APP_KEY, HTTPS, det första kontot, cronjobbet, databasen, Data Importer, e-post, säkerhetskopior och uppdateringar.

Simon Vasconcelos Lee Av Publicerad den 10 november 2026Lästid: 13 minuter

Alla guider

I korthet

  1. Licensen AGPL-3.0-or-later tillåter fri körning av Firefly III; om du ändrar programmet erbjuder du koden till din version åt dem som använder den.
  2. Installera utifrån de tre officiella filerna: docker-compose.yml, .env och .db.env. Välj databasens lösenord före den första starten.
  3. APP_KEY är exakt 32 tecken lång, hålls hemlig och säkerhetskopieras tillsammans med data.
  4. Bakom en omvänd proxy med HTTPS sätter du TRUSTED_PROXIES=* och din adress i APP_URL, och skapar sedan ditt konto direkt: den första användaren som registrerar sig blir ägare, och registreringen stängs därefter.
  5. Tjänsten cron i den officiella filen kör de automatiska budgetarna och de återkommande transaktionerna varje natt. Säkerhetskopiera databasen, volymen för uppladdningar och .env före varje uppdatering.

Det Firefly III gör

Firefly III är ett program för privatekonomi, gjort för självhosting. Det följer dina utgifter och inkomster, med budgetar, kategorier och etiketter, så att du ser vart pengarna tar vägen. README-filen beskriver det som helt självhostat och isolerat: det kontaktar ingen extern server förrän du uttryckligen ber om det.

En instans rymmer så många användare du vill, var och en med en ekonomisk administration som är helt åtskild från de andras. Dokumentationen beskriver en modell för att dela en och samma administration, som är under utveckling.

Det som licensen AGPL tillåter

Firefly III publiceras under GNU Affero General Public License, version 3 eller, om du så önskar, en senare version: det är SPDX-identifieraren AGPL-3.0-or-later i dess fil composer.json. Texten slår fast en obegränsad rätt att köra det oförändrade programmet. Du kan alltså använda avbilden som projektet publicerar för dig själv, din familj eller ditt företag, utan att köpa någon licens.

Artikel 13 lägger till ett villkor som är särskilt för AGPL: om du ändrar programmet måste din version ge alla som använder den på distans, över nätverket, möjlighet att kostnadsfritt få tag på dess källkod. Data Importer omfattas av samma licens.

Installationen med Docker Compose

Dokumentationen kallar Docker Compose det enklaste sättet att installera Firefly III. På en server där Docker är installerat skapar du en mapp och laddar ned de tre officiella filerna dit, i råformat: deras blanksteg spelar roll, och dokumentationen ber dig att inte kopiera dem från webbläsaren.

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

Inställningarna att ändra före den första starten

Generera två strängar på 32 tecken med kommandot som anges i filen .env: en för nyckeln, en för databasens lösenord.

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

Välj databasens lösenord före den första starten. Databasen sparar det i sin volym så snart den skapas: ändrar du det efteråt stämmer det inte längre, och Docker-FAQ:n anger bara en utväg, att ta bort containrar och volymer och börja om.

En port som publiceras lokalt

Den officiella filen publicerar applikationen på port 80 på alla serverns adresser. För att servera den med HTTPS bakom en omvänd proxy på samma maskin ändrar du den här enda raden i tjänsten app:

docker-compose.yml, i tjänsten 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

Vid den första starten skapar och migrerar containern databasen på egen hand. När installationen är klar tackar Firefly III dig i loggen för att du installerat det: gå vidare till den omvända proxyn.

Dokumentationen anger ingen siffra för minnet; dess Docker-FAQ föreslår PHP_MEMORY_LIMIT=512M eller mer om PHP får slut på minne. Storleken beror på antalet användare, volymen av transaktioner och Data Importer. På en Managed VPS beskriver du hur du tänker använda den, så rekommenderar vi lämplig storlek.

HTTPS och den omvända proxyn

Firefly III serverar applikationen med HTTP på port 8080 inuti containern, och HTTPS sköts av den omvända proxyn framför. Applikationen läser huvudet X-Forwarded-Proto för att veta att besökaren kom via HTTPS, förutsatt att den litar på proxyn:

.env
TRUSTED_PROXIES=*

Docker-FAQ:n är tydlig på den punkten: utan TRUSTED_PROXIES=* stannar länkarna på http, formulär och diagram slutar fungera och CSP-säkerhetshuvudena fallerar. Med porten publicerad på 127.0.0.1 når bara serverns egen proxy applikationen. Skapa om containern efter varje ändring i filen .env:

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

Med Caddy

Caddy hämtar certifikatet från Let’s Encrypt på egen hand, och dess direktiv reverse_proxy sätter huvudena X-Forwarded-For, X-Forwarded-Proto och X-Forwarded-Host som standard:

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

Med Nginx och Certbot

Det här blocket följer huvudena i installations-FAQ:n, och de buffertar som den föreslår mot 502-fel när applikationen returnerar en token i ett långt huvud. Det lyssnar på port 80 så att Certbot kan installera HTTPS:

Nginx-block
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 installerar sedan certifikatet och sköter förnyelsen:

Terminal
sudo certbot --nginx

Det första kontot och registreringen

Den första användaren som registrerar sig blir instansens ägare. Som en säkerhetsåtgärd stängs registreringen därefter av sig själv: de flesta installerar Firefly III bara för sig själva.

  1. Öppna din HTTPS-adress så snart proxyn svarar och skapa ditt konto: det får rollen som ägare.
  2. Aktivera tvåfaktorsautentisering i din profil och spara de åtta reservkoder som visas.
  3. För att öppna instansen för andra går du till /settings, öppnar konfigurationsalternativen för Firefly III, avmarkerar alternativet som stänger av registreringen och sparar.

Cronjobbet

Flera funktioner fungerar bara med ett schemalagt jobb: de automatiska budgetarna, de återkommande transaktionerna, varningarna för abonnemang och uppdaterade växelkurser. Docker-avbilden kör inte cron på egen hand; den officiella filen lägger därför till en liten tjänst cron, som anropar applikationen varje dag klockan 03.00.

Den autentiserar sig med en statisk token. Generera en tredje sträng med samma kommando och lägg den i .env:

.env
STATIC_CRON_TOKEN=

Denna token är exakt 32 tecken lång: koden i version 6.7.9 godtar ingen annan längd. Här är tjänsten så som den officiella filen deklarerar den; det dubbla $$ är avsiktligt och hänvisar till raderna TZ och STATIC_CRON_TOKEN i filen .env:

docker-compose.yml, tjänsten 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

Ett enda jobb räcker för alla användare på instansen. För att kontrollera att det har körts läser du containerns logg: varje jobb rapporterar i JSON, med job_fired och job_succeeded.

Terminal
docker logs firefly_iii_cron

För att köra det för hand ber Docker-FAQ:n dig att gå via användaren www-data i stället för root: FAQ:n kopplar den fallgropen till behörighetsfel på loggfilerna:

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

MariaDB, PostgreSQL eller SQLite

Den officiella filen levereras med MariaDB, med avbilden mariadb:lts. Firefly III hanterar också PostgreSQL och SQLite, som väljs med DB_CONNECTION i .env:

DatabasUppsättningSäkerhetskopiering
MariaDB eller MySQLTjänsten db i den officiella filen; DB_CONNECTION=mysql, port 3306En export med mariadb-dump, eller databasens volym med tjänsten stoppad
PostgreSQLDB_CONNECTION=pgsql, port 5432, avbilden postgres och variablerna POSTGRES_* i .db.envEn export med pg_dump, eller databasens volym med tjänsten stoppad
SQLiteDB_CONNECTION=sqlite, ingen tjänst db, och en volym monterad på /var/www/html/storage/databaseDatabasens volym, med tjänsten stoppad
.env (PostgreSQL)
DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432

För PostgreSQL pekar dokumentationen också tjänsten db mot avbilden postgres, som installerar PostgreSQL 18, och monterar dess volym på /var/lib/postgresql. I .db.env blir variablerna MYSQL_* till POSTGRES_USER, POSTGRES_DB och POSTGRES_PASSWORD.

Gör det här valet innan du matar in dina första transaktioner. FAQ:n anger att det fortfarande går att byta från en databas till en annan, utan att Firefly III självt stöder det, och att applikationens export inte tar med alla data.

Data Importer

Firefly III Data Importer är ett separat verktyg, med en egen installation och egna uppdateringar; dess version 2.3.5 kom ut den 23 september 2026. Det importerar filer i CSV och CAMT.053, och kan också hämta transaktioner från dina banker via tredjepartsleverantörer av data, var och en med sina egna villkor.

Det officiella Docker-förrådet levererar det i en andra fil, docker-compose-importer.yml, som behåller samma tjänster och lägger till importer. Dess inställningar läggs i en fil .importer.env, hämtad från importverktygets .env.example. Servera det under ett eget domännamn, med en port som publiceras lokalt och ett andra proxyblock: FAQ:n ber dig att inte lägga det i en underkatalog.

.importer.env, raderna att ändra
FIREFLY_III_URL=http://app:8080
VANITY_URL=https://finances.example.com
TRUSTED_PROXIES=*

E-post: SMTP-konfigurationen

Som standard skriver MAIL_MAILER=log meddelandena till loggarna i stället för att skicka dem. För att få aviseringar, som varningarna för abonnemang, ställer du in utskicken i .env. Dokumentationen ber dig att alltid ändra MAIL_FROM och SITE_OWNER, annars går inget e-postmeddelande någonsin iväg.

På en VPS från Simafri går utskicken via ett autentiserat SMTP-relä, på port 587: adressen till ett e-postkonto som du redan har, eller 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

Säkerhetskopiorna

Firefly III har ingen inbyggd rutin för säkerhetskopiering: dokumentationen rekommenderar systemets egna verktyg och påpekar att applikationens exportfunktion inte är en säkerhetskopia. Med Docker är det här vad du ska behålla:

DelVad den innehållerAtt säkerhetskopiera
Databasen (firefly_iii_db)Konton, transaktioner, budgetar, regler och användareObligatoriskt
Bilagorna (firefly_iii_upload)Filerna som är kopplade till transaktionernaObligatoriskt
.envInställningarna, och framför allt APP_KEYObligatoriskt, krypterad
.db.envDatabasens inloggningsuppgifterObligatoriskt, krypterad
docker-compose.yml och .importer.envDin version av de officiella filernaRekommenderas

Databasen, med tjänsten igång

Med MariaDB exporterar mariadb-dump databasen utan att tjänsten stoppas; dess alternativ --single-transaction ger en konsekvent kopia av InnoDB-tabellerna utan att låsa dem. Körs kommandot från mappen med Compose-filen läser det inloggningsuppgifterna från containerns miljö:

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

Med PostgreSQL går samma idé via pg_dump:

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

Schemalägg den här exporten på servern minst en gång om dagen, och gallra bland filerna, som hopar sig.

Volymerna, med tjänsten stoppad

Dokumentationen arkiverar varje volym med en tillfällig container. Docker Compose sätter projektnamnet framför volymernas namn, och projektnamnet är som standard mappens namn: kontrollera de exakta namnen innan du kör arkiveringen.

Terminal, i mappen 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

Ett felstavat volymnamn ger inget felmeddelande: Docker skapar en tom volym under det namnet och arkiverar den, vilket skriver över den föregående säkerhetskopian. Dokumentationen ber dig att kontrollera att volymen finns före varje arkivering.

Behåll en kopia av .env och av de här arkiven utanför servern, krypterad, eftersom den innehåller nyckeln och databasens inloggningsuppgifter. Lagda på serverns disk ingår de här filerna också i dess nattliga säkerhetskopior.

Återställa

Dokumentationen återställer en volym med det omvända kommandot, med tjänsten stoppad; volymen för bilagorna återställs på samma sätt:

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

En SQL-export läses tillbaka in i den körande databasen:

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

Återställ också .env med dess APP_KEY, starta sedan om och öppna dina konton. Dokumentationen upprepar det efter varje metod: det första du gör med en säkerhetskopia är att återställa den, för att kontrollera att den fungerar.

Uppdateringarna och migreringarna

Firefly III uppgraderar sig själv, även från så gamla versioner som 4.7, och migrerar sin databas när containern startar. Dokumentationen varnar för att vissa uppgraderingar tar bort eller rensar data, och ber om en säkerhetskopia av databasen och volymerna före var och en, särskilt mellan huvudversioner. Från mappen med Compose-filen:

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

Importverktyget uppdateras på samma sätt, med docker compose rm -f mellan stoppet och hämtningen av avbilderna, enligt dess dokumentation.

Vem gör vad på en Managed VPS

Att självhosta innebär att sköta servern utöver applikationen. På en Managed VPS tar våra team hand om servern och följer din instans proaktivt; Firefly III förblir din programvara, med sina inställningar och dina ekonomiska data.

OmrådeVåra teamDu
ServernUppdateringar av system och säkerhet, ingrepp på servern inräknadeTidpunkten som passar din verksamhet
ÖvervakningenServern följs dygnet runt, alla dagar, med ingrepp utan att vänta på ditt samtalLäsningen av din instans loggar
Firefly IIIProaktiv uppföljning: fel, långsamma svarstider, cronjobbet och diskutrymme upptäcks, med rekommenderad rättelseInstallationen, uppdateringarna och inställningarna, som du genomför själv eller med din AI-assistent
Kontona och dataServern som bär dem, övervakad och säkerhetskopieradAnvändarna, tvåfaktorsautentiseringen, Data Importer och dess dataleverantörer
SäkerhetskopiornaVarje natt, krypterade och förvarade utanför maskinen; återställning ingårFirefly III:s egna exporter och begäran om återställning, när du behöver den
MigreringenDin nuvarande server migreras kostnadsfrittTidpunkten för bytet

Om du föredrar att våra team ingriper i själva applikationen faktureras den tjänsten per timme eller som fast pris, med en offert som lämnas före ingreppet.

Firefly III, på en server som sköts åt dig

Med en Managed VPS från Simafri håller våra team servern för din Firefly III-instans uppdaterad, övervakar den dag och natt och griper in utan att vänta på ditt samtal; de följer också din instans proaktivt och rekommenderar de rättelser som är till nytta, som du genomför själv eller med din AI-assistent. Säkerhetskopiorna krypteras varje natt och förvaras utanför maskinen, återställningen ingår, och migreringen av din nuvarande server är kostnadsfri.

Upptäck Managed VPS

Vanliga frågor

Är Firefly III gratis?

Ja. Firefly III är licensierat under AGPL-3.0-or-later: du kan köra det för dig själv, din familj eller ditt företag utan att köpa någon licens. Om du ändrar det måste din version erbjuda sin källkod åt dem som använder den över nätverket. Kvar blir kostnaden för servern som kör det.

Hur installerar man Firefly III med Docker Compose?

Ladda ned de tre officiella filerna, docker-compose.yml, .env och .db.env. Sätt en APP_KEY på 32 tecken och samma lösenord i DB_PASSWORD och MYSQL_PASSWORD, före den första starten, och kör sedan docker compose up -d. Sätt därefter en omvänd proxy med HTTPS framför.

Vad används APP_KEY till i Firefly III?

APP_KEY är krypteringsnyckeln för sessionerna. Den är exakt 32 tecken lång, utan specialtecken som = eller #, och hålls hemlig. Dokumentationen ber dig att säkerhetskopiera den tillsammans med volymerna: den ingår i det som behövs för att återställa en instans.

Varför stannar länkarna i Firefly III på http bakom en proxy?

Docker-FAQ:n anger att TRUSTED_PROXIES=* saknas i filen .env: utan den ignorerar Firefly III proxyns huvud X-Forwarded-Proto, länkarna stannar på http och formulär och diagram slutar fungera. Ange också din publika adress i APP_URL.

Hur ställer man in cronjobbet för Firefly III med Docker?

Den officiella Compose-filen innehåller en tjänst cron som anropar applikationen varje dag klockan 03.00. Sätt en STATIC_CRON_TOKEN på exakt 32 tecken i .env och starta sedan om stacken. Ett enda jobb räcker för alla användare på instansen.

Hur öppnar man Firefly III för flera användare?

Den första användaren som registrerar sig blir ägare, och registreringen stängs därefter. Ägaren öppnar den igen i /settings, under konfigurationsalternativen för Firefly III. Varje användare behåller sedan en ekonomisk administration som är åtskild från de andras.

Hur säkerhetskopierar man Firefly III?

Säkerhetskopiera databasen, med en export via mariadb-dump eller pg_dump, volymen för bilagorna och filerna .env och .db.env, krypterade. Applikationens exportfunktion är inte en säkerhetskopia. Testa återställningen direkt efter den första säkerhetskopian.

Täcker en Managed VPS Firefly III?

En Managed VPS täcker servern: system, säkerhet, övervakning och säkerhetskopior. Våra team följer också din instans proaktivt och rekommenderar de rättelser som är till nytta, som du genomför själv. Ett ingrepp i själva applikationen faktureras per timme eller som fast pris.

Källor och officiell dokumentation

Kontakta oss