Cara Install Wordpress di VPS Ubuntu 22.04

Cara menginstall WordPress di VPS memang tidak semudah menginstall di webhosting. Hal ini dikarenakan pada webhosting kita tidak perlu pusing untuk menginstall dan mengatur aplikasi-aplikasi server seperti pada VPS. Selain itu, pada webhosting sudah tersedia cPanel yang sangat memudahkan kita untuk install WordPress.

Namun, jika kita bisa menggunakan VPS kita akan mendapatkan berbagai keuntungan dibandingkan webhosting. Misalnya kemampuan menghandle visitor website yang tinggi dengan biaya murah, bisa mengimplementasikan teknologi web terbaru yang belum tentu ada pada hosting dan keunggulan lainnya. Oleh karena itu, artikel ini saya buat untuk mempermudah anda dalam memanfaatkan VPS dengan materi yang sebisa mungkin mudah dipahami, lengkap mulai dari Nol, terperinci dan bisa langsung dipraktikkan.

Tidak hanya menginstall atau “asal jalan” saja. Kita akan mengoptimisasi server agar performa website cepat dan mampu menghandle banyak pengunjung. Tentunya kita juga akan mengimplementasikan teknologi terbaru seperti HTTPS dengan SSL Let’s Encrypt, HTTP/2, PHP8.1, TLSv1.3 dan keamanan ciphers terbaru.

Pada tutorial ini kita akan menggunakan Ubuntu server 22.04 LTS sebagai sistem operasinya karena selalu mendapatkan update lebih cepat dibanding lainnya. Nginx sebagai webservernya karena lebih ringan dibanding Apache2. PHP8.1-fpm sebagai server PHP karena sangat cepat. Dan MariaDB sebagai MySQL servernya karena berkomitmen untuk selalu menjadi opensource.

Sepertinya saya terlalu panjang menyampaikan informasi pembuka di atas. Namun menurut saya hal di atas sangat penting untuk diketahui. Sebelum install WordPress di VPS, ada beberapa prasyarat yang harus kita lakukan.

Prasyarat:

Berikut ini adalah cara install WordPress di VPS Ubuntu Server 22.04 LTS.

1. Buat Database untuk Website WordPress

Login ke server melalui SSH lalu akses mysql dengan perintah:

$ sudo mysql

Buat database dengan format perintah sql CREATE DATABASE nama_database_baru CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; Contohnya jika nama databasenya adalah db_wp maka perintahnya adalah:

mysql> CREATE DATABASE db_wp CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Buat user database baru beserta passwordnya dan beri akses pada database yang telah dibuat dengan format perintah GRANT ALL ON nama_database_baru.* TO 'nama_user_database_baru'@'localhost' IDENTIFIED BY 'password_user_database_baru'; Contoh dengan nama user databasenya adalah user_wp dan passwordnya adalah iniP@sswordS4y4yayaya maka perintah sqlnya adalah:

mysql> GRANT ALL ON db_wp.* TO 'user_wp'@'localhost' IDENTIFIED BY 'iniP@sswordS4y4yayaya';

Lakukan flush pada sql agar server mereload ulang hak akses terbaru:

mysql> FLUSH PRIVILEGES;

Tutup mysql dengan perintah:

mysql> EXIT;

Ingat-ingat nama database, user database dan password yang telah kita buat tadi karena nanti akan digunakan saat proses install wordpress.

2. Install Semua Ekstensi PHP yang dibutuhkan Oleh WordPress

Perbarui database repositori terbaru menggunakan perintah:

$ sudo apt update

Install ekstensi-ektensi PHP yang dibutuhkan:

$ sudo apt -y install php8.1-xml php8.1-xmlrpc php8.1-curl php8.1-common php8.1-gd php8.1-mbstring php8.1-soap php8.1-intl php8.1-zip php8.1-bz2

Restart PHP server melalui perintah:

$ sudo systemctl restart php8.1-fpm

3. Buat Konfigurasi Snippet Nginx untuk Keamanan WordPress

Buat file dengan nama wordpress-security.conf di direktori snippets:

$ sudo nano /etc/nginx/snippets/wordpress-security.conf

Masukkan konfigurasi di bawah ini:

#untuk block semua akses ke file tersembunyi
location ~ ^/\. {
        deny all;
        access_log off;
        log_not_found off;
}

#untuk block semua akses ke file upload php
location ~* /(?:uploads|files)/.*\.php$ {
        deny all;
        access_log off;
        log_not_found off;
}

Simpan lalu tutup file di atas.

Penjelasan: Fungsi konfigurasi di atas adalah untuk block akses ke file-file penting yang harusnya tidak boleh diakses oleh pengunjung website kita.

Buat file konfigurasi untuk kompres gzip di direktori snippets:

$ sudo nano /etc/nginx/snippets/gzip.conf

Masukkan konfigurasi di bawah ini:

