Skip to content

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.

SymfonyDockerTraefikCI/CDInfrastructure

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.