Learning DevOps on a Budget VPS: A 30-Day Hands-On Roadmap

DevOps is one of the most sought-after skill sets in tech, but most learning resources expect you to have access to cloud infrastructure. A $5/mo budget VPS solves that problem. For less than the cost of a streaming subscription, you get a real Linux server where you can practice provisioning, configuration management, monitoring, CI/CD, and containerization — all in a safe environment where mistakes cost nothing extra. This 30-day roadmap walks you through a practical, hands-on DevOps curriculum using nothing but a budget VPS. To get started, compare budget VPS plans on our comparison table and pick one with at least 1 GB RAM.

What You Will Learn

  • Linux system administration (SSH, users, permissions, services).
  • Automation with shell scripts and Ansible.
  • Containerization with Docker and Docker Compose.
  • Monitoring with Prometheus and Grafana.
  • CI/CD with GitHub Actions and self-hosted runners.
  • Reverse proxy and SSL with Nginx and Let’s Encrypt.

Prerequisites

  • A budget VPS with at least 1 GB RAM, 1 vCPU, and 20 GB SSD.
  • Ubuntu 24.04 LTS or Debian 12 (recommended for beginners).
  • A local terminal (Linux, macOS, or WSL on Windows).
  • Basic familiarity with the command line (cd, ls, nano, ssh).

Week 1: Linux Foundations and Server Hardening

Day 1: Initial Server Setup

Provision your VPS and SSH in as root. Create a non-root user with sudo privileges: adduser devops; usermod -aG sudo devops. Disable root login over SSH by editing /etc/ssh/sshd_config and setting PermitRootLogin no. Restart SSH: sudo systemctl restart ssh. Log out and test logging in as your new user.

Day 2: SSH Key Authentication

Generate an SSH key pair on your local machine: ssh-keygen -t ed25519. Copy the public key to your server: ssh-copy-id devops@your-server-ip. Disable password authentication in sshd_config: PasswordAuthentication no. Restart SSH. Now only your key can log in.

Day 3: Firewall with UFW

Enable UFW: sudo ufw enable. Allow only SSH: sudo ufw allow 22/tcp. If you plan to run a web server later, also allow 80 and 443: sudo ufw allow 80/tcp; sudo ufw allow 443/tcp. Check status: sudo ufw status verbose.

Day 4: Fail2Ban for Intrusion Prevention

Install fail2ban: sudo apt install fail2ban -y. Create a local jail config: sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local. Set bantime = 3600, maxretry = 5. Enable the SSH jail: sudo systemctl enable fail2ban; sudo systemctl start fail2ban. Check bans: sudo fail2ban-client status sshd.

Day 5: System Updates and Auto-Upgrades

Run sudo apt update && sudo apt upgrade -y. Install unattended-upgrades: sudo apt install unattended-upgrades -y. Configure it to auto-install security updates: sudo dpkg-reconfigure --priority=low unattended-upgrades. This keeps your server patched without manual intervention.

Day 6–7: Review and Script It

Write a shell script that automates the entire week 1 setup. Call it bootstrap.sh. It should create the user, copy SSH keys, configure UFW, install fail2ban, and set up unattended upgrades. Run it on a fresh server to verify it works. This is your first real automation.

Week 2: Automation with Ansible

Day 8: Install Ansible

Install Ansible on your local machine: sudo apt install ansible -y. Create an inventory file with your VPS IP: echo "[vps] your-server-ip" > inventory.ini. Test connectivity: ansible vps -i inventory.ini -m ping -u devops.

Day 9: Your First Playbook

Write a playbook that installs Nginx on your VPS. Structure: ---, - hosts: vps, tasks:, - name: Install nginx, apt: name=nginx state=present. Run it: ansible-playbook -i inventory.ini nginx.yml. Visit your server’s IP in a browser — you should see the Nginx welcome page.

Day 10: Variables and Templates

Add an Nginx virtual host configuration using Ansible templates. Create a templates/ directory with a Jinja2 template file. Pass variables for the server name and root directory. This teaches you how to manage configuration files as code.

Day 11: Roles

Refactor your playbook into Ansible roles. Create roles for common (SSH, firewall, fail2ban), nginx, and monitoring. Use ansible-galaxy init role_name to scaffold each role. This is how real DevOps teams organize their automation.

Day 12–14: Deploy a Static Site

