Hoste Firefly III på en Managed VPS: din økonomi på din egen server

At hoste Firefly III på en Managed VPS betyder, at dine konti, budgetter og udgifter ligger på en maskine, der er din egen, og som vores teams holder opdateret og overvåger dag og nat. Firefly III er et frit program med åben kildekode til styring af privatøkonomi under AGPL-licensen. Denne guide følger den officielle dokumentation: installation med Docker Compose, APP_KEY, HTTPS, den første konto, cronjobbet, databasen, dataimporten, e-mails, backup og opdateringer.

Simon Vasconcelos Lee Af Udgivet den 10. november 2026Læsetid: 13 minutter

Alle guider

Det vigtigste

  1. AGPL-3.0-or-later-licensen tillader at køre Firefly III frit; hvis du ændrer programmet, stiller du din versions kildekode til rådighed for dem, der bruger den.
  2. Installér ud fra de tre officielle filer: docker-compose.yml, .env og .db.env. Vælg databasens adgangskode før første start.
  3. APP_KEY er på præcis 32 tegn, holdes hemmelig og sikkerhedskopieres sammen med dataene.
  4. Bag en reverse proxy med HTTPS sætter du TRUSTED_PROXIES=* og din adresse i APP_URL, og derefter opretter du straks din konto: den første bruger, der tilmelder sig, bliver ejer, og derefter lukker tilmeldingen.
  5. Tjenesten cron i den officielle fil kører de automatiske budgetter og de tilbagevendende transaktioner hver nat. Tag backup af databasen, upload-volumenet og .env før hver opdatering.

Hvad Firefly III gør

Firefly III er et program til styring af privatøkonomi, udviklet til selvhosting. Det registrerer dine udgifter og indtægter med budgetter, kategorier og tags, så du kan se, hvor dine penge bliver af. README'en beskriver det som fuldstændig selvhostet og isoleret: det kontakter ingen ekstern server, før du udtrykkeligt beder det om det.

Én instans rummer så mange brugere, du ønsker, hver med en økonomisk administration, der er helt adskilt fra de andres. Dokumentationen beskriver en model til deling af én fælles administration, som er under udvikling.

Hvad AGPL-licensen tillader

Firefly III udgives under GNU Affero General Public License, version 3 eller, efter dit valg, enhver senere version: det er SPDX-identifikatoren AGPL-3.0-or-later i filen composer.json. Teksten fastslår en ubegrænset tilladelse til at køre det uændrede program. Du kan altså bruge det image, projektet udgiver, til dig selv, din familie eller din virksomhed uden at skulle købe en licens.

Artikel 13 tilføjer en betingelse, der er særlig for AGPL: hvis du ændrer programmet, skal din version tilbyde alle, der bruger den på afstand, via netværket, en måde at få dens kildekode gratis. Data Importer er under samme licens.

Installation med Docker Compose

Dokumentationen kalder Docker Compose den nemmeste måde at installere Firefly III på. På en server, hvor Docker er installeret, opretter du en mappe og henter de tre officielle filer ned i den, i rå form: deres mellemrum har betydning, og dokumentationen beder dig om ikke at kopiere dem fra browseren.

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

Indstillinger, der skal ændres før første start

Generér to strenge på 32 tegn med den kommando, der står i filen .env: én til nøglen og én til databasens adgangskode.

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

Vælg databasens adgangskode før første start. Databasen gemmer den i sit volumen, så snart den oprettes: ændrer du den bagefter, passer den ikke længere, og Docker-FAQ'en giver kun én udvej, nemlig at fjerne containere og volumener og begynde forfra.

En port, der publiceres lokalt

Den officielle fil publicerer applikationen på port 80 på alle serverens adresser. For at servere den med HTTPS bag en reverse proxy på samme maskine ændrer du denne ene linje i tjenesten app:

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

Ved første start opretter og migrerer containeren selv databasen. Når installationen er færdig, takker Firefly III dig i loggen for at have installeret det: gå videre til reverse proxyen.

Dokumentationen opgiver intet tal for hukommelsen; dens Docker-FAQ foreslår PHP_MEMORY_LIMIT=512M eller mere, hvis PHP løber tør for hukommelse. Størrelsen afhænger af antallet af brugere, mængden af transaktioner og dataimporten. På en Managed VPS beskriver du blot din brug for os, og vi anbefaler den størrelse, der passer.

HTTPS og reverse proxyen

