This repository is designed for a fresh Ubuntu 24.04 LTS VPS.
For Hetzner Cloud-specific instructions, follow docs/hetzner.md.
- Install Docker and Docker Compose.
- Add your deploy user to the
dockergroup. - Open only ports
80and443in the firewall. - Point these DNS records at the VPS:
issues.bobadilla.techtasks.bobadilla.techflows.bobadilla.tech
- Copy .env.example to .env.
- Copy services/glitchtip.env.example to services/glitchtip.env.
- Copy services/plane.env.example to services/plane.env.
- Copy services/n8n.env.example to services/n8n.env.
- Run
./scripts/generate-secrets.sh --applyto generate the shared passwords and synchronize service.envcredentials. - Review
.envand confirm the DNS names and generated values are correct. - Make sure the domain names in the service env files match the DNS records.
Configure outbound email before onboarding users so invite and reset emails can be delivered.
For Resend SMTP, use resend as the SMTP username and your Resend API key as
the SMTP password.
- In
services/glitchtip.env, replaceEMAIL_URL=consolemail://with your Resend SMTP URL, for example:EMAIL_URL=smtp://resend:<resend_api_key>@smtp.resend.com:465/?ssl=True - In
services/plane.env, set SMTP values:EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackendEMAIL_HOST=smtp.resend.comEMAIL_PORT=465EMAIL_HOST_USER=resendEMAIL_HOST_PASSWORD=<resend_api_key>EMAIL_USE_TLS=falseEMAIL_USE_SSL=true - Keep real SMTP secrets only in runtime
.envfiles on the server. Do not store real credentials in*.examplefiles. - Recreate app services after env updates:
docker compose up -d --force-recreate glitchtip plane - Verify email delivery by sending one invite from each app.
Run:
docker compose up -dThen wait for the database, MinIO, Plane, GlitchTip, and n8n containers to settle.
- Open
https://issues.bobadilla.techand create the first GlitchTip user, organization, and project. - Copy the GlitchTip DSN and add it to your application.
- Open
https://tasks.bobadilla.techand create the first Plane account/workspace. - Open
https://flows.bobadilla.techand finish the n8n setup. - Send one invite from GlitchTip and one invite from Plane to confirm SMTP.
- Plane uses its upstream all-in-one image, which still requires RabbitMQ and MinIO in addition to the shared PostgreSQL and Redis services.
- GlitchTip is configured to keep retention under control from startup.
- n8n stores workflow data in PostgreSQL and prunes execution history aggressively.