Create a simple HTML page, write an Ansible playbook that deploys it to your VPS, configures Nginx to serve it, and provisions a Let’s Encrypt SSL certificate. Use the acme_certificate module or a community role like geerlingguy.certbot. This gives you a fully automated deployment pipeline.

Week 3: Containers with Docker

Day 15: Install Docker

Install Docker using the official convenience script: curl -fsSL https://get.docker.com | sudo sh. Add your user to the docker group: sudo usermod -aG docker $USER. Log out and back in. Run docker run hello-world to verify.

Day 16: Docker Compose

Install Docker Compose: sudo apt install docker-compose-plugin -y. Create a docker-compose.yml that runs WordPress and MySQL. This is a common pattern: one container for the app, one for the database. Access WordPress at http://your-server-ip:8080.

Day 17: Custom Dockerfile

Write a Dockerfile for a simple Python Flask app. Build it locally: docker build -t my-flask-app .. Run it and verify it responds. This teaches you how to containerize applications from scratch.

Day 18: Reverse Proxy with Nginx

Set up Nginx as a reverse proxy for your Docker containers. Configure proxy_pass to forward requests to your Flask app. Add SSL with certbot. Now your containerized app is accessible over HTTPS on port 443.

Day 19: Resource Limits

Practice setting Docker resource limits: --memory=256m --cpus=0.5. This is critical on a budget VPS with limited RAM. Monitor usage with docker stats. Learn to use docker system prune to reclaim disk space.

Day 20–21: Multi-Service Stack

Deploy a full stack: Nginx (reverse proxy) + Flask (app) + PostgreSQL (database) + Redis (cache). Use Docker Compose with health checks, volumes for persistence, and a custom network. This is a production-ready architecture running on a $5/mo server.

Week 4: Monitoring and CI/CD

Day 22: Prometheus and Node Exporter

Install Prometheus and Node Exporter, via Docker or directly. Configure Node Exporter to expose system metrics (CPU, RAM, disk, network) and set Prometheus to scrape them every 15 seconds.

Day 23: Grafana Dashboards

Install Grafana and connect it to Prometheus as a data source. Import a pre-built Node Exporter dashboard (ID 1860) and customize it to show what matters on a budget VPS: memory pressure, disk I/O, and CPU load.

Day 24: Alerting

Configure Alertmanager to send notifications when disk usage exceeds 80% or when the server has been unreachable for 5 minutes. Use a free notification channel like email or Slack webhook. This is real production monitoring, running on a cheap VPS.

Day 25: GitHub Actions Self-Hosted Runner

Set up a self-hosted GitHub Actions runner on your VPS. Create a simple workflow that runs tests on every push. The runner executes on your VPS, so you see how CI/CD works without paying for GitHub’s hosted runners.

Day 26: Deploy Pipeline

Extend the workflow: on every push to main, SSH into the VPS, pull the latest Docker image, and restart the container. This is a functional CI/CD pipeline — your code goes from commit to production in under a minute.

Day 27–28: Log Management

Install Loki (Grafana’s log aggregation system) and Promtail. Configure Promtail to ship Docker container logs to Loki. View logs in Grafana alongside your metrics. Now you have centralized logging for your entire stack.

Day 29–30: Capstone Project

Destroy your VPS and reprovision it from scratch. Then, using only your Ansible playbooks and Docker Compose files, deploy the entire stack: hardened server, reverse proxy with SSL, a containerized application, monitoring, and CI/CD. If the full redeploy takes under 30 minutes, you have built a real, transferable DevOps skill set.

What You Have Built

After 30 days on a $5/mo budget VPS, you have a complete DevOps lab: provisioning, configuration management, containers, monitoring, alerting, logging, and CI/CD — the exact skills companies look for in DevOps engineers. The VPS cost you $5; the same skills from a bootcamp would cost thousands. Check the latest budget VPS deals on our homepage to start your journey.

Next Steps

  • Add Kubernetes (k3s) on a second VPS for cluster orchestration.
  • Implement Infrastructure as Code with Terraform.
  • Set up a VPN (WireGuard) on your VPS for secure remote access.
  • Write a blog post documenting your setup — it doubles as a portfolio piece.

The barrier to learning DevOps is not technical — it is access to infrastructure. A $5 budget VPS removes that barrier.

Affordable-Vps-Server-Author
Affordable-Vps-Server-Author
Articles: 264

Leave a Reply