Setup VPS dari Nol
VPS (Virtual Private Server) adalah server virtual yang kamu kelola sendiri. Ini panduan setup VPS baru untuk menjalankan web application.
1. SSH & Keamanan Awal
# Login pertama kali
ssh root@YOUR_SERVER_IP
# Buat user baru (jangan pakai root)
adduser deploy
usermod -aG sudo deploy
# Setup SSH key (ed25519 direkomendasikan, bukan RSA)
ssh-keygen -t ed25519 -C "[email protected]" # di local
ssh-copy-id deploy@YOUR_SERVER_IP # copy key ke server
# Disable password login
sudo nano /etc/ssh/sshd_config
# PasswordAuthentication no
# PermitRootLogin no
sudo systemctl restart sshd
Kenapa ed25519 Lebih Baik dari RSA?
- Lebih pendek: ~68 karakter publik vs RSA 4096 bit yang panjangnya ribuan karakter
- Lebih cepat: signing dan verification jauh lebih ringan
- Keamanan setara / lebih baik: ed25519 setara RSA 3000+ bit, immune terhadap banyak side-channel attack
- Deterministic: output signature selalu sama untuk input sama (RSA bergantung RNG yang bisa lemah)
Gunakan RSA hanya jika target system lama tidak mendukung ed25519 (pre-OpenSSH 6.5, yaitu sebelum 2014).
2. Firewall UFW (Uncomplicated Firewall)
UFW adalah frontend sederhana untuk iptables. Default policy: tolak semua incoming, izinkan semua outgoing.
# Policy default — WAJIB set sebelum enable
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Allow services essential (sebelum enable, agar tidak lock diri sendiri!)
sudo ufw allow 22/tcp # SSH — JANGAN LUPA ATAU TERKUNCI
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
# Enable firewall
sudo ufw enable
sudo ufw status verbose
# Contoh rule advanced:
sudo ufw allow from 10.0.0.0/8 to any port 5432 # Postgres hanya dari VPC
sudo ufw limit 22/tcp # rate limit SSH (brute force mitigation)
sudo ufw delete allow 80/tcp # hapus rule
⚠️ Sebelum ufw enable, pastikan port 22 (SSH) sudah di-allow — kalau tidak, koneksi SSH terputus dan kamu terkunci dari server.
3. Install Stack
# Update system
sudo apt update && sudo apt upgrade -y
# Install Node.js (via NodeSource)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# Install Nginx
sudo apt install -y nginx
# Install PostgreSQL
sudo apt install -y postgresql postgresql-contrib
# Install PHP & Composer (untuk Laravel)
sudo apt install -y php8.3-fpm php8.3-pgsql php8.3-mbstring
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
4. Deploy Aplikasi
# Clone project
cd /var/www
sudo git clone https://github.com/user/my-app.git
sudo chown -R deploy:deploy my-app
# Setup environment
cd my-app
cp .env.example .env
nano .env # isi database credentials, dll
# Install & build
npm ci && npm run build
# Setup Nginx & SSL
sudo certbot --nginx -d myapp.com