Tutorial Setup Nginx, PHP 7 and MariaDB di Ubuntu 16.04

Pada kesempatan sebelumnya kita sudah mencoba beberapa tutorial VPS Non Panel dengan menggunakan beberapa Opsi yaitu sebagai berikut :
1. Cara Managed VPS Non-Panel Dengan Apache Webserver
2. Tutorial Install Apache/httpd 2.4 di Centos 6
3. Cara Managed VPS Non-Panel Dengan Nginx Webserver

Nah pada tutorial tersebut semuanya menggunakan OS Centos dan dengan menggunakan DNS server BIND. Nah pada kesempatan ini kita akan mencoba yang berbeda yaitu Setup Nginx, PHP 7 and MariaDB di Ubuntu 16.04 dengan menggunakan NSD sebagai internal DNS server. Kenapa menggunkana NSD kenapa tidak menggunakan BIND juga ?. Karena infonya NSD lebih hemat resource dibanding dengan Bind, jadi untuk menghemat resource kita menggunakan NSD.

Sebelum kita mulai, kita persiapkan dulu kebutuhan :

1. VPS : RAM 512MB, 1vCore dengan 10GB SSD
2. Operating System : Ubuntu 16.04 LTS 64.x86
3. Web server nginx, PHP7-FPM dan dengan MariaDB sebagai database server,
4. CMS menggunakan Wordpress4.6 dengan theme MesoColumn
Resoure Kosongan dengan hanya diinstall OS :

0. Step pertama :

Terlebih dahulu kita membuat user baru agar nanti jika sudah jalan tidak menggunakan user root untuk SSH
root@dummy:~# useradd dummy
root@dummy:~# passwd dummy
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@dummy:~# usermod -aG sudo dummy
root@dummy:~# nano /etc/sudoers

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
%dummy ALL=(ALL:ALL) ALL

Kemudian coba login dengan user yang baru di add tadi yaitu user dummy, jika mengalami tampilan sebagai berikut setelah login:

Silahkan lakukan step berikut ini untuk membuat direktori untuk user dummy:
root@dummy:/home# mkdir /home/dummy
root@dummy:/home# usermod --shell /bin/bash --home /home/dummy dummy
root@dummy:/home# chown -R dummy:dummy /home/dummy
root@dummy:/home# getent passwd dummy
dummy:x:1000:1000::/home/dummy:/bin/bash
root@dummy:/home#
Lalu coba login ulang sebagai user dummy

1. Update /etc/sysctl.conf

