Install Nginx, PHP 7.x, MariaDB, dan WordPress di Ubuntu 18.04 Atau Debian 9

Posted by

Setelah memiliki private hosting, kali ini kita akan install Nginx, PHP, MariaDB, dan WordPress di server Ubuntu terbaru, yaitu versi 18.04 LTS.

Selain Ubuntu, anda juga bisa menggunakan cara berikut pada server Debian 9 (Stretch), karena Ubuntu merupakan distro linux yang berasal dari Debian.

Sebelum melanjutkan, saya berasumsi anda telah menentukan pilihan untuk menggunakan Nginx sebagai web server dan WordPress sebagai Content Management System(CMS).

Artikel kali ini cukup panjang, jadi jangan lupa untuk memastikan secangkir kopi hangat tersedia di samping anda.

Secara general, berikut langkah – langkah cara install Nginx, PHP 7.x, MariaDB, dan WordPress yang akan saya lakukan.

  1. Menambahkan Signing Key Nginx

    Tambahkan Signing key untuk mendaftarkan repository dan packages Nginx ke dalam package manager Ubuntu / Debian.

  2. Menambahkan Nginx repository ke dalam Repository List

    Tambahkan repository Nginx ke dalam repository list Ubuntu atau Debian.

  3. Menginstall Nginx

    Selanjutnya install Nginx ke dalam system Ubuntu atau Debian.

  4. Menambahkan 3rd Party PHP Repository

    Tambahkan PHP repository dari Ondřej Surý karena lebih up to date dibandingkan PHP package dari Ubuntu atau Debian.

  5.  Install PHP 7.x Beserta Module Terkait

    Install PHP beserta module / extension terkait agar WordPress bisa berjalan lancar dan optimal.

  6. Konfigurasi PHP

    Konfigurasi PHP yang telah di install agar selaras dengan Nginx dan WordPress.

  7. Menambahkan Repository MariaDB ke dalam Repository List

    Tambahkan repository MariaDB dari MariaDB Official karena lebih up to date dibandingkan MariaDB package dari Ubuntu atau Debian.

  8. Menginstall MariaDB

    Selanjutnya install MariaDB ke dalam system Ubuntu atau Debian.

  9. Setup MariaDB Database

    Lakukan pengaturan dan konfigurasi MariaDB.

  10. Melakukan konfigurasi Nginx

    Selanjutnya lakukan konfigurasi Nginx seperti konfigurasi virtual server, kompresi, dan lain sebagainya.

  11. Menginstall WordPress

    Install WordPress menggunakan command line (CLI) atau menggunakan Browser.

  12. Extend kemampuan dan performa WordPress (Opsional)

    Tingkatkan kemampuan dan dan performa WordPress di Nginx dengan menggunakan SSL (https dan http/2), cache, Brotli Compression, dan lain sebagainya.

Ready sob? Let’s get started!!

STEP 1 – NGINX INSTALLATION

Ada beberapa cara yang bisa di gunakan untuk menginstall Nginx di server Ubuntu ataupun Debian, namun saya akan menggunakan cara install Nginx dari prebuilt package Nginx repository.

Saya juga akan menggunakan versi mainline dari Nginx agar saya bisa merasakan fitur-fitur terbaru dan versi yang up to date.

Karena frekuensi update yang cukup sering, maka anda harus rajin melakukan compiling module Nginx jika anda menggunakan 3rd party module, seperti module Brotli misalnya.

Namun jika anda lebih memilih versi stable, maka saya akan bahas secara singkat tentang cara untuk menginstallnya saja, karena perbedaaannya dengan versi mainline hanya pada update, sedangkan konfigurasi tetap sama.

1.  Menambahkan Signing Key

Signing key berfungsi untuk mendaftarkan repository dan packages Nginx ke dalam package manager Ubuntu.

Untuk menambahkan signing key, saya akan menggunakan cara berikut ini.

wget http://nginx.org/keys/nginx_signing.key 
sudo apt-key add nginx_signing.key

Dan hasil bisa di lihat sebagai berikut

wget http://nginx.org/keys/nginx_signing.key
--2018-09-10 05:12:18--  http://nginx.org/keys/nginx_signing.key
Resolving nginx.org (nginx.org)... 206.251.255.63, 95.211.80.227, 2001:1af8:4060:a004:21::e3, ...
Connecting to nginx.org (nginx.org)|206.251.255.63|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1561 (1.5K) [text/plain]
Saving to: ‘nginx_signing.key’

nginx_signing.key          100%[=======================================>]   1.52K  --.-KB/s    in 0s

2018-09-10 05:12:18 (248 MB/s) - ‘nginx_signing.key’ saved [1561/1561]

sudo apt-key add nginx_signing.key
OK

2.  Menambahkan Repository List

Setelah menambahkan signing key, selanjutnya tambahkan repository Nginx ke dalam repository list Ubuntu atau Debian.

Buka file sources.list menggunakan nano.

sudo nano /etc/apt/sources.list

Setelah file terbuka, masukkan code berikut di bagian paling bawah file.

  1.  Versi Mainline
    
    ## Untuk Server Ubuntu 18.04 ##
    deb http://nginx.org/packages/mainline/ubuntu/ bionic nginx
    deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx
    
    ## Untuk Server Debian 9 ##
    deb http://nginx.org/packages/mainline/debian/ stretch nginx
    deb-src http://nginx.org/packages/mainline/debian/ stretch nginx
     
  2. Versi Stable
    
    ## Untuk Server Ubuntu 18.04 ##
    deb http://nginx.org/packages/ubuntu/ bionic nginx
    deb-src http://nginx.org/packages/ubuntu/ bionic nginx
    
    ## Untuk Server Debian 9 ##
    deb http://nginx.org/packages/debian/ stretch nginx
    deb-src http://nginx.org/packages/debian/ stretch nginx
     

Lalu tekan ctrl+x → Y → Enter untuk melakukan save file.

3.  Install Nginx

Setelah kedua langkah di atas selesai, saatnya kita install Nginx dengan command berikut.

sudo apt-get install nginx

Setelah selesai, kita cek dengan command berikut.

curl -I 127.0.0.1

Dan jika berhasil maka respon yang di peroleh kurang lebih sebagai berikut.

 curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Mon, 10 Sep 2018 05:46:19 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 10 Sep 2018 05:45:21 GMT
Connection: keep-alive
ETag: "5b9604f1-264"
Accept-Ranges: bytes

