The tunnel-first design (no open ports, admin panel off the internet) is the right default, and it's nice to see it explained without jargon.
One addition from running small boxes in production: add swap before you add the fifth prototype. On a 1–2 GB VPS, a single memory spike (a build, an image-heavy request, a Node process that grows) doesn't crash cleanly. The box thrashes and stops answering, including SSH, and the tunnel happily keeps saying the origin exists. We had exactly this on 2 GB servers; 2 GB of swap turned hangs into slowdowns we could see and fix.
A per-container memory limit is the other half. Then the process that misbehaves gets killed and restarted, instead of taking the other nine subdomains down with it.
The tunnel-first design (no open ports, admin panel off the internet) is the right default, and it's nice to see it explained without jargon.
One addition from running small boxes in production: add swap before you add the fifth prototype. On a 1–2 GB VPS, a single memory spike (a build, an image-heavy request, a Node process that grows) doesn't crash cleanly. The box thrashes and stops answering, including SSH, and the tunnel happily keeps saying the origin exists. We had exactly this on 2 GB servers; 2 GB of swap turned hangs into slowdowns we could see and fix.
A per-container memory limit is the other half. Then the process that misbehaves gets killed and restarted, instead of taking the other nine subdomains down with it.