Cara Install WordPress di VPS Murah 1GB RAM Tanpa Panel

Table of Contents

Ingin punya website WordPress sendiri dengan anggaran sangat terbatas? Artikel ini memandu kalian memasang WordPress di VPS murah dengan RAM 1 GB, tanpa panel kontrol seperti cPanel, dari sistem yang masih bersih sampai situs bisa dibuka lewat domain sendiri dengan HTTPS.

Semua langkah di bawah saya jalankan sendiri di VPS 1 GB, lengkap dengan jebakan yang saya temui. Di akhir, saya juga mencoba tema bergaya majalah beserta demonya. Uji dengan banyak pengunjung sekaligus belum saya lakukan, dan itu saya jelaskan di bagian akhir. Kalau kalian belum punya VPS, cara saya menyewanya ada di artikel sewa VPS murah.

Diorama tanah liat gaya isometrik: server mungil terhubung lewat kabel ke bola dunia dan jendela browser bergaya majalah dengan gembok emas, ditemani karakter berjaket biru dan maskot robot TV


Yang Perlu Disiapkan

  • Sebuah VPS Linux. Saya memakai Ubuntu 22.04, 1 vCPU, 1 GB RAM, dan SSD 20 GB.
  • Sebuah domain. Saya memakai mustafazain.my.id yang DNS-nya dikelola di Cloudflare.
  • PowerShell atau terminal untuk SSH. Kalau belum pernah, lihat cara login VPS pakai PowerShell.


Cek Dulu: VPS Kalian NAT atau Bukan?

Sebelum mulai, saya mengecek jenis jaringannya, karena itu menentukan cara membuka web. Tiga perintah ini cukup:

ip -4 addr show
curl -4 ifconfig.me
sudo ss -tlnp | grep ssh

Hasilnya: alamat di dalam VPS adalah 10.10.0.154 (privat), IP yang terlihat dari internet berbeda (publik), dan SSH mendengarkan di port 22, padahal saya masuk lewat port 20152. Jadi ini VPS NAT: satu IP publik diteruskan ke dalam VPS, dan port SSH dipetakan oleh penyedia.

Dampaknya, panel penyedia menyatakan beberapa port tidak tersedia (surel, DNS, FTP, dan rentang yang biasa dipakai cPanel), dan web di port 80 dan 443 hanya bisa lewat fitur Domain & Website di panel. IP khusus ditawarkan Rp50.000 per bulan, tapi stoknya sedang kosong saat saya melihatnya. Karena itu saya memakai fitur domain bawaan, bukan Cloudflare Tunnel.

panel domain pada vps


Langkah 1: Instal Ulang OS

Saya mulai dari sistem yang masih bersih. Kalau VPS kalian baru disewa, langkah ini bisa dilewati. Kalau sebelumnya sudah terpasang sesuatu, instal ulang lewat tombol Instal Ulang OS di panel. Ini menghapus semua isi VPS secara permanen, jadi pastikan tidak ada data penting. Saya memilih Ubuntu 22.04 LTS.


Langkah 2: Login Pertama dan Peringatan yang Menakutkan

Kalau kalian instal ulang OS seperti saya, begitu mencoba login SSH menolak dengan tulisan besar REMOTE HOST IDENTIFICATION HAS CHANGED. Jangan panik. Itu terjadi karena server baru punya kunci identitas baru, sedangkan komputer kita masih mengingat yang lama. Setelah instal ulang OS, pesan ini normal.

Peringatan SSH REMOTE HOST IDENTIFICATION HAS CHANGED setelah instal ulang OS


Cara memperbaikinya: hapus catatan lama dengan perintah di bawah. Perhatikan kurung siku dan tanda kutip, karena SSH menyimpan alamat dengan port selain 22 dalam format itu. Saya sempat gagal karena menulisnya tanpa kurung siku, dan hasilnya Host not found.

ssh-keygen -R "[IP_VPS]:PORT"
penghapusan informasi host lama berhasil


Lalu login lagi. Saat ditanya soal fingerprint, cocokkan dengan yang tertera di peringatan tadi sebelum mengetik yes. Itulah gunanya kita membaca peringatannya, bukan sekadar mengetik yes.


Langkah 3: Buat Pengguna Baru

Jangan terus memakai root, tapi buat pengguna biasa dengan hak sudo:

adduser NAMA_PENGGUNA
usermod -aG sudo NAMA_PENGGUNA

Lalu login dengan pengguna itu di jendela kedua dan cek:

whoami
sudo whoami

Perintah pertama menampilkan nama penggunamu, dan perintah kedua (setelah meminta password) menampilkan root. Itu tandanya sudo berfungsi.