Pada hasil respon di atas yang perlu kita perhatikan adalah respon HTTP dimana responnya adalah HTTP/1.1 200 OK yang mengindikasikan jika Nginx telah berhasil kita install.

Anda juga bisa mengakses domain anda melalui browser, dan jika Nginx berhasil di install maka akan muncul halaman seperti gambar di bawah ini.

install-nginx-sukses

STEP 2 – PHP 7.X & MODULES INSTALLATION

Jika kita hanya menginstall PHP, maka saya bisa jamin WordPress tidak akan running, apalagi jika anda menggunakan Nginx sebagai web server.

Oleh sebab itu, kita perlu menginstall beberapa module agar WordPress bisa berjalan lancar di Nginx.

1.  Menambahkan Repository PHP

Disini saya akan menggunakan repository pihak ketiga dari Ondřej Surý karena lebih up to date dibandingkan package dari Ubuntu.

Sedangkan untuk Debian, anda bisa menggunakan repository pihak ketiga dari Sury.

Untuk menggunakan repository tersebut maka kita perlu menambahkan ppa repository dengan command berikut.

  1. Ubuntu 18.04 Bionic
    sudo add-apt-repository ppa:ondrej/php
  2. Debian 9 Stretch
    sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
    sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

Lakukan update system setelah anda menambahkan repository tersebut.

sudo apt-get update

2.  Install PHP 7.x Beserta Module Terkait

Setelah itu, install PHP dan module sesuai yang anda inginkan.

Anda bisa memilih untuk menginstall PHP 7.2 atau PHP 7.3 dan module terkait dengan cara berikut ini.

Karena PHP 7.3 sudah cukup stabil untuk di gunakan di server produksi, maka saya pribadi merekomendasikan untuk menggunakan PHP 7.3 di bandingkan PHP 7.2.

Kenapa?

Karena PHP 7.3 hadir dengan berbagai improvement dan fitur baru yang bisa meningkatkan performa kecepatan web anda.

Berdasarkan pengalaman, saya memperoleh peningkatan performa kecepatan web sebesar ++ 2 detik ketika beralih dari PHP 7.2 ke PHP 7.3 untuk web omgoblog ini.

Sehingga jika PHP sudah terinstall di system anda, jangan lupa untuk segera melakukan upgrade ke versi PHP 7.3.

Namun jika anda belum menginstall PHP, anda bisa mengikuti langkah -langkah berikut ini.

a.  PHP 7.2

Jika anda memilih untuk install PHP 7.2, anda bisa menggunakan command berikut.

sudo apt-get install php7.2-fpm php7.2-common php7.2-mysql php7.2-xml php7.2-xmlrpc php7.2-curl php7.2-gd php7.2-imagick php7.2-cli php7.2-dev php7.2-imap php7.2-mbstring php7.2-opcache php7.2-soap php7.2-zip

b.  PHP 7.3

Untuk install PHP 7.3 , anda bisa menggunakan command berikut.

sudo apt-get install php7.3-fpm php7.3-common php7.3-mysql php7.3-xml php7.3-xmlrpc php7.3-curl php7.3-gd php7.3-cli php7.3-dev php7.3-imap php-imagick php7.3-mbstring php7.3-opcache php7.3-soap php7.3-zip

Setelah proses instalasi selesai, cek dengan menggunakan command berikut.

php -v

Jika anda memilih PHP 7.2, maka hasilnya akan terlihat sebagai berikut.

php -v
PHP 7.2.10-0ubuntu0.18.04.1 (cli) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.10-0ubuntu0.18.04.1, Copyright (c) 1999-2018, by Zend Technologies

Dan untuk PHP 7.3 akan muncul hasil seperti berikut ini.

 php -v
PHP 7.3.0-2+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Dec 17 2018 09:22:47) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.0-dev, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.0-2+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies
 _

PHP 7.3 sudah bisa di gunakan untuk production server


3.  Konfigurasi PHP

Setelah instalasi selesai dilakukan, kita perlu untuk melakukan konfigurasi PHP terlebih dahulu.

Buka file konfigurasi pool dengan command berikut.

sudo nano /etc/php/7.3/fpm/pool.d/www.conf

Untuk PHP versi 7.2 anda tinggal menyesuaikan versi pada command di atas maupun command – command selanjutnya.

Setelah file terbuka, cari dan ubah baris berikut dengan username anda.


user = omgoblog

group = omgoblog

listen.owner = omgoblog

listen.group = omgoblog
 

Setelah itu tekan ctrl + x → Y untuk menyimpan hasil editing.

Jika anda tidak tau username anda, ketikkan baris berikut di shell linux anda.

whoami
omgoblog

Dari command di atas, terlihat kalau username saya adalah omgoblog.

Selanjutnya, saya akan merubah konfigurasi file php.ini untuk merubah ukuran maksimal file upload di WordPress nantinya.

Buka file php.ini dengan mengetikkan

sudo nano /etc/php/7.3/fpm/php.ini

Setelah file terbuka, cari baris upload_max_filesize lalu ubah sesuai dengan ukuran yang anda inginkan.


upload_max_filesize = 8M
 

Setelah itu tekan ctrl + x → Y untuk menyimpan hasil editing.

Selanjutnya kita cek apakah konfigurasi yang kita lakukan error atau tidak dengan command berikut.

sudo php-fpm7.3 -t

Dan hasil berikut menunjukkan kalau konfigurasi yang kita lakukan tidak menimbulkan error.

sudo php-fpm7.3 -t
[10-Sep-2018 10:04:28] NOTICE: configuration file /etc/php/7.3/fpm/php-fpm.conf test is successful

Jika konfigurasi sukses, selanjutnya lakukan restart PHP-FPM service.

sudo service php7.3-fpm restart

STEP 3 – MariaDB INSTALLATION

Untuk database saya senang menggunakan MariaDB di bandingkan MySQL.

Kenapa?

Karena MariaDB bersifat open source, lebih ringan, dan memiliki fitur lebih banyak jika di bandingkan dengan MySQL.

1.  Menambahkan Repository MariaDB

Seperti rekan – rekan lainnya di atas, saya tidak akan menggunakan repository package dari Ubuntu untuk menginstall MariaDB.

Untuk menambahkan Repository MariaDB, gunakan command berikut ini.

  1.  Ubuntu 18.04 Bionic
    sudo apt-get install software-properties-common
    sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
    sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el]  bionic main'
  2.  Debian 9 Stretch
    sudo apt-get install software-properties-common dirmngr
    sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
    sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el]  stretch main'

2.  Install MariaDB

Setelah menambahkan repository, kita install MariaDB dengan command berikut.

