Commit graph

42 commits

Author SHA1 Message Date
Wiki Bot
b4520159c0 wiki content export 2026-04-16 2026-04-16 04:00:06 +00:00
Wiki Bot
192f815a58 wiki content export 2026-04-15 2026-04-15 04:00:06 +00:00
Wiki Bot
69783589d6 wiki content export 2026-04-13 2026-04-13 04:00:05 +00:00
Wiki Bot
c4b0dbf6f1 wiki content export 2026-04-11 2026-04-11 04:00:05 +00:00
Wiki Bot
ce136fbbeb wiki content export 2026-04-10 2026-04-10 04:00:05 +00:00
3c9b9d3188 Move backup volume to /var/backups/outline so DokPloy redeploys don't wipe it
The 4 AM export push triggers a DokPloy redeploy which rm-rf's the code
directory — including ./backups/. Using an absolute path outside the code
dir keeps backups safe across redeploys.
2026-04-09 09:21:50 +01:00
Wiki Bot
ebe29fa137 wiki content export 2026-04-09 2026-04-09 04:00:06 +00:00
83c987bb71 Bake cron scripts into the image instead of bind-mounting them
DokPloy's redeploy process rm -rf's the host code dir and recreates it.
The cron container is `restart: unless-stopped` so docker-compose
doesn't recreate it when only scripts/* change — but its bind mount on
./scripts:/app/scripts then points at orphaned inodes inside the
running container, leaving /app/scripts empty until someone manually
`docker restart`s it.

