Linux guides
77 guides in Server Setup · intermediate.
Use ESPHome to Build Smart Devices
Install ESPHome on Linux, write YAML configs with a secrets file, flash ESP32/ESP8266 over USB and OTA, then integrate live sensor data into Home Assistant.
Build a Woodpecker CI Pipeline End-to-End
Set up a Woodpecker CI server and agent with Docker Compose, then build a real pipeline with registry secrets, BuildKit layer caching, and SSH deploy steps.
Self-Host Wallabag for Read-It-Later
Deploy Wallabag on your own server with Docker and PostgreSQL, configure browser extensions and mobile apps, and import your Pocket or Instapaper reading list.
Self-Host Vaultwarden (Bitwarden Server)
Deploy a self-hosted Vaultwarden (Bitwarden-compatible) password server using Docker Compose, nginx reverse proxy, Let's Encrypt TLS, and automated backups.
Self-Host CalDAV/CardDAV with Radicale
Set up Radicale as a self-hosted CalDAV/CardDAV server with htpasswd auth, Nginx reverse proxy, and sync to Evolution, Thunderbird, iOS, and Android.
Self-Host PhotoPrism for Photo Library
Deploy PhotoPrism on your own server with Docker Compose. Covers storage layout, database setup, face recognition tuning, and reverse geocoding for places.
Self-Host Kavita for Comics and Books
Deploy Kavita on Docker, configure comic and book libraries, enable OPDS for mobile reading apps, and secure it with an Nginx HTTPS reverse proxy.
Self-Host Joplin Server
Self-host Joplin Server with Docker Compose, PostgreSQL, Nginx TLS reverse proxy, and end-to-end encryption for private, cross-device note sync.
Self-Host Immich (Google Photos Replacement)
Deploy Immich — a full Google Photos replacement — on your own server using Docker Compose, with machine learning, mobile auto-backup, and album sharing.
Self-Host FreshRSS
Deploy FreshRSS with Docker Compose, import feeds via OPML, connect mobile clients through the Google Reader API, and manage multiple users on one instance.
Self-Host Forgejo (Gitea Fork)
Install Forgejo from a single binary on Linux, harden it with systemd, put it behind Nginx with TLS, add CI runners, and understand the ForgeFed federation roadmap.
Self-Host Calibre-Web for Your eBook Library
Deploy Calibre-Web with Docker, import your Calibre library, configure send-to-Kindle email delivery, and set up an OPDS catalog for KOReader.
Turn a Raspberry Pi into a Media Server
Set up Jellyfin on a Raspberry Pi 4 or 5 with persistent external storage mounts and honest guidance on hardware-accelerated transcoding limits.
Install Zigbee2MQTT
Install Mosquitto, configure a Zigbee USB coordinator, run Zigbee2MQTT as a systemd service, and pair devices using the built-in web frontend.
Install the Mosquitto MQTT Broker
Install and secure Mosquitto MQTT broker with password auth, TLS on port 8883, ACL topic control, and a clean mosquitto.conf on Debian, Ubuntu, Fedora, and Arch.
Install Miniflux RSS Reader
Install the Miniflux self-hosted RSS reader on Linux: single binary, PostgreSQL backend, Fever API for mobile clients, and OPML import in under 30 minutes.
Install Home Assistant OS on a Pi (or VM)
Flash Home Assistant OS to a Raspberry Pi 4/5 or VM, attach a Zigbee dongle, configure add-ons, and set up automated off-device backups.
Write an Ansible Role
Learn to build a reusable Ansible role from scratch: directory layout, defaults vs vars, handlers, templates, dependencies, and publishing to Ansible Galaxy.
Ship Logs with Vector
Configure Vector to collect systemd-journald logs, reshape events with VRL transforms, and ship structured data to Grafana Loki and Elasticsearch.
Use Kustomize (Without Templates)
Manage Kubernetes manifests without templates using Kustomize bases, overlays, patches, and generators — applied with plain kubectl -k.
Use Helm Charts on Linux
Install Helm 3, manage chart repos, override values, render manifests locally with helm template, and package your own chart for Kubernetes.
Tune PHP-FPM Pools for Production
Configure PHP-FPM pool process managers (dynamic, static, ondemand), calculate max_children from real memory usage, enable slowlog, and monitor with the status page.
Self-Host a GitHub Actions Runner on Linux
Install a GitHub Actions self-hosted runner on Linux, configure it as a systemd service, assign labels, register at org level, and harden the execution environment.
A Modern nginx TLS Configuration
Configure nginx with TLS 1.2/1.3, Mozilla Intermediate cipher suites, OCSP stapling, HSTS, and DH parameters for a production-ready HTTPS setup.
nginx as a Reverse Proxy: Best Practices
Configure nginx as a production-grade reverse proxy: upstream keepalive pools, buffering tuning, WebSocket upgrades, and correct X-Forwarded-* header handling.
Install TimescaleDB on PostgreSQL
Install TimescaleDB on PostgreSQL, create hypertables, automate continuous aggregates, and enforce data-retention policies on Ubuntu, Fedora, and Arch.
Install and Use Terraform on Linux
Install Terraform on Debian, Fedora, and Arch Linux, configure AWS, Hetzner, and DigitalOcean providers, and manage infrastructure with plan, apply, and remote state backends.
Install Pulumi on Linux
Install Pulumi on Debian, Fedora, or Arch Linux, pick a language runtime, configure a state backend, manage secrets, and compare Pulumi to Terraform.
Install Prometheus on Linux
Install Prometheus on Linux from tarball or distro packages, configure scrape targets and retention, and run it securely under a hardened systemd unit.
Use OpenTofu (the Terraform Fork)
Install OpenTofu, the MPL-licensed Terraform fork, migrate existing projects safely, and understand provider compatibility and new features like state encryption.
Install MongoDB on Linux
Install MongoDB 7.0 on Linux via the official apt/dnf repo, configure mongod, enable authentication, and set up a single-node replica set ready for production.
Install Mail-in-a-Box
Set up a self-hosted mail server on Ubuntu 22.04 with one command. Covers the MiaB installer, DNS records (SPF, DKIM, DMARC), admin panel, and verification.
Install Loki and Promtail for Logs
Install Grafana Loki and Promtail as single binaries, ship systemd-journald logs, and create log-based metric rules — managed with systemd.
Install k3s on a Single Linux Node
Install k3s on a single Linux node in minutes: covers the curl installer, kubeconfig setup, built-in Traefik ingress, and essential kubectl commands.
Install and Configure a GitLab Runner
Install GitLab Runner on Linux, register Shell and Docker executors, configure caches, route jobs with tags, and understand autoscaling with the fleeting plugin.
Install Drone / Woodpecker CI
Deploy Woodpecker CI (or Drone) with Docker Compose, wire OAuth to Gitea or GitHub, connect agents, and run your first pipeline in under an hour.
Install ClickHouse on Linux
Install ClickHouse on Linux from the official repo, configure users and storage, design an efficient MergeTree schema, ingest data, and tune for query performance.
Install and Tune Redis for Production
Install Redis on Linux, configure RDB and AOF persistence, set maxmemory eviction policies, and add replication with Sentinel for production HA.
Auto-Deploy a Static Site with Caddy + Git Hooks
Set up a zero-CI deploy pipeline: push to a bare Git repo, run a build hook, and let Caddy serve your static site with automatic TLS.
Container Image Best Practices
Reduce container attack surface with multi-stage builds, distroless base images, non-root users, and automated CVE scanning using Trivy, Scout, and Grype.
cloud-init Explained (with worked examples)
Learn how cloud-init bootstraps cloud VMs: user-data formats, key modules, datasource detection, and hands-on debugging on Hetzner, EC2, and DigitalOcean.
Set Up a WireGuard VPN Server
Configure a WireGuard VPN server from scratch: key generation, server and client configs, NAT with nftables, IP forwarding, firewall rules, and MTU tuning.
Self-Host Nextcloud
Install a production Nextcloud server using Nginx, PHP-FPM, MariaDB, and Redis — including systemd-managed cron and performance tuning.
Install PostgreSQL with Sensible Tuning
Install PostgreSQL from PGDG repos and apply evidence-based tuning for shared_buffers, work_mem, effective_cache_size, and WAL settings on any Linux server.
Install and Use Podman (Docker without a daemon)
Run OCI containers without a daemon using Podman. Covers rootless setup, podman-compose, and systemd Quadlet units for production-grade container management.
Install and Configure HAProxy
Install HAProxy and configure frontends, backends, ACL-based routing, TLS termination, sticky sessions, and HTTP health checks on modern Linux distros.
Self-Host Git with Gitea or Forgejo
Install Forgejo or Gitea on Linux, configure Caddy as a reverse proxy, enable SSH access on a custom port, push your first repository, and register an Actions runner.
Install Elasticsearch or OpenSearch
Install Elasticsearch 8 or OpenSearch 2 on Linux, tune JVM heap, configure security, set up single-node or cluster mode, and verify with live index operations.
Host Multiple Sites on One Linux Server
Host multiple websites on one Linux server using Nginx as a reverse proxy, systemd-managed app services, per-domain TLS, and isolated system users.
Docker Compose in Production
Deploy Docker Compose in production with compose.yaml, explicit networks, named volumes, restart policies, journald logging, and file-based secrets.
Build an nftables Firewall Script
Build a complete nftables firewall from scratch: tables, chains, sets, default-deny input policy, service allowlisting, and persistent systemd configuration.
How to Run Rootless Containers with Podman
Run OCI containers without root or a daemon. Learn Podman installation, user namespace setup, rootless networking, and systemd Quadlet unit files for production use.
How to Set Up Pi-hole on a Linux Server
Set up Pi-hole on Linux for network-wide ad and tracker blocking — covers installation, blocklists, gravity updates, conditional forwarding, and DHCP.
How to Set Up and Use Docker Compose
Learn how to write Compose files, define networks and volumes, manage environment variables, and control multi-container Docker stacks with the modern Compose CLI plugin.
How to Install Traefik as a Reverse Proxy
Install Traefik v3 as a Docker-based reverse proxy with automatic Let's Encrypt TLS, static and dynamic config, and label-driven service routing.
How to Install and Configure Redis
Install Redis on Debian, Ubuntu, Fedora, and Arch; configure persistence, memory limits, authentication, and manage the service with systemd for production use.
How to Install RabbitMQ on Linux
Install RabbitMQ on Debian, Ubuntu, Fedora, Rocky, and Arch using official repos, enable the management UI, create users, and test a live queue.
How to Install Prometheus and Grafana on Linux
Install Prometheus and Grafana on Linux, configure node_exporter scraping, connect the datasource, and build your first system metrics dashboard.
How to Set Up HAProxy as a Load Balancer
Set up HAProxy as an HTTP load balancer with active health checks, stick tables for session persistence, and a live stats dashboard — step by step.
Webmin: The Complete Setup Guide
Install Webmin on Debian/Ubuntu and RHEL-family Linux, configure core modules, and harden it with TLS, 2FA, and IP restrictions for production use.
Squid Debug Logging: Turn It On and Read It
Learn how to enable Squid debug_options, navigate cache.log and access.log, and trace the exact cause of a denied or failed proxy request.
Set Up Squid as a Caching Web Proxy
Install and configure Squid as a forward caching proxy on Linux — covering ACLs, cache tuning, firewall rules, and explicit vs transparent intercept mode.
How to Set Up an NFS Server
Set up a production-ready NFSv4 server on Linux: configure exports, mount shares on clients, lock down permissions, and tune read/write performance.
How to Set Up a Samba File Share
Step-by-step guide to installing Samba, creating a share user, configuring smb.conf, opening the firewall, and mounting the share from Windows and Linux clients.
How to Set Up a LEMP Stack
Install and configure Nginx, MariaDB, and PHP-FPM on a fresh Linux server. Covers Debian, Ubuntu, Fedora, RHEL, Rocky, and Arch with systemd service management.
How to Run a Node.js App in Production with PM2
Deploy a Node.js application with PM2: process management, ecosystem config files, systemd startup integration, and structured log rotation.
How to Install and Configure PostgreSQL
Install PostgreSQL on Debian, Fedora, or Arch, then configure roles, databases, pg_hba.conf authentication, and secure remote access in clear, production-ready steps.
How to Install MySQL or MariaDB
Install MySQL or MariaDB on Debian, Fedora, or Arch; secure it with mysql_secure_installation; create users with least-privilege grants; and automate backups.
How to Install Docker on Linux
Install Docker Engine on Ubuntu, Debian, Fedora, RHEL, or Arch from the official repository, configure the docker group, run a first container, and get Compose working.
How to Install the Apache Web Server
Install Apache on Linux, enable modules, configure named virtual hosts, use .htaccess, and verify your setup — covering Debian, Ubuntu, Fedora, RHEL, and Arch.
How to Install and Configure nginx
Install nginx, configure server blocks and document roots, set up a reverse proxy to a local application, and verify everything with nginx -t and curl.
Free SSL Certificates with Let’s Encrypt
Issue and auto-renew free TLS certificates with Let's Encrypt and Certbot for Nginx or Apache on Ubuntu, Fedora, and Arch Linux.
How to Create a systemd Service
Learn to write systemd service unit files from scratch: unit types, dependency directives, restart policies, enabling at boot, and reading logs with journalctl.
Configure a Squid Proxy with Webmin
Install Squid and the Webmin Squid module, configure disk and memory caching, set LAN access controls, and verify the proxy is serving cached responses.
How to Configure the SMTP HELO/EHLO Name
Set the correct SMTP HELO/EHLO hostname in Postfix and Sendmail, configure FCrDNS records, and verify your mail server won't be rejected or spam-flagged.
Configure a UPS on Linux with NUT
Install and configure Network UPS Tools (NUT) on Linux to detect your UPS, load the right driver, and trigger a safe automatic shutdown when battery runs low.
Build an Intranet Server on Linux
Set up a complete small-office intranet on one Linux box: Nginx web server, dnsmasq local DNS, Samba file sharing, and a Wiki.js team wiki.