sudo apt-get update
sudo apt-get install mariadb-server

Maka akan muncul window yang meminta kita untuk membuat root password sebagai berikut.

install-mariadb

Anda bisa mengisi password untuk root, atau anda bisa langsung tekan enter jika ingin root database tidak berpassword.

3.  Setup Database

Setelah MariaDB terinstall, sekarang kita akan membuat database yang nanti akan di gunakan di WordPress.

Ketik command berikut untuk login ke MariaDB sebagai root user.

sudo mysql -u root -p

Masukkan password yang telah anda buat pada langkah sebelumnya lalu tekan enter. Jika sebelumnya anda mengosongkan password, maka cukup tekan enter saja.

sudo mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 77
Server version: 10.3.9-MariaDB-1:10.3.9+maria~bionic-log mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]>

Tampilan di atas menunjukkan jika saya telah berhasil login ke MariaDB.

Selanjutnya, buat database dengan command berikut ini.


CREATE USER username@localhost IDENTIFIED BY 'password';

CREATE DATABASE database-wordpress;

GRANT ALL PRIVILEGES ON database-wordpress.* TO username@localhost IDENTIFIED BY 'password';

FLUSH PRIVILEGES;

quit;
 

Dimana :

  • username : merupakan nama user untuk mengakses database
  • password : merupakan password yang digunakan untuk mengakses database
  • database-wordpress : merupakan nama database yang akan di gunakan oleh wordpress

Sebagai contoh, saya akan menggunakan omgebe sebagai username, Ka177b1n9Gaul sebagai password, dan omgoblogdb sebagai nama database, yang bisa anda lihat sebagai berikut.

sudo mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 70
Server version: 10.3.9-MariaDB-1:10.3.9+maria~bionic-log mariadb.org binary dist

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]> CREATE USER omgebe@localhost IDENTIFIED BY 'Ka177b1n9Gaul';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> CREATE DATABASE omgoblogdb;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON omgoblogdb.* TO omgebe@localhost IDENTIFIED BY 'Ka177b1n9Gaul';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> quit;
Bye
 

4.  Amankan Konfigurasi Default MariaDB

MariaDB memiliki beberapa konfigurasi default yang rentan untuk di hack.

Oleh sebab itu kita perlu mengamankan MariaDB dengan command berikut ini.

sudo mysql_secure_installation

Setelah itu anda akan di minta untuk memasukkan password root.

sudo mysql_secure_installation

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): _

Masukkan password anda kemudian tekan enter untuk melanjutkan.


Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] _ 

Berikutnya akan ada pertanyaan apakah anda ingin mengganti password atau tidak. Karena saya rasa password saya sudah cukup kuat, maka saya memasukkan n sebagai jawaban kalau saya tidak ingin mengganti password.


Change the root password? [Y/n] n
 ... Success!


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] _ 

Pertanyaan berikutnya mengenai apakah anda bersedia anonymous user dihapus. Sudah pasti saya akan jawab karena kalau tidak maka siapapun bisa login ke database web menggunakan anonymous user ini.


Remove anonymous users? [Y/n] Y
 ... Success!

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] _ 

Pertanyaan berikutnya yaitu apakah anda mau untuk tidak mengijinkan login secara remote menggunakan user root, disini saya jawab Y.


Disallow root login remotely? [Y/n] Y
 ... Success!

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] _ 

Pertanyaan selanjutnya, apakah anda mau test database (database sample) beserta aksesnya ke database tersebut di hapus. Saya juga jawab Y.


Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] _ 

Pertanyaan terakhir, apakah privilege table di load sekarang atau nanti. Karena saya ingin semua perubahan dan konfigurasi database yang sudah saya lakukan bisa segera di terapkan, maka saya jawab Y.


Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Setelah proses tanya jawab di atas selesai, maka instalasi MariaDB anda pun sudah lebih aman dan siap untuk di gunakan.

STEP 4 – KONFIGURASI NGINX

Dari berbagai trial and error yang pernah saya lakukan, konfigurasi di bawah ini merupakan best practices bagi saya saat ini.

Sehingga tidak menutup kemungkinan artikel ini akan selalu saya update jika kemudian hari ada peningkatan dari apa yang saya lakukan.

Dasar dari konfigurasi saya ini berasal dari dokumentasi Nginx serta dokumentasi WordPress yang berkali – kali saya mix and match serta trial and error.

Sorry guys, it would be way too long, but it’s for my own notes too …

1.  Persiapan

Sebelum melakukan konfigurasi, kita perlu mendapatkan beberapa data terlebih dahulu.

Pertama kita perlu data cpu core yang di miliki oleh server kita. Untuk mengetahui cpu core server silahkan ketik command berikut di shell anda.

grep processor /proc/cpuinfo | wc -l

Data selanjutnya yang kita perlukan adalah jumlah koneksi simultan yang bisa di layani oleh Nginx. Untuk itu kita lihat berapa jumlah maksimal proses simultan yang bisa di lakukan oleh server kita menggunakan command berikut.

ulimit -n

Maka hasil di atas bisa kita lihat sebagai berikut.

grep processor /proc/cpuinfo | wc -l
1
ulimit -n
1024

Dari data di atas kita bisa mengetahui jumlah cpu core server hanya 1 dan limit proses simultan server sebanyak 1024.

Karena resource server yang saya miliki memang minim a.k.a terbatas, maka angka tersebut sudah cukup make sense bagi saya.

Namun jika anda memiliki resource yang besar, anda bisa meningkatkan proses simultan server  jika angka yang di hasilkan kurang memuaskan.

Berikutnya saya juga akan mempersiapkan folder public sebagai tempat untuk menaruh file – file yang berkaitan dengan website agar saya lebih mudah dalam melakukan maintenance.

Jika anda pernah menggunakan Shared Hosting anda pasti tidak asing dengan yang namanya folder public_html.

Jadi secara garis besar fungsi dari folder ini kira – kira seperti itu.

sudo mkdir /var/omgoblog.com

Lalu saya perlu merubah ownership dari folder tersebut agar bisa di akses oleh Nginx.

sudo chown omgoblog:omgoblog /var/omgoblog.com

a.  Folder Konfigurasi

Perlu di pahami sebelumnya, jika konfigurasi server block Nginx yang di install dari repository Ubuntu atau Debian memiliki lokasi yang berbeda dengan Nginx yang di install dari repository Nginx.

File konfigurasi server block Nginx yang di install dari repository Ubuntu atau Debian biasanya terletak di folder sites-available dan di symlink ke folder sites-enabled.

