← Tous les articles • 08/03/2026 • 2 min de lecture

Héberger un microservice Rust sur Hetzner pour 6 €/mois (Docker + CI)

Hébergement prod pas cher pour API Axum en Rust : Hetzner CX22, Docker, Caddy, GitHub Actions, Postgres. 6 €/mois, TLS, déploiements sans downtime.

#deployment#hetzner#docker#backend

Pas besoin de Kubernetes à 80 €/mois pour ta première API Rust. Je fais tourner des petits services Axum sur un CX22 Hetzner à 6 € avec Docker et Caddy : TLS, déploiements auto, ~5k rps de marge.

Transparence : les liens ci-dessous sont affiliés. Tu paies pareil, je touche une petite commission qui finance les articles gratuits. J’utilise exactement ce setup moi-même. Alternative : DigitalOcean si tu préfères leur DX.

Pourquoi Hetzner ?

Besoin de US uniquement ou de Postgres managé ? Prends DigitalOcean ou Fly.io. Besoin de pas cher et rapide en Europe ? Hetzner gagne.

👉 20 € de crédit Hetzner ici (remplace YOURCODE dans config.toml)

1. Dockerfile (multi-stage, minuscule)

FROM rust:1.82-slim AS build
WORKDIR /app
COPY Cargo.toml Cargo.lock ./
COPY src ./src
COPY migrations ./migrations
RUN apt-get update && apt-get install -y pkg-config libssl-dev \
 && cargo build --release

FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y ca-certificates libssl3 \
 && rm -rf /var/lib/apt/lists/*
COPY --from=build /app/target/release/rust-tasks-api /usr/local/bin/api
COPY --from=build /app/migrations ./migrations
ENV RUST_LOG=info ADDR=0.0.0.0:8080
EXPOSE 8080
CMD ["/usr/local/bin/api"]

Image de ~30 à 50 Mo. Les binaires Rust quasi statiques adorent les images slim.

2. Compose et Caddy (TLS en 5 min)

# compose.yaml
services:
  api:
    image: ghcr.io/you/rust-tasks-api:latest
    env_file: .env
    restart: unless-stopped
  caddy:
    image: caddy:2-alpine
    ports: ["80:80", "443:443"]
    volumes: ["./Caddyfile:/etc/caddy/Caddyfile", "caddy_data:/data"]
    restart: unless-stopped
volumes: { caddy_data: {} }
# Caddyfile
api.yourdomain.com {
    reverse_proxy api:8080
}

Caddy gère Let’s Encrypt tout seul. Pas de danse certbot avec nginx.

3. Déploiement CI (GitHub Actions)

name: deploy
on: { push: { branches: [main] } }
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: YOUR_GITHUB_USERNAME
          password: GHCR_TOKEN_AS_SECRET
      - uses: docker/build-push-action@v6
        with: { push: true, tags: ghcr.io/YOU/rust-tasks-api:latest }
      - name: pull and restart on VPS
        uses: appleboy/ssh-action@v1
        with:
          host: HETZNER_HOST_AS_SECRET
          username: root
          key: HETZNER_SSH_KEY_AS_SECRET
          script: |
            cd /opt/api && docker compose pull && docker compose up -d
            docker image prune -f

Push sur main, en ligne en ~2 min. Assez zéro-downtime pour une v1 (tu ajouteras du blue/green plus tard).

4. Postgres : où ?

Détail des coûts

Compare : K8s managé + LB + BDD managée, 60 à 150 €/mois pour le même trafic.

Checklist de durcissement

Ensuite : ajoute /metrics Prometheus avec des alertes, puis lis le guide latence p99 avant de scaler.


Ça t'a plu ? Récupère la checklist prod.

Template Axum + patterns Postgres + checklist p99. Gratuit, un email par semaine.

Je la veux →

🚀 Gratuit : la checklist Rust Backend Prod

Rejoins les devs backend. Reçois mon template Axum, ma checklist latence p99 et mes questions d'entretien. Un email pratique par semaine.

Zéro spam. Désinscription en un clic. Ce que tu vas recevoir →