Setelah beberapa bulan blog saya hosting static web dengan AWS S3, saya berencana untuk hosting lagi menggunakan ghost. Masih tetap menggunakan layanan AWS yaitu AWS EC2 dan AWS RDS sebagai kombinasi yang pas untuk hosting di AWS menggunakan free tier. Langsung saja ke bagian eksekusinya
Server yang digunakan
AWS EC2 Free tier (t2.micro)
AWS RDS Mysql – Single zone (T2.Micro)
Kedua server ini berada di Region Singapore. Tadinya mau di region Indonesia karena desember kemarin baru saja launch. Namun sepertinya AWS RDS tidak ada yang free tier. VM Size di region Indonesia semua menggunakan t3 dan untuk RDS yang free tier hanya yang t2.micro sehingga pilihan free tiernya tidak ada. Meskipun ada pilihan t3.micro juga sebenarnya. Agak aneh memang karena di EC2, AWS bisa memberikan free trial untuk t2 dan t3 micro tetapi di RDS services hanya t2.Micro saja yang diberikan free tier. Instance OS yang digunakan di sini adalah ubuntu 20.04 favourite saya
Siapkan domain yang akan digunakan dan Pastikan Public IP Server EC2 sudah dipointing dengan domainnya
Installasi Nodejs
Di sini saya asumsikan untuk AWS EC2 sudah disetup ya jadi tinggal eksekusi installasinya.
Ghost terbaru memerlukan setidaknya nodejs versi 12.x LTS sementara untuk ubuntu 20.04 latestnya versi 10 kalau tidak salah. Jadi kita harus menambahkan dulu repository versi nodejs-nya untuk ubuntu 20.04. Di sini saya pakai nodejs terbaru versi 16.x
1. Ketik command berikut untuk menambahkan repository nodejs versi 16 curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash –
2. Ketik sudo apt install -y nodejs untk install package nodejs-nya
3. Check versi nodejs dengan command node –version
Database ghost
Saya asumsikan AWS RDS sudah disetup dan ready dipakai. Jika RDS sudah disetup koneksinya dengan benar maka kita bisa langsung konek dari EC2 dengan mysql client
1. Install mysql client dengan command sudo apt install mysql-client
2. Konek ke AWS RD dengan command sudo mysql -u useradmin -p -h hostnamerds lalu ketikan password adminya
3. Setelah masuk ke RDS kita perlu membuat database dan grant access ke admin. Di sini bisa juga kalau kamu mau buat username lain selain admin.
4. Ketik create database ghost; di sini saya menggunakan ghost sebagai nama databasenya
5. Ketik exit; untuk keluar
Install Nginx
Ghost dapat dijalankan secara localhost maupun di deploy ke web server. Di sini saya pakai opsi production atau dilakukan deploy ke webserver. Ghost secara default support dengan Nginx web server sehingga kita perlu install Nginx terlebih dahulu. Sebelumnya saya akan mengaktifkan firewall UFW services menggantikan firewall iptables
1. Sudo UFW allow 22
2. Sudo UFW allow 80,443
3. Kemudian diaktifkan dengan sudo UFW enable
4. Sekarang kita install Nginx dengan command apt install nginx
Persiapan Installasi Ghost
Setelah nodejs, nginx dan database terinstall langkah selanjutnya adalah installasi package ghost. Sebelum installasi kita perlu membuat 1 user spesfic untuk menjalankan installasi npm-nya karena ghost tidak bisa Jalan dengan akun root. Untuk nama usernya tidak boleh dengan nama ghost bisa digunakan nama lain.
Di sini saya pakai username blog sebagai user yang akan eksekusi installasi dan package ghostnya.
1. sudo adduser blog
2. sudo adduser blog sudo
Selanjutnya kita perlu membuat 1 folder untuk menampung file package ghost yang nantinya akan digenerate.
1. Sudo mkdir /var/www/ghost
2. Sudo apt install acl
3. Sudo setfacl -R -m u:blog:rwx /var/www/ghost/
4. Sudo chmod 755 /var/www/ghost
5. Install package ghost dengan perintah sudo npm install ghost-cli@latest -g
6. Setelah itu Pastikan login dengan user blog atau user yang tadi sudah dibuat dengan cara su – blog
7. Setelah masuk sebagai user blog masuk ke folder cd /var/www/ghost
8. Ketik ghost install
9. Akan muncul peringatan kalau mysql tidak ditemukan lanjut dengan pilih Y
10. Isi parameter berikut
? Enter your blog URL: https://yourdomain.com (Nama domain yang akan digunakan)
? Enter your MySQL hostname: awsrds-hostname (isikan dengan hostname AWS RDS
? Enter your MySQL username: admin (isikan dengan admin user RDS)
? Enter your MySQL password: password RDS
? Enter your Ghost database name: ghost (nama database yang tadi dibuat)
11. Setelah selesai akan muncul untuk installasi nginx silahkan ketik Y untuk proses installasi ke nginx dan lanjutkan dengan installasinya SSL-nya.
Silahkan akses domain yang tadi digunakan jika langkah-langkahnya sudah benar maka sekarang tampilan ghost sudah muncul. Selanjutnya apabila kamu ingin menambahkan www.yourdomain.com bisa dilakukan manual dengan langkah berikut
1. sudo nano /etc/nginx/sites-enabled/yourdomain.com.conf
2. tambahkan www.domain.comdi server name
server_name yourdomain.com www.yourdomain.com;
3. save dan close
4. lalu delete /etc/nginx/sites-enabled/yourdomain.com-ssl.conf file. Dengan command sudo rm /etc/nginx/sites-enabled/yourdomain.com-ssl.conf
5. install certbot dengan command sudo apt install certbot python3-certbot-nginx
6. buat ssl untuk domain.com dan www dengan command berikut
sudo certbot –nginx –agree-tos –redirect –hsts –staple-ocsp –email you@example.com -d yourdomain.com,www.yourdomain.com
7. Restart nginx services, sudo systemctl restart nginx