Installasi WordPress dengan Nginx sebagai Load Balancer
Sebelumnya saya mencoba untuk membuat web wordpress menggunakan topologi load balancer, kira-kira topologinya seperti gambar berikut.
| Name | Service | IP Address | OS Type | 
|---|---|---|---|
| LB | Nginx | 192.168.7.1 | Ubuntu 20.04 | 
| DB | MariaDB | 192.168.7.5 | Ubuntu 20.04 | 
| Web 01 | Nginx | 192.168.7.6 | Ubuntu 20.04 | 
| Web 02 | Nginx | 192.168.7.7 | Ubuntu 20.04 | 
| NFS | NFS | 192.168.7.8 | Ubuntu 20.04 | 
Silakan disimak langkah-langkah installasi-nya.
Install service yang dibutuhkan.
Install nginx pada server LB
   apt update -y
   apt install nginx -y
Install nginx, php dan nfs client pada server Web01 dan Web02.
   apt update -y
   apt install nginx -y
   apt install php php-imagick php-fpm php-mbstring php-bcmath php-xml php-mysql php-common php-gd php-json php-cli php-curl php-zip -y
   systemctl disable apache2
   apt install nfs-common -y
Install MySQL atau MariaDB pada server DB.
   apt update -y
   apt install mariadb -y
Install nfs server pada server NFS.
   apt update -y
   apt install nfs-kernel-server
Konfigurasi
Pertama kita konfigurasi dulu untuk NFS nya.
Pada server NFS, buat directory untuk meletakan file wordpress.
   mkdir data
   cd data
   wget https://wordpress.org/latest.tar.gz
   apt install unzip -y
   unzip latest.zip
   chown -R nobody:nogroup wordpress/
Setup NFS sharing dengan cara ubah file /etc/exports, dan masukan file baris konfigurasi berikut:
   /root/data/wordpress 192.168.7.6(rw,sync,no_root_squash,no_subtree_check)
   /root/data/wordpress 192.168.7.7(rw,sync,no_root_squash,no_subtree_check)
Ganti ip address diatas dengan ip address kalian
Restart service nfs server
   systemctl restart nfs-kernel-server
Kedua kita konfigurasi Web01 dan Web02
Mount nfs server pada kedua VM Web.
   mkdir -p /var/www/wordpress
   mount 192.168.7.8:/root/data/wordpress /var/www/wordpress
Cek dengan df -Th untuk melihat apakah sudah berhasil di mount dengan benar.
Masukan baris berikut pada /etc/fstab agar mounting otomatis apabila server mengalami restart.
   192.168.7.8:/root/data/wordpress /var/www/wordpress nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
Ubah owner dan permission dari docroot wordpress.
   chown -R www-data:www-data /var/www/wordpress
   cd /var/www/wordpress
   find . -type d -exec chmod 755 {} \;
   find . -type f -exec chmod 644 {} \;
Buat konfigurasi nginx pada /etc/nginx/conf.d/wordpress.conf
   vim /etc/nginx/conf.d/wordpress.conf
Masukan konfigurasi berikut dan sesuaikan.
   server {
    listen 80;
    server_name domain.com;
    root /var/www/wordpress/;
    index index.php index.html index.htm index.nginx-debian.html;
    location / {
     try_files $uri $uri/ /index.php;
    }
    location ~ ^/wp-json/ {
     rewrite ^/wp-json/(.*?)$ /?rest_route=/$1 last;
    }
    location ~* /wp-sitemap.*\.xml {
     try_files $uri $uri/ /index.php$is_args$args;
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    client_max_body_size 20M;
    location = /50x.html {
     root /usr/share/nginx/html;
    }
    location ~ \.php$ {
     fastcgi_pass unix:/run/php/php7.4-fpm.sock;
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     include fastcgi_params;
     include snippets/fastcgi-php.conf;
    }
    gzip on;
    gzip_vary on;
    gzip_min_length 1000;
    gzip_comp_level 5;
    gzip_types application/json text/css application/x-javascript application/javascript image/svg+xml;
    gzip_proxied any;
    location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
       access_log        off;
       log_not_found     off;
       expires           360d;
    }
    location ~ /\.ht {
      access_log off;
      log_not_found off;
      deny all;
    }
    access_log /var/log/nginx/wp-access.log combined;
    error_log /var/log/nginx/wp-error.log;
   }
Cek konfigurasi nginx
   root@web01:~# nginx -t
   nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
   nginx: configuration file /etc/nginx/nginx.conf test is successful
Start nginx dan php-fpm
   systemctl restart nginx
   systemctl restart php7.4-fpm
   systemctl enable nginx
   systemctl enable php7.4-fpm
Selesai untuk Web01 dan Web02
Ketiga konfigurasi Database
Masuk ke console mysql dan create database serta grant user.
   systemctl start mariadb
   mysql
   MariaDB [(none)]> create database wp_lb;
   MariaDB [(none)]> CREATE USER 'wp_user_lb'@'192.168.7.6' IDENTIFIED BY 'Password12345@@@@';
   MariaDB [(none)]> CREATE USER 'wp_user_lb'@'192.168.7.7' IDENTIFIED BY 'Password12345@@@@';
   MariaDB [(none)]> GRANT ALL ON wp_lb.* to 'wp_user_lb'@'192.168.7.6';
   MariaDB [(none)]> GRANT ALL ON wp_lb.* to 'wp_user_lb'@'192.168.7.7';
   MariaDB [(none)]> flush privileges;
   MariaDB [(none)]> quit;
Keempat konfigurasi nginx Load balancer
Buat konfigurasi /etc/nginx/conf.d/wordpress.conf.
   vim /etc/nginx/conf.d/wordpress.conf
Masukan konfigurasi berikut:
   upstream wp_backend {
     least_conn;
     server 192.168.7.6:80;
     server 192.168.7.7:80;
   }
   server {
    listen 80;
    server_name domain.com;
    location / {
     proxy_pass http://wp_backend;
     proxy_set_header X-Real-IP  $remote_addr;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_set_header Host $host;
    }
    access_log /var/log/nginx/wp-access.log combined;
    error_log /var/log/nginx/wp-error.log;
   }
Cek konfigurasi menggunakan nginx -t, jika sudah silakan start nginx.
   nginx -t
   systemctl restart nginx
Konfigurasi WordPress
Setelah semuanya selesai, silakan akses wordpress melalui browser dan konfigurasi mulai dari input database sampai konfigurasi user-nya.
Selesai..