Bake the scripts into the image instead. A scripts/* change now forces
a Dockerfile rebuild → docker-compose recreates the cron service →
fresh /app/scripts inside, no manual restart required. content/ and
.git/ stay bind-mounted because the export job needs to write commits
the host can see.

Also adds .dockerignore so the host's scripts/node_modules (potentially
darwin-specific) doesn't get COPY'd into the alpine image and shadow
the deps installed by `npm install` at build time.
2026-04-08 12:06:04 +01:00
Wiki Bot
8ea553c304 wiki content export 2026-04-08 2026-04-08 10:58:04 +00:00
888fa2f6b5 Fix two cron jobs that surfaced once the container could actually run them
With yesterday's cron infrastructure fix in place, both daily jobs got
to actually execute today and revealed bugs that had been hiding behind
the silent failures.

1. Wiki export crashed on docs whose body starts with `---` (markdown
   horizontal rule). matter.stringify(str, data) re-parses str as if
   it might already contain frontmatter, so a leading `---` makes
   gray-matter try to YAML-parse the body and choke on the first
   `Title: subtitle` colon. Pass {content: str} instead — the parser
   only runs on bare strings, so an object skips the re-parse path.

2. outline-backup.sh referenced docker container names `outline-postgres`
   and `outline`, but DokPloy names containers `${project}-${service}-1`,
   so the backup got `Error response from daemon: No such container`.
   Derive names from $APP_NAME (set to the compose project name) with
   POSTGRES_CONTAINER / OUTLINE_CONTAINER overrides for portability.
2026-04-08 11:57:02 +01:00
2085ad5103 Fix cron container so daily wiki export actually runs
The cron has been silently failing every day since 2026-03-28. Four
independent bugs were stacked:

1. cron/entrypoint.sh: env dump used `sed` to wrap each line in
   `export `, but values with spaces (e.g. GIT_SSH_COMMAND, OIDC_SCOPES)
   produced lines like `export GIT_SSH_COMMAND=ssh -o UserKnownHosts...`
   which `export` parses as a flag and aborts. busybox ash treats the
   builtin error as fatal, so `. /etc/environment.sh; script.sh` never
   reaches the script. Now single-quote each value with proper escaping.

2. cron/Dockerfile: NODE_PATH only works for CommonJS `require()`, not
   ESM `import`. The export script is `"type": "module"` and failed with
   "Cannot find package 'gray-matter'". Install deps at /app/node_modules
   instead — Node ESM walks up from /app/scripts and finds it there.

3. docker-compose.yml: `~/.ssh:/root/.ssh:ro` — DokPloy does NOT expand
   `~`, so it created a literal `~` directory inside the deployment dir
   and mounted that empty dir. The container had no SSH key. Use the
   absolute host path `/root/.ssh` instead.

4. cron/entrypoint.sh: even with the SSH key, `git push` would fail
   because the git remote is HTTPS and the host's git server runs on
   port 2222 (set in /root/.ssh/config). Add a `pushInsteadOf` rewrite
   so push uses SSH while DokPloy can keep fetching via HTTPS, and stop
   re-running ssh-keyscan against the wrong port — copy the host's
   known_hosts (which already has the :2222 entry) instead.
2026-04-07 11:27:29 +01:00
Wiki Bot
951c8807a8 wiki content export 2026-04-07 2026-04-07 10:15:59 +00:00
ed05044464 Block dotfile access, remove custom CSS, fix cron npm install
- nginx: deny all requests to hidden files (/.git/config was publicly readable)
- nginx: remove CSS injection and /custom/ static file serving
- cron: install script deps at build time into /opt to avoid ro mount conflict
- docker-compose: widen cron build context for package.json COPY
- Delete unused theme/ghost-guild.css
2026-03-31 17:53:50 +01:00
1984e64ccd Add configuration to block access to hidden files in nginx 2026-03-31 17:50:00 +01:00
c22dd91556 Revert wiki theme CSS to previous version 2026-03-29 21:30:58 +01:00
b4bd938ac3 Remove hardcoded container names for DokPloy compatibility 2026-03-29 21:17:05 +01:00
cda610dc01 Fix cron build context to match Dockerfile COPY paths 2026-03-29 21:15:52 +01:00
8924da6140 Ignore local only files 2026-03-29 21:14:54 +01:00
a4127fd50c Replace wiki theme with dark candlelight design
Brygada 1918 for headings, Commit Mono for body text, full
dark palette with dashed borders and candlelight gold accents.
2026-03-29 21:08:13 +01:00
96c3861fc7 wiki content export 2026-03-28 2026-03-28 13:55:18 +00:00
8514476030 Fix cron container: pass env vars to cron jobs
Alpine crond doesn't inherit the container environment, so
OUTLINE_API_TOKEN and other vars were missing. Dump env at
startup and source it in each cron entry.
2026-03-28 13:35:03 +00:00
8e7424ed05 Add cron container for daily backups and content export
- Add cron service to docker-compose with backup (3 AM) and export (4 AM) schedules
- Remove redundant content/articles/ and content/curriculum/ (now in Outline, exported to content/wiki/)
- Fix env var mismatch: support both OUTLINE_API_KEY and OUTLINE_API_TOKEN
- Drop updatedAt from export frontmatter to reduce noisy commits
- Add backups/ to gitignore
2026-03-24 09:14:16 +00:00
f5a69b8683 wiki content export 2026-03-24 2026-03-24 09:03:06 +00:00
8549cb0252 Update curriculum source files to current versions 2026-03-09 15:51:18 +00:00
136ee2442b Add Coop Foundations Curriculum content and import script
9 session pages and 10 PS Guide markdown files for the Baby Ghosts
cooperative foundations curriculum. Import script creates documents in
Outline wiki with cross-links between paired session/PS Guide pages.
2026-03-09 14:33:06 +00:00
dd143b20fc Fix nginx upstream for Docker Compose networking
Use service name outline:3000 instead of localhost:3100.
2026-03-04 18:02:02 +00:00
f3302b1c5a Fix docker-compose for DokPloy compose deployment
Use .env instead of outline.env, reference existing named volumes
as external so data persists across DokPloy redeploys.
2026-03-04 17:53:42 +00:00
2bb36af20e Add daily wiki content export
Export script pulls all Outline documents via API and writes them as
flat markdown files to content/wiki/ with frontmatter metadata.
Cron wrapper auto-commits changes daily.
2026-03-04 17:34:09 +00:00
b5de1e575a fix: stop tracking Obsidian user files, clean up .gitignore
- Remove redundant docs/README.md (already covered by /docs)
- Ignore entire .obsidian/ directory (user-specific workspace state)
- Remove all .obsidian files from git tracking

Made-with: Cursor
2026-03-02 12:07:07 +00:00
ac419d3c62 Hardcode X-Forwarded-Proto to https (always behind Traefik) 2026-03-02 11:22:57 +00:00
d56d6afce7 Use host network mode: listen on 3200, upstream to localhost:3100 2026-03-02 11:22:04 +00:00
7f17aaa43f Use host.docker.internal for nginx upstream 2026-03-02 11:21:08 +00:00
fdf96fe820 Add nginx proxy for OG meta tags and CSS injection
Traefik was routing directly to Outline, so the nginx.conf
was unused. Add nginx as an intermediary service to enable
sub_filter injection of OG tags on the homepage and custom
CSS on all pages.
2026-03-02 11:16:26 +00:00
45b1f4331c Update nginx configuration for homepage meta tags and CSS injection; add workspace.json changes for article tabs and release notes; update .gitignore to exclude README.md and workspace.json. 2026-03-02 09:53:37 +00:00
289e673cbc Replace Nuxt wiki with Outline deployment config
Strip the Nuxt 4 static site and replace with Docker Compose config
for self-hosted Outline wiki (Outline + PostgreSQL 16 + Redis 7).
Adds nginx reverse proxy with WebSocket support and CSS injection,
migration script for existing markdown articles, backup script,
and starter theme CSS.
2026-03-01 15:45:44 +00:00
e521ca02ca Fix broken links 2025-11-15 19:56:17 +00:00
29a435f371 Fix images 2025-11-15 19:51:55 +00:00
4c70734d57 Update article links and build configuration 2025-11-15 19:49:30 +00:00
5c8016182d Add images; update urls 2025-11-15 19:33:36 +00:00
d155bd9dbf Make all articles public 2025-11-15 13:52:12 +00:00
65e78b8f49 Make all articles public 2025-11-15 13:43:21 +00:00
952cee5fb7 Initial commit 2025-11-11 19:12:21 +00:00