

512mb and getting killed every morning at the same time sounds like a fun one to track down lol. a fixed weekly slot like your tuesday evening is probably the sanest setup honestly, I just know I’d forget.


512mb and getting killed every morning at the same time sounds like a fun one to track down lol. a fixed weekly slot like your tuesday evening is probably the sanest setup honestly, I just know I’d forget.


yeah exactly, no reboot, it was needrestart restarting nginx and postgres after the systemd update. you’re right that the timer is kind of the blunt fix, the cleaner one is probably telling needrestart to only list instead of restart ($nrconf{restart} = ‘l’ in needrestart.conf), or excluding nginx from it. I went with the timer because I still want things restarted, just not while I’m live


it’s a single cheap VPS that only I look after, so I’d rather get security patches the same day than remember to log in and do it, I guess that’s the tradeoff. and yeah you’re right about scheduling, that was the whole fix, the default timer runs around 6 UTC plus up to an hour of random delay and that happened to land on top of the stream. moved it to the afternoon and it’s been quiet since


nobody said desec.io yet, it’s a non profit from berlin and they give free subdomains under dedyn.io, with a proper API, so you can do the DNS challenge for let’s encrypt (there’s a caddy plugin for it too). I haven’t run a domain there myself so can’t say how it is long term, but for a “try some things” domain it looks like the least shady of the free ones I guess.


Same conclusion here from the other side, I have a small multiplayer browser game where everyone paints cells on one shared grid (node, postgres, SSE), the client applies the paint right away and the server either confirms it or answers with a 409/429 and the client puts the old cell back. the rejection part is the one that took me longest honestly, a mutation that is valid locally but the server says no (out of charges, same color already there, world paused) and you need a different message for each, otherwise people think it’s lag. conflicts are just last write wins per cell, but that works because every write is a row in an append only events table, so nothing is really lost and you can replay or undo. and on reconnect I don’t try to merge anything, the client asks for the whole state again, at that size it’s cheaper than being clever.


For me the evidence was the server logs, filtering by user agent. my main page is basically a canvas game, so the html has almost nothing for a crawler, and I was surprised to see googlebot not only rendering it but opening the SSE stream like a real player (I noticed because bots were showing up as online players lol). what actually got indexed were the plain server rendered pages I made for each thing worth sharing, with title, og image and json-ld, listed in the sitemap. so I didn’t change the app rendering, I just gave crawlers simpler pages to read.


What I do for that is turn it around, instead of checking for a failure I alert on the absence of a success. backrest has hooks, so on snapshot success it pings a push monitor in uptime kuma (healthchecks.io works the same), and if no ping arrives in ~26h it alerts. That way it catches the backup that never ran, which is the one that scares me the most I guess


money wise no, not even close. it’s a bitaxe gamma doing around 1 TH/s solo, so it’s basically a lottery ticket, the odds of hitting a block are tiny. it costs me like 3 euros a month in power so I treat it as a toy, I like checking the best difficulty it found and it’s a nice way to learn how mining works


Most of my stuff lives on a cheap hetzner vps so that power is someone else’s problem lol. at home it’s a raspberry pi that’s always on (a few watts) and a bitaxe miner doing about 19W, that’s around 14 kWh a month, like 3 euros here. the gaming pc is the only hungry thing and it stays off, the pi wakes it with wake-on-lan when I actually need it. took me a while to get the bios settings right (erp off, power on by pci-e) but it was worth it.


I’d add backup age and size, not just status, like alert if the newest dump is older than ~26h or smaller than 1MB, a job can say success and still leave you a useless file. and disk fill with a threshold, not only the graph. learned that one the hard way, a table on my vps was getting a row every minute with no cleanup and one day the disk hit 100% and postgres just died for like 40 min, obviously nobody was looking at the dashboard right then lol. now 80% warns and 90% sends me an email, and uptime kuma checks the cert expiry from outside. I guess the dashboard is nice to look at but the stuff that matters should ping you
Interesting idea, but in my case it would feel worse I think, each paint costs a charge, so undoing both means two people lose a charge and nobody gets the cell. I don’t think it happens much at our size anyway, two people on the exact same cell inside half a second is pretty rare. last write wins is a bit unfair but it’s simple, and since every write is stored you can always see who painted what