DEV Community

Nandan Ramdani
Nandan Ramdani

Posted on

Setup Production Sederhana yang Aman dan Efisien

Banyak developer terjebak dengan kompleksitas sejak awal — ingin pakai Docker Swarm, Kubernetes, atau CI/CD berlapis, padahal aplikasinya baru satu layanan dengan ribuan user pun belum.
Padahal, dengan satu VPS yang disetup dengan benar, kamu sudah bisa punya sistem yang aman, cepat, dan siap scale ringan.

Artikel ini membahas bagaimana membangun environment production sederhana yang tetap punya standar keamanan dan performa layaknya sistem besar — tapi tanpa ribet.


⚙️ Arsitektur Sederhana

Gambaran kasarnya seperti ini:

Internet
  ↓ HTTPS
Nginx (reverse proxy + SSL)
  ↓
App Server
  ↔ Redis (session/cache)
  ↔ Database (Postgres/MySQL)
  ↔ MinIO (opsional untuk file)
Enter fullscreen mode Exit fullscreen mode

Satu server, empat komponen utama, dan alur data yang bersih.


🧩 Komponen Minimum

1. VPS

Pilih provider stabil (Vultr, DigitalOcean, Linode, dll).
Spesifikasi 2 vCPU / 2–4 GB RAM sudah cukup untuk banyak use case.
Pastikan:

  • Akses SSH aktif
  • Firewall (ufw) membatasi port hanya 22, 80, 443
  • Monitoring sederhana aktif (Netdata, Glances)

2. Database

Gunakan PostgreSQL atau MySQL.
Simpan hanya data inti aplikasi.
Tips:

  • Bind ke localhost saja
  • Gunakan backup otomatis via cron (pg_dump atau mysqldump)
  • Aktifkan password dan nonaktifkan remote connection

3. Redis

Untuk session, cache, dan limiter.

  • Jalankan di 127.0.0.1
  • Gunakan password di redis.conf
  • Setting maxmemory-policy allkeys-lru biar efisien

Redis penting karena mempercepat respon dan menyimpan state yang bisa dibagikan antar instance kalau nanti kamu butuh scaling.


4. MinIO (Opsional)

Kalau aplikasi kamu butuh upload file, MinIO bisa jadi solusi lokal sebelum pindah ke S3.

  • Jalankan di port internal
  • Gunakan access key & secret key
  • Integrasi mudah karena API-nya kompatibel S3

5. Reverse Proxy (Nginx / Caddy / Traefik)

Titik pertama semua request.
Tugasnya:

  • Menangani HTTPS (SSL via Let’s Encrypt)
  • Meneruskan request ke aplikasi (misal http://localhost:3000)
  • Load balancing kalau ada beberapa instance

Contoh konfigurasi minimal (Nginx):

upstream app {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://app;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
Enter fullscreen mode Exit fullscreen mode

🔐 Keamanan Dasar

Beberapa langkah penting agar setup ini tetap aman:

  • Gunakan HTTPS di semua koneksi.
  • Aktifkan firewall dan batasi port.
  • Jalankan service dengan user non-root.
  • Pastikan cookie memakai HttpOnly dan Secure.
  • Gunakan Fail2ban untuk brute-force protection.

🚀 Siap untuk Scale

Begitu trafik naik, kamu bisa:

  • Pisah database atau Redis ke node lain.
  • Tambah instance aplikasi dan biarkan Nginx melakukan load balance.
  • Pasang CDN untuk file statis.
  • Backup otomatis dan monitoring lebih detail.

Tanpa refactor besar — tinggal geser peran komponen ke server berbeda.


✅ Kesimpulan

Dengan setup sederhana:

  • 1 VPS
  • Database
  • Redis
  • (Opsional) MinIO
  • Reverse proxy + SSL

Kamu sudah punya sistem production-ready yang stabil, aman, dan siap tumbuh.
Tidak perlu Kubernetes, tidak perlu Docker swarm — cukup satu server yang dirawat dengan benar.

Kadang yang paling praktis bukan yang paling canggih, tapi yang paling bisa diandalkan.

Top comments (0)