Memasang WordPress Menggunakan Docker

Akhirnya saatnya topik ini yang saya tunggu-tunggu, yaitu memasang wordpress menggunakan docker pada server. Bisa dibilang saya cukup baru main di wilayah Docker, tapi cukup menyenangkan juga.

Setelah mencoba memasang beberapa aplikasi, saya bisa tahu kenapa docker sangat disukai akhir-akhir ini, dan disukai oleh para developer. Ya pantas, karena dengan beberapa baris saja kita bisa langsung memasang aplikasi kita menggunakan docker. Ya, hanya butuh beberapa detik saja.

Dalam hal ini saya menggunakan layanan cloud server dari scaleway dengan menggunakan image docker yang sudah terpasang. Docker yang terpasang sendiri berada pada server 16.04 LTS. Server menggunakan Start VC1S (2core 2GB ram) dengan 50 GB SSD dan 200 Mbps uplink unmetered.

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS"

Install Docker

Karena sudah menggunakan image pre-load docker, jadi tidak perlu install docker lagi.

Kita harus pastikan docker version kita sudah yang terupdate. Syntax command dan contoh output seperti di bawah.

root@scw-9413e5:~# docker version
Client:
Version: 18.03.0-ce
API version: 1.37
Go version: go1.9.4
Git commit: 0520e24
Built: Wed Mar 21 23:10:01 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm

Server:
Engine:
Version: 18.03.0-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.4
Git commit: 0520e24
Built: Wed Mar 21 23:08:31 2018
OS/Arch: linux/amd64
Experimental: false

Install Database Mariadb Container

Hal pertama yang harus kita lakukan adalah memasang container untuk database. Di sini kita menggunakan image Mariadb paling terbaru. Pastikan kamu sudah login sebagai root.

root@scw-9413e5:~# docker pull mariadb

Setelah itu tunggu hingga proses pengambilan file image dari mariadb selesai. Jika sudah, kita bisa cek langsung images apa saja yang sudah terpasang. Jika sudah, nama mariadb akan terdaftar di bawah.

root@scw-9413e5:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mariadb latest a130830db9a4 41 hours ago 363MB
hello-world latest 2cb0d9787c4d 5 weeks ago 1.85kB

Sekarang kita buatkan folder untuk file database dan wordpress itu sendiri. Untuk foldernya terserah, namun saya terbiasa di /root sih.

root@scw-9413e5:~# mkdir wp1
root@scw-9413e5:~# cd wp1/
root@scw-9413e5:~/wp1# mkdir html
root@scw-9413e5:~/wp1# mkdir database
root@scw-9413e5:~/wp1# ll
total 16
drwxr-xr-x 4 root root 4096 Aug 18 13:14 ./
drwxrwxr-x 5 root root 4096 Aug 18 13:14 ../
drwxr-xr-x 2 root root 4096 Aug 18 13:14 database/
drwxr-xr-x 2 root root 4096 Aug 18 13:14 html/
root@scw-9413e5:~/wp1# pwd
/root/wp1

Saya akan pasang file wordpress pada folder /root/wp1, dan file database di /root/wp1/database/ sekarang kita harus setup container docker untuk mariadb. Commandnya bisa kamu copy paste di bawah, tapi tolong jangan disamakan.

root@scw-9413e5:~/wp1# docker run -e MYSQL_ROOT_PASSWORD=passwordnya -e MYSQL_USER=wpdb_827 -e MYSQL_PASSWORD=wpdb_827@ -e MYSQL_DATABASE=wpdb_827 -v /root/wp1/database:/var/lib/mysql --name wordpressdb -d mariadb

Dengan rincian keterangan sebagai berikut :

  • MYSQL_ROOT_PASSWORD adalah root password untuk db engine mariadb container yang akan kita deploy.
  • MYSQL_USER adalah user database yang akan digunakan.
  • MYSQL_PASSWORD adalah password database yang akan digunakan.
  • MYSQL_DATABASE adalah nama database yang akan digunakan.
  • /root/wp1/database adalah folder dimana mariadb akan deploy.
  • wordpressdb adalah nama instance docker sebagai identifier.

Setelah itu kita enter dan akan muncul instance docker dengan nama wordpressdb.

root@scw-9413e5:~/wp1# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1fdeff6bad6e mariadb "docker-entrypoint.s…" 21 seconds ago Up 20 seconds 3306/tcp wordpress db

Cek IP address Internal

Nah setelah selesai, kita harus cek IP internalnya untuk database ini berapa. Karena nantinya digunakan juga untuk cek database dan deploy wordpress. Caranya sebagai berikut :

root@scw-9413e5:~/wp1# docker inspect -f '{{ .NetworkSettings.IPAddress }}' wordpressdb
172.17.0.2

Dari hasil output milik saya, terlihat IP address container yang digunakan pada internal adalah 172.17.0.2.

Cek Database

