Nashir.co.id

Yang penting nulis.


Setup Multi Ghost-blog pada Server $5 DigitalOcean Part 1/2

"The professional publishing platform" itulah motto dari Ghost.org, sebuah mesin Blogging yang benar-benar nyaman untuk digunakan. Website ini pun berjalan di atas system ghost.
Sebelumnya saya mencoba nge-blog pakai ghost pro, namun karena harganya yang lumayan mahal ($19/bulan) untuk pemula seperti saya, akhirnya mencoba mencari cara untuk dapat menekan biaya serendah mungkin tanpa mengorbankan performa. Setelah berbagai percobaan, akhirnya berhasil juga install dan jalankan ghost blog di server seharga $5. Tutorial ini adalah catatan pribadi saya memasang dan menjalankan Ghost blog untuk dua website pada satu server seharga $5. Silahkan disimak dan semoga bermanfaat...

A. Persiapan Domain dan Server

  1. Buat droplet/server baru di Digitalocean dengan menambahkan SSH
    Caranya bisa dibaca disini.
  2. Arahkan domain ke IP droplet baru tersebut
    Caranya bisa dibaca disini.
    Untuk tutorial ini saya akan menggunakan web1.nashir.co.id dan web2.nashir.co.id sebagai contoh.

B. Persiapan System

  1. Masuk ke server via SSH
    Caranya bisa dibaca disini.

  2. Update system

    #Cek daftar paket yang perlu diupdate
    $ apt-get update
    
    #Lakukan update
    $ apt-get dist-upgrade
    
    #Hapus paket yang sudah tidak terpakai
    $ apt-get autoremove
    
  3. Buat user biasa dengan kemampuan Sudo

    #Tambah User
    $ adduser ghost
    
    #Tambah grup
    $ usermod -a -G www-data ghost
    
    #Tambah akses Sudo
    $ gpasswd -a ghost sudo
    
  4. Tambah SWAP
    Penambahan SWAP ini sangat penting, karena proses instalasi dan upgrade memerlukan Ram minimal 1GB sedangkan server yang akan digunakan adalah droplet $5 yang hanya memiliki Ram 512MB.

    #Tambah SWAP
    $ sudo fallocate -l 1G /swapfile
    $ sudo chmod 600 /swapfile
    $ sudo mkswap /swapfile
      Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
      no label, UUID=2af502dd-d50f-4269-a95f-89eaf60bd567
        
    #Aktifkan SWAP
    $ sudo swapon /swapfile
    
    #Cek SWAP
    $ free -m
     total        used        free      shared  buff/cache   available
     Mem:          488          43          71           2         373         415
     Swap:        1023           0        1023
    
  • Atur SWAP agar permanen dengan mengubah isian /etc/fstab dan tambahkan /swapfile none swap sw 0 0 hingga menjadi seperti ini:

    $ nano /etc/fstab
      LABEL=cloudimg-rootfs   /        ext4   defaults        0 0
      /swapfile               none    swap    sw              0 0
    
  • Atur Swappiness
    Swappiness digunakan untuk mengatur penggunaan Swap. Contoh ini mengatur swappiness menjadi 20, sehingga swap akan digunakan jika sisa Ram adalah 20% (Ram terpakai 80%).

     $ sudo sysctl vm.swappiness
     vm.swappiness = 60
     $ sudo sysctl vm.swappiness=20
     vm.swappiness = 20
    

C. Install dan Setting Software yang diperlukan

  1. Nginx

    #Install Nginx
    $ sudo apt-get install nginx
    
  2. Mariadb

    #Install mariadb-server
    $ sudo apt-get install mariadb-server
    
    #Hapus pengaturan default
    $ sudo mysql_secure_installation
    
  3. Buat db baru
    Database diperlukan untuk instalasi Ghost, kali ini kita akan membuat dua database untuk masing-masing website dengan nama ghost_web1 dan ghost_web2.

    #Buka mysql
    $ sudo mysql -u root -p
         Enter password:  #Masukan password user root/ghost
         
    #Tambah user pada MariaDB
    MariaDB [(none)]> CREATE USER 'ghost'@'localhost' identified by 'PasswordOKE';
      Query OK, 0 rows affected (0.01 sec)
    
    #Tambah Database pertama (web1)
    MariaDB [(none)]> CREATE DATABASE ghost_web1;
      Query OK, 1 row affected (0.00 sec)
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON ghost_web1.* to 'ghost'@'localhost' IDENTIFIED BY 'PasswordOKE';
      Query OK, 0 rows affected (0.00 sec)
    
    #Tambah Database kedua (web2)
    MariaDB [(none)]> CREATE DATABASE ghost_web2;
      Query OK, 1 row affected (0.00 sec)
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON ghost_web2.* to 'ghost'@'localhost' IDENTIFIED BY 'PasswordOKE';
      Query OK, 0 rows affected (0.00 sec)
     
    #Bersihkan Privileges
    MariaDB [(none)]> FLUSH PRIVILEGES;
      Query OK, 0 rows affected (0.00 sec)
    
  4. Install Node & NPM

    #Atur repositori node
    $ sudo curl https://deb.nodesource.com/setup_6.x -o nodesource_setup.sh
    
    #Tambah izin eksekusi untuk file baru
    $ sudo chmod u+x nodesource_setup.sh
    
    #Tambah izin eksekusi untuk file baru
    $ sudo ./nodesource_setup.sh
    
    #Install nodejs & build-essential
    $ sudo apt-get install nodejs
    $ sudo apt-get install build-essential
    
  5. Install Letsencrypt

    #Tambah repositori
    $ sudo add-apt-repository ppa:certbot/certbot
    
    #Cek daftar paket yang perlu diupdate/diinstall
    $ sudo apt-get update
    
    #Install certbot
    $ sudo apt-get install certbot
    
  6. Install Ghost-CLI

    #Tambah repositori
    $ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
    
    #Cek daftar paket yang perlu diupdate/diinstall
    $ sudo apt-get update
    
    #Install yarn
    $ sudo apt-get install yarn
    
    #Tambah ghost-cli dengan yarn
    $ sudo yarn global add ghost-cli
    $ sudo npm i -g ghost-cli
    
  7. Setup Firewall
    Ubuntu memiliki firewall bawaan yang disebut UFW (Uncomplicated Firewall). Pengaturan firewall sangat penting untuk membatasi akses jaringan.

    #Cek status firewall
    $ sudo ufw status
         Status: inactive
         
    #Izinkan 'Nginx Full' pada firewall
    $ sudo ufw allow 'Nginx Full'
      Rules updated
      Rules updated (v6)
    
    #Aktifkan UFW
    $ sudo ufw enable
      Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
      Firewall is active and enabled on system startup
    
    #Cek status firewall untuk memastikan Nginx Full sudah terdaftar
    $ sudo ufw status verbose
         Status: active
         Logging: on (low)
         Default: deny (incoming), allow (outgoing), disabled (routed)
         New profiles: skip
    
         To                           Action      From
         --                           ------      ----
         80,443/tcp (Nginx Full)      ALLOW IN    Anywhere
         80,443/tcp (Nginx Full (v6)) ALLOW IN    Anywhere (v6)
    

D. Snapshot Droplet

Snapshot droplet untuk menyimpan data agar dapat digunakan lagi jika terjadi kesalahan fatal pada langkah-langkah berikutnya. Tutorial snapshot droplet pada DigitalOcean bisa dibaca disini.

Tutorial ini akan berlanjut di part 2, disini.


Link Pembantu:
1. Menambah Droplet di DigitalOcean
2. Menghubungkan Domain dengan server
3. Menambah SSH Key ke DigitalOcean