Best Hostinger VPS Setup for Side Projects: A Complete Guide

A practical, no-nonsense guide to configuring a Hostinger VPS for personal projects without spending hours on DevOps.

TL;DR

For most side projects, the $1.99/month Hostinger VPS plan with 1GB RAM is sufficient. Start with Ubuntu 22.04, set up UFW firewall, install fail2ban, configure daily backups to cloud storage, and use systemd (not Docker) unless you need containerization. Automate updates and monitoring. Get Hostinger VPS and follow this guide to get productive in under an hour.

Why Side Projects Need Different Setup Than Production

Side projects have different constraints than serious production workloads. You're likely the only developer, you don't have 24/7 on-call, and you want to spend time building features, not maintaining infrastructure.

That means:

This guide optimizes for those constraints while still providing reliable hosting.

Step 1: Choose the Right Plan Initially

Hostinger's VPS plans (as of 2026):

Start with Plan 1. You can upgrade later, but downgrading requires rebuilding. The $1.99 plan runs WordPress with 50 plugins smoothly, hosts multiple Node.js microservices, or runs a Docker compose stack with 2-3 containers. Only upgrade if you see sustained RAM usage >80% or CPU load >1.5.

Step 2: Initial Server Provisioning

  1. Choose Ubuntu 22.04 LTS (not Alpine, not CentOS). Ubuntu has the largest community and most tutorials.
  2. Select the region closest to your users. For US side projects, New York or Fremont. For Europe, Netherlands or UK. For Asia, Singapore.
  3. Set a strong root password and add your SSH public key. Disable password login after testing.
  4. Give the server a meaningful hostname like sideproject-1 or blog-vps.

Step 3: Basic Security Hardening (15 minutes)

# 1. Update everything apt update && apt upgrade -y # 2. Install UFW firewall apt install ufw -y ufw default deny incoming ufw default allow outgoing ufw allow 22/tcp # Change default SSH port later ufw allow 80/tcp ufw allow 443/tcp ufw enable # 3. Install fail2ban apt install fail2ban -y cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Edit /etc/fail2ban/jail.local: set bantime = 3600, maxretry = 3 systemctl enable fail2ban systemctl start fail2ban # 4. Change SSH port (optional but recommended) sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config systemctl restart sshd # Update ufw: ufw allow 2222/tcp && ufw delete allow 22/tcp # 5. Disable root SSH login (use your user) sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config systemctl restart sshd # 6. Set up automatic security updates apt install unattended-upgrades -y dpkg-reconfigure -f noninteractive unattended-upgrades

⚠️ Important: Test SSH with new port before disabling password/logins. Keep a backup SSH session open while making changes.

Step 4: Install Your Stack

For WordPress Sites

# LAMP stack (Linux, Apache, MySQL, PHP) apt install apache2 mariadb-server php php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip libapache2-mod-php -y # Secure MariaDB mysql_secure_installation # Download WordPress wget https://wordpress.org/latest.tar.gz tar -xzf latest.tar.gz mv wordpress /var/www/html/ chown -R www-data:www-data /var/www/html/wordpress chmod -R 755 /var/www/html/wordpress

For Node.js Apps

# Install Node.js (using NodeSource) curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - apt install -y nodejs # Install PM2 for process management npm install -g pm2 pm2 startup systemd pm2 save # Clone and run your app git clone https://github.com/yourusername/your-app.git cd your-app npm install pm2 start ecosystem.config.js # or npm start

For Docker Compose Projects

# Install Docker apt install docker.io docker-compose -y systemctl enable docker systemctl start docker # Add your user to docker group (avoid sudo) usermod -aG docker $USER # Log out and back in for group changes to take effect # Create docker-compose.yml mkdir ~/myproject && cd ~/myproject nano docker-compose.yml # Example: nginx +WordPress # version: '3' # services: # db: # image: mariadb:10.6 # environment: # MYSQL_ROOT_PASSWORD: your_password # MYSQL_DATABASE: wordpress # wordpress: # image: wordpress:latest # ports: # - "80:80" # environment: # WORDPRESS_DB_HOST: db # WORDPRESS_DB_PASSWORD: your_password # volumes: # - ./wp-data:/var/www/html docker-compose up -d
⚠️ Docker overhead: Docker adds ~200MB RAM usage even when idle. For a 1GB VPS, this may be significant. Use systemd for single-service projects.

Step 5: Configure Domain and SSL

  1. Point your domain's A record to your VPS IP address.
  2. Install Certbot for Let's Encrypt:
    apt install certbot python3-certbot-apache -y # For Apache # OR apt install certbot python3-certbot-nginx -y # For Nginx # Obtain certificate (Apache example) certbot --apache -d yourdomain.com -d www.yourdomain.com
  3. Auto-renewal is set up automatically. Test with sudo certbot renew --dry-run.

Step 6: Set Up Automated Backups

Never rely on a single backup. Use both local snapshots and offsite cloud storage.

