Kembali ke Panduan Deploy

Optimasi — cepat, stabil, terawat sendiri

Percepat & rawat VPS secara otomatis

Blog yang sudah tayang masih bisa dibuat jauh lebih cepat dan lebih awetdengan beberapa pengaturan sekali pasang. Di panduan ini: kompresi & cache di Nginx, batas memori PM2, log rotation agar disk tidak penuh, dan update keamanan otomatis. Semua dijelaskan langkah demi langkah.

Lebih cepat

Kompresi & cache membuat halaman terbuka lebih ringan dan cepat.

Lebih stabil

Batas memori PM2 mencegah satu proses menjatuhkan server.

Lebih aman

Tambalan keamanan OS terpasang sendiri tiap hari.

1
Pahami dulu

Kenapa perlu dioptimasi?

Server yang baru di-deploy biasanya pakai pengaturan default yang "aman tapi tidak optimal". Tiga masalah paling umum: halaman terasa lambat karena tidak dikompresi, server tumbang karena satu proses memakan semua RAM, dan disk lama-lama penuh oleh file log. Semua ini bisa dicegah sekali pasang.

2
Lebih cepat

Kompresi gzip & brotli di Nginx

Kompresi memperkecil ukuran HTML, CSS, dan JavaScript sebelum dikirim ke browser — sering memangkas ukuran transfer 60–80%. Buat file konfigurasi khusus agar rapi:

GNU nano 7.2/etc/nginx/conf.d/compression.conf
1# /etc/nginx/conf.d/compression.conf2# Kompresi teks agar transfer lebih kecil & cepat3gzip on;4gzip_vary on;5gzip_comp_level 5;6gzip_min_length 256;7gzip_proxied any;8gzip_types9  text/plain text/css application/json10  application/javascript text/javascript11  image/svg+xml application/xml;
^O Write Out^X Exit^W Where Is^K Cut

Uji konfigurasi, muat ulang Nginx, lalu pastikan aktif:

# Uji konfigurasi lalu muat ulang Nginx
sudo nginx -t
sudo systemctl reload nginx
 
# Verifikasi kompresi aktif (cari "content-encoding: gzip")
curl -sI -H "Accept-Encoding: gzip" https://blogku.com | grep -i content-encoding
deploy@server — cek kompresi
deploy@server:~$ curl -sI -H "Accept-Encoding: gzip" https://blogku.com | grep -i content-encodingcontent-encoding: gzip# kompresi aktif ✅
Ingin lebih kecil lagi? Brotli biasanya unggul ~15% dibanding gzip. Pasang modulnya dengan sudo apt install libnginx-mod-http-brotli lalu aktifkan brotli on; mirip blok gzip di atas.
3
Hemat bandwidth

Cache aset statis

Gambar, font, dan file _next/static jarang berubah. Suruh browser menyimpannya agar kunjungan berikutnya nyaris instan. Tambahkan blok berikut di dalam server { ... } config situsmu:

GNU nano 7.2/etc/nginx/sites-available/blogku
1# Di dalam server { ... } pada config Nginx situsmu2# Simpan aset statis di browser pengunjung selama 30 hari3location /_next/static/ {4  expires 30d;5  add_header Cache-Control "public, max-age=2592000, immutable";6}7 8location ~* \.(?:jpg|jpeg|png|gif|webp|avif|svg|ico|woff2)$ {9  expires 30d;10  add_header Cache-Control "public, max-age=2592000";11}
^O Write Out^X Exit^W Where Is^K Cut

Jalankan sudo nginx -t && sudo systemctl reload nginx untuk menerapkan. File ber-hash Next.js aman memakai immutable karena namanya berubah tiap build.

4
Lebih stabil

Batasi memori PM2 (auto-restart)

Di VPS RAM kecil, kebocoran memori bisa menjatuhkan seluruh server. max_memory_restart menyuruh PM2 me-restart aplikasi dengan mulus bila pemakaian RAM melewati batas. Buat file konfigurasi:

GNU nano 7.2ecosystem.config.js
1// ecosystem.config.js — di folder aplikasimu2module.exports = {3  apps: [4    {5      name: 'myblog',6      script: 'node_modules/next/dist/bin/next',7      args: 'start -p 3000',8      instances: 1,9      // Restart otomatis bila pemakaian RAM melewati 300MB10      max_memory_restart: '300M',11      env: { NODE_ENV: 'production' },12    },13  ],14}
^O Write Out^X Exit^W Where Is^K Cut

