← Home

Operating Astro SSR in Production with Podman

Shipping is only the first half. The second half is operating the service calmly.

This runbook keeps the commands small and predictable.

Start and stop

From your project directory:

cd /opt/website
podman-compose -f compose.yml up -d
podman-compose -f compose.yml down

Single container control:

podman stop website
podman start website
podman restart website

Health checks

podman ps
podman logs -f website
curl -I http://127.0.0.1:4321
curl -I https://adrian-altner.de

The fastest signal is still an HTTP status code.

Deploy updates

cd /opt/website
git pull
podman-compose -f compose.yml up --build -d
podman image prune -f

This rebuilds the app image and replaces the running container with minimal friction.

Quick rollback idea

The simplest rollback is to redeploy the previous git commit:

cd /opt/website
git log --oneline -n 5
git checkout <previous-commit>
podman-compose -f compose.yml up --build -d

If everything looks good again, you can create a dedicated rollback branch/tag later.

Caddy checks

When HTTPS looks wrong:

sudo systemctl status caddy --no-pager
sudo journalctl -u caddy -n 100 --no-pager
sudo caddy validate --config /etc/caddy/Caddyfile

Most incidents are either DNS drift, expired assumptions about ports, or a changed proxy target.

Keep it boring

A production setup does not need to be complex.

It needs to be:

  • observable (logs, status, curl)
  • repeatable (up --build -d)
  • reversible (clear rollback path)

That is enough for a small, stable Astro deployment.

← Home