Tangled Knot — knot.aesthetic.computer#
Self-hosted Tangled knot server co-located on the PDS
droplet (at.aesthetic.computer). Provides decentralized git hosting under
AC's ATProto identity.
Prerequisites#
- PDS droplet running at
at.aesthetic.computer(165.227.120.137) - Vault file
aesthetic-computer-vault/at/knot.envwith:
Find your DID at https://tangled.org/settingsKNOT_OWNER_DID=did:plc:your-did-here - Tangled account with SSH key added at https://tangled.org/settings/keys
Deploy#
cd at/knot/deployment
fish deploy.fish
This will:
- Install Go + build deps on the droplet
- Create
gituser with SSH AuthorizedKeysCommand - Build the knot binary from source
- Deploy systemd service + environment
- Configure Caddy reverse proxy (TLS auto via Let's Encrypt)
- Create
knot.aesthetic.computerDNS via Cloudflare
After Deploy#
- Verify:
curl https://knot.aesthetic.computer/ - Register knot at https://tangled.org/settings/knots — click verify
- Create repo on Tangled, selecting
knot.aesthetic.computeras host - Push:
git remote add tangled git@knot.aesthetic.computer:aesthetic-computer.git && git push tangled main
Unify Repo History#
Stitch the four predecessor repos into one continuous timeline:
# Dry run first
./unify-repo-history.sh --dry-run
# For real
./unify-repo-history.sh
Requires git-filter-repo (pip install git-filter-repo).
Architecture#
knot.aesthetic.computer (Caddy :443)
└─ reverse proxy → localhost:5555 (knot public API)
└─ websocket → localhost:5555/events
SSH :22
└─ Match User git → knot keys (AuthorizedKeysCommand)
└─ git push/pull via SSH
/home/git/
├─ .knot.env # config
├─ repositories/ # bare git repos
├─ database/ # knotserver.db (SQLite)
└─ log/ # knot.log
Co-hosts with PDS — same droplet, separate subdomain.
Files#
at/knot/
├─ README.md
├─ unify-repo-history.sh # graft 4 repos → one history
├─ deployment/
│ ├─ deploy.sh # main deployment script
│ ├─ deploy.fish # fish wrapper (loads vault env)
│ └─ configure-dns.mjs # Cloudflare A record setup
└─ infra/
├─ Caddyfile # reverse proxy config
└─ knotserver.service # systemd unit