Lakukan update di file /etc/sysctl.conf dengan mengihilangkan tanda pagar (#) pada baris-baris berikut ini jika ada yang belum ada bisa dibantu tambahkan
dummy@dummy:~$ sudo nano /etc/sysctl.conf
======================================================================================
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.tcp_syncookies=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv4.conf.all.log_martians = 1
kernel.pid_max = 65536
fs.file-max = 1610356
======================================================================================
Kemudian save dengan menekan tombol kombinasi ctrl+x

Kemudian edit file  /etc/pam.d/common-session
dummy@dummy:~$ sudo nano /etc/pam.d/common-session
Tambahakan baris berikut ini :
session required pam_limits.so
Kemudian save dan jalankan
dummy@dummy:~$ sudo sysctl -p

2. Update Firewall Rules

Step selanjutnya yaitu lakukan update pada firewallnya
dummy@dummy:~$ sudo ufw allow 80/tcp
Rules updated
Rules updated (v6)
dummy@dummy:~$ sudo ufw allow 443/tcp
Rules updated
Rules updated (v6)
dummy@dummy:~$ sudo ufw allow 222/tcp
Rules updated
Rules updated (v6)
dummy@dummy:~$ sudo ufw allow 21/tcp
Rules updated
Rules updated (v6)
dummy@dummy:~$ sudo ufw allow 53/tcp
Rules updated
Rules updated (v6)
dummy@dummy:~$ sudo ufw allow 53/udp
Rules updated
Rules updated (v6)
Dan untuk melihat hasilnya bisa dengan perintah :
dummy@dummy:~$ sudo ufw show added
Added user rules (see 'ufw status' for running firewall):
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 222/tcp
ufw allow 21/tcp
ufw allow 53/tcp
ufw allow 53/udp
dummy@dummy:~$
Note : Ini hanya beberapa port saja, jika anda butuh/kustom port lain bisa dissuaikan.

Lalu config SSH Servernya dengan mengedit file /etc/ssh/sshd_config dan lakukan beberapa perubahan di bawah :
dummy@dummy:~$ sudo nano /etc/ssh/sshd_config
# What ports, IPs and protocols we listen for
Port 222 #Port default ssh 22 rubah ke 222 atau sesuai yang port anda butuhkan dan yang telah diallowed di firewall di atas tadi sebelumnya
Rubah
PermitRootLogin yes
Menjadi
PermitRootLogin no
Ini tujuanya untuk mendisabled user root login dari SSH
Dan kemudian save dengan menekan tombol kombinasi ctrl+x,

3. Update ubuntu

Lakukan update pada mesin ubuntunya agar nanti bisa melakukan beberapa installasi aplikasi yang dibutuhkan
dummy@dummy:~$ sudo apt-get -y update && apt-get -y upgrade
Dan jika mengalami error ini ketika proses upgrade/update maka bisa melakukannya sebagai user root terlebih dahulu dengan mengetik : su root di bagian console linuxnya

4. Add repositories

Selanjutnya tambahkan beberapa repo yang akan dibutuhkan
dummy@dummy:~$ sudo add-apt-repository -y ppa:ondrej/php
dummy@dummy:~$ sudo add-apt-repository -y ppa:nginx/stable
dummy@dummy:~$ sudo add-apt-repository -y ppa:chris-lea/redis-server
dummy@dummy:~$ sudo apt-get install software-properties-common
dummy@dummy:~$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
dummy@dummy:~$ sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mariadb.biz.net.id/repo/10.1/ubuntu xenial main'
Dan kemudian lakukan Update repositories-nya
dummy@dummy:~$ sudo apt-get -y clean && apt-get -y update
Dan jika mengalami error terkait permision ketika proses update ini maka bisa melakukannya sebagai user root terlebih dahulu dengan mengetik : su root di bagian console linuxnya

5. Install Paket

Selanjutnya lakukan install beberapa paket yang dibutuhkan
dummy@dummy:~$ sudo apt-get -y install wget rsync man-db unzip bzip2 zip openssl cron git ntp smartmontools screen zsh python-software-properties software-properties-common apache2-utils ntp

6. Kemudian setup untuk timezonenya

Selanjutnya set timezome servernya dan pilih Asia/Jakarta
dummy@dummy:~$ sudo dpkg-reconfigure tzdata

Current default time zone: 'Asia/Jakarta'
Local time is now: Sun Aug 21 10:22:15 WIB 2016.
Universal Time is now: Sun Aug 21 03:22:15 UTC 2016.

dummy@dummy:~$

7. Install Web Server dan PHP7

Step selanjutnya yaitu menginstall Web Server dan PHP7 dan module-module yang dibutuhkan lainnya
dummy@dummy:~$ sudo apt-get -y install nginx mariadb-server mariadb-client redis-server supervisor memcached
Pada proses ini nanti akan ditanyakan password untuk database MariaDB anda, jadi silahkan anda isikan password untuk database user root nya dan diusahakan jangan sampai lupa.
Kemudian install module PHPnya
dummy@dummy:~$ sudo apt-get -y install php7.0 php7.0-common php7.0-curl php7.0-fpm php7.0-gd php7.0-json php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-sqlite3 php7.0-cli php7.0-dev php-pear

Dan ada beberapa extensi module yang belum tersedia untuk PHP7 oleh sebab itu kita harus install/compile manual
Redis Extension :
dummy@dummy:~$ sudo pecl channel-update pecl.php.net
dummy@dummy:~$ git clone -b php7 https://github.com/phpredis/phpredis.git
dummy@dummy:~$ cd phpredis
dummy@dummy:~/phpredis$ phpize && ./configure && make && make install
dummy@dummy:~/phpredis$ echo 'extension=redis.so' > /etc/php/7.0/mods-available/readline.ini
dummy@dummy:~/phpredis$ sudo ln -s /etc/php/7.0/mods-available/readline.ini /etc/php/7.0/fpm/conf.d/20-redis.ini

APCU Extension :
dummy@dummy:~$ sudo pecl channel-update pecl.php.net
dummy@dummy:~$ sudo pecl install apcu
dummy@dummy:~$ sudo echo 'extension=apcu.so' > /etc/php/7.0/mods-available/apcu.ini
dummy@dummy:~$ sudo ln -s /etc/php/7.0/mods-available/apcu.ini /etc/php/7.0/fpm/conf.d/20-apcu.ini

8.MariaDB Configuration :

Untuk nilai di bawah sesuaikan dengan config dan hardware server masing-masing
Silahkan edit file /etc/mysql/my.cnf dan sesuaikan isinya :
dummy@dummy:~$ sudo nano /etc/mysql/my.cnf
======================================================================================
# The following values assume you have at least 32M ram
[client]
# CLIENT #
port = 3306
socket = /var/run/mysqld/mysqld.sock

[mysqld_safe]
# MYSQL SAFE #
socket = /var/run/mysqld/mysqld.sock
nice = 0

[mysqld]
# GENERAL #
user = mysql
default-storage-engine = InnoDB
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
bind-address = 127.0.0.1
port = 3306
basedir = /usr
tmpdir = /tmp
lc_messages_dir = /usr/share/mysql
lc_messages = en_US

skip-external-locking

# MyISAM #
key-buffer-size = 32M
myisam-recover = FORCE,BACKUP

# SAFETY #
max-allowed-packet = 16M
max-connect-errors = 1000000

# DATA STORAGE #
datadir = /var/lib/mysql/

# CACHES AND LIMITS #
connect_timeout = 5
tmp-table-size = 32M
max-heap-table-size = 32M
query-cache-type = 1
query-cache-size = 64M
max-connections = 100
thread-cache-size = 100
open-files-limit = 65535
table-definition-cache = 4096
table-open-cache = 2000

# INNODB #
innodb-flush-method = O_DIRECT
innodb-log-files-in-group = 2
innodb-log-file-size = 128M
innodb-flush-log-at-trx-commit = 2
innodb-file-per-table = 1
innodb-buffer-pool-size = 256M

# LOGGING #
log-error = /var/log/mysql.log
log-queries-not-using-indexes = 0
long_query_time = 60
slow-query-log = 1
slow-query-log-file = /var/log/mysql-slow.log

!includedir /etc/mysql/conf.d/
======================================================================================
Setelah itu save dengan menekan tombol kombinasi ctrl+f5

Kemudian lakukan restart Database servernya
dummy@dummy:~$ sudo service mysql restart

9.Lakukan beberapa Penyesuaian Configure PHP

dummy@dummy:~$ sudo nano /etc/php/7.0/fpm/php.ini
upload_max_filesize = 64M
post_max_size = 32M
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=64000
opcache.interned_strings_buffer=16
Kemudian saya dengan menekan tombol kombinasi ctrl+x

Kemudian lakukan beberapa perubahan pada file /etc/php/7.0/fpm/pool.d/www.conf seperti nilai-nilai di bawah ini (Sesuaikan)
user = www-data
group = www-data
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500
rlimit_files = 32000
php_admin_flag[log_errors] = off
php_value[session.save_handler] = files
Kemudian save dengan menekan tombol kombinasi ctrl+x

10.Nginx Configuration

Selanjuntya kita melakukan beberapa configurasi pada nginx
Download mime.types file yang terbaru
dummy@dummy:~$ sudo wget https://raw.githubusercontent.com/h5bp/server-configs-nginx/master/mime.types -O /etc/nginx/mime.types
Kemudian silahkan edit file /etc/nginx/nginx.conf, namun jaga-jaga bagusnya silahkan buat file backupnya dulu baru kemudian lakukan pengeditan :

dummy@dummy:~$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.confORIG
dummy@dummy:~$ sudo nano /etc/nginx/nginx.conf
Isi dengan baris seperti berikut ini :
======================================================================================
user                        www-data;
# you must set worker processes based on your CPU cores, nginx does not benefit from setting more than that
worker_processes 1;
pid                         /run/nginx.pid;

error_log               /var/log/nginx/error.log crit;
worker_rlimit_nofile 11264;

events {
           worker_connections 5120;
           multi_accept on;
           use epoll;
          }

http {
        server_tokens off;
        charset utf-8;
        server_names_hash_max_size 4096;
        server_names_hash_bucket_size 2048;
        types_hash_bucket_size 256;
        types_hash_max_size 2048;
        limit_conn_zone $binary_remote_addr zone=alpha:8m;
        limit_req_zone $binary_remote_addr zone=delta:8m rate=30r/s;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        charset_types
        text/xml
        text/plain
        text/vnd.wap.wml
        application/x-javascript
        application/rss+xml
        text/css
        application/javascript
        application/json;

        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;
# to boost IO on HDD we can disable access logs
        access_log off;
# server will close connection after this time
        keepalive_timeout 30;
# allow the server to close connection on non responding client, this will free up memory
        reset_timedout_connection on;
# copies data between one FD and other from within the kernel
        sendfile on;
# send headers in one peace, its better then sending them one by one
        tcp_nopush on;
# don't buffer data sent, good for small data bursts in real time
        tcp_nodelay off;
 ## Client Configuration
        client_max_body_size 64m;
# if the request body size is more than the buffer size, then the entire (or partial) request body is written into a temporary file
        client_body_buffer_size 128k;
# maximum number and size of buffers for large headers to read from client request
        large_client_header_buffers 4 256k;
        client_header_buffer_size 2k;
        client_header_timeout 90s;
# request timed out
        client_body_timeout 90s;
# if client stop responding, free up memory
        send_timeout 90s;

## GZIP
        gzip on;
        gzip_static on;
        gzip_comp_level 4;
        gzip_min_length 256;
        gzip_buffers 16 8k;
        gzip_proxied any;
        gzip_vary on;
        gzip_disable "MSIE [1-6]\.(?!.*SV1)";
        gzip_types
        application/atom+xml
        application/javascript
        application/x-javascript
        application/json
        application/rss+xml
        application/vnd.ms-fontobject
        application/x-font-ttf
        application/x-web-app-manifest+json
        application/xhtml+xml
        application/xml
        font/opentype
        image/svg+xml
        image/x-icon
        text/css
        text/xml
        text/javascript
        text/plain
        text/x-component;

## FastCGI Configuration
        fastcgi_request_buffering off;
       
        fastcgi_buffers 8 16k;
        fastcgi_buffer_size 32k;
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 60;
        fastcgi_read_timeout 60;

## CACHING
        open_file_cache max=1000 inactive=20s;
        open_file_cache_valid 30s;
         open_file_cache_min_uses 2;
        open_file_cache_errors on;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
======================================================================================
Lalu save dengan menekan tombol kombinasi ctrl+f5

Kemudian edit file /etc/nginx/sites-enabled/default.conf untuk menentukan akses phpmyadminnya
dummy@dummy:~$ sudo nano /etc/nginx/sites-enabled/default.conf
Kemudian isi dengan baris berikut ini :
======================================================================================
server {
           listen 8080;
           server_name _;

           root /home/dummy/phpmyadmin;
           index index.php index.html index.htm;

## Disable logging
          access_log off;
          log_not_found off;

# Pass PHP scripts to PHP-FPM
location ~* \.php$ {
               try_files $uri /index.php =404;
               fastcgi_split_path_info ^(.+\.php)(/.+)$;
               fastcgi_pass 127.0.0.1:9000;
               fastcgi_index index.php;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               include fastcgi_params;
              }
}
======================================================================================
Lalu save dengan menekan tombol kombinasi ctrl+f5

Membuat VHOST atau Server Blok untuk root direktori html yang akan digunakan oleh domain kita nantinya untuk menyimpan file website yang akan diakses melalui domain tersebut.
Buat file seperti berikut ini  /etc/nginx/sites-enabled/albenet.web.id.conf ( sesuaikan dengan domain anda) dan kemudian isikan seperti baris berikut ini :
dummy@dummy:~$ sudo nano /etc/nginx/sites-enabled/albenet.web.id.conf
Kemudian isi dengan baris seperti berikut ini :
======================================================================================
server {
           listen [::]:80;
           listen 80;
           server_name albenet.web.id;
           return 301 $scheme://www.albenet.web.id$request_uri;
          }

server {
          listen [::]:80;
          listen 80;
          server_name www.albenet.web.id;
          root /home/dummy;
          index index.php;

          ## Disable logging
          access_log off;
          log_not_found off;
          ##Limite Con
          limit_conn alpha 80;
          limit_req zone=delta burst=80 nodelay;

         ## Rewrite URLS
         location / {
                    try_files $uri $uri/ /index.php?$query_string;
        }

       # Pass PHP scripts to PHP-FPM
       location ~* \.php$ {
                    try_files $uri /index.php =404;
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    proxy_connect_timeout 300s;
                    proxy_send_timeout 300s;
                    proxy_read_timeout 300s;
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    include fastcgi_params;
      }

      # Feed
      location ~* \.(?:rss|atom)$ {
                    try_files $uri $uri/ /index.php?$query_string;
                    expires 1h;
                    add_header Cache-Control "public";
      }

      # Media: images, icons, video, audio, HTC, CSS and Javascript, WebFonts
      location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc|css|js|ttf|ttc|otf|eot|woff|woff2)$ {
                     try_files $uri $uri/ /index.php?$query_string;
                     expires 1M;
                     add_header Cache-Control "public";
      }

      # This is particularly important if you store .htpasswd files in the site hierarchy
      location ~* (?:^|/)\. {
                   deny all;
      }

      # Prevent clients from accessing to backup/config/source files
      location ~* (?:\.(?:bak|config|sql|fla|psd|ini|log|sh|inc|swp|dist)|~)$ {
                   deny all;
      }

      include '/etc/nginx/header.conf';
      fastcgi_cache_valid 200 5s;
      fastcgi_cache_use_stale updating;
      fastcgi_max_temp_file_size 10M;
      proxy_cache_valid 200 5s;
      proxy_cache_use_stale updating;
      proxy_max_temp_file_size 10M;

}
======================================================================================
Lalu save dengan menekan tombol kombinasi ctrl+f5
Selanjutnya yaitu buat file /etc/nginx/header.conf dan isi dengan baris seperti berikut ini :
dummy@dummy:~$ sudo nano /etc/nginx/header.conf
======================================================================================
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://ssl.google-analytics.com https://assets.zendesk.com https://connect.facebook.net; img-src 'self' https://ssl.google-analytics.com https://s-static.ak.facebook.com https://assets.zendesk.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://assets.zendesk.com; font-src 'self' https://themes.googleusercontent.com; frame-src https://assets.zendesk.com https://www.facebook.com https://s-static.ak.facebook.com https://tautt.zendesk.com; object-src 'none'";
add_header X-Micro-Cache $upstream_cache_status;
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1;mode=block";
add_header X-Frame-Options "SAMEORIGIN";
add_header Access-Control-Allow-Origin "*";
add_header X-Supported-By "Albenet";
fastcgi_param HTTP_PROXY "";
proxy_set_header Proxy "";

if ($http_proxy != "") {
return 403;
}
======================================================================================
Lalu save dengan menekan tombol kombinasi ctrl+f5

11.Install Phpmyadmin

Step selanjutnya yaitu install phpmyadmin ini untuk mempermudah anda managed database nantinya, sebenarnya ini tidak penting sekali jika anda sudah terbiasa managed database dengan CLI namun jika belum terbiasa maka disarankan menggunakan phpmyadmin untuk lebih mempermudah.
Download versi phpmyadmin terbaru di https://www.phpmyadmin.net/downloads/
dummy@dummy:~$ cd /home/dummy/
dummy@dummy:~$ sudo wget https://files.phpmyadmin.net/phpMyAdmin/4.6.4/phpMyAdmin-4.6.4-all-languages.zip
dummy@dummy:~$ sudo unzip phpMyAdmin-4.6.4-all-languages.zip
dummy@dummy:~$ mv phpMyAdmin-4.6.4-all-languages phpmyadmin
dummy@dummy:~$ cd phpmyadmin
dummy@dummy:~/phpmyadmin$ sudo mv config.sample.inc.php config.inc.php
Kemudian lakukan edit file config.inc.php dan sesuaikan dengan baris berikut ini (termasuk hilangkan tanda titik koma sebelum barisnya:
dummy@dummy:~/phpmyadmin$ sudo nano config.inc.php
======================================================================================
$cfg['Servers'][$i]['controluser'] = 'root';
$cfg['Servers'][$i]['controlpass'] = 'password-database';
#Note : Disarankan buat user baru jangan menggunakan root
/* Storage database and tables */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['favorite'] = 'pma__favorite';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
======================================================================================
Kemudian save dengan menekan tombol kombinasi ctrl+x

12.Restart services dan enable firewall

Step selanjutnya yaitu restart server yang telah kita config dan juga termasuk firewallnya
dummy@dummy:~/phpmyadmin$ sudo systemctl enable php7.0-fpm.service
dummy@dummy:~/phpmyadmin$ sudo systemctl start php7.0-fpm.service
dummy@dummy:~/phpmyadmin$ sudo systemctl enable mysql.service
dummy@dummy:~/phpmyadmin$ sudo systemctl start mysql.service
dummy@dummy:~/phpmyadmin$ sudo systemctl enable nginx.service
dummy@dummy:~/phpmyadmin$ sudo systemctl start nginx.service
dummy@dummy:~/phpmyadmin$ sudo systemctl enable redis-server.service
dummy@dummy:~/phpmyadmin$ sudo systemctl restart redis-server.service
dummy@dummy:~/phpmyadmin$ sudo systemctl enable memcached.service
dummy@dummy:~/phpmyadmin$ sudo systemctl start memcached.service
dummy@dummy:~/phpmyadmin$ sudo ufw enable
Jika ada error saat menjalankan servicenya silahkan check sesuai dengan pesan error yang ditampilan
Note : Agar lebih Afdol bagusnya direboot saja servernya
dummy@dummy:~/phpmyadmin$ sudo reboot

13. Install NSD

Step selanjuntya yaitu menginstall NSD sebagai internal DNS server yang nantinya akan kita gunakan
Buat user nsd
dummy@dummy:~$ sudo useradd -r nsd
Install apket NSD
dummy@dummy:~$ sudo apt-get install nsd
dummy@dummy:~$ sudo nsd-control-setup
Kemudian generate keynya :
dummy@dummy:~$ dd if=/dev/random of=/dev/stdout count=1 bs=32 | base64
r+Iyb8lf4idiU7ppgW8KQfe4QNmwkeZoqc/hKMiTAno=
1+0 records in
1+0 records out
32 bytes copied, 0.00127447 s, 25.1 kB/s
Lalu buat file /etc/nsd/nsd.conf
dummy@dummy:~$ sudo nano /etc/nsd/nsd.conf
Kemudian isi dengan beris berikut ini :
======================================================================================
server:
         do-ip4: yes
         port: 53
         username: nsd
         zonesdir: "/etc/nsd"
         logfile: "/var/log/nsd.log"
         pidfile: "/run/nsd/nsd.pid"
         xfrd-reload-timeout: 60
         zonefiles-write: 3600
         reuseport: yes
         verbosity: 2
         ip-transparent: yes
         hide-version: yes
         round-robin: yes

remote-control:
        control-enable: yes
        control-interface: 127.0.0.1
        control-port: 8952
        server-key-file: "/etc/nsd/nsd_server.key"
        server-cert-file: "/etc/nsd/nsd_server.pem"
        control-key-file: "/etc/nsd/nsd_control.key"
        control-cert-file: "/etc/nsd/nsd_control.pem"

key:
        name: "demokey"
       algorithm: hmac-sha256
       secret: "r+Iyb8lf4idiU7ppgW8KQfe4QNmwkeZoqc/hKMiTAno="

pattern:
       name: "toslave"
       notify: 111.222.333.444 demokey
       provide-xfr: 111.222.333.444 demokey

zone:
       name: "albenet.web.id"
       zonefile: "albenet.web.id.zone"
       include-pattern: "toslave"

zone:
      name: "333.222.11.in-addr.arpa"
      zonefile: "111.222.333.zone"
      include-pattern: "toslave"
======================================================================================
Kemudian save dengan menekan tombol kombinasi ctrl+f5

Kemudian buat Forward Zone File  /etc/nsd/albenet.web.id.zone
dummy@dummy:~$ sudo nano /etc/nsd/albenet.web.id.zone
Dan isi dengan baris berikut ini :
======================================================================================
$ORIGIN albenet.web.id.
$TTL 1800
@            IN             SOA             ns1.albenet.web.id.             admin.albenet.web.id. (
                                                      2014070201 ; serial number
                                                      3600 ; refresh
                                                      900 ; retry
                                                      1209600 ; expire
                                                      1800 ; ttl
                                                       )
IN            NS            ns1.albenet.web.id.
IN            NS            ns2.albenet.web.id.
ns1           IN             A             111.222.333.444
ns2           IN             A             111.222.333.444
www        IN            A              111.222.333.444
mail          IN            A              111.222.333.444
dummy     IN            A              111.222.333.444
blog         IN            A              111.222.333.444
@            IN            A              1111.222.333.444
albenet.web.id         IN              MX              mail.albenet.web.id.
_domainkey.albenet.web.id.       IN                TXT "t=y; o=-; r=admin@albenet.web.id"
albennet.com.         IN               TXT              "v=spf1 a mx ip4:111.222.333.444 ~all"
_dmarc.albenet.web.id.              IN                TXT "v=DMARC1; p=quarantine; pct=20; rua=mailto:admin@albenet.web.id"
======================================================================================
Kemudian save dengan menekan tombol kombinasi ctrl+f5

Selanjutnya buat Reverse Zone File /etc/nsd/203.114.75.zone
dummy@dummy:~$ sudo nano /etc/nsd/111.222.333.zone
Kemudian isi dengan baris berikut ini :
======================================================================================
$ORIGIN 75.114.203.in-addr.arpa.
$TTL 1800

@                IN                SOA                ns1.albenet.web.id.                admin.albenet.web.id. (
                                                                2014070201 ; serial number
                                                                3600 ; refresh
                                                                900 ; retry
                                                                1209600 ; expire
                                                                1800 ; ttl
                                                                )
IN                NS                ns1.albenet.web.id.
IN                NS                ns2.albenet.web.id.
1                  IN                 PTR            ns1.albenet.web.id.
2                  IN                 PTR            ns2.albenet.web.id.
3                  IN                 PTR            www.albenet.web.id.
4                  IN                 PTR            mail.albenet.web.id.
======================================================================================
Kemudian save dengan menekan tombol kombinasi ctrl+f5

Selanjutnya lakukan testing dan restart service
dummy@dummy:~$ sudo nsd-checkconf /etc/nsd/nsd.conf
Jika tidak ada erros maka lanjut
dummy@dummy:~$ sudo service nsd restart
Lalu test :
======================================================================================
dummy@dummy:~$ dig @localhost albenet.web.id

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @localhost albenet.web.id
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61319
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;albenet.web.id. IN A

;; ANSWER SECTION:
albenet.web.id. 1800 IN A 111.222.333.444

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Aug 22 21:02:46 WIB 2016
;; MSG SIZE rcvd: 59

dummy@dummy:~$
======================================================================================
Jika sampai di sini tidka mendapatkan error dan semuanya berjalan baik maka itu artinya anda sudah berhasil menginstall dan mengkonfigurasi web server dengan nginx dan dns server dengan NSD.
Untuk mengtest dan memastikan semuanya berjalan dengan baik coba buat file info.php di folder /home/dummy/ dengan isi kurang lebih :
======================================================================================
<?php
phpinfo();
phpinfo(INFO_MODULES);
?>
======================================================================================
Kemudian coba test dari web browser dengan mengetik albenet.web.id/info.php (dan atau domainanda.com/info.php) jika tampilannya seperti berikut berarti kita sudah barhasil dan selanjutnya tinggal menginstall CMS yang diinginkan saja lagi.

14. Step Selanjuntya Upload data dari PC ke VPS

Step selanjutnya kita mencoba untuk install CMS Wordpress untuk kebutuhan website kita. Sebenarnya setelah kita berhasil configure webserver seperti di atas bukan hanya CMS Wordpress yang bisa kita install namun CMS yang lain juga bisa termasuk script2 web lainnya yang ingin kita gunakan, namun pada tutorial kali ini akan kita coba test menginstall wordpress karena kebetulan teman-teman banyak yang menggunakan CMS ini untuk kebutuhan blog/webnya. Dan pada tutorial kali ini kita akan mencoba untuk menggunakan aplikasi WinSCP sebagai alat untuk upload/download data dari PC ke VPS dan atau sebaliknya dari VPS ke PC yang kita gunakan,
a. Step awal jika belum mempunyai aplikasi WinSCP silahkan download dan install aplikasi tersebut di PC anda, namun jika sudah step ini bisa diskip
Link download untuk aplikasi WinSCP https://winscp.net/eng/docs/guide_install
b. Jika sudah selesai didownload dan diinstall selanjutnya jalankan aplikasi WinSCPnya, maka akan muncul tampilan sebagai berikut dan silahkan isi form yang dibutuhkan :

Dan jika setelah mengclick tombol login muncul seperti ini, silahkan pilih dan click tombol Yes

Maka akan muncul tampilan sebagai berikut :

Yang sebelah kiri itu adalah data-data yang ada apda PC kita dan yang sebelah kanan adalah data-data yang ada di direktori /home/dummy/ dari VPS kita yang mana akan menjadi direktori html dari domain yang kita gunakan jadi semua data-data web kita simpan di direktori tersebut, seperti gambar di atas.

15. Step selanjutnya install Wordpress

Create Database untuk Web
Jika upload data-data wordpress sudah selesai selanjutnya kita membuat database untuk kebutuhan website kita. Step-stepnya yaitu sebagai berikut ini :
Login ke MySQL Server
[dummy@dummy ~]$ sudo mysql -u root -ppassword-mysql
Kemudian buat user untuk databasenya:
MariaDB [(none)]> CREATE USER 'albenet'@'localhost' IDENTIFIED BY 'passworddatabase';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]>
Grant Permissions untuk MySQL User
MariaDB [(none)]> GRANT ALL PRIVILEGES ON * . * TO 'albenet'@'localhost';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]>
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]>