Saat login, muncul banner yang menawarkan New release '24.04.5 LTS' available. Itu hanya informasi, jangan dijalankan di tengah proses ini, karena itu mengganti versi OS.


Langkah 4: Perbarui Sistem

lsb_release -a
free -h
sudo apt update && sudo apt upgrade -y

Hasilnya Ubuntu 22.04.5 LTS. Saat pembaruan, muncul tulisan 0 upgraded, 0 newly installed. Itu bukan kegagalan, artinya image OS barunya sudah mutakhir.


Langkah 5: Pasang fail2ban dan Cek Benar-Benar Berjalan

VPS dengan SSH yang terbuka ke internet perlu perlindungan dasar. Saya memasang fail2ban, lalu mengecek statusnya. Ini bagian yang penting: terpasang tidak sama dengan berjalan.

sudo apt install fail2ban -y
sudo systemctl status fail2ban

Di VPS ini hasilnya inactive (dead) dan disabled, artinya mati dan tidak diatur menyala otomatis. Saya mengalaminya berulang kali di VPS ini, dan penyebabnya tidak saya ketahui.

Nyalakan sekaligus atur menyala otomatis:

sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban

Satu jebakan: kalau kalian langsung menjalankan fail2ban-client status sshd di detik yang sama dengan penyalaan, muncul Failed to access socket path. Dugaan saya, perintah itu berjalan sebelum fail2ban selesai menyiapkan soketnya. Beri jeda beberapa detik, lalu ulangi:

sudo fail2ban-client status sshd


Langkah 6: Pasang Nginx, MariaDB, dan PHP

Kita memakai pemasangan manual tanpa panel kontrol, supaya tidak ada aplikasi tambahan yang memakan RAM. Jangan memasang paket bernama php saja, karena itu biasanya ikut membawa Apache. Pasang PHP-FPM dan modul yang dibutuhkan WordPress:

sudo apt install -y nginx mariadb-server php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip php-intl

Cek hasilnya:

php -v
systemctl is-active nginx mariadb php8.1-fpm
free -h

PHP yang terpasang versi 8.1.2, dan Nginx serta MariaDB berstatus active. 

Nama layanan PHP-FPM mengikuti versi PHP, jadi kalau versi kalian berbeda, nama layanannya berbeda juga.

mariadb php terpasang sempurna


Langkah 7: Amankan dan Siapkan MariaDB

sudo mysql_secure_installation

Skrip ini mengajukan beberapa pertanyaan ya/tidak. Layar pertama menanyakan Switch to unix_socket authentication, dan skrip sendiri menulis bahwa akun root sudah terlindungi sehingga aman dijawab n. Untuk pertanyaan lain, baca teksnya dulu. Jawaban yang lazim untuk server baru adalah menghapus pengguna anonim, melarang login root dari jarak jauh, dan menghapus database test. Setelahnya saya memeriksa dan memang tidak ada pengguna anonim atau database test.

Lalu buat database dan pengguna untuk WordPress:

sudo mariadb
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'PASSWORD_ACAK_KAMU';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;

Peringatan penting: PASSWORD_ACAK_KAMU hanya penanda tempat. Ganti dengan password acak buatan kalian sendiri (bisa dibuat dengan openssl rand -base64 18), tanpa tanda kutip tunggal di dalamnya. Jangan menyalin password dari contoh tutorial mana pun, termasuk yang ini. Password di screenshot saya sudah ditutup. Simpan password asli di tempat aman, karena akan dipakai lagi di wizard WordPress.

Masing-masing perintah akan menjawab Query OK. Cek hasilnya, lalu keluar:

SHOW DATABASES;
SELECT user, host FROM mysql.user;
EXIT;

Database wordpress dan pengguna wpuser dengan host localhost muncul di daftar. Host localhost berarti pengguna itu hanya terdaftar untuk login dari server itu sendiri.


Langkah 8: Unduh WordPress

cd /tmp
curl -O https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
sudo mkdir -p /var/www/wordpress
sudo cp -a wordpress/. /var/www/wordpress/
sudo chown -R www-data:www-data /var/www/wordpress
ls /var/www/wordpress

Unduhan sekitar 33,7 MB selesai dalam 5 detik. Hasil ls menampilkan file inti WordPress seperti wp-admin, wp-content, wp-includes, dan index.php. Belum ada wp-config.php, itu wajar karena dibuat nanti oleh wizard. Nama folder /var/www/wordpress itu pilihan saya, bukan aturan baku.


Langkah 9: Atur Nginx