Sedangkan file konfigurasi server block Nginx yang di install dari repository Nginx terletak di folder conf.d.

Karena saya menginstall dari repository Nginx, maka saya akan menggunakan folder conf.d ini.

Anda bisa saja men-setting ulang dengan menggunakan folder sites-available dan sites-enabled jika anda memang lebih nyaman dengan folder tersebut.

Tapi bagi saya sama saja, hanya berbeda lokasi penempatannya.

Lalu untuk konfigurasi lain seperti fastcgi params, mime type, gzip, dan lain sebagainya akan saya kelompokkan dalam satu folder.

Hal ini saya lakukan untuk tujuan kemudahan memaintain file – file konfigurasi tersebut.

Maka dari itu saya akan membuat satu folder dengan nama global sebagai tempat penampungan file – file tersebut.

sudo mkdir /etc/nginx/global

b.  Folder Log

Supaya tidak berserakan dan repot, maka file – file log Nginx akan saya kumpulkan di folder public yang telah dibuat di atas.

Untuk itu saya membuat folder khusus untuk file – file log Nginx sebagai berikut.

mkdir /var/omgoblog.com/log

FYI : karena sebelumnya kita telah merubah ownership folder omgoblog.com, maka kita tidak perlu menggunakan command sudo lagi.

Selanjutnya kita siapkan file – file log yang dibutuhkan.

touch /var/omgoblog.com/log/access.log /var/omgoblog.com/log/error.log

Pada command di atas anda bisa lihat kalau saya membuat 2 file log yang di butuhkan oleh Nginx, yaitu file access.log dan file error.log.

c.  Folder Cache

Berikutnya kita akan membuat folder cache sebagai tempat Nginx menyimpan dan mengambil file – file cache dari fastCGI.

mkdir /var/omgoblog.com/fcgi-cache

d.  Folder WordPress

Dan terakhir kita siapkan folder untuk WordPress.

mkdir /var/omgoblog.com/wordpress

Setelah itu kita ubah permission dari folder tersebut.

chmod 755 /var/omgoblog.com/wordpress

2.  Konfigurasi File nginx.conf

Buka file nginx.conf dengan command berikut.

sudo nano /etc/nginx/nginx.conf

File nginx.conf secara default pada server saya terlihat sebagai berikut.


user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  512;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}
 

Selanjutnya konfigurasi di atas akan saya customize dan rearrange dengan tatanan berikut ini.

a.  Main Context

Pertama saya akan  merubah user menyesuaikan dengan user di server. Jadi user saya ubah dari nginx menjadi omgoblog.

Worker processess merupakan jumlah worker yang digunakan oleh Nginx untuk menangani proses – proses yang terjadi.

Supaya berjalan optimal dan server tidak overload, saya menyesuaikan worker processess ini dengan jumlah cpu core dari server.

Sebelumnya kita sudah mengecek jumlah cpu core, dan anda bisa lihat di atas kalau jumlah cpu core saya hanya 1, jadi worker processess ini saya isi dengan nominal 1.

b.  Events Blocks

Selanjutnya pada bagian worker connections, yang mana mengindikasikan jumlah maksimal koneksi simultan yang akan di handle oleh tiap worker Nginx.

Secara default, Nginx hanya menerapkan maksimal 512 koneksi simultan yang di handle oleh tiap worker yang di yakini merupakan nominal paling aman bagi server secara general.

Bagi server dengan resource rendah dan terbatas angka tersebut sudah cukup, tapi seringnya nominal sebesar 512 membuat Nginx underperform karena nominal tersebut jauh lebih rendah daripada kemampuan server.

Oleh sebab itu saya akan menyesuaikan worker connections dengan resource dari server yang saya miliki.

Sebelumnya saya sudah mengecek hal tersebut menggunakan command ulimit yang bisa anda lihat pada poin persiapan di atas.

Berdasarkan data tersebut, maka nilai default worker connections saya ubah dari 512 menjadi 1024.

Selanjutnya di bawah worker connections saya akan menambahkan directive multi-accept on; supaya Nginx menerima semua koneksi baru sekaligus daripada hanya menerima koneksi satu per satu.

c.  Konfigurasi Data Transfer

Pada konfigurasi ini dan beberapa poin selanjutnya kita akan berada pada http block, dan saya kelompokkan agar kedepannya konfigurasi ini mudah untuk di tweaking.

Untuk konfigurasi data transfer, saya akan menghilangkan hashtag pada directive tcp_nopush on; dan menambahkan directive tcp_nodelay on; untuk mengoptimalkan pengiriman paket data ke client.

Karena berdasarkan artikel yang di tulis oleh Fred de Villamil menyatakan bahwa trio sendfile on;tcp_nopush on;, dan tcp_nodelay on; bisa meningkatkan kecepatan pengiriman paket data ke browser pengunjung.

d.  Konfigurasi Max. File Upload

Secara default, Nginx menerapkan maksimal ukuran file yang bisa kita upload hanya sebesar 1 MB.

Tentu saja nominal tersebut terasa kurang untuk saya pribadi.

Mengingat ada beberapa gambar saya yang berukuran > 2 MB, belum lagi jika saya akan memasukkan video, dan sebagainya.

Karena itu saya akan merubah nilai tersebut dengan menambahkan directive client_max_body_size 8m yang mengindikasikan maksimal ukuran file yang bisa saya upload di WordPress media library nantinya maksimal berukuran 8MB.


NOTE :  Size yang anda input harus sama dengan yang anda definisikan di upload_max_filesize pada konfigurasi PHP di atas.


e.  Konfigurasi Timeout

Mengingat resource server saya yang terbatas, maka saya juga perlu untuk melakukan tweaking lebih lanjut terhadap konfigurasi timeout, yang mana konfigurasi default saya rasa terlalu lama.

Hal ini saya lakukan untuk mengoptimalkan resource server yang tersedia agar bisa menangani koneksi lainnya.

Kalau resource server anda besar sih tidak masalah, malah akan lebih menguntungkan.

Pada konfigurasi ini, saya akan menambahkan directive client_body_timeout , client_header_timeout, dan send_timeout dengan nominal sebesar 20.

Hal ini saya lakukan untuk merubah konfigurasi client_body_timeout , client_header_timeout, dan send_timeout yang secara default sebesar 60 detik menjadi 20 detik.

Selanjutnya saya akan ubah nilai default directive keepalive_timeout 65; menjadi keepalive_timeout 17; supaya koneksi idle tidak terlalu lama di hold dan resource bisa di alokasikan untuk koneksi lainnya.