Untuk melihat Grants MySQL User
MariaDB [(none)]> SHOW GRANTS FOR 'albenet'@'localhost';
+-------------------------------------------------------------------------------------------------------------------------+
| Grants for albenet@localhost |
+-------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'albenet'@'localhost' IDENTIFIED BY PASSWORD '*551F82F5D0256EFC43CCE64F0F7C175BDEB6B18E' |
+-------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]>

Kemudian coba keluar dari Mysql yang login sebagai root tadi lalu login kembali menggunakan user yang baru kita buat dan selanjutnya buat databasenya,
MariaDB [(none)]> quit
Bye
[dummy@dummy ~]$ sudo mysql -u albenet -ppassworddatabase
MariaDB [(none)]> create database myweb;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> use myweb;
Database changed
MariaDB [myweb]> quit
Bye
Kemudian rubah permision untuk folder dan file,
[dummy@dummy ~]$ sudo find /home/dummy -type d -exec chmod 755 {} \;
[dummy@dummy ~]$ sudo find /home/dummy -type f -exec chmod 644 {} \;
Selanjutnya akses domain anda melalui web browser maka akan muncul tampilan sebagai berikut ini:

Kemudian pilih dan click tombol "Continue" maka akan muncul tampilan sebagai berikut dan silahkan isikan sesuai data anda :

Setelah diisi semua formnya selahkan pilih dan click tombol "Install WordPress"
Jika kita berhasil menginstallnya maka akan muncul tampilan sebagai berikut ini :

Itu adalah tampilan halaman administrator untuk website wordpress, untuk tampilan awal web nya yaitu sebagai berikut :


Step selanjutnya silahkan anda design web nya sesuai kebutuhan dan kembangin konfigurasi server anda.

16. Check resource

Pada awal tadi kita ada check berapa besar resource yang digunakan sebelum install, sekarang kita coba bandingkan setelah selesai install semua :
Resoure VPS Setelah diinstall :

gtmetrix.com tanpa optimasi default install

Kemudian coba install WP Super Cache dan Hasilnya :
AB test server benchmarking tool
Number of requests = 6000
Number of multiple requests to perform at a time (concurrency) = 1000
# ab -n 6000 -c 1000 http://www.albenet.web.id:80/



Dan hasil gtmetrix.com menjadi :

Sekian dan semoga Berhasil


Untuk tutorial selanjutnya menyusul yach jadi tetapi standby di sini hehhehehehehe

 

Copyright Albenet Hosting Sunday 25-Jun-2017 All rights reserved.