由以前慣用的Wordpress轉到來Ghost,可真學習了不少東西,首先是慣用的http server改成Node.js,跟以前安裝一個應用程式完全不同的概念。

為什麼要用Ghost?

2015年由NYS網站開始,幾乎所有平台也轉了做Wordpress,這個最多人使用的CMS平台。不過好景不常,用起來很多Functions也要安裝Plugin,Multipurpose的theme不便宜,而且多數配搭了Visual Composer,使用起來看似很方便,但按來按去還不如我自已用CSS比較快。

最後在朋友介紹下轉用Ghost

Ghost是什麼鬼?

Ghost是一個open source的發佈平台,基本上是一個極簡版的Wordpress,需設置在運行Node.js的伺服路上。

新手上路

  • 安裝環境
  • Ubuntu 16.04.1 LTS
  • Ghost 0.11.4
  • Node.js 6.9.4
  • npm 3.10.10

第一次使用Node.js,有點緊張,直接就用apt來安裝

$ sudo apt-get install nodejs

直接使用apt是錯誤的決定,因為Ghost需要Node.js 0.10.30以上及npm 1.4.21以上。

$ sudo apt-get update
$ sudo apt-get install npm

再來一次,先更新apt再安裝npm(Node Package Manager)

npm是一個Node.js的管理系統,幾乎什麼有關Node.js的東西也是靠他安裝,只是使用時有點慢(聽說用yarn比較快,但我不太會用)

$ sudo npm install -g n

然後用npm來安裝n-g是global,即是全部位置也可以使用他

$ n
  ο node/6.9.4
    node/7.4.0

直接用指令n,可以見到現在的穩定版本及最新版本編號,Ctrl C可以跳回指令畫面

$ n 7.4.0

n+版本編號即可安裝指定編號的Node.js

$ n stable

安裝最新穩定版本

$ n latest

也可以選擇安裝最新版本

$ node -v
v6.9.4

安裝完成後node -v測試一下

然後安裝SQLite3,這是一個超輕量的數據庫,其實Ghost也可以用MySQL之類傳統數據庫,不過用SQLite3的話設定更簡易

$ sudo apt-get install sqlite3

簡單一句已經完成安裝

$ sudo mkdir /var/www/ghost/Databases/
$ cd /var/www/ghost/Databases/

開新資料夾來存放Databases

$ sqlite3 ghost.db

生成ghost用的db,這樣就完成不用設定其他,然後用.quit離開

開始安裝

準備工作都做好了可以正式開始安裝Ghost

$ curl -L https://ghost.org/zip/ghost-latest.zip -o ghost.zip

直接由Ghost官網下載最新版本

$ unzip -uo ghost.zip -d /var/www/ghost/

解壓到你要安裝的位置

$ cd /var/www/ghost

跳到安裝的資料夾

$ sudo npm install --production

安裝Production版本

$ npm start

測試一下是否能運作

如果沒有變更過設定的話使用你伺服器ip + :2368就可以見到demo 127.0.0.1:2368

一旦開啟Ghost後就什麼都沒辦法動,先按Ctrl C離開

設定網址

我本身用Nginx做web server,所以我就直接用Nginx來做反向伺服器

$ sudo apt-get install nginx

如果沒有Nginx可以簡單裝一下

$ sudo nano /etc/nginx/sites-available/ghost

sites-available開一個ghost的設定檔

server {
  listen 80 default_server;
  listen [::]:80 default_server;
  server_name www.ghost.com ghost.com;

  location / {
    proxy_pass http://127.0.0.1:2368;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_set_header X-NginX-Proxy true;
    proxy_buffering off;
    proxy_set_header X-Forwarded-Proto $scheme;  
  }
}

將網址反向指到127.0.0.1:2368,然後按Ctrl X關閉及Save

$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
$ nginx: configuration file /etc/nginx/nginx.conf test is successful

測試一下設定有沒有問題

$ sudo service nginx reload

Reload一下載入新的設定

然後就要處理一下Ghost的設定檔了

$ sudo nano /var/www/ghost/config.js

如果沒有config.js就用config.example.js複制一個

config = {
    // ### Production
    // When running Ghost in the wild, use the production environment.
    // Configure your URL and mail settings here
    production: {
        url: 'http://www.ghost.com/',
        mail: {},
        database: {
            client: 'sqlite3',
            connection: {
                filename: path.join(__dirname, '/var/www/ghost/Databases/ghost.db')
            },
            debug: false
        },

        server: {
            host: '127.0.0.1',
            port: '2368'
        }
    },

url設定為你的網址,database中的connection改成你的db file位置

接下來可以用正式的Production模式開動

$ cd /var/www/ghost/
$ sudo npm start --production

使用你的網址應該就直接可以看到Ghost的畫面了

在網址後加上/ghost就可以見到開新user的畫面 e.g. http://www.ghost.com/ghost


設定完基本訊息後就可以登入後台開始你的第一篇文章了

管理

由於在Node.js上Ghost是一個應用程式般存在,不像一般http server般一直自動存活,所以要使用一些其他程式來自動重啓及管理Ghost的運作,當中常用的有foreverPM2,其中PM2有比較完善的管理能力,所以我就使用了PM2作管理的程式。

$ sudo npm install -g pm2

使用npm安裝pm2

$ echo "export NODE_ENV=production" >> ~/.profile
$ source ~/.profile
$ pm2 kill
$ pm2 start index.js --Ghost ghost
$ pm2 dump
$ sudo pm2 startup ubuntu

如此設定下就會在開機後自動重啓Ghost,中間的--Ghost可以改成你想叫的名稱,最後startup ubuntu改成你伺服器的系統即可

$ sudo pm2 list
┌───────┬──────┬────────┬───┬─────┬────────────┐
│ Name  │ mode │ status │ ↺ │ cpu │ memory     │
├───────┼──────┼────────┼───┼─────┼────────────┤
│ Ghost │ fork │ online │ 2 │ 0%  │ 105.4 MB   │
└───────┴──────┴────────┴───┴─────┴────────────┘

pm2 list就可以見到現在你的Ghost是什麼狀況了

後記

Ghost雖然安裝上沒有Wordpress方便,功能也只有基本Wordpress的程度,但是以單純一個Blog來說還是不錯的選擇,剛好打算改用Node.js來做Front-end的東西,所以就改用了Ghost。以上是我安裝時的小心得,因為第一次做用Node.js花了不少時間,如有問題也可以留言給我!