← Home

Deploying Astro SSR to a VPS with Podman

After local SSR works, deployment to a VPS is mostly an operations checklist.

This is the exact sequence that worked.

1. Install runtime tools

sudo apt-get update
sudo apt-get -y install podman podman-compose git

2. Clone the repository

If HTTPS fails with:

Invalid username or token. Password authentication is not supported

switch to SSH:

mkdir -p ~/.ssh && chmod 700 ~/.ssh
ssh-keygen -t ed25519 -C "vps-website" -f ~/.ssh/id_ed25519 -N ""
cat ~/.ssh/id_ed25519.pub

Add that public key as a Deploy Key in GitHub, then:

ssh-keyscan github.com >> ~/.ssh/known_hosts
git clone git@github.com:adrian-altner/website.git /opt/website

3. Start the app

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

Check:

podman ps
podman logs -f website
curl -I http://127.0.0.1:4321

If that returns 200, the app is healthy.

4. About Docker Hub auth errors

A common failure during first build:

unable to retrieve auth token: invalid username/password

Fix:

podman pull docker.io/library/node:20-bookworm-slim

If the pull succeeds, rerun podman-compose up --build -d.

5. About compose provider warnings

If Podman prints that it is using an external provider (docker-compose), install and select podman-compose explicitly:

sudo apt-get -y install podman-compose
export PODMAN_COMPOSE_PROVIDER=/usr/bin/podman-compose

Then continue using:

podman compose -f compose.yml up --build -d

For production, keeping the process boring is a feature. A short, repeatable deployment path is more valuable than clever automation.

← Home