Alojar Firefly III num VPS gerido é guardar as suas contas, os seus orçamentos e as suas despesas numa máquina sua, que as nossas equipas mantêm atualizada e supervisionam dia e noite. O Firefly III é um gestor de finanças pessoais livre e de código aberto, sob licença AGPL. Este guia segue a sua documentação oficial: a instalação com o Docker Compose, a APP_KEY, o HTTPS, a primeira conta, a tarefa cron, a base de dados, o importador de dados, os e-mails, as cópias de segurança e as atualizações.
Por Simon Vasconcelos Lee
Publicado a 10 de novembro de 2026Leitura: 13 minutos
docker-compose.yml, .env e .db.env. Escolha a palavra-passe da base de dados antes do primeiro arranque.APP_KEY tem exatamente 32 caracteres, mantém-se secreta e entra nas cópias de segurança juntamente com os dados.TRUSTED_PROXIES=* e o seu endereço em APP_URL e crie logo a sua conta: o primeiro utilizador a inscrever-se torna-se o proprietário, e as inscrições fecham-se a seguir.cron do ficheiro oficial executa todas as noites os orçamentos automáticos e as transações recorrentes. Faça a cópia da base de dados, do volume dos anexos e do .env antes de cada atualização.O Firefly III é um gestor de finanças pessoais concebido para o autoalojamento. Acompanha as suas despesas e as suas receitas, com orçamentos, categorias e etiquetas, para que veja para onde vai o seu dinheiro. O seu README descreve-o como totalmente autoalojado e isolado: não contacta nenhum servidor externo enquanto não lho pedir expressamente.
Uma instância acolhe tantos utilizadores quantos quiser, cada um com uma administração financeira totalmente separada das outras. A documentação descreve um modelo de partilha de uma mesma administração, atualmente em desenvolvimento.
O Firefly III é publicado sob a GNU Affero General Public License, versão 3 ou, à sua escolha, qualquer versão posterior: é o identificador SPDX AGPL-3.0-or-later do seu ficheiro composer.json. O texto afirma uma permissão ilimitada de fazer correr o programa não modificado. Pode, portanto, utilizar a imagem publicada pelo projeto para si, para a sua família ou para a sua empresa, sem licença para comprar.
O artigo 13 acrescenta uma condição própria da AGPL: se modificar o programa, a sua versão tem de oferecer a todos os que a utilizam à distância, pela rede, o meio de obter gratuitamente o seu código-fonte. O importador de dados está sob a mesma licença.
A documentação apresenta o Docker Compose como a forma mais simples de instalar o Firefly III. Num servidor com o Docker instalado, crie uma pasta e transfira para ela os três ficheiros oficiais, em bruto: os espaços contam, e a documentação pede que não os copie a partir do navegador.
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
docker-compose.yml descreve três serviços: app, a aplicação, db, uma base de dados MariaDB, e cron, a tarefa agendada..env contém as definições do Firefly III, entre as quais a chave de cifragem e os acessos à base de dados..db.env contém as definições da base de dados. Mantenha os dois nomes: o ficheiro Compose refere-se a eles através de env_file.Gere duas cadeias de 32 caracteres com o comando indicado no ficheiro .env: uma para a chave, outra para a palavra-passe da base de dados.
head /dev/urandom | LC_ALL=C tr -dc 'A-Za-z0-9' | head -c 32 && echo
SITE_OWNER=you@example.com
APP_KEY=
DB_PASSWORD=
APP_URL=https://finances.example.com
MYSQL_PASSWORD=
APP_KEY cifra as suas sessões. Tem exatamente 32 caracteres, sem caracteres especiais como =, #, < ou >, e o ficheiro pede que a guarde em total segurança.DB_PASSWORD no .env e MYSQL_PASSWORD no .db.env recebem o mesmo valor.SITE_OWNER: o seu endereço, apresentado em certos erros aos utilizadores que não são administradores.APP_URL: o endereço público da sua instância. O ficheiro explica que serve para validar certos pedidos e para construir as ligações dos e-mails.TZ: o seu fuso horário, no formato da base de dados tz, como mostra o exemplo do ficheiro.Escolha a palavra-passe da base de dados antes do primeiro arranque. A base de dados guarda-a no seu volume logo que é criada: se a mudar depois, deixa de corresponder, e a FAQ Docker só indica uma saída, eliminar os contentores e os volumes e recomeçar.
O ficheiro oficial publica a aplicação na porta 80 de todos os endereços do servidor. Para a servir em HTTPS atrás de um proxy inverso na mesma máquina, mude esta única linha no serviço app:
ports:
- 127.0.0.1:8080:8080
docker compose -f docker-compose.yml up -d --pull=always
docker compose -f docker-compose.yml logs -f
No primeiro arranque, o contentor cria e migra a base de dados por si próprio. Quando a instalação termina, o Firefly III agradece-lhe no registo por o ter instalado: passe ao proxy inverso.
latest acompanha a última versão estável. Uma etiqueta como version-6.7.9 fixa uma versão; o projeto retira as antigas ao fim de cerca de seis meses.linux/amd64 e linux/arm64.firefly_iii_upload guarda os anexos, firefly_iii_db a base de dados.A documentação não indica nenhum valor de memória; a sua FAQ Docker sugere PHP_MEMORY_LIMIT=512M ou mais se o PHP ficar sem memória. O tamanho depende do número de utilizadores, do volume de transações e do importador de dados. Num VPS gerido, descreva-nos a sua utilização e recomendamos-lhe o tamanho adequado.
O Firefly III serve a aplicação em HTTP na porta 8080 dentro do contentor, e o HTTPS fica a cargo do proxy inverso colocado à frente. A aplicação lê o cabeçalho X-Forwarded-Proto para saber que o visitante chegou em HTTPS, desde que confie no proxy:
TRUSTED_PROXIES=*
A FAQ Docker é clara neste ponto: sem TRUSTED_PROXIES=*, as ligações ficam em http, os formulários e os gráficos deixam de funcionar e os cabeçalhos de segurança CSP falham. Com a porta publicada em 127.0.0.1, só o proxy do próprio servidor chega à aplicação. Recrie o contentor depois de cada alteração ao ficheiro .env:
docker compose up -d --force-recreate app
O Caddy obtém por si próprio o certificado Let's Encrypt, e a sua diretiva reverse_proxy define por predefinição os cabeçalhos X-Forwarded-For, X-Forwarded-Proto e X-Forwarded-Host:
finances.example.com {
reverse_proxy 127.0.0.1:8080
}
Este bloco retoma os cabeçalhos da FAQ de instalação, bem como os buffers que ela sugere contra os erros 502 quando a aplicação devolve um token num cabeçalho longo. Escuta na porta 80 para deixar o Certbot instalar o HTTPS:
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;
}
}
O Certbot instala depois o certificado e encarrega-se de o renovar:
sudo certbot --nginx
finances.example.com. A FAQ assinala que o Laravel não interpreta um endereço IPv6 em bruto no URL.O primeiro utilizador a inscrever-se torna-se o proprietário da instância. Por segurança, as inscrições fecham-se então sozinhas: a maioria das pessoas instala o Firefly III só para si.
/settings, abra as opções de configuração do Firefly III, desmarque a opção que desativa as inscrições e guarde.AUTHENTICATION_GUARD=remote_user_guard, o Firefly III confia num proxy de autenticação colocado à frente, como o Authelia ou o Authentik, que lhe transmite o utilizador num cabeçalho.Várias funcionalidades só funcionam com uma tarefa agendada: os orçamentos automáticos, as transações recorrentes, os avisos de subscrição e as taxas de câmbio atualizadas. A imagem Docker não executa o cron por si própria; o ficheiro oficial acrescenta para isso um pequeno serviço cron, que chama a aplicação todos os dias às 3h00.
Autentica-se com um token estático. Gere uma terceira cadeia com o mesmo comando e coloque-a no .env:
STATIC_CRON_TOKEN=
Este token tem exatamente 32 caracteres: o código da versão 6.7.9 não aceita nenhum outro comprimento. Eis o serviço tal como o ficheiro oficial o declara; o $$ duplo é intencional e remete para as linhas TZ e STATIC_CRON_TOKEN do ficheiro .env:
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
Uma única tarefa basta para todos os utilizadores da instância. Para verificar que correu, leia o registo do contentor: cada tarefa dá conta do resultado em JSON, com job_fired e job_succeeded.
docker logs firefly_iii_cron
Para a executar manualmente, a FAQ Docker pede que passe pelo utilizador www-data e não por root: a FAQ associa esta armadilha a erros de permissões nos ficheiros de registo:
docker exec --user www-data firefly_iii_core /usr/local/bin/php /var/www/html/artisan firefly-iii:cron --force
O ficheiro oficial traz o MariaDB, com a imagem mariadb:lts. O Firefly III suporta também o PostgreSQL e o SQLite, escolhidos com DB_CONNECTION no .env:
| Base de dados | Configuração | Cópia de segurança |
|---|---|---|
| MariaDB ou MySQL | O serviço db do ficheiro oficial; DB_CONNECTION=mysql, porta 3306 | Uma exportação com mariadb-dump, ou o volume da base de dados com o serviço parado |
| PostgreSQL | DB_CONNECTION=pgsql, porta 5432, a imagem postgres e as variáveis POSTGRES_* no .db.env | Uma exportação com pg_dump, ou o volume da base de dados com o serviço parado |
| SQLite | DB_CONNECTION=sqlite, sem serviço db, e um volume montado em /var/www/html/storage/database | O volume da base de dados, com o serviço parado |
DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432
Para o PostgreSQL, a documentação aponta também o serviço db para a imagem postgres, que instala o PostgreSQL 18, e monta o seu volume em /var/lib/postgresql. No .db.env, as variáveis MYSQL_* passam a POSTGRES_USER, POSTGRES_DB e POSTGRES_PASSWORD.
Faça esta escolha antes de introduzir as suas primeiras transações. A FAQ indica que passar de uma base de dados para outra continua a ser possível, sem ser suportado pelo próprio Firefly III, e que a exportação da aplicação não leva todos os dados.
O Firefly III Data Importer é uma ferramenta à parte, com a sua própria instalação e as suas próprias atualizações; a sua versão 2.3.5 saiu a 23 de setembro de 2026. Importa ficheiros CSV e CAMT.053, e pode também ir buscar as transações dos seus bancos através de fornecedores de dados terceiros, cada um com as suas próprias condições.
O repositório Docker oficial disponibiliza-o num segundo ficheiro, docker-compose-importer.yml, que mantém os mesmos serviços e acrescenta importer. As suas definições ficam num ficheiro .importer.env, tirado do .env.example do importador. Sirva-o com o seu próprio nome de domínio, com uma porta publicada em local e um segundo bloco de proxy: a FAQ pede que não o coloque numa subpasta.
FIREFLY_III_URL=http://app:8080
VANITY_URL=https://finances.example.com
TRUSTED_PROXIES=*
FIREFLY_III_URL: o endereço interno da aplicação, a que o importador chega pela rede Docker.VANITY_URL: o endereço público do Firefly III, o que os seus utilizadores conhecem./callback, e desmarque «Confidential». O importador pede-lhe depois o identificador desse cliente.FIREFLY_III_ACCESS_TOKEN vazio e mantenha FIREFLY_III_URL; cada utilizador inicia então sessão no importador com a sua própria conta.Por predefinição, MAIL_MAILER=log escreve as mensagens nos registos em vez de as enviar. Para receber as notificações, como os avisos de subscrição, configure o envio no .env. A documentação pede que mude sempre MAIL_FROM e SITE_OWNER, sem o que nenhum e-mail chega a partir.
Num VPS Simafri, o envio passa por uma retransmissão SMTP autenticada, na porta 587: o endereço de uma conta de correio que já tenha, ou o Simafri Suite.
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
MAIL_ENCRYPTION aceita null, ssl, starttls ou tls, consoante o seu fornecedor; o código da versão 6.7.9 recorre a tls quando o valor está vazio./settings/notifications envia um e-mail de teste, depois de o contentor ter sido recriado./slack.O Firefly III não tem uma rotina de cópia de segurança integrada: a documentação recomenda as ferramentas do próprio sistema e lembra que a função de exportação da aplicação não é uma cópia de segurança. Com o Docker, eis o que guardar:
| Elemento | O que guarda | A copiar |
|---|---|---|
A base de dados (firefly_iii_db) | Contas, transações, orçamentos, regras e utilizadores | Obrigatório |
Os anexos (firefly_iii_upload) | Os ficheiros anexados às transações | Obrigatório |
.env | As definições e, sobretudo, a APP_KEY | Obrigatório, cifrado |
.db.env | Os acessos à base de dados | Obrigatório, cifrado |
docker-compose.yml e .importer.env | A sua versão dos ficheiros oficiais | Recomendado |
Com o MariaDB, o mariadb-dump exporta a base de dados sem parar o serviço; a sua opção --single-transaction dá uma cópia coerente das tabelas InnoDB sem as bloquear. Executado a partir da pasta do ficheiro Compose, o comando lê os acessos no ambiente do contentor:
docker exec firefly_iii_db sh -c 'mariadb-dump --single-transaction -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' > firefly-$(date +%F).sql
Com o PostgreSQL, o mesmo princípio passa pelo pg_dump:
docker exec firefly_iii_db sh -c 'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' > firefly-$(date +%F).sql
Agende esta exportação no servidor, pelo menos uma vez por dia, e faça a triagem dos ficheiros, que se acumulam.
A documentação arquiva cada volume com um contentor descartável. O Docker Compose prefixa os nomes dos volumes com o nome do projeto, que por predefinição é o nome da pasta: verifique os nomes exatos antes de lançar o arquivo.
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
Um nome de volume mal escrito não provoca nenhum erro: o Docker cria um volume vazio com esse nome e arquiva-o, o que substitui a cópia de segurança anterior. A documentação pede que verifique a existência do volume antes de cada arquivo.
Guarde uma cópia do .env e destes arquivos fora do servidor, cifrada, porque contém a chave e os acessos à base de dados. Colocados no disco do servidor, estes ficheiros entram também nas suas cópias de segurança noturnas.
A documentação restaura um volume com o comando inverso, com o serviço parado; o volume dos anexos restaura-se da mesma forma:
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
Uma exportação SQL volta a carregar-se na base de dados em funcionamento:
docker exec -i firefly_iii_db sh -c 'mariadb -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' < firefly-YYYY-MM-DD.sql
Restaure também o .env com a sua APP_KEY, reinicie e depois abra as suas contas. A documentação repete-o depois de cada método: a primeira coisa a fazer com uma cópia de segurança é restaurá-la, para verificar que funciona.
O Firefly III atualiza-se por si próprio, mesmo a partir de versões tão antigas como a 4.7, e migra a sua base de dados no arranque do contentor. A documentação avisa que algumas atualizações eliminam ou limpam dados, e pede uma cópia de segurança da base de dados e dos volumes antes de cada uma, sobretudo entre versões principais. A partir da pasta do ficheiro Compose:
docker compose stop
docker compose pull
docker compose -f docker-compose.yml up -d --remove-orphans
/settings.php artisan correction:rollback-single-migration retira a última entrada de migração sem tocar nos dados, e depois php artisan migrate executa-a de novo, dentro do contentor.O importador atualiza-se da mesma forma, com docker compose rm -f entre a paragem e a transferência das imagens, segundo a sua documentação.
O autoalojamento exige cuidar do servidor para além da aplicação. Num VPS gerido, as nossas equipas assumem o servidor e acompanham a sua instância de forma proativa; o Firefly III continua a ser o seu software, com as suas definições e os seus dados financeiros.
| Assunto | As nossas equipas | Você |
|---|---|---|
| O servidor | Atualizações do sistema e de segurança, intervenções no servidor incluídas | O momento que convém à sua atividade |
| A supervisão | Servidor acompanhado 24 horas por dia, 7 dias por semana, com intervenção sem esperar pela sua chamada | A leitura dos registos da sua instância |
| Firefly III | Acompanhamento proativo: erros, lentidão, tarefa cron e espaço em disco identificados, correção recomendada | A sua instalação, as suas atualizações e as suas definições, que aplica diretamente ou com o seu assistente de IA |
| As contas e os dados | O servidor que os suporta, vigiado e com cópias de segurança | Os utilizadores, a autenticação de dois fatores, o importador de dados e os seus fornecedores de dados |
| As cópias de segurança | Todas as noites, cifradas e guardadas fora da máquina; restauro incluído | As exportações próprias do Firefly III e o pedido de restauro, quando precisar |
| A migração | O seu servidor atual migrado, oferecido | O momento da mudança |
Se preferir que as nossas equipas intervenham na própria aplicação, este serviço é faturado à hora ou por pacote, com um orçamento comunicado antes da intervenção.
Com um VPS gerido da Simafri, as nossas equipas mantêm atualizado o servidor da sua instância Firefly III, vigiam-no dia e noite e intervêm sem esperar pela sua chamada; acompanham também a sua instância de forma proativa e recomendam-lhe as correções úteis, que aplica diretamente ou com o seu assistente de IA. As cópias de segurança são cifradas todas as noites e guardadas fora da máquina, o seu restauro está incluído, e a migração do seu servidor atual é oferecida.
Sim. O Firefly III está sob licença AGPL-3.0-or-later: pode fazê-lo correr para si, para a sua família ou para a sua empresa sem licença para comprar. Se o modificar, a sua versão tem de oferecer o código-fonte a quem a utiliza pela rede. Resta o custo do servidor que o faz funcionar.
Transfira os três ficheiros oficiais, docker-compose.yml, .env e .db.env. Defina uma APP_KEY de 32 caracteres e a mesma palavra-passe em DB_PASSWORD e MYSQL_PASSWORD, antes do primeiro arranque, e execute docker compose up -d. Coloque depois um proxy inverso em HTTPS à frente.
A APP_KEY é a chave de cifragem das sessões. Tem exatamente 32 caracteres, sem caracteres especiais como = ou #, e mantém-se secreta. A documentação pede que a inclua nas cópias de segurança juntamente com os volumes: faz parte do que é preciso para restaurar uma instância.
A FAQ Docker indica que falta TRUSTED_PROXIES=* no ficheiro .env: sem isso, o Firefly III ignora o cabeçalho X-Forwarded-Proto do proxy, as ligações ficam em http e os formulários e os gráficos deixam de funcionar. Indique também o seu endereço público em APP_URL.
O ficheiro Compose oficial inclui um serviço cron que chama a aplicação todos os dias às 3h00. Defina um STATIC_CRON_TOKEN de exatamente 32 caracteres no .env e reinicie a pilha. Uma única tarefa serve todos os utilizadores da instância.
O primeiro utilizador a inscrever-se torna-se o proprietário, e as inscrições fecham-se a seguir. O proprietário volta a abri-las em /settings, nas opções de configuração do Firefly III. Cada utilizador mantém então uma administração financeira separada das outras.
Faça a cópia da base de dados, com uma exportação mariadb-dump ou pg_dump, do volume dos anexos e dos ficheiros .env e .db.env, cifrados. A função de exportação da aplicação não é uma cópia de segurança. Teste o restauro logo a seguir à primeira cópia.
Um VPS gerido cobre o servidor: sistema, segurança, supervisão e cópias de segurança. As nossas equipas acompanham também a sua instância de forma proativa e recomendam-lhe as correções úteis, que aplica. Uma intervenção na aplicação é faturada à hora ou por pacote.
Simafri
Vamos falar do seu projeto
Diga-nos em poucas palavras o que precisa: respondemos-lhe rapidamente.
Obrigado! O seu pedido foi enviado. Responderemos em breve.
Prefere o email? Escreva-nos para support@simafri.com.