Firefly III serverer applikationen over HTTP på port 8080 inde i containeren, og HTTPS ligger på reverse proxyen foran den. Applikationen læser headeren X-Forwarded-Proto for at vide, at den besøgende kom ind via HTTPS, forudsat at den har tillid til proxyen:

.env
TRUSTED_PROXIES=*

Docker-FAQ'en er klar på dette punkt: uden TRUSTED_PROXIES=* forbliver linkene på http, formularer og grafer holder op med at virke, og CSP-sikkerhedsheaderne fejler. Med porten publiceret på 127.0.0.1 er det kun serverens egen proxy, der når applikationen. Genskab containeren efter hver ændring i filen .env:

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

Med Caddy

Caddy henter selv certifikatet fra Let's Encrypt, og dens direktiv reverse_proxy sætter som standard headerne X-Forwarded-For, X-Forwarded-Proto og X-Forwarded-Host:

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

Med Nginx og Certbot

Denne blok følger headerne fra installations-FAQ'en og de buffere, den foreslår mod 502-fejl, når applikationen returnerer et token i en lang header. Den lytter på port 80, så Certbot kan sætte HTTPS op:

Nginx-blok
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 installerer derefter certifikatet og sørger for at forny det:

Terminal
sudo certbot --nginx

Den første konto og tilmeldingerne

Den første bruger, der tilmelder sig, bliver instansens ejer. Af sikkerhedshensyn lukker tilmeldingen derefter af sig selv: de fleste installerer Firefly III alene til sig selv.

  1. Åbn din HTTPS-adresse, så snart proxyen svarer, og opret din konto: den får rollen som ejer.
  2. Slå tofaktorgodkendelse til i din profil, og gem de otte backupkoder, der vises.
  3. For at åbne instansen for andre går du til /settings, åbner konfigurationsindstillingerne for Firefly III, fjerner fluebenet ved den indstilling, der slår tilmeldinger fra, og gemmer.

Cronjobbet

Flere funktioner virker kun med et planlagt job: automatiske budgetter, tilbagevendende transaktioner, advarsler om abonnementer og opdaterede valutakurser. Docker-imaget kører ikke selv cron; den officielle fil tilføjer derfor en lille tjeneste cron, som kalder applikationen hver dag kl. 3 om natten.

Den godkender sig med et statisk token. Generér en tredje streng med samme kommando, og læg den i .env:

.env
STATIC_CRON_TOKEN=

Dette token er på præcis 32 tegn: koden i version 6.7.9 accepterer ingen anden længde. Her er tjenesten, sådan som den officielle fil erklærer den; det dobbelte $$ er bevidst og henviser til linjerne TZ og STATIC_CRON_TOKEN i filen .env:

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

Ét job er nok til alle instansens brugere. For at kontrollere, at det har kørt, læser du containerens log: hvert job melder tilbage i JSON med job_fired og job_succeeded.

Terminal
docker logs firefly_iii_cron

For at køre det manuelt beder Docker-FAQ'en dig om at gå via brugeren www-data frem for root: FAQ'en forbinder denne faldgrube med rettighedsfejl på logfilerne:

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 officielle fil leverer MariaDB med imaget mariadb:lts. Firefly III understøtter også PostgreSQL og SQLite, som vælges med DB_CONNECTION i .env:

DatabaseOpsætningBackup
MariaDB eller MySQLTjenesten db fra den officielle fil; DB_CONNECTION=mysql, port 3306En eksport med mariadb-dump eller databasens volumen med tjenesten stoppet
PostgreSQLDB_CONNECTION=pgsql, port 5432, imaget postgres og variablerne POSTGRES_* i .db.envEn eksport med pg_dump eller databasens volumen med tjenesten stoppet
SQLiteDB_CONNECTION=sqlite, ingen tjeneste db og et volumen monteret på /var/www/html/storage/databaseDatabasens volumen, med tjenesten stoppet
.env (PostgreSQL)
DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432

Til PostgreSQL peger dokumentationen også tjenesten db mod imaget postgres, som installerer PostgreSQL 18, og monterer dens volumen på /var/lib/postgresql. I .db.env bliver variablerne MYSQL_* til POSTGRES_USER, POSTGRES_DB og POSTGRES_PASSWORD.

Træf dette valg, før du indtaster dine første transaktioner. FAQ'en siger, at det stadig er muligt at skifte fra én database til en anden, uden at Firefly III selv understøtter det, og at applikationens eksport ikke tager alle data med.

Data Importer

