~/tutorials $
Linux server tutorials
Step-by-step tutorials for a Linux server: VPNs, web servers, databases, containers, security and backups. Each one names the distributions it was tested on.
13 of 45 tutorials in Web servers
How to host a static website with nginx on Ubuntu or Debian
Serve a static site with nginx from your own server, with clean URLs, gzip, HTTP/2, the right caching headers and one-command deploys with rsync.
How to install Node.js on Ubuntu 24.04
Three ways to install Node.js on Ubuntu 24.04, NodeSource, nvm and Ubuntu's own package, which one to pick, and how to update or switch versions later.
How to point a domain at your VPS (A and AAAA records)
Point your domain at your server with A and AAAA records, add www, pick a sensible TTL, and check with dig that the change has really taken effect.
Deploy a FastAPI app with Gunicorn, Uvicorn workers and systemd
Run a FastAPI app in a virtualenv under Gunicorn with Uvicorn workers, keep it up with a systemd service, and put nginx in front as a reverse proxy.
Deploy a Node.js app with PM2 and nginx on Ubuntu 24.04
Run a Node.js app under its own user with PM2, bring it back after reboots, put nginx in front as a reverse proxy, and ship updates without downtime.
Deploy on push with GitHub Actions and the VPSNine API
Build on every push to main in GitHub Actions, snapshot the VPSNine server through the API, then ship with rsync over SSH and switch releases atomically.
How to get a Let's Encrypt wildcard certificate with the DNS challenge
Get a free *.example.com certificate from Let's Encrypt with certbot or acme.sh and your DNS provider's API, renew it automatically and reload your web server.
How to use Caddy as a reverse proxy for multiple sites and apps
One Caddyfile that serves several domains and apps on one server, each with its own automatic HTTPS certificate, path routing, headers, logs and basic auth.
Install PHP 8.3 with PHP-FPM and nginx on Ubuntu 24.04
Install PHP 8.3 and PHP-FPM from Ubuntu's archive, wire it to nginx, give each site its own FPM pool and user, and tune the settings that matter.
Receive VPSNine webhooks in Node.js and Python
A dependency-free webhook receiver in Node.js or Python that checks every VPSNine signature, refuses replays, skips duplicates and runs under systemd.
Run a multi-container app with Docker Compose and a reverse proxy
One compose.yaml with an app, its PostgreSQL database and Caddy for HTTPS, on private networks with named volumes, health checks, secrets, updates and backups.
WP-CLI tutorial: manage and harden WordPress from the command line
Install WP-CLI, then update WordPress, manage plugins and users, move a site to a new domain, back up the database and lock the site down, all over SSH.
Create and destroy preview servers per pull request
Order a VPSNine server per pull request from GitHub Actions, deploy the branch, comment its address, and delete the server when the PR closes.