f.  Konfigurasi Server Token

Untuk keamanan, saya tambahkan directive server_tokens off; supaya versi Nginx tidak muncul di error page dan header.

g.  MIME Types

Berikutnya saya pindahkan file mime.types ke folder global.

sudo mv /etc/nginx/mime.types /etc/nginx/global/

Sehingga pointing default di file nginx.conf perlu saya ubah dari /etc/nginx/mime.types; menjadi /etc/nginx/global/mime.types;.

h.  Logging

Untuk logging saya juga mengubah pointing directive access_log dan error_log menuju file log yang telah saya buat sebelumnya.

Dimana  access_log pointing ke /var/omgoblog.com/log/access.log.

Dan error_log pointing ke /var/omgoblog.com/log/error.log.

i.  Konfigurasi Upstream

Berikutnya kita akan mengkonfigurasi upstream sebagai koneksi antara Nginx dan PHP.

Pertama kita harus mengetahui listen directive dari PHP – FPM pool.

sudo nano /etc/php/7.3/fpm/pool.d/www.conf

Setelah file www.conf terbuka, tekan ctrl + w lalu ketik listen = dan enter.

Maka akan di tampilkan directive listen sebagai berikut.


; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 addre$
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 addre$
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /run/php/php7.3-fpm.sock
 

Dari data di atas kita bisa lihat directive listen ada di /run/php/php7.3-fpm.sock.

Catat dan exit dari nano dengan menekan ctrl + x.

Setelah itu, masukkan nilai tersebut ke dalam directive upstream pada block http.


upstream php {
    server unix:/run/php/php7.3-fpm.sock;
}
 

j.  Gzip

Untuk konfigurasi gzip juga akan saya pisahkan dalam file gzip.conf di folder global, dengan konfigurasi pada poin selanjutnya.

k.  Virtual Server

Ini merupakan pointing konfigurasi spesifik dari virtual server web kita nantinya.

Saya akan membuat file kosong terlebih dahulu sebagai referensi pointing di block http ini.

sudo touch /etc/nginx/conf.d/omgoblog.conf

Kemudian pada file nginx.conf saya lakukan pointing sebagai berikut.


include /etc/nginx/conf.d/omgoblog.conf;

l.  Compile Konfigurasi nginx.conf

Dari semua konfigurasi di atas, maka konfigurasi file nginx.conf selengkapnya bisa di lihat sebagai berikut.

user  omgoblog;
worker_processes  1;

pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
	multi_accept on;
}


http {
    
	# Data Transfer
	sendfile				on;
	tcp_nopush				on;
	tcp_nodelay				on;
	
	# Max Upload
	client_max_body_size 8m;
	
	# Timeout
	client_body_timeout 20;
	client_header_timeout 20;
	keepalive_timeout 17;
	send_timeout 20;
	
	# Nginx version token
	server_tokens			off;
	
	# MIME Type
	include       /etc/nginx/global/mime.types;
    default_type  application/octet-stream;

    # Logging
	log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log main;
	error_log  /var/log/nginx/error.log warn;
	
	# Upstream for PHP
	upstream php {
        server unix:/run/php/php7.3-fpm.sock;
	}

    # Gzip
	include /etc/nginx/global/gzip.conf
	
    # Virtual Server
	include /etc/nginx/conf.d/omgoblog.conf;
}

Setelah selesai, jangan lupa untuk melakukan save file dengan ctrl+x → Y → Enter.

3.  Konfigurasi gzip.conf

Sebelum mengkonfigurasi, saya akan membuat file gzip.conf terlebih dahulu.

sudo touch /etc/nginx/global/gzip.conf

Setelah itu, buka file tersebut dengan mengetikkan

sudo nano /etc/nginx/global/gzip.conf

Anda bisa lihat jika file tersebut masih kosong, oleh karena itu masukkan code berikut sebagai konfigurasi directive.

gzip on;

gzip_static  on;

gzip_disable "msie6";

gzip_vary on;

gzip_proxied any;

gzip_comp_level 5;

gzip_min_length 256;

gzip_types
	application/atom+xml
	application/javascript
	application/json
	application/ld+json
	application/manifest+json
	application/rss+xml
	application/vnd.geo+json
	application/vnd.ms-fontobject
	application/x-font-ttf
	application/x-web-app-manifest+json
	application/xhtml+xml
	application/xml
	font/opentype
	image/bmp
	image/svg+xml
	image/x-icon
	text/cache-manifest
	text/css
	text/plain
	text/vcard
	text/vnd.rim.location.xloc
	text/vtt
	text/x-component
	text/x-cross-domain-policy;

Detail dari directive di atas secara lengkap dapat anda lihat pada halaman dokumentasi gzip Nginx.

Namun secara singkat directive di atas bisa anda perhatikan sebagai berikut.

gzip on untuk mengaktifkan kompresi menggunakan gzip.

gzip_static mengaktifkan delivery file statis yang telah di kompresi gzip sebelumnya.

gzip_disable "msie6" merupakan directive untuk menonaktifkan gzip jika terdapat request dari IE 6.

gzip_vary on mengaktifkan header “Vary: Accept-Encoding” agar versi kompresi dan reguler di cache oleh proxy, sehingga jika ada request dari browser yang tidak support gzip, maka hasil yang di tampilkan tidak berantakan.

gzip_proxied any mengaktifkan kompresi terhadap request yang berasal dari proxy.

gzip_comp_level merupakan level kompresi gzip dengan range 1 – 9. Semakin tinggi maka hasil kompresi semakin baik, namun resource server yang digunakan semakin besar. Karena itu kompresi dengan level 5 secara konservatif menghasilkan kesetimbangan antara hasil kompresi dan resource yang di gunakan.

gzip_min_length 256 mengindikasikan supaya file dengan ukuran di bawah 256 bytes tidak perlu di kompresi karena hasilnya tidak signifikan.

gzip_types merupakan tipe – tipe file yang akan di kompres oleh gzip. Pada list di atas saya tidak memasukkan file jpg, png, maupun webp, karena file tersebut merupakan file binary yang memerlukan kompresi spesifik.

4.  FastCGI Params

Untuk FastCGI Params saya menggunakan konfigurasi standar dari Nginx sebagai berikut.


fastcgi_param   QUERY_STRING            $query_string;
fastcgi_param   REQUEST_METHOD          $request_method;
fastcgi_param   CONTENT_TYPE            $content_type;
fastcgi_param   CONTENT_LENGTH          $content_length;