Offsite backup to Backblaze B2 (cheap, ~$0.005/GB/mo)

# Install rclone curl https://rclone.org/install.sh | sudo bash # Configure rclone (run rclone config, create remote called 'b2') # Follow prompts: storage = b2, account, key, bucket name # Backup script: /usr/local/bin/backup.sh #!/bin/bash BACKUP_DIR="/backup" DATE=$(date +%Y-%m-%d-%H%M) DB_USER="root" DB_PASS="your_db_password" DATABASES=$(mysql -u$DB_USER -p$DB_PASS -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)") # Create directory mkdir -p $BACKUP_DIR/$DATE # Backup databases for DB in $DATABASES; do mysqldump -u$DB_USER -p$DB_PASS $DB > $BACKUP_DIR/$DATE/$DB.sql done # Backup website files (adjust path) tar -czf $BACKUP_DIR/$DATE/www-data.tar.gz /var/www/html # Upload to B2 rclone copy $BACKUP_DIR/$DATE b2:your-backup-bucket/$DATE --progress # Keep only last 7 days locally find $BACKUP_DIR -type d -mtime +7 -exec rm -rf {} \; # Log echo "Backup completed: $(date)" >> /var/log/backup.log
# Make executable and test chmod +x /usr/local/bin/backup.sh sudo ./backup.sh # Add to crontab (daily at 2 AM) 0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Step 7: Monitoring and Alerts

Don't wake up to a crashed site. Set up lightweight monitoring.

Install Netdata (real-time metrics)

bash <(curl -Ss https://my-netdata.io/kickstart.sh) --dont-wait # Access dashboard at https://yourdomain.com:19999 (use SSH tunnel for security)

Simple uptime check with UptimeRobot (free)

Create a free UptimeRobot account, add your site URL, set 5-minute intervals. Get email/Slack alerts when down.

Disk space alert script

#!/bin/bash # /usr/local/bin/check-disk.sh USAGE=$(df / | awk 'NR==2 {print $5}' | tr -d '%') if [ $USAGE -gt 90 ]; then echo "CRITICAL: Disk usage at ${USAGE}%" | mail -s "VPS Disk Alert" [email protected] fi
# Add to crontab (hourly) 0 * * * * /usr/local/bin/check-disk.sh

Step 8: Automate Security Updates

We already installed unattended-upgrades, but configure it properly:

nano /etc/apt/apt.conf.d/50unattended-upgrades

Ensure these settings:

Unattended-Upgrade::Origins-Pattern { "origin=Debian,codename=${distro_codename}-security"; "origin=Debian,codename=${distro_codename}-updates"; "origin=Ubuntu,codename=${distro_codename}-security"; "origin=Ubuntu,codename=${distro_codename}-updates"; }; Unattended-Upgrade::Remove-Unused-Kernel "true"; Unattended-Upgrade::Mail "[email protected]";

Restart: systemctl restart unattended-upgrades

Step 9: Document Your Setup (Future You Will Thank You)

Create a README file on your local machine or in a private note with:

When you return to this project months later, you'll avoid hours of head-scratching.

Frequently asked questions

What VPS plan is best for side projects on Hostinger?

Start with the $1.99/month plan (1GB RAM, 1 vCPU, 20GB SSD). It's enough for a small WordPress site, a Node.js app, or a simple Docker compose stack. Upgrade only when you hit consistent RAM usage above 80% or CPU wait times increase.

Should I use Docker or systemd for side projects?

For a single-service side project, systemd is simpler and lighter. Use Docker only if you need container isolation, multiple services with complex dependencies, or plan to migrate to other hosts easily. Docker adds ~200MB RAM overhead and management complexity.

How much time does VPS maintenance actually take?

With proper automation, expect 1-2 hours per month: weekly security updates (15 min), log rotation checks (10 min), backup verification (30 min), and occasional plugin/theme updates. The rest should be hands-off.

Do I need a firewall on a side project VPS?

Yes. Even side projects get scanned. Enable UFW (Uncomplicated Firewall) and only open ports 22 (SSH, change default port), 80 (HTTP), and 443 (HTTPS). Block everything else. Install fail2ban to prevent brute force attacks.

What backup strategy is sufficient for a hobby VPS?

Daily automated backups to Backblaze B2 or Wasabi (~$0.005/GB/month). Keep 30 days of retention. Test restores quarterly. Also enable Hostinger's weekly snapshot for disaster recovery. Don't rely on a single backup location.

How do I monitor if my VPS is slowing down?

Set up netdata or htop via SSH. Watch for: RAM usage >85% sustained, CPU load >2*vCPU for >5 minutes, disk IO wait >10ms, or swap activity. These are early indicators that you need to optimize or upgrade.

Disclosure: This post contains affiliate links. If you click through and purchase hosting, we may earn a commission at no extra cost to you. This helps support our research and keeps the site running. We only recommend services we've tested and believe provide real value. See our full disclosure policy for details.