Jalankan dengan konfigurasi ini lalu simpan:

# Jalankan pakai konfigurasi & simpan agar nyala setelah reboot
pm2 start ecosystem.config.js
pm2 save
Atur batas realistis. Terlalu kecil = aplikasi restart terus-menerus. Untuk blog Next.js, mulai dari 300M500M dan sesuaikan dengan hasil pm2 status.
5
Anti penuh

Cegah disk penuh: log rotation

File log tumbuh tanpa henti dan diam-diam memenuhi disk — penyebab umum blog tiba-tiba mati. logrotate (bawaan Ubuntu) memutar, mengompres, dan menghapus log lama otomatis. Buat aturannya:

GNU nano 7.2/etc/logrotate.d/pm2-myblog
1# /etc/logrotate.d/pm2-myblog2/home/deploy/.pm2/logs/*.log {3  daily4  rotate 75  compress6  delaycompress7  missingok8  notifempty9  copytruncate10}
^O Write Out^X Exit^W Where Is^K Cut

Aturan di atas menyimpan 7 hari log terakhir dalam bentuk terkompres dan membuang sisanya. Uji tanpa menunggu sehari:

deploy@server — uji logrotate
deploy@server:~$ sudo logrotate -f /etc/logrotate.d/pm2-myblogdeploy@server:~$ ls -lh ~/.pm2/logsout.log   out.log.1.gz   error.log   error.log.1.gz# log lama dikompres, disk aman ✅
6
Lebih aman

Update keamanan otomatis

Celah keamanan ditemukan tiap minggu. unattended-upgrades memasang tambalan keamanan Ubuntu secara otomatis, tanpa kamu harus ingat menjalankan apt upgrade. Pasang & aktifkan:

# Pasang update keamanan otomatis
sudo apt update
sudo apt install -y unattended-upgrades
 
# Aktifkan (pilih "Yes" pada dialog)
sudo dpkg-reconfigure --priority=low unattended-upgrades

Pastikan benar-benar aktif:

# Cek bahwa update otomatis aktif
cat /etc/apt/apt.conf.d/20auto-upgrades
 
# Lihat simulasi apa yang akan di-update
sudo unattended-upgrade --dry-run --debug | head
Update otomatis ini sengaja dibatasi hanya untuk keamanan, sehingga risiko aplikasimu rusak karena update besar sangat kecil. Sangat layak diaktifkan di semua server.
7
Cek akhir

Verifikasi semua aktif

Jalankan rangkaian cek cepat untuk memastikan semua menyala:

deploy@server — verifikasi optimasi
deploy@server:~$ curl -sI -H "Accept-Encoding: gzip" https://blogku.com | grep -i content-encodingcontent-encoding: gzipdeploy@server:~$ pm2 info myblog | grep "max memory restart"max memory restart: 300Mdeploy@server:~$ systemctl is-active unattended-upgradesactive# cepat, stabil, & terawat otomatis ✅
8
Anti-stuck

Masalah umum & cara mengatasinya

Bila ada yang tidak sesuai harapan, cek tabel berikut:

GejalaSebabSolusi
nginx -t: test failedSalah ketik atau file diletakkan di lokasi yang salah.Baca pesan error (menyebut baris), perbaiki, jalankan nginx -t lagi.
content-encoding tidak munculgzip_types kurang lengkap atau di-cache CDN.Pastikan tipe konten ada di gzip_types; bypass cache saat menguji.
Aplikasi sering di-restart PM2max_memory_restart terlalu kecil untuk aplikasimu.Naikkan ke 400–500M, atau tambah swap bila RAM server kecil.
Disk tetap penuh oleh loglogrotate belum jalan atau path log salah.Cek path di config, uji: sudo logrotate -f /etc/logrotate.d/pm2-myblog.

Servermu kini cepat & terawat

Dengan kompresi, cache, batas memori, log rotation, dan update otomatis, blogmu ringan dan jarang bermasalah. Selanjutnya, manfaatkan satu VPS untuk banyak situs sekaligus.