Cara Install Ghost CMS 3.0 di panel DirectAdmin pada CentOS 7

ghost Nov 27, 2019

Ghost CMS adalah platform untuk blogging open source menggunakan node.js dengan lisensi MIT, ditulis dengan javascript dengan rilis perdana tahun 2013 silam. saat tulisan ini dibuat, versi stabil Ghost CMS saat ini adalah 3.0.2. Sekedar informasi, blog cloudborneo ini pun menggunakan Ghost CMS 3.0.2, saya tulis pada artikel basa - basi dipostingan awal.

ghost.org landing page

untuk CMS yang masih baru, ghost bisa dikatakan sukses, bagi anda tentu tidak awam lagi dengan platform blogging wordpress, dengan cakupan dan fitur yang sangat lengkap, wordpress sudah digunakan lebih dari 33% seluruh website didunia sejak rilis tahun 2003.

Dengan jarak hampir 10 tahun, tentu tidak bisa disamakan antara Wordpress CMS dan Ghost CMS, namun bagi sebagian orang yang menganggap wordpress terlalu kompleks untuk setup awal, dan hanya ingin fokus pada publishing, maka ghost adalah pilihan yang bagus.

Installasi Ghost CMS di Panel DirectAdmin

Sudah banyak yang membahas tentang cara installasi Ghost CMS, sebagaimana kita ketahui, Ghost CMS menggunakan platform dengan webserver node.js, sedangkan directadmin hanya mendukung apache dan nginx. sehingga mengharuskan kita melakukan konfigurasi manual, memanfaatkan nginx sebagai reverse proxy.

Sebelum installasi Ghost CMS, anda harus terlebih dahulu melakukan installasi node.js, untuk petunjuk installasi nodejs, dapat dibaca pada artikel https://cloudborneo.com/persiapan-konfigurasi-environment-di-linux-untuk-developer-website/. Akan lebih mudah jika kita melakukan installasi Ghost pada panel yang sudah mendukung node.js seperti CPanel, pada DirectAdmin kita harus melakukan beberapa penyesuaian manual, dan kendala lain yaitu Ghost CMS baru mendukung sistem operasi Ubuntu secara official, sehingga installasi pada CentOS saya dengan panel DirectAdmin tidak semudah pada Ubuntu.

Download Ghost CMS

Login dengan ssh pada akun DirectAdmin anda, download versi terbaru dari ghost, kemudian extract pada directory yang diinginkan :

# pindah ke directory yang diinginkan
cd /home/borneo/

# buat folder ghost
mkdir ghost
cd ghost/

# download ghost cms
wget https://ghost.org/zip/ghost-latest.zip

unzip ghost-latest.zip
download ghost cms

Install Ghost CMS untuk Production

untuk installasi ghost, bisa untuk production atau depelopment, saya langsung melakukan installasi dengan environment production, jalankan perintah npm berikut :

npm install --production
install ghost cms

tunggu beberapa saat hingga proses installasi selesai.

Configurasi Ghost config.development.json

konfigurasi Ghost CMS untuk environment development, edit file berikut :

nano core/server/config/env/config.development.json
edit config.development.json

berikut isi file config.development.json, url aplikasi ghost adalah http://localhost:2368 (dengan port 2368)

{
    "url": "http://localhost:2368",
    "database": {
        "client": "sqlite3",
        "connection": {
            "filename": "content/data/ghost-dev.db"
        },
        "debug": false
    },
    "paths": {
        "contentPath": "content/"
    },
    "privacy": {
        "useRpcPing": false,
        "useUpdateCheck": true
    },
    "useMinFiles": false,
    "caching": {
        "theme": {
            "maxAge": 0
        },
        "admin": {
            "maxAge": 0
        }
    }
}
config ghost cms development

Configurasi Ghost config.production.json

konfigurasi Ghost CMS untuk environment production, edit file berikut :

nano core/server/config/env/config.production.json
edit config.production.json

berikut isi file config.production.json, sesuaikan konfigurasi untuk connection dengan database, contoh saya menggunakan mysql, kemudian isikan juga konfigurasi untuk email.