Firefly III Data Importer er et separat værktøj med sin egen installation og sine egne opdateringer; version 2.3.5 udkom den 23. september 2026. Det importerer CSV- og CAMT.053-filer og kan også hente transaktioner fra dine banker via eksterne dataudbydere, hver med sine egne vilkår.

Det officielle Docker-repository leverer det i en anden fil, docker-compose-importer.yml, som beholder de samme tjenester og tilføjer importer. Dens indstillinger lægges i en fil .importer.env, hentet fra importerens .env.example. Server den under sit eget domænenavn, med en port publiceret lokalt og en ekstra proxyblok: FAQ'en beder dig om ikke at placere den i en undermappe.

.importer.env, de linjer der skal ændres
FIREFLY_III_URL=http://app:8080
VANITY_URL=https://finances.example.com
TRUSTED_PROXIES=*

E-mails: SMTP-konfigurationen

Som standard skriver MAIL_MAILER=log beskederne i logfilerne i stedet for at sende dem. For at modtage notifikationer, som advarsler om abonnementer, sætter du afsendelsen op i .env. Dokumentationen beder dig om altid at ændre MAIL_FROM og SITE_OWNER, ellers bliver der aldrig sendt nogen e-mail.

På en Simafri VPS går afsendelsen gennem et autentificeret SMTP-relay på port 587: adressen på en mailkonto, du allerede 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

Backup

Firefly III har ingen indbygget backuprutine: dokumentationen anbefaler systemets egne værktøjer og påpeger, at applikationens eksportfunktion ikke er en backup. Med Docker er det her, hvad du skal gemme:

ElementHvad det rummerSkal der tages backup
Databasen (firefly_iii_db)Konti, transaktioner, budgetter, regler og brugereObligatorisk
De vedhæftede filer (firefly_iii_upload)Filerne, der er knyttet til transaktionerneObligatorisk
.envIndstillingerne og frem for alt APP_KEYObligatorisk, krypteret
.db.envAdgangsoplysningerne til databasenObligatorisk, krypteret
docker-compose.yml og .importer.envDin version af de officielle filerAnbefalet

Databasen, mens tjenesten kører

Med MariaDB eksporterer mariadb-dump databasen uden at stoppe tjenesten; indstillingen --single-transaction giver en konsistent kopi af InnoDB-tabellerne uden at låse dem. Kørt fra mappen med Compose-filen læser kommandoen adgangsoplysningerne fra containerens 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 samme idé gennem pg_dump:

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

Planlæg denne eksport på serveren mindst én gang om dagen, og ryd op i filerne, som hober sig op.

Volumenerne, med tjenesten stoppet

Dokumentationen arkiverer hvert volumen med en midlertidig container. Docker Compose sætter projektnavnet foran volumenernes navne, og som standard er det mappens navn: kontrollér de nøjagtige navne, før du kører 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

Et fejlstavet volumennavn giver ingen fejl: Docker opretter et tomt volumen under det navn og arkiverer det, hvilket overskriver den forrige backup. Dokumentationen beder dig om at kontrollere, at volumenet findes, før hver arkivering.

Opbevar en kopi af .env og af disse arkiver uden for serveren, krypteret, da den rummer nøglen og adgangsoplysningerne til databasen. Lagt på serverens disk indgår disse filer også i dens natlige backup.

Gendan

Dokumentationen gendanner et volumen med den omvendte kommando, med tjenesten stoppet; volumenet med vedhæftede filer gendannes på samme måde:

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-eksport indlæses igen i den kørende database:

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

Gendan også .env med dens APP_KEY, start igen, og åbn dine konti. Dokumentationen gentager det efter hver metode: det første, du gør med en backup, er at gendanne den for at kontrollere, at den virker.

Opdateringer og migreringer

Firefly III opgraderer sig selv, også fra så gamle versioner som 4.7, og migrerer sin database, når containeren starter. Dokumentationen advarer om, at visse opgraderinger fjerner eller rydder op i data, og beder om en backup af databasen og volumenerne før hver af dem, især på tværs af hovedversioner. Fra mappen med Compose-filen:

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

Importeren opdateres på samme måde, med docker compose rm -f mellem stop og hentning af imagene, ifølge dens dokumentation.

Hvem gør hvad på en Managed VPS

Selvhosting kræver, at du holder serveren ud over selve applikationen. På en Managed VPS tager vores teams sig af serveren og følger din instans proaktivt; Firefly III forbliver din software, med dens indstillinger og dine økonomiske data.

