Kali ini saya akan migrasi wordpress dari VPS lama ke VPS baru yang menggunakan web server Apache PHP7.4 dan database MariaDB, selain itu saya juga akan mengubah domain wordpress lama menggunakan domain baru di VPS baru
Dari VPS lama
Stop terlebih dahulu layanan apache agar proses backup tidak terganggu
sudo systemctl stop apache2
Backup
Copy atau kompress direktori tempat anda menginstall wordpress
zip -rv /home/fariz/wordpress-backup/wordpress.zip /var/www/html/wordpress/
Backup database wordpress
mysqldump -u username -pPassword wordpress > wordpress.sql
Setelah itu akan menghasilkan file wordpress.sql
Konfigurasi DNS
Arahkan A Record domain ke IP server baru dan masukkan alias www
Contohnya seperti ini:
Di VPS baru
Instalasi
apt update
apt upgrade
Install Apache
apt install apache2
(preview) yang terinstall
apache2-bin/focal-updates,focal-security,now 2.4.41-4ubuntu3.1 amd64 [installed,automatic]
apache2-data/focal-updates,focal-security,now 2.4.41-4ubuntu3.1 all [installed,automatic]
apache2-utils/focal-updates,focal-security,now 2.4.41-4ubuntu3.1 amd64 [installed,automatic]
apache2/focal-updates,focal-security,now 2.4.41-4ubuntu3.1 amd64 [installed]
libapache2-mod-php7.4/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
libapache2-mod-php/focal,now 2:7.4+75 all [installed]
Install PHP
sudo apt install php
Atau jika ingin menggunakan php 7.4
sudo apt -y install php7.4
(preview) yang terinstall
libapache2-mod-php7.4/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
libapache2-mod-php/focal,now 2:7.4+75 all [installed]
php-common/focal,now 2:75 all [installed,automatic]
php-mysql/focal,now 2:7.4+75 all [installed]
php7.4-cli/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4-common/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4-json/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4-mysql/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4-opcache/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4-readline/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 all [installed,automatic]
php/focal,now 2:7.4+75 all [installed]
Install extension/module
sudo apt -y install php-common php-mysql php-xml php-xmlrpc php-curl php-gd php-imagick php-cli php-dev php-imap php-mbstring php-opcache php-soap php-zip php-cli php-intl imagemagick git unzip zip libgd-dev libapache2-mod-php libphp-adodb
Atau jika ingin menginstall module php 7.4
sudo apt -y install php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip php7.4-cli php7.4-intl imagemagick git unzip zip libgd-dev libapache2-mod-php libphp-adodb
Pengujian web server dan php
Buat sebuah file php untuk melihat informasi versi php yang dipakai
nano /var/www/html/info.php
Masukkan ini kedalamnya
<?php phpinfo( ); ?>
Lalu akses nama domain yang sudah di arahkan atau IP server menggunakan web browser
IPADDRESSatauDOMAIN IPADDRESSatauDOMAIN/info.php
Hasil yang keluar kurang lebih seperti ini:
Konfigurasi
Konfigurasi directory default apache (WAJIB)
Ini agar permalink berfungsi dengan baik
Edit file 000-default.conf
sudo nano /etc/apache2/sites-available/000-default.conf
Tambahkan baris ini dibawah baris DocumentRoot /var/www/html
<Directory /var/www/namadomain.com>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
Sehingga menjadi seperti berikut :
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Membuat virtual host (optional jika tidak ingin menginstall di direktori default apache)
*Pastikan DNS sudah diarahkan ke IP server tujuan
Membuat direktori untuk virtual host (Host block)
mkdir /var/www/namadomain.com
Membuat file konfigurasi virtual host
cd /etc/apache2/sites-available/
nano namadomain.com.conf
Masukkan ini kedalamnya
<VirtualHost *:80>
ServerName namadomain.com
ServerAlias www.namadomain.com
ServerAdmin [email protected]
DocumentRoot /var/www/namadomain.com
<Directory /var/www/namadomain.com>
Options -Indexes +FollowSymLinks
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/namadomain.com-error.log
CustomLog ${APACHE_LOG_DIR}/namadomain.com-access.log combined
</VirtualHost>
Atau, yang lebih ringkas
<VirtualHost *:80>
ServerName namamdomain.com
DocumentRoot /var/www/namadomain.com
<Directory /var/www/namadomain.com>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/apache2/namadomain.com_error.log
CustomLog /var/log/apache2/namadomain.com_access.log combined
</VirtualHost>
Mengaktifkan konfigurasi virtualhost
sudo a2ensite namadomain.com.conf
Mengaktifkan modul rewrite (untuk permalink)
a2enmod rewrite
Cek syntax, apakah ada error/kesalahan penulisan
sudo apachectl configtest
Pastikan output yang keluar: Syntax OK
Restart apache
systemctl restart apache2
Memastikan didalam direktori /etc/apache2/sites-enabled/
sudah terdapat file konfigurasi namadomain.com.conf
ls /etc/apache2/sites-enabled/
Jika belum ada, buat symlink (symbolic link) file /etc/apache2/sites-available/namadomain.com.conf
ke /etc/apache2/sites-enabled/
ln -s /etc/apache2/sites-available/namadomain.com.conf /etc/apache2/sites-enabled/
Pengujian virtual host
Buat sebuah file html lalu simpan didalam direktori virtual host
nano /var/www/namadomain.com/test.html
Masukkan ini kedalamnya
Selamat virtual host namadomain.com berhasil dibuat
Buat sebuah file php untuk melihat informasi versi php yang dipakai
nano /var/www/html/info.php
Masukkan ini kedalamnya
<?php phpinfo( ); ?>
Lalu akses menggunakan web browser
namadomain.com/test.hml namadomain.com/info.php
Hasil yang keluar kurang lebih seperti ini:
Memasang SSL (Optional)
Install Let’s Encrypt Certbot
apt install python3-certbot-apache -y
Atau jika anda ingin menginstall certbot melalui snap (tidak disarankan)
snap install --classic certbot
Buat symbolic link (tidak perlu dilakukan jika memasang certbot melalui apt phython3 di atas)
ln -s /snap/bin/certbot /usr/bin/certbot
Pasang SSL (HTTPS)
certbot --apache
Lalu pilih situs yang akan dipasang SSL dengan memasukan nomor pilihan. Jika ada 2 situs yang ingin dipasangkan SSL pisahkan dengan <spasi>
contoh:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: namadomain.com
2: blog.namadomain.com
3: www.blog.namadomain.com
4: www.namadomain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1 4
Untuk letsencrypt terbaru tidak terdapat List domain dengan pilihan nomor, jadi kita harus mengetikkan domain secara manual, Dan jika ingin menambahkan lebih dari 1 domain maka harus dipisahkan menggunakan spasi. Contoh:
Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter 'c' to cancel): farizanwar.my.id www.farizanwar.my.id
Atau dengan perintah berikut
certbot --apache -d namadomain.com -d www.namadomain.com
Jika muncul pertanyaan
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel):
Masukkan email untuk mendapatkan notifikasi jika masa berlaku sertifikat akan berakhir/kadaluwarsa
Jika muncul pertanyaan
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Jawab Y
Jika muncul pertanyaan
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
Jawab saja N
Untuk letsencrypt terbaru jika kita menginstal wordpress di default root document/directory apache muncul pertanyaan berikut:
We were unable to find a vhost with a ServerName or Address of www.farizanwar.my.id.
Which virtual host would you like to choose?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: 000-default.conf | | | Enabled
2: 000-default-le-ssl.conf | farizanwar.my.id | HTTPS | Enabled
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Dan kita pilih pilihan yang terdapat tulisan HTTPS, contoh diatas HTTPS terdapat pada nomor 2 maka kita pilih nomor 2
Restore wordpress
Ekstrak file zip hasil compress dari VPS lama
unzip wordpress.zip
Pindahkan sekaligus ubah nama direktori hasil eksrak kedalam direktori virtual host
mv wordpress /var/www/namadomain.com/
Ubah kepemilikan dan izin
chown -R www-data:www-data /var/www/namadomain.com/wordpress/
chmod -R 775 /var/www/namadomain.com/wordpress/
Instalasi, konfigurasi dan restore database
Instalasi MariaDB
sudo apt install mariadb-server
Konfigurasi
mysql_secure_installation
Jika muncul pertanyaan
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
Tekan enter
Jika muncul pertanyaan
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
Jawab Y
enter, lalu masukkan password root mysql baru
Jika muncul pertanyaan
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
Jawab Y
Jika muncul pertanyaan
Remove anonymous users? [Y/n] y
Jawab Y
Jika muncul pertanyaan
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
Jawab Y
Jika muncul pertanyaan
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
Jawab Y
Jika muncul pertanyaan
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
Jawab Y
Membuat database untuk wordpress
Masuk/login kedalam mysql
mysql -u root -pkatasandi
Membuat database wordpress
create database namadbwordpress;
Membuat user untuk mengelola database wordpress
CREATE USER 'namauser'@'localhost' IDENTIFIED BY 'katasandi';
Mengizinkan user untuk mengelola database wordpress
GRANT ALL PRIVILEGES ON namadbwordpress.* TO 'namauser'@'localhost';
FLUSH PRIVILEGES;
Restore database
Pastikan sudah berada di direktori tempat menyimpan file .sql
hasil backup dari vps lama, atau hafal full path direktori tempat menyimpan file .sql
mysql -u username -pPassword namadbwordpress < wordpress.sql
Konfigurasi wp-config.php
Edit file wp-config.php yang ada didalam direktori instalasi wordpress
nano /var/www/namadomain.com/wordpress/wp-config.php
Sesuaikan
define( 'DB_NAME', 'namadbwordpress' ); = dengan namadbwordpress yang baru dibuat tadi define( 'DB_USER', 'namauser' ); = dengan nama user yang baru dibuat tadi define( 'DB_PASSWORD', 'katasandi' ); = dengan kata sandi yang dibuat saat membuat user database tadi
Jika nama database nama user dan password database sama abaikan tahap diatas ini !!
Mengganti URL/Domain
Mengganti URL/Domain
Prasyarat
- Pastikan mengetahui prefix tabel databse wordpress
Untuk mengetahui table_prefix lihat isi file wp-config.php
yang terletak di direktori instalasi wordpress. Lihat pada baris $table_prefix =
Login kedalam mysql
mysql -u username -pkatasandi
Pilih database wordpress yang akan diganti domain/URL nya.
use namadbwordpress
Melihat table database
show tables;
Lihat nama domain ‘home’ saat ini
SELECT * FROM namaprefixwordpress_options WHERE option_name = 'home';
Ganti nilai option_value
diatas dengan nama domain baru
UPDATE namaprefixwordpress_options SET option_value="http://domainbaru.com" WHERE option_name = "home";
Lihat nama domain ‘siteurl’ saat ini
SELECT * FROM namaprefixwordpress_options WHERE option_name = 'siteurl';
Ganti nilai option_value
diatas dengan nama domain baru
UPDATE namaprefixwordpress_options SET option_value="http://domainbaru.com" WHERE option_name = "siteurl";
Mengganti/mengupadate link media/gambar
Pada saat kita migrasi dari vps lama ke vps baru link url (IP) media masih menggunakan url vps lama.
Contoh link url media yang rusak/menggunakn url vps lama
Untuk mengubah url media ketikkan perintah berikut di mysql/mariadb
Pilih database
use namadatabase;
UPDATE prefixwp_posts SET post_content = (REPLACE (post_content, 'urllama', 'urlbaru'));
Contoh
UPDATE namaprefixwp_posts SET post_content = (REPLACE (post_content, 'https://blog.warscloud.com', 'https://blog.warscloud.com'));
Atau
UPDATE namaprefixwp_posts SET post_content = (REPLACE (post_content, 'domainlama.com', 'domainbaru.com'));
Jika sebelumnya wordpress anda terletak dibawah root (/blog
) dan ingin memindahkan nya ke root domain/ip dan mengubah wordpressnya menjadi https syntax nya sebagai berikut
UPDATE wpblogfariz_posts SET post_content = (REPLACE (post_content, 'https://blog.warscloud.com', 'https://farizanwar.my.id'));
Catatan:
Jika wordpress anda terletak dibawah (/) atau 10.5.1.1/blog atau namadomain.com/blog Maka tulis saja url awalnya 10.5.1.1 atau namadomain.com tanpa menuliskan /blog Perhatikan juga perbedaan pada http:// dan https://
Mengaktifkan modul rewrite
modul rewrite berfungsi untuk permalink
a2enmod rewrite
systemctl restart apache2
Lalu coba akses menggunakan web browser, selesai
Keterangan artikel :
Tested on: Ubuntu server 20.04