gzip on;
gzip_vary on;
gzip_comp_level 6;
gzip_types text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript text/plain image/x-icon;

Simpan lalu tutup file di atas.

Buat konfigurasi untuk cache static files pada direktori snippets:

$ sudo nano /etc/nginx/snippets/cache-staticfiles.conf

Masukkan kode ini:

location ~* \.(css|js|png|jpg|jpeg|gif|ico|webp|ttf|ttc|eot|woff|woff2|otf|svg)$ {
        expires 31d;
        log_not_found off;
        access_log off;
}

Simpan dan tutup file tersebut.

4. Ubah Konfigurasi Server Block pada Nginx

Yang dimaksud dengan server block adalah block konfigurasi yang dibuka dengan kata server kemudian diikuti dengan kurung buka { dan diakhiri dengan kurung tutup } misalnya server { ..... }.

Buka file konfigurasi server block website di direktori /etc/nginx/sites-available/ yang pernah kita buat saat melakukan tutorial SSL Let’s Encrypt.

$ sudo nano /etc/nginx/sites-available/itkoding.com

Di sana ada 2 server blocks yaitu block untuk HTTP ditandai dengan listen 80 dan block untuk HTTPS yang ditandai dengan listen 443. Include semua file yang telah kita buat pada langkah 3 ke dalam server block HTTPS (listen 443) agar pengaturan kita aktif pada website. Letakkan pada bagian paling bawah block konfigurasi sebelum tanda penutup akhir }.

server {
listen 443 ssl http2;
...
include /etc/nginx/snippets/wordpress-security.conf;
include /etc/nginx/snippets/gzip.conf;
include /etc/nginx/snippets/cache-staticfiles.conf;
}

Hapus non-www domain pada server_name server block 443 tersebut dan sisakan www misalnya:

server_name itkoding.com www.itkoding.com;

menjadi:

server_name www.itkoding.com;

Simpan file tersebut lalu tutup.

Mengapa kita perlu melakukan hal di atas. Karena kita hanya akan menaruh wordpress pada HTTPS www saja misalnya https://www.itkoding.com. Sedangkan untuk HTTPS non-www https://itkoding.com hanya akan kita redirect 301 (alihkan) ke website HTTPS www kita. Begitu juga server block HTTP (http://www.itkoding.com dan http://itkoding.com), kita akan redirect (alihkan) semua pengunjung yang mengakses website HTTP tersebut menuju ke website HTTPS www.

Hal tersebut sangat disarankan untuk menghindari website duplikat pada server kita. Oleh karena itu kita perlu mengatur redirect pada server block.

5. Atur Redirect pada Server Block Nginx

Buka file server block website kita lagi:

$ sudo nano /etc/nginx/sites-available/itkoding.com

Ubah semua konfigurasi yang ada di dalam server block HTTP (listen 80) untuk mengaktifkan redirect. Silahkan sesuaikan dengan nama domain anda:

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

Kode di atas berarti semua pengunjung website yang mengakses website HTTP akan dialihkan ke HTTPS www secara otomatis. Return 301 berarti dialihkan secara permanent.

Buat lagi server block HTTPS di bagian paling bawah file untuk mengalihkan website HTTPS non-www ke HTTPS www:

