Faça o deploy de Firefly III no Pethost com um clique
Um gerenciador de finanças pessoais com contabilidade de partidas dobradas
O que acontece
- Você entra no Pethost ou cria uma conta, com uma passkey, GitHub ou Google.
- Ainda não tem máquina? Você escolhe um plano, e nós preparamos uma para você. O link espera no seu navegador até ela ficar pronta.
- Novo projeto abre no app, e você clica em Criar projeto.
- Em um ou dois minutos o app está no ar no próprio endereço com HTTPS. Os segredos dele são gerados ao acaso, e os dados vão para o backup noturno.
- É um projeto como qualquer outro: o compose.yaml, o .env, os logs e um terminal ficam no painel, e seu agente pode alterá-lo, fazer rollback ou restaurá-lo.
Primeiros passos
Abra o endereço e cadastre-se: a primeira conta é a única, e o cadastro fecha depois dela. Faça isso logo: até lá, a página fica aberta para quem tiver o endereço. O Firefly III roda em UTC: para outro fuso, adicione TZ, por exemplo Europe/Berlin, ao .env do projeto e faça o deploy de novo.
O que roda
O template é este compose.yaml e as variáveis que ele grava no .env do projeto. O Pethost roda o arquivo exatamente como está escrito.
services:
app:
image: fireflyiii/core:version-6
restart: unless-stopped
environment:
APP_URL: ${APP_URL}
APP_KEY: ${APP_KEY}
STATIC_CRON_TOKEN: ${STATIC_CRON_TOKEN}
# TLS ends at the machine's proxy, which says so in X-Forwarded-Proto.
TRUSTED_PROXIES: "**"
DB_CONNECTION: pgsql
DB_HOST: db
DB_PORT: "5432"
DB_DATABASE: firefly
DB_USERNAME: firefly
DB_PASSWORD: ${DB_PASSWORD}
TZ: ${TZ:-UTC}
depends_on:
db:
condition: service_healthy
volumes:
- upload:/var/www/html/storage/upload
db:
image: postgres:18-alpine
restart: unless-stopped
environment:
POSTGRES_DB: firefly
POSTGRES_USER: firefly
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- db:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -U firefly -d firefly"]
interval: 5s
timeout: 5s
retries: 12
start_period: 30s
# Calls Firefly III's daily jobs at 03:00 UTC: recurring transactions, auto-budgets, bill reminders.
cron:
image: alpine:3
restart: unless-stopped
command: [sh, -c, 'echo "0 3 * * * wget -qO- http://app:8080/api/v1/cron/${STATIC_CRON_TOKEN}" | crontab - && exec crond -f -L /dev/stdout']
depends_on:
app:
condition: service_healthy
volumes:
upload:
db: