Konfigurasi Ghost Blog Platform di server $5

Setelah beberapa jam ngoprek untuk meningkatkan performansi blog sendiri. Saya coba utak-atik konfigurasi nginx dan beberap kali gagal, akhirnya saya menemukan konfigurasi yang lumayan cukup ukuran server:

  • Sistem Operasi Ubuntu 14.04 LTS
  • RAM 512MB
  • 1 Core CPU
  • 1 TB Transfer

Nah konfigurasi ini saya gunakan untuk Ghost Blog Platform. Untuk instalalasi ghost sampai live sederhana, menggunakan forever dan nginx. Pertama kali install nginx saya menggunakan repository bawaan dari DigitalOcean dengan versi 1.4.4. Atau bisa coba juga Linode

konfigurasi awal seperti ini:

server {  
    listen 80;
    server_name blog.drayanaindra.com;

    location / {
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://0.0.0.0:2368;
    }
}

Lalu saya mencob memasang SSL Certificate seperti tutorian ini. Dan konfigurasi nya seperti ini:

server {  
    listen 80;
    listen 443 ssl;
    server_name blog.drayanaindra.com;
    ssl_certificate /home/user/blog.example.com.crt;
    ssl_certificate_key /home/user/blog.exmple.com.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://0.0.0.0:2368;
    }
}

Bisa di cek di websie ssllabs.com
Grade SSL di blog.drayanaindra.com

Setelah 3 hari berjalan, saya agak kurang puas dengan load page yang agak lama walaupun dengan kondisi jaringan standard, blog nya bisa terbuka kurang dari 1 menit. Terus saya kepikiran untuk meng aktifkan Cache, memasang PageSpeed dan HTTP2 supaya aga sedikit cepat, walaupun setelah memasang tidak terasa apa-apa (apa mungkin karena jaringan dan ukuran 1 kali load page masih kecil ya ?? hahaha)

Nah setelah baca-baca beberapa postingan blog, ternyata untuk mendukung konfigurasi PageSpeed dan HTTP2, nginx harus di upgrade ke versi di 1.5 sementara nginx yang saya install masih versi 1.4

Kalau begitu saya coba upgrade, walaupun agak malasa untuk build dari source. haha

Sebelum meng upgrade versi nginx, alangkah baiknya konfigurasi yang ada di backup terlebih dahulu. Bisa disimpang di folder yang mudah di ingat dan di akses. Setelah di backup, sekarang ikuti langkah-langkah di bawah ini:

Langkah 1

$ sudo curl http://nginx.org/keys/nginx_signing.key | apt-key add -

Langkah 2

$ mkdir ~/nginx && cd ~/nginx

Langkah 3

$ sudo apt-get source nginx

Langkah 4

$ cd ~/

$ wget https://codeload.github.com/pagespeed/ngx_pagespeed/zip/v1.9.32.10-beta

$ sudo apt-get install unzip

$ unzip v1.9.32.10-beta

$ cd ngx_pagespeed-1.9.32.10-beta/

Langkah 5

$ wget https://dl.google.com/dl/page-speed/psol/1.9.32.10.tar.gz

$ tar xvf 1.9.32.10.tar.gz

$ vi ~/nginx/nginx-1.9.9/debian/rule

Tambahkan baris --add-module=/home/user/ngx_pagespeed-1.9.32.10-beta \ pada akhir configurasi override_dh_auto_build dan configure_debug

seperti gambar dibawah ini:

override_dh_auto_build

configure_debug

Langkah 6

$ cd ~/nginx/nginx-1.9.9/

$ sudo dpkg-buildpackage -b

Langkah 7

$ ls ~/nginx/*.deb

Nanti akan muncul lokasi package *.deb lalu masuk ke direktori tersebut dan lakukan seperti command line di bawah ini

$ sudo dpkg -i nginx_1.9.9-1~trusty_amd64.deb

Setelah proses instalasi selesai, coba cek versi nginx sekarang.

$ nginx -v

nginx version: nginx/1.9.9

Langkah 8 Konfigurasi untuk pagespeed

$ sudo mkdir -p /var/ngx_pagespeed_cache

$ sudo chown -R nginx:nginx /var/ngx_pagespeed_cache

$ sudo vim /etc/nginx/nginx.conf

Tambahkan konfigurasi pagespeed dan aktifka kompresi gzip

##
# pagespeed
##

pagespeed on;  
pagespeed FileCachePath /var/ngx_pagespeed_cache;

##
# Gzip Settings
##

gzip on;  
gzip_disable "msie6";

gzip_vary on;  
gzip_proxied any;  
gzip_comp_level 5;  
# gzip_buffers 16 8k;
gzip_min_length 256;  
gzip_http_version 1.1;  
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;  

$ sudo vim /etc/nginx/sites-available/site.com

Ikuti configurasi seperti dibawah ini

server {  
    listen 80;
    # SSL
    listen 443 ssl;
    server_name blog.drayanaindra.com;
    ssl_certificate /home/user/blog.example.com.crt;
    ssl_certificate_key /home/user/blog.exmple.com.key;
    # pagespeed 
    location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
    location ~ "^/ngx_pagespeed_static/" { }
    location ~ "^/ngx_pagespeed_beacon" { }

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://0.0.0.0:2368;
    }
}

$ sudo service nginx reload

Langkat 9 Mengubah configurasi SSL Certificate

Ikuti konfigurasi seperti dibawah ini pada blok konfigurasi SSL

$ sudo mkdir /etc/nginx/cert

$ sudo openssl dhparam 2048 -out /etc/nginx/cert/dhparam.pem

nah kamu akan di paksa menunggu agak lama ketima membuat dhparam.pem. Jadi kamu bisa bikin teh manis anget bentar :p

Donwload file AddTrustExternalCARoot.crt di sini

$ sudo cat AddTrustExternalCARoot.crt domain.crt > /etc/nginx/cert/trustchain.crt

server {  
    listen 80;
    # SSL
    listen 443 ssl;
    server_name blog.drayanaindra.com;
    ssl_certificate /home/user/blog.example.com.crt;
    ssl_certificate_key /home/user/blog.exmple.com.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:20m;
    ssl_session_timeout 180m;
    ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
    ssl_dhparam /etc/nginx/cert/dhparam.pem;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/nginx/cert/trustchain.crt;

    client_max_body_size 10m;
    resolver 8.8.8.8 8.8.4.4;
    resolver_timeout 10s;

    charset utf-8;

    # pagespeed 
    location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
    location ~ "^/ngx_pagespeed_static/" { }
    location ~ "^/ngx_pagespeed_beacon" { }

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://0.0.0.0:2368;
    }
}

lalu reload nginx nya.

$ sudo service nginx reload

Langkah 10 meng aktifkan HTTP/2

Untuk meng aktifkan HTTP/2 sangat mudah, hanya mengikuti beberapa langkah seperti dibawah ini

$ nginx -V

lalu akan muncul seperti dibawah ini

nginx version: nginx/1.9.9  
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04)  
built with OpenSSL 1.0.1f 6 Jan 2014  
TLS SNI support enabled  
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro' --with-ipv6 --add-module=/home/user/ngx_pagespeed-1.9.32.10-beta  

nah, jika dibaris akhir terdapat list ini add-module=/home/user/ngxpagespeed-1.9.32.10-beta dan --with-httpv2_module , berarti kamu sudah bisa mengaktifkan PageSpeed dan HTTP/2

Tinggal beberap langkah lagi kamu bisa menggunakan PageSpeed dan HTTP/2. Ikuti langkah konfigurasi terakhir dibawah ini:

$ sudo vim /etc/nginx/sites-available/site.com

lalu tambahkan http2 pada listen 443 jika kamu menggunakan SSL atau di listen 80 jika kamu tidak menggunakan SSL.

server {  
    listen 80;
    # SSL
    listen 443 ssl http2;
    server_name blog.drayanaindra.com;
    ssl_certificate /home/user/blog.example.com.crt;
    ssl_certificate_key /home/user/blog.exmple.com.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:20m;
    ssl_session_timeout 180m;
    ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
    ssl_dhparam /etc/nginx/cert/dhparam.pem;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/nginx/cert/trustchain.crt;

    client_max_body_size 10m;
    resolver 8.8.8.8 8.8.4.4;
    resolver_timeout 10s;

    charset utf-8;

    # pagespeed 
    location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
    location ~ "^/ngx_pagespeed_static/" { }
    location ~ "^/ngx_pagespeed_beacon" { }

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://0.0.0.0:2368;
    }
}

lalu reload nginx nya.

$ sudo service nginx reload

Langkah 11 konfigurasi web cache untuk ghost

Buka kembali file domain.com dan lakukan konfigurasi sepert di bawah ini.

$ sudo /etc/nginx/sites-available/domain.com

server {  
    listen 80;
    # SSL
    listen 443 ssl http2;
    server_name blog.drayanaindra.com;
    ssl_certificate /home/user/blog.example.com.crt;
    ssl_certificate_key /home/user/blog.exmple.com.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:20m;
    ssl_session_timeout 180m;
    ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
    ssl_dhparam /etc/nginx/cert/dhparam.pem;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/nginx/cert/trustchain.crt;

    client_max_body_size 10m;
    resolver 8.8.8.8 8.8.4.4;
    resolver_timeout 10s;

    charset utf-8;

    # pagespeed 
    location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
    location ~ "^/ngx_pagespeed_static/" { }
    location ~ "^/ngx_pagespeed_beacon" { }

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

    # cache configuration
    add_header X-Cache $upstream_cache_status;
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|eot|woff)$ {
        proxy_ignore_headers "Cache-Control";
        expires 10y;
        proxy_pass http://0.0.0.0:2368;
    }

    location / {
        # cache configuration
        proxy_cache_valid 200 30m;
        proxy_cache_valid 404 1m;
        proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
        proxy_ignore_headers Set-Cookie;
        proxy_hide_header Set-Cookie;
        proxy_hide_header X-powered-by;
        expires 10m;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://0.0.0.0:2368;
    }
    # cache configuration
    location /content/images {
        alias /path/to/ghost/content/images;
        access_log off;
        expires max;
    }
    location /assets {
        alias /path/to/ghost/content/themes/dolan/assets;
        access_log off;
        expires max;
    }
    location ~ ^/(?:ghost|signout) { 
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://0.0.0.0:2368;
        add_header Cache-Control "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0";
    }

}

lalu reload nginx nya

$ sudo service nginx reload

Cara mengecek configurasi kita berjalan atau tidak, bisa mengikuti command line seperti dibawah ini:

Cek PageSpeed

$ curl -I -p https://blog.drayanaindra.com | grep X-Page-Speed

X-Page-Speed: 1.9.32.10-7423

nah jika sudah aktif, kita bisa mengecek dengan membuka halam website kita, lalu lakukan seperti tahan dibawah ini.

ketik alamat pada browser kamu, contoh https://blog.drayanaindra.com atau buka url ini Membuat Mochaccino Float Sendiri lalu klik kanan terus Inspect Element atau tekan F12 lalu klik tab Network. Maka akan muncul seperti ini

PageSpeed

nah, kamu bisa lihat di tab name ada tulisan xphoto_2016-01-19_21-03-21.jpg.pagespeed.ic.Vaijkci3x9.webp file tersebut sudah di kompresi oleh pagespeed. Jadi secara tidak langsung configurasi PageSpeed kamu bekerja dengan baik. selamat yaaaaa... :D *salaman

Cek HTTP/2

Unuk mengecek HTTP/2 ini sudah nyala atau belum, bisa mengujungi website ini terus nanti akan ada report seperti gambar dibawah ini.

Check HTTP/2

woooooohhhh... horay....... HTTP/2 kamu sudah nyala... *salim lagi

Cek Web Cache

Nah ini yang terakhir, kamu bisa buka salah satu file static melalui inspect element, terus lakukan command line seperi dibawah ini:

$ curl -X GET -I https://blog.drayanaindra.com/content/images/2016/01/xphoto_2016-01-19_21-03-21.jpg.pagespeed.ic.Vaijkci3x9.webp

HTTP/1.1 200 OK  
Server: cloudflare-nginx  
Date: Wed, 20 Jan 2016 12:50:52 GMT  
Content-Type: image/webp  
Content-Length: 30480  
Connection: keep-alive  
Set-Cookie: __cfduid=d513853f2a465373e88a0a84958d2198b1453294252; expires=Thu, 19-Jan-17 12:50:52 GMT; path=/; domain=.drayanaindra.com; HttpOnly  
X-Powered-By: Express  
Expires: Thu, 19 Jan 2017 12:50:52 GMT  
Cache-Control: public, max-age=31536000  
ETag: W/"0"  
Last-Modified: Tue, 19 Jan 2016 21:54:07 GMT  
X-Page-Speed: 1.9.32.10-7423  
CF-Cache-Status: HIT  
Accept-Ranges: bytes  
CF-RAY: 267ae858e1aa179e-SIN  

Jika hasil kamu ada ini nya Cache-Control: public, max-age=31536000 berarti konfigurasi Web Cache nya berhasill.. horeeeeeeeeeee *salim lagi

Ini hasil test menggunakan Tool Pingdom
Test Pingdom

https://blog.drayanaindra.com/configurasi-ghost-blog-platform/

https://blog.drayanaindra.com/membuat-mochaccino-float-sendiri/

Nah begitulah kira-kira konfigurasi nya. Oh iya, ada bonus ni... haha

Kamu bisa menggunakan layanan gratis dari CloudFlare untuk menambah tingkat kemanan pada website kamu... yaaa lumayan lah buat jaga-jaga. Kamu bisa menggunakannya untuk domain forwarding, management DNS dan meng aktifkan layan-layana gratis yang mungkin bisa membantu kamu.

Nah, karena say naro blog nya di DigitalOcean, jadi saya harus menyisihkan uang jajan $5 per bulan. Bukannya sombong gak mau pake layanan gratisan seperti tumblr, blogspot atau wordpress. Tapi saya sangat menyukai prosesnya, dari mulai beli, konfigurasi sampai blog saya berjalan cukup baik di server dengan budget $5.

Jadi, semoga bermanfaat yaaahh.... Kalau ada kesalah ketik, di komen aja yoo... nanti saya perbaiki. Dan kalau ada yang gak bisa, boleh ditanyakan dikomen... dadah......!!! :D

comments powered by Disqus