Files
bincio-activity/docs/deployment/single-user.md
T
2026-04-08 19:37:33 +02:00

2.2 KiB

Single-user deployment

One person, one machine, all your data stays with you. This is the default and simplest mode.

GitHub Pages (free, automated)

uv run bincio render --deploy github

This builds site/dist/ and pushes it to the gh-pages branch. Requires npx gh-pages (npm install -g gh-pages).

Set the repository to serve from the gh-pages branch in GitHub → Settings → Pages.

Static hosting (Netlify, Vercel, Cloudflare Pages, etc.)

Build locally and deploy the site/dist/ directory. Or set up CI:

# .github/workflows/deploy.yml (example)
- run: uv run bincio render
- uses: actions/upload-pages-artifact@v3
  with:
    path: site/dist

VPS with nginx

Serve site/dist/ as a static directory. No server process needed for read-only access.

server {
    listen 80;
    server_name example.com;
    root /var/www/bincio/dist;
    index index.html;
    location / { try_files $uri $uri/ $uri.html =404; }
}

Enable the edit UI on a VPS

If you want to edit activities from the browser while on your VPS:

server {
    listen 443 ssl;
    server_name example.com;

    root /var/www/bincio/dist;

    location / {
        try_files $uri $uri/ $uri.html =404;
    }

    # Proxy /api/* to bincio edit (local-only, never exposed directly)
    location /api/ {
        proxy_pass http://127.0.0.1:4041;
        proxy_set_header Host $host;
    }
}

Then run bincio edit as a background service:

uv run bincio edit --data-dir ~/bincio_data

And set PUBLIC_EDIT_URL= (empty — the proxy makes /api/ same-origin) in your environment before building.

Keeping the site up to date

After extracting new activities or editing sidecars:

uv run bincio extract           # process new files
uv run bincio render            # rebuild site/dist/
rsync -av site/dist/ user@server:/var/www/bincio/dist/

Or automate with a cron job or GitHub Action.

Privacy note

Single-user mode has no authentication. The site is public to anyone with the URL. Use privacy: private in sidecar files to hide specific activities, or restrict access at the nginx level (HTTP basic auth, IP allowlist, etc.).