Buat file konfigurasi situs. Ganti mustafazain.my.id dengan domain kalian:

sudo tee /etc/nginx/sites-available/wordpress > /dev/null <<'EOF'
server {
    listen 80;
    listen [::]:80;
    server_name mustafazain.my.id;
    root /var/www/wordpress;
    index index.php;
    client_max_body_size 20M;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}
EOF

Untuk pemula: server_name adalah domain, root adalah folder WordPress, dan blok .php menyerahkan file PHP ke PHP-FPM. Baris client_max_body_size 20M mengizinkan unggah sampai 20 MB, sebab bawaan Nginx hanya 1 MB.

Aktifkan situsnya, lalu uji:

sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/wordpress
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx

Pada saya, dua perintah pertama sempat mengeluarkan pesan File exists dan No such file or directory. Keduanya tidak berbahaya: tautan situs sudah ada, dan situs bawaan memang sudah tidak ada. Yang menentukan adalah hasil nginx -t, yaitu syntax is ok dan test is successful.

Karena domain belum aktif, uji dari dalam server dengan menyertakan nama domain secara manual:

curl -I -H "Host: mustafazain.my.id" http://127.0.0.1

Hasilnya 302 Found dengan tujuan /wp-admin/setup-config.php. Artinya Nginx, PHP-FPM, dan WordPress sudah tersambung, dan WordPress mengalihkan ke halaman pengaturan awal.


Langkah 10: Buat A Record di Cloudflare

Sekarang arahkan domain ke VPS. Di dashboard Cloudflare, buka domain kalian, menu DNS, lalu Records, dan tambahkan:

Kolom Isi
Type A
Name @ (domain utama)
IPv4 address IP publik VPS
Proxy status DNS only (awan abu-abu)
TTL Auto

Saya memilih DNS only, bukan Proxied. Dugaan saya, proxy di tengah bisa mengganggu fitur domain di panel VPS dan penerbitan sertifikat HTTPS, tapi saya tidak menguji kebalikannya, jadi itu hanya kehati-hatian. Kalau sudah ada record lama untuk domain utama, hapus dulu agar tidak ada dua tujuan yang bertabrakan.

Cek apakah sudah menyebar. Tanyakan langsung ke DNS publik Google supaya tidak terpengaruh simpanan di komputer:

nslookup mustafazain.my.id 8.8.8.8

Pada saya, jawabannya sudah berupa IP VPS sekitar satu menit setelah record disimpan. Itu perkiraan saya, bukan hasil stopwatch, dan hanya satu kali percobaan. Di penyedia DNS lain atau di jaringan lain, lamanya bisa berbeda, jadi jangan menganggapnya selalu secepat itu. Tulisan Non-authoritative answer di hasilnya normal: artinya jawaban datang dari penyimpan sementara, bukan dari server nama domain itu sendiri.


Langkah 11: Hubungkan Domain di Panel VPS

Karena ini VPS NAT, domain perlu didaftarkan di panel penyedia VPS (bukan Cloudflare), pada kotak Domain & Website. Ketik domain kalian, lalu klik tambah. Setelah itu buka http://domainkalian di browser, dan layar pengaturan WordPress muncul.

Catatan: langkah ini khusus penyedia yang memakai fitur domain bawaan seperti VPS saya. Kalau penyedia kalian memberi IP publik biasa, kemungkinan kalian cukup mengarahkan A record ke IP itu dan membuka web lewat port 80. Itu pengetahuan umum saya dan tidak saya uji di sini, jadi cek dokumentasi penyedia kalian.


Langkah 12: Selesaikan Wizard WordPress

Selesaikan wizard secepatnya. Selama halaman pengaturan terbuka dari internet, siapa pun yang membukanya lebih dulu bisa menyelesaikannya. Ini pengetahuan umum saya tentang WordPress baru, belum saya uji.

Layar pertama meminta data database:

  • Database Name: wordpress
  • Username: wpuser
  • Password: password yang kalian buat di Langkah 7
  • Database Host: localhost
  • Table Prefix: biarkan bawaan

Layar berikutnya meminta judul situs, nama pengguna admin, password admin, dan surel. Hindari admin sebagai nama pengguna karena itu yang paling sering ditebak bot, dan pakai password yang kuat serta berbeda dari password database. Setelah selesai, kalian masuk ke dashboard.

Wizard WordPress


Langkah 13: Aktifkan HTTPS dengan Certbot

Situs masih lewat http, jadi password login dikirim tanpa enkripsi. Kita perbaiki dengan sertifikat gratis dari Let's Encrypt lewat certbot:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d mustafazain.my.id

