Run it yourself
One Node process and one SQLite file.
Gitupcms is an Astro SSR app (@astrojs/node, standalone) with a SQLite database (better-sqlite3). It needs Node 22+ and pnpm.
- cms/
- src/
- lib/ (detection, GitHub, workspaces, media, SEO, comments)
- components/ (React islands and Bejamas UI)
- pages/ (Astro pages and API routes)
- kit/i18n/ (the language kit copied into sites)
- widget/ (the comments embed)
- .env.example
- src/
- docs/ (this site)
Local
Create a GitHub OAuth app
Callback URL: http://localhost:4321/api/auth/callback/github.
Configure
cd cms
cp .env.example .env # GitHub OAuth app + BETTER_AUTH_SECRETRun
pnpm install
pnpm dev # http://localhost:4321SQLite tables are created on boot.
Production build
pnpm install --frozen-lockfile
pnpm build # also builds the comments widget
node ./dist/server/entry.mjs # HOST and PORT from the environment
Docker
cms/ has a Dockerfile and a docker-compose.yml, so the CMS runs the same on any machine with Docker: no Node, pnpm or build tools on the host.
cd cms
cp .env.example .env # GitHub OAuth app + BETTER_AUTH_SECRET
docker compose up -d --build # http://localhost:4321
- The SQLite database and preview checkouts live in the
gitupcms-datavolume (/datain the container). Updating isgit pullanddocker compose up -d --build; the data stays. - The port is bound to
127.0.0.1. On a server, put Caddy or another proxy in front for HTTPS, as in Server. - With
PREVIEW_RUNNER=1, previews run inside the CMS container, as the same user. Turn it on only for sites you trust; leavePREVIEW_DOCKERunset, the container has no Docker.
See Environment for every variable and Server for a full Linux setup.