Caddy Web Server, PHP dan MySQL di Ubuntu

  • July 15, 2018
  • Kurnia Ramadhan
  • linux

Sebenarnya sudah lama saya ingin menulis tentang topik ini. Kemudahan dalam proses instalasi hingga konfigurasi serta performance dari Caddy Web Server membuat saya ingin berbagi bersama teman-teman semua. Kebetulan sudah hampir 1 bulan ini saya mengelola 1 server yang dihuni oleh blog milik seorang teman dengan pengunjung yang cukup banyak. Dan Alhamdulillah teman saya puas dengan kinerja dari Caddy Web Server, sehingga blog yang dia miliki sangat cepat diakses padahal server yang saya gunakan berada di Jerman.

Caddy Web Server sendiri adalah Web Server berbasis Open Source yang dibuat dengan bahasa Go dan sudah HTTP/2 enabled dan juga sudah secure secara default. Karena semua website yang dikelola Caddy Web Server secara otomatis sudah HTTPS enabled dengan sertifikat SSL yang berasal dari Letsencrypt.

Nah pada artikel ini kita akan bersama-sama melakukan instalasi Caddy Web Server, PHP-FPM dan MySQL. Setelah itu kita akan melakukan konfigurasi dari semua item yang sudah kita install untuk mendapatkan hasil akhir berupa server berbasis Caddy Web Server, PHP-FPM dan MySQL yang siap untuk kita gunakan menaruh website atau blog yang kita miliki.

Instalasi Caddy Web Server

Pada langkah ini, kita akan melakukan instalasi Caddy Web Server dengan menggunakan script installer yang nantinya akan men download dan meng install file binary ke direktori yang telah ditentukan dalam hal ini adalah bin direktori.

wget https://getcaddy.com -O getcaddy
chmod +x getcaddy

Langkah selanjutnya adalah dengan menjalankan / run script yang telah kita download sebelumnya dengan cara:

sudo ./getcaddy personal http.ipfilter,http.ratelimit

Note:

  • getcaddy = caddy installer script
  • personal = jenis lisensi yang kita gunakan
  • http.ipfilter/ratelimit = plugin yang disertakan pada saat instalasi

Konfigurasi Caddy Web Server

Pada langkah ini kita akan melakukan konfigurasi Caddy Web Server. Kita akan membuat user baru dengan nama caddy, membuat direktori yang akan kita gunakan untuk menyimpan file konfigurasi, membuat direktori untuk menyimpan log dan membuat direktori yang akan kita gunakan sebagai root direktori dari website / blog kita nantinya.

Kita mulai dengan membuat user baru ‘caddy’ dengan cara sebagai berikut:

useradd -M -s /bin/false caddy

Kemudian jalankan perintah mkdir berikut ini:

mkdir -p /etc/caddy
mkdir -p /var/log/caddy
mkdir -p /var/www/server.kapuas.top

Kemudian kita akan melakukan perubahan ownership dari ‘caddyuser.

chown -R caddy:root /etc/caddy /var/log/caddy

Langkah selanjutnya kita akan membuat file konfigurasi dengan nama ‘Caddyfile’ yang nantinya akan kita taruh di dalam folder ‘/etc/caddy’ dengan cara sebagai berikut:

cd /etc/caddy
nano Caddyfile

Kemudian isi dengan contoh konfigurasi sebagai berikut:

server.kapuas.top {
        root /var/www/server.kapuas.top
        log /var/log/caddy/server.kapuas.top.log
        errors /var/log/caddy/errors.log
        tls user@email.com
        gzip
}

kemudian simpan dan keluar dari nano.

Menjalankan Caddy sebagai Service di Systemd Ubuntu 18.04

Pada langkah ini, kita akan menjalankan Caddy Web Server sebagai service di dalam systemd system dan kemudian membuat file index.html yang akan kita gunakan sebagai file web dari server yang sedang kita konfigurasi ini.

Buat service baru dengan nama ‘caddy.service’ menggunakan nano.

nano /etc/systemd/system/caddy.service

Kemudian isi dengan konfigurasi berikut ini:

[Unit]
Description=Caddy HTTP/2 web server
 
[Service]
User=caddy
Group=caddy
Environment=CADDYPATH=/etc/caddy
ExecStart=/usr/local/bin/caddy -agree=true -log=/var/log/caddy/caddy.log -conf=/etc/caddy/Caddyfile -root=/dev/null
ExecReload=/bin/kill -USR1 $MAINPID
LimitNOFILE=1048576
LimitNPROC=64

[Install]
WantedBy=multi-user.target

Kemudian simpan dan keluar dari nano.

Langkah selanjutnya adalah me reload systemd system dan menjalankan service caddy dengan menggunakan perintah systemctl.

systemctl daemon-reload
systemctl start caddy

Kemudian agar ‘caddy’ dijalankan setiap booting maka kita cukup menjalankan perintah berikut:

systemctl enable caddy

Dan sekarang Caddy Web Server sudah jalan di Ubuntu 18.04.

Langkah selanjutnya adalah dengan membuat file ‘index.html’ sebagai file contoh untuk mengetahui apakah Caddy Web Server sudah berjalan apa belum.

Maka kita akan membuat file ‘index.html’ di dalam folder/var/www/karangan.id’.

cd /var/www/server.kapuas.top
echo '<h1><center>Caddy web server</center></h1>' > index.html

Kemudian lakukan perubahan kepemilikan file dengan cara sebagai berikut:

chown -R caddy:caddy /var/www/server.kapuas.top

Done. Sekarang kita dapat melakukan tes dengan memanggil alamat url: ‘https://karangan.id

