deploy without node
Some checks failed
ci / site (push) Has been cancelled
publish-image / publish (push) Has been cancelled

This commit is contained in:
2026-02-10 02:52:14 -05:00
parent 03df2b3a6c
commit 3b0b97f139
25 changed files with 312 additions and 51 deletions

View File

@@ -86,7 +86,9 @@ Instrumentation checklist:
## Deployment (Linode + Docker)
Build and run:
The production host is intentionally minimal and only needs Docker (no Node.js on the server).
### Local Docker
```bash
docker compose build
@@ -95,24 +97,29 @@ docker compose up -d
The container serves the static output on port `8080` (map or proxy as needed).
### Refreshing Content (Manual)
### Production (Docker-Only Host)
Content is fetched at build time into `site/content/cache/content.json`.
In production, CI builds and publishes a Docker image (nginx serving the static output). The server updates by pulling that image and restarting the service.
On the Linode host:
Runbook: `deploy/runbook.md`.
### Refreshing Content (Manual, Docker-Only)
Content is fetched at build time into `site/content/cache/content.json` (typically in CI), then packaged into the image.
On the server host:
```bash
./scripts/refresh.sh
```
This:
1. Runs `npm run fetch-content` in `site/`
2. Rebuilds the Docker image
3. Restarts the container
1. Pulls the latest published image
2. Restarts the service (no build on the host)
### Refreshing Content (Scheduled)
Install a daily cron using `deploy/cron.example` as a starting point.
Rollback:
- Re-run `docker compose up -d` with a previously built image/tag, or restore the last known-good repo state and rerun `scripts/refresh.sh`.
- Re-deploy a known-good image tag/digest (see `deploy/runbook.md`).