fastcgi_param   SCRIPT_FILENAME         $document_root$fastcgi_script_name;
fastcgi_param   SCRIPT_NAME             $fastcgi_script_name;
fastcgi_param   PATH_INFO               $fastcgi_path_info;
fastcgi_param   PATH_TRANSLATED         $document_root$fastcgi_path_info;
fastcgi_param   REQUEST_URI             $request_uri;
fastcgi_param   DOCUMENT_URI            $document_uri;
fastcgi_param   DOCUMENT_ROOT           $document_root;
fastcgi_param   SERVER_PROTOCOL         $server_protocol;

fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
fastcgi_param   SERVER_SOFTWARE         nginx/$nginx_version;

fastcgi_param   REMOTE_ADDR             $remote_addr;
fastcgi_param   REMOTE_PORT             $remote_port;
fastcgi_param   SERVER_ADDR             $server_addr;
fastcgi_param   SERVER_PORT             $server_port;
fastcgi_param   SERVER_NAME             $server_name;

fastcgi_param   HTTPS                   $https;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS         200;
 

5.  WordPress Restrictions

Untuk mengamankan file – file yang ada di dalam WordPress, maka kita perlu menerapkan beberapa restriction.

Saya akan membuat file konfigurasi terlebih dahulu dengan command sebagai berikut.

sudo touch /etc/nginx/global/wp-restrictions.conf

Setelah itu, buka file tersebut dengan mengetikkan

sudo nano /etc/nginx/global/wp-restrictions.conf

Berdasarkan konfigurasi dari global restrictions file WordPress, maka saya akan menginput konfigurasi sebagai berikut.


location = /favicon.ico {
	log_not_found off;
	access_log off;
}

location = /robots.txt {
	allow all;
	log_not_found off;
	access_log off;
}

# Deny akses ke file - file hidden
location ~ /\. {
	deny all;
}

# Deny akses ke file PHP di folder upload
location ~ ^/wp-content/uploads/.*\.php$ {
	deny all;
}
 

6.  Static Files

Saya juga akan menyendirikan file konfigurasi untuk static files. Oleh sebab itu, kita buat lagi file baru di folder global sebagai berikut.

sudo touch /etc/nginx/global/static.conf

Setelah itu, buka file tersebut dengan mengetikkan

sudo nano /etc/nginx/global/static.conf

Lalu masukkan konfigurasi berikut ini.


# File berikut untuk tidak di cache, agar file selalu fresh.
location ~* \.(?:manifest|appcache|html?|xml|json)$ {
	add_header Cache-Control "max-age=0";
}

# Cache RSS and Atom feeds.
location ~* \.(?:rss|atom)$ {
	add_header Cache-Control "max-age=3600";
}

# Caches images, icons, video, audio, dan lain sebagainya.
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|mp4|ogg|ogv|webm|htc)$ {
	add_header Cache-Control "max-age=31536000";
	access_log off;
}

# Cache svgz files, namun tanpa kompresi.
location ~* \.svgz$ {
	add_header Cache-Control "max-age=31536000";
	access_log off;
	gzip off;
}

# Cache CSS and JavaScript.
location ~* \.(?:css|js)$ {
	add_header Cache-Control "max-age=31536000";
	access_log off;
}

# Cache WebFonts.
location ~* \.(?:ttf|ttc|otf|eot|woff|woff2)$ {
	add_header Cache-Control "max-age=31536000";
	access_log off;
}

7.  Konfigurasi Virtual Server

Setelah file – file konfigurasi pendukung sudah kita siapkan, sekarang kita akan mengkonfigurasi virtual server.

Semua konfigurasi virtual server tentunya akan berada di block server, yang sebelumnya telah kita attach dengan block http pada file nginx.conf.

Disini saya juga melakukan pengelompokan konfigurasi agar mudah di pahami dan tentunya lebih mudah untuk di maintain.

a.  Ports dan Server Name

Untuk konfigurasi ports dan server name bisa anda lihat sebagai berikut.

listen 80;
listen [::]:80;
server_name omgoblog.com;

Pada bagian ini, saya menginstruksikan Nginx untuk listen ke port 80 (http) karena saya belum mengaplikasikan SSL di contoh kali ini.

Pada baris pertama merupakan instruksi agar Nginx listen port 80 pada protokol ipv4, sedangkan pada baris kedua menginstruksikan listen ke protokol ipv6.

Lalu pada baris ketiga merupakan nama server, sehingga jika ada request ke omgoblog.com maka konfigurasi pada block inilah yang akan di proses.

b.  Document Root

Disini saya akan memberitahu Nginx dimana root file – file web saya berada sebagai berikut.


root /var/omgoblog.com/wordpress;
 

Melihat konfigurasi di atas, saya menginformasikan ke Nginx jika file – file omgoblog.com ada di /var/omgoblog.com/wordpress.

c.  File Index

Pada directive ini kita juga perlu untuk menginformasikan file yang menjadi index dari web kita dengan cara berikut.


index index.php;
 

Karena kita akan menginstall WordPress, maka file yang menjadi index adalah file index.php.

d. Security Header

Untuk menghindari halaman – halaman web kita di render oleh website lain menggunakan iFrame misalnya, maka kita perlu menambahkan header berikut ini.


add_header X-Frame-Options "SAMEORIGIN" always;
 

Selanjutnya untuk mencegah MIME sniffing, kita perlu mendefinisikan header sebagai berikut.


add_header X-Content-Type-Options "nosniff" always;
 

Berikutnya kita perlu mencegah dan memfiltrasi cross site scripting dengan menambahkan header berikut.


add_header X-Xss-Protection "1; mode=block" always;
 

e.  Location Blocks

Bagian selanjutnya merupakan block location yang mana digunakan oleh Nginx untuk merespon request yang masuk.

Mengenai location block ini tentu akan sangat panjang jika di jelaskan secara rinci.

Secara umum, ketika terjadi request ke web Nginx akan mencari file dengan pattern {document root} {location} dengan prioritas dari yang spesifik hingga general.

Sebagai contoh, ketika terjadi request omgoblog.com/nginx/wordpress-indonesia.jpg misalnya.

Maka Nginx akan mencari dengan menerjemahkan alamat di atas menjadi {/var/omgoblog.com/wordpress} {/nginx/wordpress-indonesia.jpg}.

Dimana Nginx akan langsung menuju document root kita, dalam hal ini /var/omgoblog.com/wordpress.

Selanjutnya Nginx akan mencari apakah ada block location /nginx/ {} di file konfigurasi, jika tidak ada maka Nginx akan menggunakan block location / {}.

