Catatan Migrasi WordPress dari Hosting ke VPS

Proses migrasi situs web sudah memasuki tahap akhir. Saya sempat mengalami kegalauan karena proses propagasi DNS yang cukup lama. Sore ini, waktu propagasi DNS akhirnya selesai dan saya bisa lanjut ke langkah akhir. Catatan migrasi WordPress dari hosting ke VPS ini saya tulis sebagai panduan bila dikemudian bulan saya harus melakukan migrasi lagi.

Bagian tersulit dari rangkaian migrasi ini, menurut saya, terletak di konfigurasi SSL. Sedangkan bagian yang paling membosankannya sudah saya katakan didepan. Selebihnya, saya lakukan sesuai dengan langkah-langkah yang sudah saya posting lebih dulu di Instagram.


Alasan kenapa saya harus susah-susah memigrasikan situs web saya dari hosting ke VPS (virtual private server) adalah karena saya ingin punya akses penuh terhadap mesin pribadi saya.

Mungkin Anda sudah tahu, sebenarnya, hosting tidak jauh beda dengan VPS. Perbedaan umum dari keduanya terletak pada fitur utamanya saja. Dimana hosting sudah dilengkapi dengan panel kontrol yang friendly; cPanel, DirectAdmin, Plesk dan sebagainya. Sedangkan VPS masih kosongan; hanya mesin dengan sistem operasinya saja. Hosting biasanya dipakai rame-rame (shared hosting), sedangkan VPS, satu mesin itu sepenuhnya milik kita.

Tanpa panjang kali lebar, berikut catatan migrasi WordPress dari hosting ke VPS selengkapnya.

Cadangkan Aset Situs

Pencadangan ini dilakukan agar Anda tidak memulai semuanya dari awal lagi di mesin yang baru. Beberapa aset yang perlu dicadangkan adalah berkas aplikasi web yang ada di public_html, DNS record, dan basis data.

Proses pencadangan saya lakukan di mesin lokal dengan mengunduh semua berkas yang diperlukan melalui FileZilla, sang FTP client populer.

Cara menggunakan FileZilla bisa dibilang cukup mudah. Anda cukup memasukkan IP atau subdomain  yang mengarah ke server FTP Anda, nama pengguna, sandi, dan porta FTP.

FileZilla klen FTP
FileZilla kilen FTP

Setelah semua berkas aset utama dari public_html berhasil terunduh, langkah berikutnya untuk mencadangkan aset situs adalah mengekspor basis data. Dalam hal ini, Anda bisa menggunakan alat yang sudah disediakan oleh kontrol panel hosting Anda, phpMyAdmin, misalnya.

Untuk mengekspor basis data menggunakan phpMyAdmin, silahkan masuk ke dasbor phpMyAdmin melalui kontrol panel Anda. Klik nama basis data yang ada di panel sebelah kiri, setelah daftar tabel yang ada di basis data tampil, klik menu Ekspor yang ada di atas daftar tabel, klik tombol Go.

Langkah pertama ini, Anda sudah berhasil mencadangkan aset situs Anda ke mesin lokal.

Migrasi DNS ke Cloudflare

Proses migrasi DNS dimulai dengan memasang NS (nameserver) yang didapatkan dari Cloudflare ke domain manager registrar. Nah, dibagian ini saya baru sadar kalau Cloudflare ini lumayan canggih. Dimana saat saya pertama kali mendaftarkan domain, saat proses lookup berlangsung, Cloudflare dapat langsung mengenali berbagai DNS record yang  sebelumnya ada di DNS manager hosting.

Dibagian ini, saya sudah membuat catatan khusus tentang cara mengarahkan DNS manager ke Cloudflare. Anda bisa mengikuti langkah-langkah yang sudah saya buat disana.

Tidak seperti saat memigrasikan domain baru, proses propagasi DNS lama membutuhkan waktu hingga enam jam lamanya. Saya yang awalnya semangat, gegara nungguin waktu propagasi malah jadi gabut sendiri.

Mempersiapkan Server

Proses mempersiapkan server atau VPS ini dimulai dengan merencanakan paket-paket apa saja yang akan dipasang untuk kebutuhan aplikasi web berbasis PHP. Pada kasus ini, saya akan memasang dan mengkonfigurasi paket LEMP Stack; Linux (saya menggunakan Ubuntu Server 20.04 LTS), Nginx, MariaDB dan PHP-FPM.

Paket LEMP Stack ini nantinya akan saya kombinasikan dengan Let's Encrypt untuk kebutuhan koneksi aman (SSL).

Pasang dan konfigurasi blok server Nginx

