Published March 18, 2025
From code to infrastructure: operating your own Symfony monolith
Why I deploy my applications on a VPS with Docker, Traefik and GitHub Actions instead of a managed platform - and what it changes.
When I migrated the Alivaon platform from a static template to a Symfony 7 monolith, the real question was not "which framework?" but "how do I operate it?". Software that does not run in production does not exist.
Choosing a VPS
A managed platform hides the infrastructure - convenient, until a need falls outside the box. On a Hetzner VPS I pay a fixed cost and control the whole chain: network, TLS, database, backups.
Docker + Traefik as the backbone
Every service runs in a container. Traefik acts as a reverse proxy and handles TLS automatically via Let's Encrypt:
labels:
- "traefik.enable=true"
- "traefik.http.routers.app.rule=Host(`alivaon.com`)"
- "traefik.http.routers.app.tls.certresolver=le"
Adding a new service means adding a few labels - not hand-configuring a web server.
Staging before production
The GitHub Actions pipeline builds the image, runs the tests, then deploys to a staging environment first that mirrors production. Nothing reaches users without having run somewhere else first.
What it changes
Owning the infrastructure changes how you write code: you think about migrations, logs and incident recovery from the design stage. That continuity - from the code down to the machine running it - is what defines how I work.
/ Contact
Software to design, deploy, operate?
Write to me. I reply within 48 h.