Menggunakan konfigurasi berikut ini,


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

Maka ada 3 skenario yang akan di jalankan oleh Nginx sebagai berikut.

  • Nginx akan mencoba mencari apakah ada file wordpress-indonesia.jpg dalam folder nginx di /var/omgoblog.com/wordpress. Kalau ada, Nginx akan langsung merespon request tersebut.
  • Jika tidak ada, maka Nginx akan mencari apakah request tersebut sebuah folder? maka Nginx akan mencari folder [wordpress-indonesia.jpg] di dalam folder nginx yang ada di /var/omgoblog.com/wordpress.
  • Kalau tetap tidak ada, maka skenario terakhir yang di jalankan. Nginx akan mengecek ke file index.php di /var/omgoblog.com/wordpress yang pasti akan terdefinisi, minimal page 404.

f.  Redirection

Karena google menganggap jika www.domain-anda.com dan domain-anda.com adalah dua objek yang berbeda, maka kita perlu untuk memilih apakah menggunakan www atau non-www.

Saya pribadi lebih senang menggunakan domain non-www. 

Selain karena preferensi pribadi, juga karena saya jarang menemukan orang yang menggunakan www ketika mengetik alamat domain di browser.

Oleh sebab itu, agar alur routing domain lebih pendek, maka saya tidak menggunakan www.

Saya akan membuat redirection agar setiap pengunjung terfokus dengan alamat omgoblog.com sebagai berikut.


server {
	listen 80;
	listen [::]:80;
	server_name www.omgoblog.com;

	return 301 $scheme://omgoblog.com$request_uri;
}
 

g.  Compile Konfigurasi Server Block

Dari berbagai potongan konfigurasi di atas, maka konfigurasi server block secara lengkap pada file omgoblog.conf  bisa anda lihat sebagai berikut.

server {
	# Ports and Server Name
	listen 80;
	listen [::]:80;
	server_name omgoblog.com;

	# Document root
	root /var/omgoblog.com/wordpress;

	# File to be used as index
	index index.php;

	# Security Header
	add_header X-Frame-Options "SAMEORIGIN" always;
	add_header X-Content-Type-Options "nosniff" always;
	add_header X-Xss-Protection "1; mode=block" always;
	
	# Root Location
	location / {
		try_files $uri $uri/ /index.php?$args;
	}
	
	# Restriction
	include global/wp-restrictions.conf;
	
	# Static Files
	include global/static.conf;

	# PHP Files
	location ~ \.php$ {
		try_files $uri =404;
		include global/fastcgi-params.conf;

		fastcgi_pass   php;
	}
}

# Redirect www to non-www
server {
	listen 80;
	listen [::]:80;
	server_name www.omgoblog.com;

	return 301 $scheme://omgoblog.com$request_uri;
}

Perlu anda perhatikan, pada konfigurasi di atas terdapat 2 server block!

Dimana yang satu sebagai konfigurasi omgoblog.com dan yang satunya lagi sebagai konfigurasi www.omgoblog.com (redirection).

Setelah itu jangan lupa untuk menyimpan konfigurasi anda.

8.  Tes Konfigurasi Dan Restart

Setelah selesai melakukan konfigurasi, selanjutnya kita akan cek apakah konfigurasi yang kita lakukan sukses atau tidak.

Ketikkan command sudo nginx -t di shell linux, dan jika berhasil maka tampilan akan seperti berikut ini.

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Setelah konfigurasi oke, maka jangan lupa untuk melakukan restart service.


sudo service nginx restart
sudo service php7.3-fpm restart

STEP 5 – WORDPRESS INSTALLATION

Untuk menginstall WordPress ada dua cara yang bisa anda gunakan.

1.  Install WordPress Menggunakan WP – CLI

a.  Install WP – CLI

Fungsi utama dari WP – CLI adalah untuk memanage WordPress dari backend environment, seperti update, manage plugin, manage themes, cache management, dan berbagai macam fungsi lainnya.

Untuk menginstall WP – CLI, saya akan menuju folder home terlebih dahulu

cd ~

Lalu download WP – CLI dengan command berikut.

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

Setelah proses downloading selesai, maka WP – CLI siap untuk di gunakan.

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 5241k  100 5241k    0     0  49.2M      0 --:--:-- --:--:-- --:--:-- 48.7M

Wait, wait, Kan belum di install? 

Bisa di bilang WP – CLI ini bersifat portable, sehingga jika wp-cli.phar ada di sistem kita, maka WP – CLI siap untuk di gunakan.

Kita coba buktikan dengan mengetikkan dari folder home command php wp-cli.phar --info dan hasilnya sebagai berikut.

 php wp-cli.phar --info
OS:     Linux 4.15.0 #19-Ubuntu x86_64
Shell:  /bin/bash
PHP binary:     /usr/bin/php7.3
PHP version:    7.3.0beta2
php.ini used:   /etc/php/7.3/cli/php.ini
WP-CLI root dir:        phar://wp-cli.phar/vendor/wp-cli/wp-cli
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path:       /home/omgoblog
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 2.0.1

Supaya WP – CLI ini bisa di gunakan secara global dan tidak terbatas hanya dari folder home saja, maka run command berikut ini.

chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

Dan anda bisa coba running dengan mengetikkan command wp dari mana saja.

 wp
NAME

  wp

DESCRIPTION

  Manage WordPress through the command-line.

SYNOPSIS

  wp 

SUBCOMMANDS

  cache               Adds, removes, fetches, and flushes the WP Object Cache
                      object.
  cap                 Adds, removes, and lists capabilities of a user role.
  cli                 Review current WP-CLI info, check for updates, or see
                      defined aliases.
  comment             Creates, updates, deletes, and moderates comments.
  config              Generates and reads the wp-config.php file.
  core                Downloads, installs, updates, and manages a WordPress
                      installation.
: _

b.  Install WordPress

Setelah anda menginstall WP – CLI, sekarang saatnya kita install WordPress.

Pertama saya akan masuk ke folder wordpress yang telah di siapkan sebelumnya.


cd /var/omgoblog.com/wordpress
 

Lalu download WordPress terbaru menggunakan WP – CLI.


wp core download
 

Selanjutnya adalah membuat file wp-config.php menggunakan WP – CLI.


wp core config --dbname=omgoblogdb --dbuser=omgebe --dbpass=Ka177b1n9Gaul
 

Dimana --dbname merupakan nama database MariaDB, --dbuser adalah username MariaDB, dan --dbpass adalah password MariaDB yang telah di buat sebelumnya.

