Install WordPress dengan LEMP Stack (Linux, Nginx, MySQL, & PHP)

Membuat environment Virtual Machine dengan VirtualBox dan Vagrant

Kita belum akan menggunakan komputer server asli, melainkan kita akan menggunakan Virtual Machine. Untuk mempermudah proses menejnya, kita akan memanfaatkan Vagrant (https://www.vagrantup.com/). Jadi pastikan VirtualBox https://www.virtualbox.org/ dan Vagrant sudah terinstall pada komputer anda.

Saya akan menggunakan Virtual Machine Ubuntu 18. Jika belum ada, perintah dibawah akan mengunduhkan box ubuntu/bionic64 ke lokal komputer anda.

$ vagrant box add ubuntu/bionic64

Buatkan folder dan inisialisasi Vagrant environment dengan ubuntu/bionic64.

$ mkdir wordpress-vagrant
$ cd wordpress-vagrant
$ vagrant init ubuntu/bionic64

Proses diatas akan membuatkan satu buah file yaitu Vagrantfile. Kita akan sesuaikan sedikit file Vagrantfile nya.

Vagrant.configure("2") do |config|

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.
  config.vm.box = "ubuntu/bionic64"

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine and only allow access
  # via 127.0.0.1 to disable public access
  config.vm.network "forwarded_port", guest: 80, host: 5000, host_ip: "127.0.0.1"

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  config.vm.network "private_network", ip: "192.168.33.14"
  config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    # vb.gui = true
  
    # Customize the amount of memory on the VM:
    vb.memory = "4090"
  end
end

Pada setting diatas kita set private_network menjadi 192.168.33.14. Sehingga nanti kita bisa akses website kita pada alamat tersebut.

Jalankan Virtual Machine anda.

$ vagrant up

Masuk kedalam Virtual Machine anda.

$ vagrant ssh

Install Nginx

$ sudo apt-get update
$ sudo apt-get install nginx

Setting Firewall

Selama proses development biasanya kita memakai koneksi non https. Jadi kita perlu mengijinkan unsecure connection. Kita buka port 80.

$ sudo ufw allow 'Nginx HTTP'

Cek konfigurasi

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Kita coba koneksi http tadi dengan membuka alamat IP kita http://192.168.33.14. Jika sudah running dengan baik akan tampil Welcome to Nginx.

Install MySQL

$ sudo apt install mysql-server

Ubuntu system dimana MySQL 5.7 > berjalan, user root MySQL-nya menggunakan auth_socket. Jadi kita perlu mengganti mekanisme authentication pada user root dari auth_socket plugin dengan password (mysql_native_password). Hal ini akan mempermudah kita menggunakan user root untuk external program.

$ sudo mysql

Kemudian kita check setiap user terkait mekanisme auth method yang dipakai

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

+------------------+-------------------------------------------+-----------------------+-----------+
| 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 | *32DFAEC16BD57C7FC6B98DB435A68DCD729F6619 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Bisa kita lihat, user root masih menggunakan metode auth_socket. Kita konfigurasi ulang user root dengan menggunakaan metode password.

Untuk contoh ini kita gunakan password 12345. Tetapi disarankan sekali menggunakan password yang sangat strong.

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

Kita jalankan FLUSH PRIVILEGES untuk memperbaharui konfigurasi yang baru kita jalankan.

mysql> FLUSH PRIVILEGES;

Kita cek lagi hasilnya. Pastikan user root sudah menggunakan metode password

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

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *00A51F3F48415C7D4E8908980D443C29C69B60C9 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *32DFAEC16BD57C7FC6B98DB435A68DCD729F6619 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Bisa kita lihat, saat ini user root sudah tidak menggunakan metode auth_socket. Kemudian keluar dari mysql.

mysql> exit

Cek kembali apakah saat ini user root sudah menggunakan metode password.

$ mysql -u root -p
$ Enter password:

Selanjutnya kita persiapkan sekaligus untuk database WordPress nya. Kita buat database dengan nama kopicom

$ mysql> CREATE DATABASE kopicom;

Jika sukses akan ada database baru dengan nama kopicom.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| kopicom            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

Kemudian keluar dari mysql.

mysql> exit

Install PHP (PHP-FPM)

By default Nginx tidak terdapat native PHP proccessing seperti pada Apache. Jadi kita perlu install php-fpm (fastCGI process manager). Kita akan perintahkan Nginx untuk memproses ke php-fpm melalui file konfigurasinya nanti.

$ sudo add-apt-repository universe
$ sudo apt-get install php-fpm php-mysql

Menambahkan server blocks

Setiap satu website ada baiknya kita buatkan satu server blocks untuk di Nginx. Mirip dengan konsep virtual hosts pada Apache. Konfigurasi server blocks berada pada folder /etc/nginx/sites-available/. Kita tambahkan file konfigurasi baru kopi.com. Kita samakan file konfigurasi tersebut dengan nama domain website yang kita buat.

$ sudo nano /etc/nginx/sites-available/kopi.com

Masukan konfigurasi berikut.

server {
        listen 80;
        root /var/www/kopicom;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name kopi.com;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }
}

Simpan dan keluar dari nano atau vi. Sekarang kita aktifkan konfigurasi tadi dengan membuat symbolic link dari file konfigurasi yang barus saja kita buat dari dalam folder /etc/nginx/sites-available/ ke /etc/nginx/sites-enabled/.

$ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Kita unlink konfigurasi default dari dalam folder /etc/nginx/sites-enabled/

$ sudo unlink /etc/nginx/sites-enabled/default

Jika suatu saat kita ingin mengembalikan file konfigurasi default tadi tinggal menjalaankan perintah berikut.

$ sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/

Kita pastikan tidak ada error pada file konfigurasi tadi, dengan menjalankan perintah berikut.

$ sudo nginx -t

Jika sudah tidak ada error, kita reload Nginx.

$ sudo systemctl reload nginx

Install WordPress

Kita download dulu WordPress versi terbaru. Download pada folder yang anda inginkan.

$ sudo wget https://wordpress.org/latest.tar.gz

Kita extract file archive tersebut.

$ sudo tar -xzvf latest.tar.gz

Kemudian kita pindahkan kedalam folder /var/www

$ sudo mv wordpress/ /var/www/kopicom

Selanjutnya tambahkan file wp-config.php yang kita copy dari contoh file konfigurasi wp-config-sample.php. Kita sesuaikan pada bagian konfigurasi databasenya dengan yang sudah kita buat.

/** The name of the database for WordPress */
define( 'DB_NAME', 'kopicom' );

/** MySQL database username */
define( 'DB_USER', 'root' );

/** MySQL database password */
define( 'DB_PASSWORD', '12345' );

/** MySQL hostname */
define( 'DB_HOST', 'localhost' );

/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );

/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

Jika sudah, kita reload kembali Nginx.

$ sudo systemctl reload nginx

Cek Nginx.

$ sudo systemctl status nginx

Reload kembali halaman web kita pada alamat http://192.168.33.14. Jika semua proses diikuti dengan benar maka akan tampil halaman website yang kita buat dengan WordPress.

wuriyanto

Leave a Reply

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