Instalasi PHP dan PHP-FPM 7.2

Pada langkah ini, kita akan melakukan instalasi PHP-FPM dari repository, dengan cara:

apt install -y php-fpm php-cli php-mysql php-gd curl

Setelah instalasi selesai, kita akan melakukan konfigurasi dari file konfigurasi PHP-FPM.

Kita akan menuju direktori ‘/etc/php/7.2/fpm’ dan mengedit file ‘www.conf’ dalam direktori ‘pool’.

cd /etc/php/7.0/fpm/pool.d
nano www.conf

Kemudian hilangkan tanda pagar pada baris berikut:

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

Kemudian tambahkan usercaddy’ ke dalam grup ‘www-data’.

usermod -a -G www-data caddy

Langkah selanjutnya adalah dengan melakukan start service php-fpm dan meng enable service php-fpm agar dijalankan setiap booting.

systemctl start php7.0-fpm
systemctl enable php7.0-fpm

Done. Instalasi dan konfigurasi PHP-FPM di Caddy Web Server sudah selesai.

Konfigurasi Caddy Web Server dengan PHP-FPM

Setelah melakukan instalasi dan konfigurasi PHP-FPM, maka kita akan menyandingkan PHP-FPM agar bisa di akses di dalam Caddy Web Server.

Langkah yang perlu kita lakukan adalah sebagai berikut:

cd /etc/caddy
nano Caddyfile

Kemudian kita tinggal menambahkan konfigurasi PHP-FPM di bawah konfigurasi domain yang telah kita buat sebelumnya.

server.kapuas.top
        root /var/www/server.kapuas.top
        log /var/log/caddy/server.kapuas.top.log
        errors /var/log/caddy/errors.log
        tls user@email.com
        gzip

 		# Konfigurasi PHP-FPM untuk Caddy
        fastcgi / /run/php/php7.2-fpm.sock php {
                ext .php
                split .php
                index index.php
        }

}

Kemudian simpan dan keluar dari nano.

Langkah selanjutnya adalah dengan melakukan restart service seperti contoh berikut:

systemctl restart caddy
systemctl restart php7.2-fpm

Testing

Untuk melakukan tes apakah instalasi Caddy Web Server dan PHP-FPM sudah berjalan dengan baik, maka kita dapat melakukannya dengan cara sebagai berikut:

cd /var/www/server.kapuas.top
echo '<?php phpinfo(); ?>' > info.php

Kemudian panggil website yang telah kita konfigurasi sebelumnya, pada artikel ini adalah https://server.kapuas.top/info.php.

PHPINFO

Instalasi dan Konfigurasi MySQL

Di Ubuntu 18.04, proses instalasi MySQL dapat dilakukan dengan sangat mudah, namun nanti pada prosesnya ada sedikit error kecil yang diakibatkan perbedaan format authentication privileges dari metode auth_socket ke mysql_native_password.

Ikuti langkah berikut untuk memulai proses instalasi MySQL.

sudo apt update
sudo apt install mysql-server

Kemudian jalankan perintah berikut untuk memulai konfigurasi MySQL.

sudo mysql_secure_installation

Perintah di atas akan meminta Anda untuk mengeset password root.

Langkah berikutnya adalah mengubah metode ‘authentication privileges’ dari metode ‘auth_socket’ ke ‘mysql_native_password’ untuk mencegah error saat kita mengakses database MySQL dengan menggunakan user dan password.

sudo mysql

Kemudian melakukan query sederhana seperti baris di bawah ini:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Akan muncul tampilan seperti berikut:

Output
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Lakukan perintah di bawah ini untuk mengubah metode ‘auth_socket’ menjadi ‘mysql_native_password’.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Kemudian lakukan FLUSH PRIVILEGES agar perintah sebelumnya bekerja dengan baik dan benar.

mysql> FLUSH PRIVILEGES;

Kemudian untuk mengecek apakah perubahan metode ‘authentication privileges’ tersebut sudah berjalan dengan sempurna, maka kita perlu melakukan perintah berikut ini:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Akan muncul tampilan sebagai berikut:

Output
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Dapat Anda lihat saat ini metode ‘authentication privileges’ nya sudah berubah menjadi ‘mysql_native_password’. Langkah selanjutnya adalah exit dari MySQL.

mysql> exit

Testing MySQL

Untuk mengecek apakah MySQL sudah terinstall dan berjalan dengan baik di server Anda, dapat dilakukan dengan cara sebagai berikut:

systemctl status mysql

Akan tampak tampilan seperti ini:

● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2018-07-05 16:46:42 WIB; 1 weeks 3 days ago
 Main PID: 1156 (mysqld)
    Tasks: 29 (limit: 2299)
   CGroup: /system.slice/mysql.service
           └─1156 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid

Jul 05 16:46:41 server systemd[1]: Starting MySQL Community Server...
Jul 05 16:46:42 server systemd[1]: Started MySQL Community Server.

Jika Service MySQL belum jalan, maka perintah untuk menjalankannya adalah sebagai berikut:

systemctl start mysql

Done. Selesai sudah proses instalasi dan konfigurasi MySQL Server.

Kesimpulan

Kesimpulannya saya pegel (dampak ngetik) hehehe, semoga artikel ini bermanfaat untuk kita semua. Di artikel selanjutnya saya akan coba tulis cara konfigurasi Permalink untuk Blog berbasis Wordpress. Atau mungkin Instalasi Hugo di atas Caddy Web Server atau di atas Netlify.

Btw ternyata asyik juga ya nulis artikel menggunakan format MarkDown, gak ribet dan ternyata membuat saya betah berlama-lama nulis artikel beserta contoh code nya.