EmneVores teamsDig
ServerenOpdateringer af system og sikkerhed, indgreb på serveren inkluderetDet tidspunkt, der passer til din drift
OvervågningenServeren følges døgnet rundt, alle ugens dage, med indgreb uden at vente på dit opkaldGennemlæsning af din instans' logfiler
Firefly IIIProaktiv opfølgning: fejl, langsomme svartider, cronjobbet og diskplads opdages, og en rettelse anbefalesInstallation, opdateringer og indstillinger, som du gennemfører, selv eller med din AI-assistent
Konti og dataDen server, der bærer dem, overvåget og sikkerhedskopieretBrugerne, tofaktorgodkendelsen, Data Importer og dens dataudbydere
BackupHver nat, krypteret og opbevaret uden for maskinen; gendannelse inkluderetDe eksporter, der er specifikke for Firefly III, og anmodningen om gendannelse, når du får brug for den
MigreringenDin nuværende server flyttes, uden beregningTidspunktet for omlægningen

Hvis du foretrækker, at vores teams griber ind i selve applikationen, faktureres den ydelse pr. time eller som fast pris, med et overslag oplyst før indgrebet.

Firefly III på en server, der passes for dig

Med en Managed VPS fra Simafri holder vores teams serveren bag din Firefly III-instans opdateret, overvåger den dag og nat og griber ind uden at vente på dit opkald; de følger også din instans proaktivt og anbefaler dig de nyttige rettelser, som du gennemfører, selv eller med din AI-assistent. Backup krypteres hver nat og opbevares uden for maskinen, gendannelsen er inkluderet, og migreringen af din nuværende server sker uden beregning.

Opdag Managed VPS

Ofte stillede spørgsmål

Er Firefly III gratis?

Ja. Firefly III er under AGPL-3.0-or-later-licensen: du kan køre det til dig selv, din familie eller din virksomhed uden at skulle købe en licens. Hvis du ændrer det, skal din version tilbyde sin kildekode til dem, der bruger den via netværket. Tilbage er udgiften til den server, der kører det.

Hvordan installerer man Firefly III med Docker Compose?

Hent de tre officielle filer, docker-compose.yml, .env og .db.env. Angiv en APP_KEY på 32 tegn og den samme adgangskode i DB_PASSWORD og MYSQL_PASSWORD før første start, og kør derefter docker compose up -d. Sæt så en reverse proxy med HTTPS foran.

Hvad bruges APP_KEY til i Firefly III?

APP_KEY er krypteringsnøglen til sessionerne. Den er på præcis 32 tegn uden specialtegn som = eller # og holdes hemmelig. Dokumentationen beder dig om at tage backup af den sammen med volumenerne: den er en del af det, du skal bruge for at gendanne en instans.

Hvorfor forbliver Firefly III's links på http bag en proxy?

Docker-FAQ'en siger, at TRUSTED_PROXIES=* mangler i filen .env: uden den ignorerer Firefly III proxyens header X-Forwarded-Proto, linkene forbliver på http, og formularer og grafer holder op med at virke. Angiv også din offentlige adresse i APP_URL.

Hvordan sætter man cronjobbet til Firefly III op med Docker?

Den officielle Compose-fil indeholder en tjeneste cron, som kalder applikationen hver dag kl. 3 om natten. Angiv et STATIC_CRON_TOKEN på præcis 32 tegn i .env, og genstart derefter stakken. Ét enkelt job betjener alle instansens brugere.

Hvordan åbner man Firefly III for flere brugere?

Den første bruger, der tilmelder sig, bliver ejer, og derefter lukker tilmeldingen. Ejeren åbner den igen i /settings under konfigurationsindstillingerne for Firefly III. Hver bruger beholder derefter en økonomisk administration, der er adskilt fra de andres.

Hvordan tager man backup af Firefly III?

Tag backup af databasen med en eksport via mariadb-dump eller pg_dump, af volumenet med vedhæftede filer og af filerne .env og .db.env, krypteret. Applikationens eksportfunktion er ikke en backup. Test gendannelsen lige efter den første backup.

Dækker en Managed VPS Firefly III?

En Managed VPS dækker serveren: system, sikkerhed, overvågning og backup. Vores teams følger også din instans proaktivt og anbefaler dig de nyttige rettelser, som du gennemfører. Et indgreb i selve applikationen faktureres pr. time eller som fast pris.

Kilder og officiel dokumentation

Kontakt os