server {
 listen 443 ssl http2;
 server_name         itkoding.com;
 return          301 https://www.itkoding.com$request_uri;

 add_header Strict-Transport-Security "max-age=31536000";
 ssl_trusted_certificate /etc/letsencrypt/live/itkoding.com/chain.pem;
 ssl_certificate /etc/letsencrypt/live/itkoding.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/itkoding.com/privkey.pem;
 ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

Simpan lalu tutup file tersebut.

Dengan demikian pada file /etc/nginx/sites-available/itkoding.com terdapat 3 server block. Yaitu 1 buah server block HTTP dan 2 buah server block HTTPS.

Bagaimana? Bingung?

Agar tidak bingung berikut ini saya kasih contoh full isi dari file server block website di /etc/nginx/sites-available/itkoding.com dari gabungan langkah 4 dan langkah 5 di atas. Silahkan sesuaikan dengan domain anda:

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

server {
        listen 443 ssl http2;
        root /var/www/itkoding;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name www.itkoding.com;

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

        location ~ \.php$ {
                include /etc/nginx/snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        }
 access_log /var/log/nginx/itkoding_com_access.log;
 error_log /var/log/nginx/itkoding_com_error.log;
  
 add_header Strict-Transport-Security "max-age=31536000";
 ssl_trusted_certificate /etc/letsencrypt/live/itkoding.com/chain.pem;
 ssl_certificate /etc/letsencrypt/live/itkoding.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/itkoding.com/privkey.pem;
 ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
 
 include /etc/nginx/snippets/wordpress-security.conf;
 include /etc/nginx/snippets/gzip.conf;
 include /etc/nginx/snippets/cache-staticfiles.conf;
}

server {
 listen 443 ssl http2;
 server_name         itkoding.com;
 return          301 https://www.itkoding.com$request_uri;

 add_header Strict-Transport-Security "max-age=31536000";
 ssl_trusted_certificate /etc/letsencrypt/live/itkoding.com/chain.pem;
 ssl_certificate /etc/letsencrypt/live/itkoding.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/itkoding.com/privkey.pem;
 ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

Setelah konfigurasi server block website selesai. Lakukan reload pada Nginx agar diterapkan pada web server.

$ sudo systemctl reload nginx

6. Unduh WordPress Dari Situs Resmi pada VPS atau Server

Masuk ke root direktori website kita sesuai konfigurasi server block yang ditujukkan pada baris root /var/www/itkoding; artinya kita harus meletakkan file wordpress kita di direktori /var/www/itkoding.

$ cd /var/www/itkoding

Hapus semua file PHP yang pernah kita buat pada direktori tersebut:

$ sudo rm *.php

Unduh file WordPress pada folder tersebut:

$ sudo wget https://wordpress.org/latest.zip

Ektrak file zip yang telah kita unduh:

$ sudo unzip latest.zip

Hapus file zip wordpress:

$ sudo rm latest.zip

Masuk ke direktori hasil unzip file:

$ cd wordpress

Karena hasil unzip berada di dalam direktori wordpress (/var/www/itkoding/wordpress) maka kita harus memindahkan ke direktori sebelumnya yaitu /var/www/itkoding dengan cara:

$ sudo mv * ../

Arti dari perintah di atas adalah pindahkan semua file ke direktori 1 level di atas direktori kita berada. Maka direktori wordpress akan kosong.

Kembali ke direktori sebelumnya:

$ cd ../

Hapus direktori wordpress yang sudah kosong:

$ sudo rm -rf wordpress/

Kembali ke directory www:

$ cd ../

Ubah hak hak akses dan kepemilikan direktori website kita awalnya dari dimiliki oleh root:root menjadi www-data:www-data agar bisa diakses secara penuh oleh web server Nginx dan php8.1-fpm. Perintahnya adalah:

$ sudo chown www-data:www-data -R itkoding

7. Install WordPress Melalui Browser

Pada langkah ini kita sudah bisa mengakses website yang telah kita bangun melalui internet browser seperti Chrome, Mozilla, Safari dan lainnya. Dengan mengetikkan nama domain kita pada browser maka kita akan langsung diarahkan ke tampilan instalasi wordpress yang diawali dengan pemilihan bahasa.

Buka Google Chrome. Ketikkan nama domain kita misalnya itkoding.com lalu tekan Enter. Maka akan ada tampilan pemilihan bahasa. Pilih sesuai selera. Kalau saya akan pilih English (United States). Anda bisa pilih Bahasa Indonesia atau bahasa lainnya. Klik Continue.

Pemilihan bahasa pada wordpress

Selanjutnya akan ada tampilan Welcome to WordPress. Klik Let’s go!

Lalu ada tampilan form konfigurasi database. Ingat! Kita telah membuatnya pada langkah 1. Jadi gunakan nama, user dan password database yang telah kita buat pada langkah 1!

Masukkan nama database pada Database name, user database pada username dan password database pada password. Jangan ubah kolom isian lainnya. Lalu klik Submit.

Pengaturan database saat install wordpress

Jika konfigurasi sudah benar akan ada pesan bahwa sistem berhasil berkomunikasi dengan database. Klik Run the installation.

Masukkan judul website sesuai keinginan anda pada kolom Site Title. Masukkan username untuk login ke website sesuai keinginan anda. Lalu ketik juga password untuk login nantinya pada kolom password. Jika password anda lemah biasanya ada konfirmasi bahwa password lemah. Silahkan centang. Lalu masukkan email anda pada kolom Your Email. Tapi, jangan centang opsi Search Engine Visibility karena jika mencentangnya web anda tidak akan tampil di Google. Lalu klik Install WordPress.

Pengaturan user login saat install wordpress

Nah, WordPress terbaru sudah siap digunakan anda dapat login ke dashboard di alamat namadomainanda/wp-admin untuk melakukan pengaturan website atau membuat post.

Penutup

Ternyata cukup panjang juga ya proses membangun server dan install wordpress pada VPS. Dengan konfigurasi di atas dan template default wordpress saya mendapatkan nilai yang cukup tinggi pada Google Pagespeed Insights. Ini menandakan website tersebut cukup cepat.

Hasil kecepatan wordpress di vps

Tidak hanya itu, saya juga mendapatkan skor A+ pada ssllabs yang artinya keamanan HTTPS kita sangat baik dan mengimplementasikan teknologi SSL terbaru. Jika ada yang sulit dipahami mohon untuk kirim komentar agar saya bisa memperbaikinya dan mudah dipahami.

M. Hernawan
Web developer yang juga suka dengan dunia sysadmin. Pernah belajar Teknik Informatika di Indonesia.

Kirim Komentar