Your First Self-Hosted Server: A Complete Checklist
Setting up your first self-hosted server? Here is everything you need to consider before, during, and after deployment.
Setting up your first self-hosted server is exciting but easy to get wrong. A checklist ensures you do not skip critical steps that become painful later. This is the same checklist VPS1 uses when provisioning a new client server.
Before You Install Anything
- Choose your hardware. VPS or physical server? For a first server, a cloud VPS with 4GB RAM, 2 vCPUs, and 80GB SSD is the sweet spot. It handles 8 to 12 typical self-hosted applications comfortably.
- Choose your operating system. Ubuntu Server LTS (currently 24.04) is the safest choice. Largest community, most tutorials, best Docker support.
- Decide on a domain name. You need a domain to get SSL certificates. cloud.yourcompany.com, crm.yourcompany.com, and apps.yourcompany.com are common patterns.
- Set up DNS. Point your domain at your server's IP address. If your server has a dynamic IP, set up dynamic DNS.
Server Setup
- Update the system. apt update && apt upgrade before anything else.
- Create a non-root user. Never work as root. Create a user with sudo privileges.
- Configure SSH. Disable root login, disable password authentication, and use SSH keys only. Change the default SSH port away from 22 to reduce automated attack noise.
- Set up a firewall. UFW (Uncomplicated Firewall) is sufficient. Allow only SSH, HTTP (80), and HTTPS (443). Everything else stays blocked.
- Install fail2ban. It monitors logs and temporarily bans IPs that show malicious behavior like repeated failed SSH attempts.
- Enable automatic security updates. apt install unattended-upgrades to apply security patches automatically.
Docker and Core Services
- Install Docker and Docker Compose. Follow Docker's official installation guide, not your distribution's package manager which often ships outdated versions.
- Deploy a reverse proxy. Nginx Proxy Manager is the easiest. It handles SSL certificates and routes traffic to your applications.
- Deploy Pi-hole. Network-wide ad blocking as your first service is an easy win that builds confidence.
- Deploy Uptime Kuma. Before deploying anything else, set up monitoring so you know when things break.
- Deploy Watchtower. Automate container updates from the start rather than letting them pile up.
Before Going Live
- Test SSL. Visit every domain and confirm the padlock icon. Use SSL Labs' SSL Server Test for a comprehensive check.
- Configure automated backups. At minimum, dump databases nightly and store encrypted copies off-site. Test a restore.
- Document everything. Server IP, SSH port, which applications run on which domains, where backups are stored, and how to restart services. This document is what you will read in a panic at 2 AM when something breaks.
- Set up monitoring alerts. Configure Uptime Kuma to notify you via Slack or email when a service goes down. A problem you do not know about is a problem you cannot fix.
This checklist covers the essentials. For a production business server, additional steps include intrusion detection (CrowdSec), centralized logging (Loki), and SSO (Authelia). VPS1 handles the full provisioning checklist and ongoing maintenance so you skip directly to using your applications.
More articles
Centralized Logging with Grafana Loki and Promtail
When you run a dozen self-hosted applications, searching logs across each one individually is not sustainable. Loki centralizes everything.
Building a Team Wiki for Your Business with Outline
Outline replaces Notion and Confluence with a self-hosted knowledge base that is fast, clean, and fully under your control.
Google Photos vs. Immich: Self-Hosted Photo and Video Management
Immich is the self-hosted Google Photos alternative that gives you AI-powered search, facial recognition, and automatic backup without sending your media to the cloud.