Nginx merupakan salah satu aplikasi web server yang populer diantara para pengembang web. Selain terkenal ringan, berkas instalasi Nginx lebih kecil jika dibandingkan dengan Apache2.

Untuk memasang Nginx, Anda dapat mengeksekusi perintah berikut, langsung di mesin VPS Anda.

$ sudo apt install nginx

Setelah Nginx terpasang, silahkan matikan local site yang secara default jalan otomatis setelah Nginx terpasang. Gunakan perintah ini:

$ sudo rm -rf /etc/nginx/sites-enable/default

Buat salinan konfigurasi untuk menyiapkan blok server yang akan Ada gunakan untuk situs web baru ini. Gunakan perintah berikut.

$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/domainanda.tld

Buka konfigurasi yang baru saja Anda buat.

$ sudo nano /etc/nginx/sites-available/domainanda.tld

Buat konfigurasi blok server seperti berikut ini.

server {
listen 80;
listen [::]:80;
server_name domainanda.tld www.domainanda.tld;
return 301 https://www.$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

root /var/www/public_html;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm;

        server_name domainanda.tld www.domainanda.tld;

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

# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}

}

Simpan konfigurasi blok server yang sudah Anda buat.

Pasang dan Konfigurasi PHP-FPM

Apa itu PHP-FPM? Menurut situs resminya, PHP FPM merupakan implementasi PHP FastCGI alternatif dengan beberapa fitur tambahan yang sebagian besar berguna untuk situs-situs berat. Nah, PHP-FPM ini sangat cocok dipadukan dengan EngineX. Bisa dibilang kalau keduanya adalah pasangan yang serasi.

Pemasangan PHP-FPM pada kasus ini harus memperhatikan kebutuhan WordPress terhadap modul-modul PHP lainnya. Anda bisa mengunjungi laman Server Environment - Make WordPress Hosting untuk membaca lebih detail terkait modul PHP yang dibutuhkan oleh WordPress.

Berikut perintah untuk memasang PHP beserta dengan modul-modulnya.

$ sudo apt install php php-fpm php-curl php-gd php-json php-mbstring php-tokenizer php-xml php-common php-imagick php-mysql php-zip php-soap php-xmlrpc

Oiya, saya lupa bilang diawal. Pada kasus ini, saya menggunakan Ubuntu 20.04 LTS, ya. Jadi, secara bawaan, PHP yang terpasang adalah versi PHP 7.4.x meskipun, secara spesifik, saya tidak menyebutkan versinya saat pemasangan.

Setelah pemasangan selesai, sebenarnya PHP-FPM sudah bisa langsung digunakan dengan Nginx. Berhubung tema yang saya pakai membutuhkan pengaturan khusus, jadi mau tidak mau saya harus melakukan beberapa penyesuaian konfigurasi.

Konfigurasi PHP-FPM dapat dilakukan dengan perintah berikut:

$ sudo nano /etc/php/7.4/fpm/php.ini

Berikut beberapa konfigurasi pada PHP-FPM yang saya lakukan untuk improvisasi.

Ubah zona waktu

Zona waktu baku PHP digunakan oleh semua fungsi date atau time. Mengubahnya berarti mengubah zona waktu baku yang digunakan. Silahkan cari variabel date.timezone dengan cara Ctrl W, kemudian ketikkan variabel yang ingin Anda cari. Ubah pengaturannya menjadi seperti berikut.

data.timezone = Asia/Jakarta

Konfigurasi untuk improvisasi (optional)

upload_max_filesize 64M
memory_limit 256M
max_input_time 180
post_max_size 128M
max_input_vars 3000
max_execution_time 180

Simpan semua konfigurasi yang sudah Anda buat.

Pasang dan Konfigurasi MariaDB

Kenapa harus pake MariaDB kok gak pake MySQL? Hmm. Dari dulu, ini pertanyaan yang belum bisa saya jawab secara spesifik. Intinya, baik MariaDB maupun MySQL, keduanya berasal dari otak yang sama, yaitu Pak Michael "Monty" Widenius. Silahkan cari saja tentang sejarah mariadb.

Menurut saya pribadi. MariaDB dan MySQL itu ibadah urutan nomor 11 dan 13. Hanya saja, si MariaDB tampak-nya lebih open source ketimbang MySQL.

Untuk memasang MariaDB, Anda bisa menggunakan perintah berikut:

$ sudo apt install mariadb-server mariadb-client

Setelah proses pemasangan selesai, Anda disarankan untuk menjalankan skrip keamanan yang sudah terpasang saat Anda memasang MariaDB. Berikut perintahnya:

$ sudo mysql_secure_installation