Certbot menanyakan beberapa hal: surel (untuk pemberitahuan kalau sertifikat hampir habis), persetujuan syarat layanan, dan apakah semua lalu lintas HTTP dialihkan ke HTTPS. Saya memilih pengalihan, dan hasilnya setiap kali membuka http:// browser otomatis pindah ke https://.

Hasilnya: Successfully received certificate, sertifikat berlaku sampai 12 Januari 2027 (sekitar 90 hari), dan certbot menulis bahwa ia menjadwalkan pembaruan otomatis. Certbot juga mengubah file konfigurasi Nginx yang kita buat tadi.

Pesan sukses saja belum bukti. Saya mengujinya dengan tiga perintah:

sudo certbot renew --dry-run
systemctl list-timers | grep certbot
sudo nginx -t

Simulasi pembaruan berhasil (all simulated renewals succeeded), ada certbot.timer yang terjadwal, dan konfigurasi Nginx tetap valid. Pembaruan otomatis yang sesungguhnya baru terbukti nanti saat sertifikat benar-benar diperbarui.


RAM Saat WordPress Berjalan

Setelah semuanya terpasang dan HTTPS aktif, saya mengecek RAM sekali:

free -h
Kondisi Terpakai Tersedia
OS bersih 184 MiB 619 MiB
Nginx, MariaDB, PHP terpasang 228 MiB 568 MiB
WordPress berjalan dengan HTTPS 382 MiB 389 MiB

Dengan satu situs yang belum punya pengunjung, tersedia masih 389 MiB dari 957 MiB. Angka ini potret satu titik waktu sebelum tema magazine dipasang dan tanpa beban apa pun, jadi belum menunjukkan perilaku saat situsnya dipakai.


Langkah 14: Pasang Tema Magazine dan Impor Demo

Untuk melihat seberapa kuat VPS ini, saya memasang tema bergaya majalah, yang biasanya lebih padat gambar dan elemen daripada tema blog biasa. Tema yang saya pilih adalah [KONFIRMASI: ColorMag atau tema lain yang benar-benar dipakai]. Cara pasangnya dari dashboard: Appearance, lalu Themes, lalu Add New, cari nama temanya, klik Install, lalu Activate. Setelah itu saya mengikuti tawaran impor demo dari tema tersebut.

Hasilnya: impor demo selesai dalam kurang dari satu menit. Itu perkiraan saya, bukan hasil stopwatch, dan hanya satu kali percobaan. Halaman depan langsung terisi penuh: ticker berita, menu kategori, artikel utama dengan foto besar, banyak foto lain, dan beberapa video. Saat saya buka dari browser, situsnya terasa lancar. Itu kesan saya, bukan pengukuran.

Beberapa catatan supaya hasilnya tidak terbaca lebih dari yang sebenarnya:

  • Foto, judul, dan teks di halaman itu adalah konten demo bawaan tema, bukan milik saya.
  • Foto demo mungkin sudah dioptimalkan oleh pembuat tema. Itu dugaan saya, belum saya periksa.
  • Saya belum memeriksa apakah video demo tersimpan di VPS atau hanya disematkan dari layanan lain. Kalau disematkan, beban videonya tidak ada di VPS ini.
  • Yang membuka situs hanya saya sendiri. Belum ada beberapa pengunjung sekaligus.
Halaman depan situs WordPress dengan tema magazine dan konten demo: ticker berita, menu kategori, dan artikel utama berfoto besar


Kesimpulan

WordPress bisa dipasang dan berjalan di VPS murah dengan RAM 1 GB: domain sendiri, HTTPS otomatis, dan tema magazine lengkap dengan demo yang tampil lancar saat saya buka. Sebelum tema dipasang, RAM yang tersedia masih 389 MiB dari 957 MiB. Jebakannya ada di hal-hal kecil: peringatan host key setelah instal ulang, fail2ban yang terpasang tapi mati, dan password contoh yang jangan disalin.

Tapi ini kesimpulan sempit. Ini uji pemakaian ala pemula, bukan uji beban terukur, dan yang membuka situs hanya saya. Saya belum tahu bagaimana VPS ini menghadapi banyak pengunjung sekaligus.

Langkah berikutnya: menguji dengan banyak pengunjung sekaligus dan melihat apa yang terjadi saat RAM benar-benar penuh. Artikel ini akan saya perbarui kalau hasilnya ada.

Selamat mencoba, dan semoga panduan ini membantu kalian memasang WordPress di VPS murah. Kalau ada langkah yang berbeda di VPS kalian, ceritakan di kolom komentar.