Tahun lalu saya sempat rutin menulis di platform Ghost. Sebuah platform yang dikususkan untuk menulis.

Berbeda dengan WordPress, yang memakai PHP sebagai bahasa pemrogramannya. Ghost memakai JavaScript melalui NodeJS untuk bahasa pemrograman mereka. Instalasinya cukup mudah dan simple.

Beberapa hari ini saya baru sadar blog yang saya simpan di domain zenness.id ini mati. Saya belum tahu apa yang membuat blog itu mati. Saya tidak mau ambil pusing mencari tahu kenapa blog zenness.id mati. Saya akan coba backup dan restore blog zennes.id ini.

Note: tutorial ini ditujukan untuk yang sudah terbiasa menggunakan bash script dan sedikit Ops. Beberapa nama, alamat IP, dan password bisa Anda sesuaikan dengan nama, alamat IP, dan password Anda.

TLDR;

// Backup asset
sudo scp nadiar@103.3.60.48:/var/www/ghost/* ./

// Dump database
mysqldump -u root -pPUT_PASSWORD_HERE > ./backup.sql

// Backup database
sudo scp nadiar@103.3.60.48:/home/nadiar/backup.sql ./

// Install brand new Ghost blog
// I am following this tuts: https://www.linode.com/docs/guides/how-to-install-ghost-on-ubuntu-18-04/

// Restore database
// Login mysql
mysql -u root -p

// Mysql
mysql> DROP DATABASE your_ghost_database;
mysq> CREATE DATABASE your_ghost_database;
mysql> quit

// Restore MySQL
mysql -u root -pPUT_PASSWORD_HERE < backup.sql

// Restore file using scp or ftp

// Correct permission
cd /var/www/ghost
find ./ -type d -exec chmod 774 {} \;
find ./ -type f -exec chmod 664 {} \;

Backup Asset

Pertama, kita login ke server Linode-nya dahulu. Di sini saya mematikan user root untuk login ke SSH. Saya membuat user baru untuk login ke Linode.

ssh nadiar@zenness.id

Selanjutnya saya akan melakukan backup file-file Ghost blog nya dahulu. Pertama saya cari dulu di mana saya menyimpan asset-asset penjunjang Ghost blog.

ghost ls

Okey, dengan command itu, saya tahu dimana Ghost blog saya di install.

Result dari command ghost ls

Selanjutnya saya akan coba backup semua file yang berada di /var/www/ghost dengan scp. Untuk itu saya akan membuka terminal baru, dan backup dari lokal komputer saya

sudo scp nadiar@103.3.60.48:/var/www/ghost/* ./

Sepertinya scp secara wildcard ini gagal

config.production.json                                                                                 100%  493    20.7KB/s   00:00    
scp: /var/www/ghost/content: not a regular file
scp: /var/www/ghost/current: not a regular file
scp: /var/www/ghost/system: not a regular file
scp: /var/www/ghost/versions: not a regular file

Oke, saya akan zip dulu direktori /var/www/ghost/ lalu backup lagi dengan scp

cd /var/www
sudo zip -r ghost.zip ghost

Setelah membuat zip file, melalui terminal yang satunya lagi, saya akan backup ghost.zip ke komputer lokal saya.

sudo scp nadiar@103.3.60.48:/var/www/ghost.zip ./
Proses download ghost.zip

Backup MySQL Database

Okey, selanjutnya adalah melakukan backup database sql. Pertama kita login dulu ke MySQL dan cari tahu nama database yang akan kita backup. Saya login sebagai user root.

mysql -u root -h localhost -p
Tampian ls database di MySQL

Oke, saya sudah tahu database yang akan saya backup. Selanjutnya saya akan melakukannya dengan comand mysqldump

cd ~
mysqldump -u root -p zenness > ./backup.sql

Setelah berhasil, saya akan download database tersebut ke lokal komputer saya dengan scp lagi

sudo scp nadiar@103.3.60.48:/home/nadiar/backup.sql ./

Okey, semuanya berhasil dengan sempurna. Next step, saya akan install ulang dulu Linode saya dengan OS LTS terbaru, dan install fresh Ghost blog. Setelah itu saya akan coba restore ke sana.

Restore Asset dan Database

Pertama, saya rebuild OS Linode saya dengan Ubuntu 20.04 LTS. Saya upgrade dari sebelumnya 18.04 LTS. Tujuannya agar saya mendapatkan OS paling baru dan fresh.

Rebuild Linode dengan Ubuntu 20.04 LTS

Selanjutnya saya akan melakukan install ulang Ghost blog. Untuk install Ghost saya mengikuti tutorial Linode Installing Ghost CMS on Ubuntu 18.04 LTS. Tidak perlu khawatir, meski OS nya berbeda versi, tetapi ini tetap bisa kita ikuti.

Restore Asset

Setelah berhasil install blog ghost baru, pertama kita akan coba me-restore file yang sebelumnya telah kita backup. Di sini saya memakai command unzip untuk unziping zip file.

Pertama, kita copy file zip ke server dari komputer lokal kita

sudo scp ./ghost.zip nadiar@103.3.60.48:/var/www/ghost/

Kedua kita login ke ssh untuk unzip file tersebut.

ssh nadiar@103.3.60.48
cd /var/www/ghost
unzip ghost.zip

Sampai tahap ini file yang kita backup seharusnya sudah selesai kita restore. Jika Anda menemukan masalah permission, Anda bisa merubah permissionnya ke:

find ./ -type d -exec chmod 774 {} \;
find ./ -type f -exec chmod 664 {} \;

Restore Database

Untuk restore database, caranya hampir sama dengan restore file. Bedanya pada tahap akhir, ktia akan mengganti isi database default Ghost dengan database yang telah kita backup sebelumnya.

Pertama, kita copy backup.sql ke server dari komputer lokal kita.

sudo scp ./backup.sql nadiar@103.3.60.48:~

Selanjutnya kita login ke server lalu login ke mysql server.

ssh nadiar@103.3.60.48
mysql -u root -p

Setelah masuk mysql server, kita akan hapus konten dari database default Ghost blog, dan mengantinya dengan backup.sql yang sebelumnya telah kita upload.

mysql> DROP DATABASE your_ghost_database;
mysq> CREATE DATABASE your_ghost_database;
mysql> quit
mysql -u root -pPUT_PASSWORD_HERE < backup.sql

SELESAI

Sampai tahap ini seharusnya blog Ghost kita telah berhasil kita restore

End-Core

Perlu di catat sekali lagi, tutorial ini ditujukan untuk mereka yang sudah terbiasa dengan bash scripting dan mengerti sedikit banyak tentang Ops. Beberapa nama, ip, dan password di atas bisa Anda sesuaikan dengan nama dan password yang Anda miliki.

Selanjutnya, saya mungkin akan menulis bagaimana meng-automasi backup blog Ghost tersebut. Saya kepikiran untuk membackup nya di amazon S3.

Referensi:
1. Installing Ghost CMS on Ubuntu 18.04 LTS
2. Ghost folder & file permissions

Leave a comment

Leave a Reply

%d bloggers like this: