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.