Sistem akan menampilkan beberapa pertanyaan, Anda cukup ketik "n" atau enter saja. Berikut panduannya.

Enter current password for root (enter for none): <tekan enter>
Set root password? [Y/n] <tekan enter, lalu masukkan sandinya>
Remove anonymous users? [Y/n] <tekan enter>
Disallow root login remotely? [Y/n] <tekan enter>
Remove test database and access to it? [Y/n] <tekan enter>
Reload privilege tables now? [Y/n] <tekan enter>

Bikin pengguna untuk basis data baru

MariaDB secara baku dapat diakses dengan root. Tapi saya sangat tidak merekomendasikan menggunakan pengguna tersebut. Lebih baik, bikin pengguna baru lalu beri dia hak akses penuh ke basis data yang dibuat.

Berikut beberapa perintah yang bisa Anda gunakan. Pertama-tama, silahkan akses MariaDB dengan perintah berikut.

$ sudo mysql

atau

$ sudo mysql -u root -p

Setelah berhasil masuk, silahkan buat basis datanya terlebih dahulu.

> CREATE DATABASE nama_database;

Buat pengguna baru untuk akses khusus ke basis data yang akan digunakan oleh WordPress.

> CREATE USER 'nama_user'@'localhost' IDENTIFIED BY'!nipasswd-nya@';

Beri akses pengguna yang baru dibuat ke basis data yang akan digunakan oleh WordPress.

> GRANT ALL ON nama_database.* TO 'nama_user'@'localhost';

Silahkan keluar dari konsol MaraDB dengan perintah beikut.

> exit;

Pasang SSL dari Let's Encrypt

Pada bagian ini, Anda akan memerlukan bantuan manajer paket snapd untuk memasangnya.

Sebelum lanjut, saya ingin mengingatkan kembali. Bahwa semua langkah-langkah pada tutorial ini dieksekusi di Ubuntu Server 20.04 LTS. Jadi, Anda tidak memerlukan konfigurasi lebih lanjut untuk menggunakan manajer paket snapd.

Jadi, yang perlu Anda lakukan pertama adalah memperbarui manajer paket snapd. Eksekusi perintah berikut.

$ sudo snap refresh core

Sistem akan melakukan pengecekan ke layanan repositori tertentu untuk memeriksa apakah ada daftar paket terbaru, sebelum akhirnya mengunduh dan memasangnya secara otomatis ke sistem Anda.

Jika persiapan ini sudah selesai, mari beranjak ke langkah berikutnya, yaitu memasang Certbot. Sebelum itu, pastikan Anda belum memasang Certbot, ya. Jika Anda sudah memasangnya, Anda bisa mengabaikan langkah pada bagian ini.

Eksekusi perintah berikut untuk memasang Certbot.

$ sudo snap install certbot

Sekilas tentang Certbot. Certbot merupakan perkakas perangkat lunak bebas bersumber terbuka yang bisa Anda manfaatkan untuk membuat sertifikat Let's Encrypt untuk mengaktifan HTTPS di situs web Anda. Certbot dikembangkan oleh organisasi nirlaba yang bernama Electronic Frontier Foundation (EFF).

Oke, kita lanjut. Secara bawaan, Certbot yang dipasang via manajer paket snapd belum bisa langsung dijalankan, Anda perlu membuat symbolic link-nya terlebih dahulu agar Certbot bisa dieksekusi di lingkungan Terminal. Eksekusi perintah berikut.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Sekarang, Certbot sudah bisa diakses di lingkungan Terminal, sekarang, Anda bisa membuat sertifikat SSL Let's Encrypt untuk domain aktif Anda sendiri. Eksekusi perintah berikut.

$ sudo certbot --nginx

Setelah mengeksekusi perintah di atas, Certbot akan meminta Anda untuk memasukkan kontak surel, silahkan diisi dengan surel Anda yang masih aktif. Certbot akan mengirim informasi perpanjangan dan pemberitahuan keamanan melalui surel tersebut. Setelah itu, Anda tinggal mengikuti instruksi yang ditampilkan berikutnya.

Melalui perintah ini juga, Certbot akan membuat perubahan pada konfigurasi blok server situs Anda. Perubahan yang dibuat oleh Certbot bisa Anda lihat di konfigurasi blok server Anda dengan akhiran #managed by Certbot.

Langkah teakhir dari subbab pasang SSL dari Let's Encrypt adalah mengizinkan Certbot untuk memperpanjang sertifikat secara otomatis. Eksekusi perintah berikut.

$ sudo certbot renew --dry-run