{
    "database": {
        "client": "mysql",
        "connection": {
            "host"     : "127.0.0.1",
            "user"     : "user_mysql",
            "password" : "pass_mysql",
            "database" : "db_mysql"
        }
    },
    "mail": {
        "from": "admin@cloudborneo.com",
        "transport": "SMTP",
        "options": {
            "host": "mail.cloudborneo.com",
            "port": 587,
            "auth": {
                "user": "admin@cloudborneo.com",
                "pass": "pass_email"
            }
        }
    },
    "paths": {
        "contentPath": "content/"
    },
    "logging": {
        "level": "info",
        "rotation": {
            "enabled": true
        },
        "transports": ["file", "stdout"]
    }
}
config ghost cms production

setelah selesai dengan konfigurasi, coba jalankan ghost dengan perintah berikut :

npm start --production
start ghost cms

Ghost cms secara default akan running di port 2368 dan port ini tidak listening secara public, sehingga memerlukan nginx sebagai reverse proxy untuk port 80 dan 443.

Konfigurasi Nginx sebagai Reverse Proxy Ghost CMS

jika anda tidak menggunakan panel, lokasi file configurasi nginx berada pada folder /etc/nginx, namun jika anda menggunakan panel DirectAdmin, maka lokasinya berbeda, dan sayangnya kita akan sedikit sulit merubah konfigurasi nginx pada DirectAdmin, karena konfigurasi akan selalu digenerate ulang oleh DirectAdmin jika ada perubahan konfigurasi pada panel. solusinya adalah merubah file konfigurasi nginx menjadi IMMUTABLE.

# edit nginx config directadmin
nano /usr/local/directadmin/data/users/[username]/nginx.conf
edit nginx config

sesuaikan konfigurasi nginx seperti berikut ini :

# http port 80
server
{
        listen [ip-public-server]:80;
        server_name cloudborneo.com www.cloudborneo.com ;
        access_log /var/log/nginx/domains/cloudborneo.com.log;
        access_log /var/log/nginx/domains/cloudborneo.com.bytes bytes;
        error_log /var/log/nginx/domains/cloudborneo.com.error.log;
        if ($http_x_forwarded_proto != 'https') {
                return 301 https://$host$request_uri;
        }
        add_header Strict-Transport-Security max-age=31536000;
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options "ALLOW-FROM https://cloudborneo.com/" always;
        location /
        {
            proxy_pass http://127.0.0.1:2368;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-Proto https;
            proxy_set_header   X-Forwarded-Host $server_name;
            proxy_read_timeout 36000s;
        }
}


# ssl port 443 https
server
{
        listen [ip-public-server]:443 ssl http2;
        server_name cloudborneo.com www.cloudborneo.com ;
        access_log /var/log/nginx/domains/cloudborneo.com.log;
        access_log /var/log/nginx/domains/cloudborneo.com.bytes bytes;
        error_log /var/log/nginx/domains/cloudborneo.com.error.log;
        ssl_certificate /usr/local/directadmin/data/users/borneo/domains/cloudborneo.com.cert.combined;
        ssl_certificate_key /usr/local/directadmin/data/users/borneo/domains/cloudborneo.com.key;
        add_header Strict-Transport-Security max-age=31536000;
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options "ALLOW-FROM https://cloudborneo.com/" always;
        	        location /
        {
            proxy_pass http://127.0.0.1:2368;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-Proto https;
            proxy_set_header   X-Forwarded-Host $server_name;
            proxy_read_timeout 36000s;
        }
}

nginx reverse proxy config

setelah selesai, jangan lupa untuk simpan dan rubah file menjadi IMMUTABLE agar config ini tidak akan dirubah secara otomatis oleh DirectAdmin, untuk merubah file menjadi IMMUTABLE, gunakan perintah berikut :

#MAKE IMMUTABLE
chattr +i /usr/local/directadmin/data/users/[username]/nginx.conf
#MAKE MUTABLE
chattr -i /usr/local/directadmin/data/users/[username]/nginx.conf
IMMUTABLE dan MUTABLE file

jalankan perintah nginx -t untuk testing configurasi nginx anda, jika tidak ada kesalahan, restart nginx dan directadmin

# test nginx config
nginx -t

# restart nginx
service nginx restart

# restart directadmin
service directadmin restart
restart nginx

setelah selesai, akses url yang sudah kita buat pada nginx virtualhost sebelumnya. jika sukses, maka proses selanjutnya adalah installasi via GUI, ikuti perintah dan langkah-langkahnya.

M. Najamudin Ridha

Penikmat coffe cappucino ice, apalagi tanpa gula. Menyukai teknologi open source, terutama yang berbasis web dan mobile, senang mencoba hal - hal seperti linux, sysadmin, database dan programming