DEV Community

Cover image for First Steps as a Junior DevOps: Essential VPS Setup Guide
Adi Santika Jaya
Adi Santika Jaya

Posted on

First Steps as a Junior DevOps: Essential VPS Setup Guide

Starting Out with VPS: Essential Setups and Concepts for Beginners

Managing a Virtual Private Server (VPS) gives you total control over your web infrastructure, APIs, and databases. However, unlike PaaS providers like Vercel or Render that automate deployment, a VPS requires a solid grasp of Linux fundamentals, networking, and server security.

Whether you've just rented a VPS to host a client application, a university thesis project, or a personal side project, this guide covers everything you need to know to configure your server securely from scratch.


๐Ÿ›  Project Environment & Server Specifications

To ground this guide in a practical, real-world context, all configurations and commands below were tested using the following stack:

  • Server: Cloud VPS Lite (1 vCPU, 1 GB / 2 GB RAM)
  • Operating System: Ubuntu 22.04 LTS (Server Edition)
  • User Access: Dedicated non-root user (dev) with sudo privileges
  • Web Server & Reverse Proxy: Nginx
  • PHP Runtime: PHP 8.3-FPM (php8.3-fpm.sock)
  • Database Engine: MySQL Database Server
  • DNS & SSL Management: Cloudflare DNS Manager (Proxy / A Record)
  • Sample Application: Laravel 10/11 Framework

1. Core VPS Concepts to Understand

Before executing commands in the terminal, keep these fundamental concepts in mind:

  • Non-GUI Environment: VPS management is done 100% via the terminal using the SSH (Secure Shell) protocol.
  • User vs. Root Permissions: Root is the superuser with unrestricted system control. Best practices dictate avoiding daily tasks as root to prevent accidental system destruction (like accidentally running rm -rf /).
  • Nginx as a Reverse Proxy: The web server receives incoming HTTP/HTTPS traffic on ports 80/443 and routes it to your application layer (such as PHP-FPM, a Node.js process, or a Docker container).

2. Initial Server Setup Checklist

When booting up a fresh VPS, perform these four steps to secure your environment.

A. Create a Non-Root Sudo User

Create a standard user account for daily administrative tasks:

# Create a new user (e.g., dev)
adduser dev

# Grant sudo privileges
usermod -aG sudo dev

Enter fullscreen mode Exit fullscreen mode

Log in as dev moving forward. Prefix administrative commands with sudo.

B. Configure SSH Key Authentication

Relying on password authentication leaves your server vulnerable to brute-force attacks. Set up SSH Key Authentication instead.

  1. Generate an SSH Key pair on your local machine:
ssh-keygen -t ed25519 -C "your-email@example.com"

Enter fullscreen mode Exit fullscreen mode
  1. Copy the public key to your VPS:
ssh-copy-id dev@YOUR_VPS_IP

Enter fullscreen mode Exit fullscreen mode
  1. Disable root login and password authentication by editing /etc/ssh/sshd_config:
PermitRootLogin no
PasswordAuthentication no

Enter fullscreen mode Exit fullscreen mode
  1. Restart the SSH service:
sudo systemctl restart ssh

Enter fullscreen mode Exit fullscreen mode

C. Configure Firewall (UFW)

By default, block all incoming ports and open only what is necessary:

# Allow SSH, HTTP, and HTTPS
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'

# Enable Firewall
sudo ufw enable

Enter fullscreen mode Exit fullscreen mode

D. Allocate Swap Memory

For low-spec VPS instances (1 GB โ€“ 2 GB RAM), memory-heavy operations like composer install or npm run build can trigger Out of Memory (OOM) crashes. Adding a Swap File (virtual memory on disk) prevents this:

# Create a 2GB swap file
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# Make swap persistent across reboots
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Enter fullscreen mode Exit fullscreen mode

3. Setting Up the Web Stack

To run a modern PHP/Laravel application, install the core components:

  1. Web Server (Nginx):
sudo apt update
sudo apt install nginx

Enter fullscreen mode Exit fullscreen mode
  1. Database Engine (MySQL):
sudo apt install mysql-server
sudo mysql_secure_installation

Enter fullscreen mode Exit fullscreen mode
  1. PHP Runtime & Extensions: Install PHP 8.3 FPM and the extensions required by Laravel:
sudo apt install php8.3-fpm php8.3-cli php8.3-mysql php8.3-xml php8.3-curl php8.3-mbstring zip unzip

Enter fullscreen mode Exit fullscreen mode

4. Managing Folder Ownership (/var/www/)

A common obstacle for developers new to Linux is the Permission Denied error.

  • The standard web root directory on Ubuntu is /var/www/.
  • By default, this folder is owned by root or www-data.
  • Fix: Change the ownership of your project directory to your active user (dev) to allow seamless git clone operations and file edits:
sudo chown -R dev:dev /var/www/your-project
sudo chmod -R 775 /var/www/your-project

Enter fullscreen mode Exit fullscreen mode

5. Summary Reference

Component Primary Function Key Commands / Tools
Server Access Encrypted remote management ssh, ssh-keygen, ed25519
Security Port restriction & access control ufw, sshd_config
Memory Management Prevent Out of Memory (OOM) crashes swapfile, free -h
Web Serving Route domains to application sockets Nginx Server Block, php8.3-fpm

๐Ÿ’ก Conclusion

Managing a VPS requires a bit more hands-on effort than shared hosting. However, once you grasp Linux Permissions, Firewall Rules, Swap Allocation, and Unix Sockets, you have full control over your deployment environment.

Happy coding and shipping! ๐Ÿš€


Top comments (0)