Repository navigation
Replies: 2 comments 10 replies
|
For the benefit of all -- @jetpham and I want to share where we've landed: https://github.com/noisebridge/noisebridge-wiki — a dedicated wiki host we're calling kells. (Here's why.) The repo already has a full implementation checklist, primary/replica architecture, Nix-managed config, and CI/CD. The migration path is tracked as discrete issues: database migration, file migration, DNS cutover, bot mitigation, dumps infrastructure — all open, all actionable, no heroics required to pick one up. Here's why: m3 is running the wiki, MySQL, Caddy, Postfix, Mailman, Prometheus, and monitoring on 1 vCPU, 2GB RAM, no swap. Every tuning decision there was made under resource pressure. Rate limiting and caching are real improvements — and the hard-won knowledge behind them is exactly what kells is being built on — but we're treating symptoms of a machine doing too many jobs. Separating the wiki onto dedicated infrastructure is what makes the other fixes actually stick. The bot problem gets more tractable with public dumps at dumps.noisebridge.net which is exactly what Wikipedia does. Give bulk scrapers a structured, downloadable database and redirect them there — scraping the live wiki becomes economically irrational. Caddy rate limiting stays as a backstop. This is a hackerspace. At some point the answer to "what if it doesn't work" has to be, "then we learn something and fix it." That's what we've been doing with the wiki anyway. We just may as well apply that learning to a beefier system designed from the ground up for our needs. I have an engineering focus that revolves around explainability and I've staged out this issue list to make it clear how we can layer wiki bot protection on top of proper performance headroom and tuning to right-size the round tower and ladder we build for the wiki. But regardless of what we do, we have to do something. The existing server is teensy tiny and it is shared with other services. That was fine in the early days, but it's not fine anymore. On top of that, the monolithic multi-server Ansible infrastructure makes changes more difficult than they need to be and makes it very difficult for a new contributor to understand what success looks like a lot of the time. All of that ruins our bus number for infra. Separation of concerns just makes sense here. m3 stays running throughout. The migration checklist is in the README. The plan is completely derisked via backups and failovers. Noisebridge infra has long been hazing-by-complexity problem. You have to already know the thing to be allowed to touch the thing — and the people who know the thing have a stake in being the people who know the thing. Nobody planned it that way. It's just what's happened by default. Kells will be an attempt to build something where that pattern can't take hold. @mcint — your knowledge of how m3's Caddy config evolved is exactly what we need to make sure nothing gets lost in translation. Would love to have you involved. |
So, I'm not sure what you suggest as an improvement here. Splitting up to multiple deployments? Different varied deployment methods? The reason we went with a "monolithic" Ansible repo was explicitly make it easier to onboard since there was now only one place to look at for infra. Previous to this it was all hand-rolled and only sometimes documented. Ansible allowed us to basically make the whole setup self documented by using simple and clear Ansible roles. For example, suggesting that we move a service from one node to another? That's easily possible in a single PR. #454 |

Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
We have uptime monitors running, in addition to NB-hosted grafana, I/Loren, Jet, and Naomi, are hosting uptime kuma instances tracking wiki uptime.
It may be helpful to have a way to locally load test some aspects of caddy rate-limit usage, so both instrumentation of caddy which could also be exported from prod caddy to grafana as well as a testing traffic generation harness that exercises the rate-limit cues.
Logs and log analysis are key to filtering what we need to filter. Right now we expire logs after 1 week (and this fits our disk quota, we probably couldn't keep 1 month, or at least 2 months of logs, with current quota, we could export these). How private are logs? It would be feasible to determine every logged-in page a user visits, I find this a bit too creepy—but in general logs seem ok to narrowly privately distribute for ongoing performance filter updates.
Updates made in-place—for caddy's Caddyfile, I've found it essential to draft changes in place. I should submit at PR to have ansible complain instead of overwrite Caddyfile and MediaWiki LocalSettings.php, at least for m3.
Caddy rate-limit configuration (it may be preferable not to share exact wording tricks here, the cracks in the system) in order of increasing maintenance overhead or risk-weighted fragility:
.request.uris, paths are a great risk-predictor of database loadOther topics
All reactions