
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