AI Agent Deployment Guide
This guide provides a structured workflow for AI coding assistants to help users deploy applications with Gordon.
Deployment Workflow
Key Paths (VPS)
~/.config/gordon/gordon.toml # Main config (routes, registry)
~/.gordon/env/ # Env files per domain
~/.gordon/logs/containers/ # Container logs
Step 1: Add route in gordon.toml
[routes]
"app.example.com" = "my-app:latest"
Step 2: Create env file
Naming convention: domain with dots replaced by underscores.
Example: app.example.com → ~/.gordon/env/app_example_com.env
cat > ~/.gordon/env/app_example_com.env << 'EOF'
NODE_ENV=production
PUBLIC_API_URL=https://api.example.com
EOF
Step 3: Generate registry token (on VPS)
gordon auth token generate --subject username --expiry 720h
Step 4: Login to registry (local machine)
echo "TOKEN" | docker login -u username --password-stdin reg.example.com:5000
Step 5: Build and push
Tag images to match git tags + latest for bleeding edge:
# Get current git tag (falls back to "latest" if no tag)
TAG=$(git describe --tags --exact-match 2>/dev/null || echo "latest")
# Build with version tag and latest
docker buildx build --platform linux/amd64 \
-t reg.example.com:5000/my-app:$TAG \
-t reg.example.com:5000/my-app:latest \
--push .
Gordon auto-deploys when it receives the pushed image.
Step 6: Verify
curl -I https://app.example.com
ssh user@vps "cat ~/.gordon/logs/containers/app_example_com.log"
Framework Notes
SvelteKit / Next.js
Static env vars ($env/static/public, NEXT_PUBLIC_*) must be available at build time:
ARG PUBLIC_API_URL
ENV PUBLIC_API_URL=$PUBLIC_API_URL
Build with:
docker buildx build --build-arg PUBLIC_API_URL=https://api.example.com --push .
Secrets with pass
Use pass integration for sensitive values:
DATABASE_PASSWORD=${pass:gordon/app/db_password}
Troubleshooting
| Issue | Solution |
|---|---|
| HTTPS error on push | Add registry to insecure-registries in daemon.json |
| Container not starting | Check env file name matches domain pattern |
| Env vars not working | SvelteKit static env = build args, not runtime env |