Setelah berhasil terdeploy, kita cek apakah databasenya sudah terbuat apa belum. Kita login ke mysql lewat server kita.

Tapi sebelum itu, pastikan mysql-client sudah terpasang. Jika belum, kita install terlebih dahulu.

root@scw-9413e5:~/wp1# apt-get update
root@scw-9413e5:~/wp1# apt-get install mysql-client

Jika sudah terpasang, kita cek databasenya dengan login ke container mariadb tersebut.

root@scw-9413e5:~/wp1# mysql -u wpdb_827 -h 172.17.0.2 -p

Setelah memasukkan password databasenya, kita akan tersambung ke mysql server hasil deploy container tadi.

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.5.5-10.3.9-MariaDB-1:10.3.9+maria~bionic mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Kemudian kita cek databasenya.

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| wpdb_827 |
+--------------------+
2 rows in set (0.01 sec)

Oke, ternyata databasenya sudah terbuat sempurna. Sekarang kita quit.

mysql> quit
Bye

Install WordPress Container

Berikutnya kita memasang wordpress container dengan versi latest.

root@scw-9413e5:~/wp1# docker pull wordpress:latest

Setelah proses instalasi image selesai, kita lanjutkan dengan eksekusi command di bawah ini untuk memasang wordpress container.

docker run -e WORDPRESS_DB_USER=wpdb_827 -e WORDPRESS_DB_PASSWORD=wpdb_827@ -e WORDPRESS_DB_NAME=wpdb_827 -p 8081:80 -v /root/wp1/html:/var/www/html --link wordpressdb:mysql --name wp1 -d wordpress

Berikut keterangannya :

  • WORDPRESS_DB_USER adalah database user yang sudah kita buat tadi.
  • WORDPRESS_DB_PASSWORD adalah password database yang sudah kita buat tadi.
  • WORDPRESS_DB_NAME adalah nama db yang sudah kita define.
  • -p 8081:80 adalah syntax  binding, dimana 8081 adalah local port dan 80 adalah listening port public.
  • /root/wp1/html:/var/www/html adalah metode linking dari default web root /var/www/html ke wordpress container direktori di /root/wp1/html.
  • –link wordpressdb:mysql adalah linking container docker wordpressdb ke container wordpress wp1.

Setelah selesai, docker container akan berjalan. Kita cek :

root@scw-9413e5:~/wp1# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4774f35348f0 wordpress "docker-entrypoint.s…" 12 seconds ago Up 11 seconds 0.0.0.0:8081->80/tcp wp1
1fdeff6bad6e mariadb "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 3306/tcp wordpressdb

Oke container sudah berjalan dan port menunjukkan angka yang benar. Seharusnya sih jika kita membuka IP address kita sendiri pada port 8081 akan terbuka halaman default wordpress. Yuk kita tes. Saya akan cek dengan curl pada IP local server saya.

root@scw-9413e5:~/wp1# curl -I 10.8.115.77:8081
HTTP/1.1 302 Found
Date: Sat, 18 Aug 2018 13:28:55 GMT
Server: Apache/2.4.25 (Debian)
X-Powered-By: PHP/7.2.8
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Location: http://10.8.115.77:8081/wp-admin/install.php
Content-Type: text/html; charset=UTF-8

Tuh kan, sudah berjalan wordpressnya di port 8081. Selanjutnya tinggal kita kombinasikan dengan nginx agar lebih hemat memory dan efisien.

Install nginx

root@scw-9413e5:~/wp1# apt-get install nginx

Kita set konfigurasi untuk wordpress dan pemberian nama website pada konfigurasi vhostnya.

root@scw-9413e5:~/wp1# cd /etc/nginx/sites-available/
root@scw-9413e5:/etc/nginx/sites-available# vim wp1

Kita isikan konfigurasinya seperti di bawah ini :

server {
listen 80;
server_name namadomainkamu.net;

location / {
proxy_pass http://localhost:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }
}
  • Kita isikan nama domain kita pada baris server_name.
  • Pastikan pada proxy_pass sudah dicantumkan port yang benar.

Kemudian kita apply config ini, lalu dilanjutkan untuk menghapus file default pada index nginx. Kenapa? Agak risih aja sih.

root@scw-9413e5:/etc/nginx/sites-available# ln -s /etc/nginx/sites-available/wp1 /etc/nginx/sites-enabled/
root@scw-9413e5:/etc/nginx/sites-available# rm -f /etc/nginx/sites-available/default
root@scw-9413e5:/etc/nginx/sites-available# rm -f /etc/nginx/sites-enabled/default

Jangan lupa nyalakan nginx.

root@scw-9413e5:/etc/nginx/sites-available# service nginx start

Oke selesai, kini wordpress container dan mariadb container yang terpasang bisa diakses lewat web browser dengan nginx proxy. Kamu tinggal akses menggunakan domain kamu. Pastikan DNS domain di setting dengan benar. Lalu dilanjutkan akses website wordpress untuk setup wordpress pertama kalinya.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.