Jadi ceritanya saya penasaran sama blogging platform yang sedang naik daun, Ghost.
Berbeda dengan platform lain seperti WordPress, yang berkembang menjadi sistem manajemen konten, Ghost membawa misi yang sangat sederhana, yaitu alat untuk ngeblog dan fokus hanya untuk ngeblog.
Namun rupanya kesederhanaan Ghost tidak sesederhana dalam instalasi, karena Ghost menggunakan node.js sebagai basis pemrogramannya. Sayangnya tidak semua hosting mendukung node.js, karena memang bukan basis pemrograman yang umum dan cenderung baru.
Shared hosting biasanya tidak mendukung instalasi macam-macam. Maka jika ingin mencoba sebaiknya menggunakan layanan VPS atau dedicated server. Saya menggunakan layanan dari DigitalOcean. Bisa juga dicoba diinstal di komputer lokal.
Karena saya menggunakan Ubuntu 12.04, saya mengikuti tutorial dari Firman @kakilangit.
Di halaman tutorial itu sudah cukup lengkap, mulai dari menginstal node.js dari repositori, menginstal Ghost, melakukan konfigurasi, hingga menjalankannya.
Jika ingin menjalankan Ghost tanpa ribet menggunakan web server, cara yang dilakukan Firman sudah cukup. Ghost bisa berjalan di port 80 (secara default Ghost menggunakan port 2368) dengan manis dan ringan.
Namun saya menginginkan hal yang berbeda. Saya sudah memiliki situs yang berjalan di atas Nginx dan berbasis PHP. Port 80 yang sudah digunakan Nginx tidak bisa digunakan oleh Ghost. Satu-satunya cara ya melempar request dari Nginx ke Ghost lewat proxy.
Pada berkas konfigurasi Nginx, cukup buat konfigurasi baru yang kira-kira seperti ini:
server { server_name sitename; location / { proxy_pass http://127.0.0.1:2368; proxy_set_header Host $host; proxy_buffering off; } }
Lalu pada konfigurasi Ghost di config.js
dibuat semacam ini:
production: { url: 'http://sitename', mail: {}, database: { client: 'sqlite3', connection: { filename: path.join(__dirname, '/content/data/ghost-dev.db') }, debug: false }, server: { host: '127.0.0.1', port: '2368' } }
Di tutorialnya Firman, dia menggunakan database bawaan Ghost, yaitu sqlite3. Saya memilih menggunakan MySQL yang sudah ada karena saya ingin semua data tersimpan dalam satu tempat.
Caranya tinggal mengubah konfigurasi di config.js
menggunakan MySQL seperti ini:
Di file konfigurasi, cukup ubah bagian:
database: { client: 'mysql', connection: { host: 'localhost', user: 'user', password: 'password', database: 'database', charset: 'utf8' }, debug: false },
Sayangnya Ghost belum mendukung multisite. Jika ingin menjalankan lebih dari satu Ghost pada satu server, kita harus membuat direktori baru, memekarkan berkas instalasi Ghost pada direktori tersebut, lalu menjalankannya pada port yang berbeda, misal port 2369, 2370, dan sebagainya.
Menambah Ghost artinya konfigurasi Nginx-nya juga perlu disesuaikan.
Berikut ini adalah contoh situs yang berjalan menggunakan Nginx dan PHP dan situs yang menggunakan Ghost yang berada dalam satu server. Jika dilihat dari header-nya akan terlihat.
miracle.matriphe.com | ghost.matriphe.com |
---|---|
HTTP/1.1 200 OK Server: nginx/1.1.19 Date: Tue, 10 Dec 2013 20:26:25 GMT Content-Type: text/html Connection: keep-alive X-Powered-By: PHP/5.5.4-1+debphp.org~precise+1 |
HTTP/1.1 200 OK Server: nginx/1.1.19 Date: Tue, 10 Dec 2013 20:26:39 GMT Content-Type: text/html; charset=utf-8 Content-Length: 3061 Connection: keep-alive X-Powered-By: Express Set-Cookie: connect.sess=s%3Aj%3A%7B%22_csrf%22%3A%22MuYIL5fTcB6yhbfINORYEkYf%22%7D.ZIPN%2F5b5EnYqPzxKGCl4LyMVCePSzkpeBT3NyB5k9CE; Path=/; Expires=Wed, 11 Dec 2013 08:26:39 GMT; HttpOnly |