Linux VPS Setup Guide - Complete Tutorial
Just got your first Linux VPS? This guide walks you through everything from initial login to running your first application. We will use Ubuntu 22.04 LTS, but most steps apply to other distributions.
Prerequisites
Before starting, you need:
- VPS with SSH access
- Root password or SSH key
- Terminal application (PuTTY on Windows, Terminal on Mac/Linux)
Step 1: First Login
Connect via SSH
bashssh root@your_server_ip
You will be prompted for the password provided by your hosting provider.
Update the System
First thing after login, update all packages:
bashapt update && apt upgrade -y
This ensures you have the latest security patches.
Step 2: Create a Non-Root User
Running as root is dangerous. Create a regular user:
bash# Create user adduser myuser # Add to sudo group usermod -aG sudo myuser
Test the new user:
bashsu - myuser sudo whoami # Should output: root
Step 3: Set Up SSH Keys
SSH keys are more secure than passwords.
On Your Local Machine
Generate a key pair:
bashssh-keygen -t ed25519 -C "your_email@example.com"
Copy Key to Server
bashssh-copy-id myuser@your_server_ip
Or manually:
bash# On server as myuser mkdir -p ~/.ssh chmod 700 ~/.ssh nano ~/.ssh/authorized_keys # Paste your public key chmod 600 ~/.ssh/authorized_keys
Test Key Login
bashssh myuser@your_server_ip
Should login without password prompt.
Step 4: Secure SSH
Edit SSH configuration:
bashsudo nano /etc/ssh/sshd_config
Make these changes:
text# Disable root login PermitRootLogin no # Disable password authentication PasswordAuthentication no # Change default port (optional) Port 2222 # Allow only your user AllowUsers myuser
Restart SSH:
bashsudo systemctl restart sshd
Important: Keep your current session open and test new connection before closing!
Step 5: Configure Firewall
Ubuntu includes UFW (Uncomplicated Firewall):
bash# Allow SSH (use your port if changed) sudo ufw allow 2222/tcp # Allow common services sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS # Enable firewall sudo ufw enable # Check status sudo ufw status
Step 6: Install Essential Tools
Basic Utilities
bashsudo apt install -y \ curl \ wget \ git \ htop \ unzip \ nano \ fail2ban
Configure Fail2ban
Fail2ban protects against brute force attacks:
bashsudo systemctl enable fail2ban sudo systemctl start fail2ban
Step 7: Set Up Automatic Updates
Enable automatic security updates:
bashsudo apt install unattended-upgrades sudo dpkg-reconfigure -plow unattended-upgrades
Step 8: Install Node.js (Optional)
For running Node.js applications:
bash# Install Node.js 20.x curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs # Verify node --version npm --version
Step 9: Install Python (Optional)
Python 3 is usually pre-installed, but ensure pip is available:
bashsudo apt install -y python3-pip python3-venv # Verify python3 --version pip3 --version
Step 10: Install Docker (Optional)
For containerized applications:
bash# Install Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # Add user to docker group sudo usermod -aG docker myuser # Install Docker Compose sudo apt install docker-compose-plugin # Verify docker --version docker compose version
Log out and back in for group changes to take effect.
Step 11: Set Up Swap (If Needed)
For VPS with limited RAM, add swap space:
bash# Check current swap free -h # Create 2GB swap file sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # Make permanent echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab # Verify free -h
Step 12: Configure Timezone
Set your timezone:
bash# List timezones timedatectl list-timezones # Set timezone sudo timedatectl set-timezone Asia/Kolkata # Verify date
Step 13: Set Up Monitoring
Basic Monitoring with htop
bashhtop
Disk Usage
bashdf -h
Memory Usage
bashfree -h
Step 14: Create Your First Application
Example: Simple Node.js App
bash# Create project directory mkdir ~/myapp && cd ~/myapp # Initialize project npm init -y # Create simple server cat > index.js << 'EOF' const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello from VPS!'); }); server.listen(3000, () => { console.log('Server running on port 3000'); }); EOF # Run node index.js
Keep App Running with PM2
bash# Install PM2 sudo npm install -g pm2 # Start app pm2 start index.js --name myapp # Auto-start on reboot pm2 startup pm2 save
Security Checklist
Before going live, verify:
- Non-root user created
- SSH keys configured
- Password authentication disabled
- Firewall enabled
- Fail2ban running
- Automatic updates enabled
- Unnecessary services disabled
Common Commands Reference
bash# System info uname -a lsb_release -a # Resource usage htop df -h free -h # Service management sudo systemctl status service_name sudo systemctl restart service_name # Logs sudo journalctl -u service_name sudo tail -f /var/log/syslog # Network ip addr ss -tulpn
Troubleshooting
Cannot Connect via SSH
- Check if server is running
- Verify IP address
- Check firewall rules
- Try from different network
Permission Denied
- Verify user permissions
- Check file ownership
- Use sudo for system operations
Out of Memory
- Add swap space
- Upgrade VPS plan
- Optimize applications
Conclusion
Your Linux VPS is now set up and secured. From here, you can deploy websites, applications, Discord bots, or any other services. Remember to keep your system updated and monitor resource usage.
HeavenCloud provides high-performance Linux VPS with easy setup, pre-configured security, and locations in India and USA for low latency.
Deploy on HeavenCloud
Discord bots, Lavalink nodes, and VPS, instant setup with NVMe and DDoS protection.