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.