Finally, kita gunakan command berikut untuk install WordPress menggunakan WP – CLI.

wp core install --url=http://omgoblog.com --title='omgoblog.com' --admin_user=omgebe --admin_email=omgebe@omgoblog.com --admin_password=KucingGaul

Dengan parameter …

--url sebagai alamat domain,

… --title adalah nama atau slogan dari web,

… --admin_user adalah username yang akan kita gunakan untuk login ke WordPress,

… --admin_email adalah alamat email kita,

…  dan --admin_password adalah password yang akan digunakan untuk login ke WordPress.

Untuk tiap step yang sukses, kurang lebih akan tampil seperti berikut ini.

wp core download
Downloading WordPress 4.9.8 (en_US)...
md5 hash verified: c4e7d68b5c382fbbaf547f2ab2dc198
Success: WordPress downloaded.
wp core config --dbname=omgoblogdb --dbuser=omgebe --dbpass=Ka177b1n9Gaul
Success: Generated 'wp-config.php' file.
wp core install --url=http://omgoblog.com --title='omgoblog.com' --admin_user=omgebe --admin_email=omgebe@omgoblog.com --admin_password=KucingGaul
Success: WordPress installed successfully.

Terlihat jika WordPress berhasil di install menggunakan WP – CLI.

Sekarang saya coba untuk mengakses domain web, dan jika berhasil maka web kita telah tampil seperti berikut ini.

install-wordpress-nginx-success

2.  Install WordPress Menggunakan Browser

a.  WordPress Source

Sebelum anda mendownload WordPress, pastikan anda berada di folder wordpress yang telah di siapkan sebelumnya.

cd /var/omgoblog.com/wordpress

Selanjutnya download dan ekstrak WordPress versi terbaru.

wget http://wordpress.org/latest.tar.gz
tar --strip-components=1 -xvf latest.tar.gz

Set ownership dari file yang telah di ekstraksi.

sudo chown -R omgoblog:omgoblog /var/omgoblog.com/wordpress

Setelah itu hapus file latest.tar.gz.

rm latest.tar.gz

Dan WordPress pun siap untuk di install.

b.  Install WordPress

Untuk memulai instalasi WordPress, maka buka browser dan ketikkan alamat domain anda.

Setelah halaman instalasi wordpress muncul, isi dan ikuti step – step yang ada yang saya yakin anda sudah familiar dengan halaman tersebut.

Jika anda belum familiar, anda bisa melihat artikel sebelumnya dimana terdapat bagian tentang cara menginstall WordPress menggunakan browser.

WHAT’S NEXT

Congrats sob, wordpress telah landed bersama Nginx di server anda.

Lalu apakah wordpress sudah bisa di pakai?

Sampai tahap ini anda sudah bisa menggunakan wordpress, namun masih banyak hal yang bisa anda lakukan untuk mengoptimalkan, mengamankan, dan meningkatkan performanya.

Lah, sudah sepanjang ini masih ada lagi? 

Kalau anda sudah puas dengan hasil yang ada tidak masalah, itu pilihan.

Tapi secara pribadi saya menganjurkan untuk melakukan hal – hal berikut ini.

Cache

Mungkin jika konten anda belum banyak, anda tidak akan merasakan efek signifikan dari cache. Tapi saya yakin anda sudah tau seberapa penting peranan cache untuk web kita.

Untuk mengimplementasikan cache anda bisa menggunakan plugin seperti WP Rocket, W3 Total Cache, WP Super Cache, dan lain sebagainya.

Anda juga bisa mengimplementasikan cache menggunakan fastCGI yang merupakan module bawaan Nginx.

Terlepas dari apakah anda akan menggunakan plugin WordPress atau fastCGI, anda tetap harus melakukan konfigurasi Nginx supaya cache bisa dilakukan.

Omgoblog How-To : Ongoing Process.

HTTPS dan HTTP/2

Dengan menggunakan HTTPS maka traffic transaksi data antara server dan client terenkripsi sehingga jalur data akan lebih aman.

Untuk mengaplikasikan HTTPS anda harus memiliki sertifikat SSL sebagai digital sign yang berfungsi untuk mengenkripsi data anda.

SSL certificate mudah untuk anda dapatkan dan tersedia mulai dari yang gratisan hingga berbayar.

Jika anda sudah mengaplikasikan HTTPS, selanjutnya anda bisa melirik HTTP/2 yang bisa meningkatkan kecepatan transfer data web anda.

Omgoblog How-To Let’s Encrypt SSL Dan Konfigurasi HTTPS + HTTP/2

Security

Untuk meningkatkan keamanan web WordPress anda ada banyak cara yang bisa di lakukan.

Beberapa yang paling utama diantaranya adalah mendefinisikan header, menggunakan WordPress security plugin, mod security, Naxsi, dan lain sebagainya.

Cara paling mudah adalah menggunakan WordPress plugin,  seperti sucuri, wordfence, dan lain sebagainya, namun untuk merasakan proteksi lengkap tentu anda harus menggunakan versi berbayarnya.

Untuk opsi yang lebih powerfull namun gratis, anda bisa menggunakan server based firewall, seperti Ufw, mod security, Naxsi, Ironbee, dan lain sebagainya.

Omgoblog How-To : Masih berbaris dalam antrian konsep.

Email

Supaya wordpress bisa menghandle Email maka anda perlu melakukan konfigurasi lebih lanjut.

Cara termudah adalah menggunakan plugin WordPress dan anda bisa langsung mengintegrasikan dengan akun Gmail ataupun Yahoo anda.

Tapi jika anda ingin menggunakan domain pribadi seperti admin@domain.com maka anda harus memiliki mail server untuk memprosesnya.

Cara termudah untuk menggunakan alamat dengan domain sendiri adalah mengintegrasikan zoho atau email redirect seperti mailgun misalnya.

Omgoblog How-To : Masih berbaris dalam antrian konsep.

Optional

Berikut ini adalah hal lain yang bersifat sekunder dan optional yang bisa anda lakukan untuk melakukan tweaking Nginx.

CONCLUSSION

Sampai tahap ini anda sudah bisa menginstall WordPress dan menggunakannya walaupun masih menggunakan HTTP.

Jika anda tidak mau repot tapi tetap ingin menggunakan WordPress dengan web server Nginx, ada cara yang lebih mudah dan cukup lengkap yaitu menggunakan server pilot atau easyengine.

Artikel ini akan selalu saya update jika ada informasi terbaru, jadi always stay tuned yah!!

One comment

Leave a Reply

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