58 lines
2.0 KiB
Markdown
58 lines
2.0 KiB
Markdown
# System Overview
|
|
|
|
## Components
|
|
|
|
```
|
|
Browser
|
|
│
|
|
│ HTTPS (443)
|
|
▼
|
|
nginx ─── static files ──► /var/www/bincio-wiki/ (Astro build output)
|
|
│
|
|
│ proxy_pass (127.0.0.1:4042)
|
|
▼
|
|
FastAPI sidecar (edit/server.py)
|
|
├── reads/writes ──► pages/ (wiki markdown)
|
|
├── reads/writes ──► blog/ (blog markdown)
|
|
├── reads/writes ──► assets/ (uploaded images)
|
|
├── git add + commit ──► /opt/bincio-wiki-repo.git (bare repo)
|
|
└── reads/writes ──► /var/bincio/data/instance.db (shared SQLite)
|
|
```
|
|
|
|
## Request flow
|
|
|
|
1. Browser requests `wiki.bincio.org/entries/some-page/`.
|
|
2. nginx serves the pre-built static HTML from `/var/www/bincio-wiki/`.
|
|
3. The page's inline JavaScript calls `GET /api/me` on load. nginx proxies this to FastAPI.
|
|
4. If FastAPI returns 401/403 (no valid session), JS redirects to `/login/`.
|
|
5. On a page edit, the browser `POST /pages/{slug}` with new Markdown content. FastAPI writes the file, runs `git commit`, then `POST /rebuild` triggers `astro build --force`.
|
|
6. nginx serves the rebuilt static output immediately on next request.
|
|
|
|
## Technology stack
|
|
|
|
| Layer | Technology |
|
|
|-------|------------|
|
|
| Frontend framework | [Astro 6](https://astro.build) (static output) |
|
|
| CSS | Tailwind CSS |
|
|
| Interactive editor | Svelte (PageEditor component) |
|
|
| Markdown extensions | `remark-wikirefs`, `remark-caml` |
|
|
| Wikibonsai integration | Custom TypeScript (`site/src/wikibonsai/`) |
|
|
| API / sidecar | FastAPI + uvicorn |
|
|
| Python packaging | uv |
|
|
| Database | SQLite (shared with `bincio_activity`) |
|
|
| Passwords | bcrypt |
|
|
| VCS | Git (two bare repos on VPS) |
|
|
| Web server | nginx + Let's Encrypt (Certbot) |
|
|
| Process manager | systemd |
|
|
| VPS | Hetzner, Debian 12 |
|
|
|
|
## Port map
|
|
|
|
| Port | Service |
|
|
|------|---------|
|
|
| 443 | nginx (HTTPS, wiki.bincio.org) |
|
|
| 4042 | bincio-wiki FastAPI (production) |
|
|
| 8001 | bincio-wiki FastAPI (local dev) |
|
|
| 4321 | Astro dev server (local dev only) |
|
|
| 4041 | bincio_activity FastAPI |
|