Certbot akan berjalan dilatar belakang dan akan memperbarui sertifikat SSL Anda secara otomatis.

Penyelesaian dan Pengujian

Catatan migrasi WordPress dari hosting ke vps ini sudah memasuki tahap akhir. Anda tinggal membutuhkan beberapa langkah lagi untuk mengembalikan aset situs dan data-data dari basis data.

Kita mulai dari mengunggah data-data yang sudah dicadangkan ke vps.

Unggah cadangan data ke server

Sesuai dengan sub bab cadangkan aset situs, ada dua macam data yang sudah saya cadangkan. Data dari aset situs web dan data dari basis data.

Data-data tersebut perlu Anda unggah lagi ke vps Anda. Disini akan saya tunjukkan bagaimana cara mengunggah data dari mesin lokal Anda ke vps dengan bantuan perkakas secure-copy.

Pertama-tama, mari kita mengunggah data aset situs terlebih dahulu. Silahkan eksekusi perintah berikut.

$ scp aset_situs.zip username@192.168.10.1:/home/username

Dari perintah di atas, aset situs sudah saya kompres menjadi berkas zip. Sebenarnya bisa langsung berupa direktori, dengan menambahkan opsi -R setelah perintah scp. Akan tetapi, saya lebih suka dengan mengkompres-nya terlebih dahulu.

Oiya, pada bagian perintah yang dicetak tebal, Anda bisa menyesuaiannya dengan kondisi Anda, ya.

Untuk mengunggah data-data dari cadangan basis data sebelumnya, perintahnya sama dengan perintah di atas. Anda tinggal meyesuaikan nama berkas cadangannya saja.

$ scp cadangan_basisdata.sql username@192.168.10.1:/home/username

Kembalikan data basis data

Cara mengembalikan cadangan basis data bisa dilakukan dengan sangat mudah. Anda tinggal mengeksekusi perintah berikut.

$ sudo mysql -u root -p nama_basisdata < cadangan_basisdata.sql

Anda bisa membaca keterangannya lebih lanjut terkait maksud dari perintah di atas dengan mengunjungi artikel saya yang berjudul backup dan restore basis data di MySQL atau MariaDB.

Kembalikan aset situs

Ekstrak berkas aset_situs.zip dan ubah nama berkasnya menjadi public_html dengan perintah berikut.

$ unzip aset_situs.zip && mv aset_situs public_html

Pindahkan direktori public_html ke /var/www/.

$ sudo mv public_html /var/www/

Terakhir, ubah kepemilikan direktori public_html agar sepenuhnya menjadi www-data dan ubah hak aksesnya menjadi 755.

$ sudo chown -R www-data:www-data /var/www/public_html

$ sudo chmod -R 755 /var/www/public_html

Muat ulang semua layanan

Tiba saatnya untuk mengakhiri rumitnya konfigurasi yang sudah Anda buat. Untuk menerapkan konfigurasi, Anda harus memuat ulang semua layanan yang diperlukan. Eksekusi perintah berikut dan pastikan tidak ada informasi galat yang ditampilkan.

$ sudo systemctl restart nginx php7.4-fpm

Berbeda dengan waktu pemasangannya, untuk memuat ulang PHP-FPM, Anda harus mengetik lengkap dengan versinya. Karena meskipun waktu pemasangan Anda cuman pakai php-fpm saja, sejatinya yang terpasang adalah paket php7.4-fpm. Tergantung sama distro-nya, ya.

Sampai pada langkah ini, proses migrasi WordPress dari mesin hosting ke vps telah selesai dilakukan.

Uji coba

Proses uji coba dilakukan melalui peramban web. Silahkan buka peramban web favorit Anda dan ketikkan alamat situs Anda.

Disini, Anda bisa mengecek ulang apakah semua berjalan dengan normal atau masih ditemukan kendala.

Akhir kata

Akhirnya artikel yang panjang ini berakhir juga. Tadinya, tutorial ini mau saya pisah menjadi beberapa postingan. Hanya saja, saya merasa kurang srek dengan artikel yang dipisah-pisah. Akhirnya saya memutuskan untuk menjadikan satu.

Semoga Anda tidak bosan, ya.

Saya ucapkan terima kasih buat Anda yang membaca sampai bab terakhir ini. Semoga tutorial ini bermanfaat untuk Anda dan orang-orang yang Anda cintai.

Komentar

Postingan populer dari blog ini

Implementasi IPv6 TunnelBroker untuk Server WordPress Self Host

Daftar Rekomendasi Repositori Lokal Debian 11 "Bullseye"

Koneksi Internet Bermasalah di Ubuntu 18.04, Berikut Cara Memperbaikinya