從0開始搗鼓ghost blog

後記

昨天第一次據說ghost,一時興起今天花了半天的時間從0開始搗鼓,node只會基本使用,js也記不清多久沒碰過了,不涉及高級使用姿式,像改主題、改js文件支持某些特性等等。我的能力不夠,也沒有興趣深刻研究,就是爲了看看這東西怎麼用。node

本身安裝部署的部分就是徹底照搬官方文檔,沒有摻雜任何原創性的姿式,可能略有修改或說明不許確的地方徹底是我的失誤。mysql

Docker部分是本身嘗試用的,由於平時幾乎不本身裝任何服務了,能用docker的就用docker了,這裏也不涉及docker安裝和使用的相關說明。nginx

最後吐槽一點:徹底配置結束後我把這篇所有粘貼發佈到ghost,那叫一個難看,一點都不優雅,看來美仍是須要精心調整的啊。最可惡的是居然不支持表格...,查了一下,有方法支持,可是到此爲止對我我的來說已經沒有必要繼續了。git

爲何把後記放到前面?由於看到這裏若是沒興趣能夠不要繼續浪費時間了...github

安裝

安裝node

  • node官網下載安裝包sql

  • 傻瓜安裝,會同時安裝node和npm (macOS)docker

  • node版本不要過高,官方目前支持到4.xLTS數據庫

安裝並運行ghost

  • 下載ghost包,下載地址npm

  • 找個目錄解壓,注意解壓目錄就是安裝目錄json

  • 終端進入解壓目錄執行 npm install -production,等提示,沒錯誤就OK,有錯誤解決錯誤

  • 安裝結束後執行:npm start就開啓了ghost服務

  • 訪問localhost:2368查看主頁,後臺管理地址爲localhost:2368/ghost

部署:保持運行

使用Forever保持Ghost在後臺運行並在進程crash時重啓服務

  • 安裝forever

    npm install forever -g
  • ghost目錄運行

    NODE_ENV=production forever start index.js
  • 結束進程與查看進程

    forever stop index.js
    forever list

使用PM2,這個比forever強大

  • 安裝PM2

    npm install pm2 -g
  • 運行ghost服務

    NODE_ENV=production pm2 start index.js --name "Ghost"
  • 中止、重啓服務

    pm2 stop Ghost
    pm2 restart Ghost
    # reload熱重啓
    pm2 reload Ghost
  • 遠程部署,不須要,須要時再看pm2文檔@deploy

  • 初始化腳本,服務自啓動

    pm2 startup
    # 保存當前進程
    pm2 save

Supervisor

  • 安裝supervisor並啓動

    # debian/ubuntu
    apt-get install supervisor
    # fedora/centos
    yum install supervisor
    # 運行
    service supervisor start
  • 建立ghost啓動腳本 /etc/supervisor/conf.d/ghost.conf

    cat > /etc/supervisor/conf.d/ghost.conf
    [program:ghost]
    command = node /path/to/ghost/index.js
    directory = /path/to/ghost
    user = ghost
    autostart = true
    autorestart = true
    stdout_logfile = /var/log/supervisor/ghost.log
    stderr_logfile = /var/log/supervisor/ghost_err.log
    environment = NODE_ENV="production"
    ctrl-d
  • 啓動與中止ghost

    supervisorctl start ghost
    supervisorctl stop ghost

初始化腳本: ubuntu

  • 建立腳本

    sudo curl https://raw.github.com/TryGhost/Ghost-Config/master/init.d/ghost -o /etc/init.d/ghost
  • 打開該文件修改:GHOST_ROOT爲ghost安裝目錄,DAEMON爲node運行目錄

  • 建立用戶並修改權限

    sudo useradd -r ghost -U
    sudo chown -R ghost:ghost /path/to/ghost
    sudo chmod 755 /etc/init.d/ghost
  • ghost服務管理

    sudo service ghost start
    sudo service ghost stop
    sudo service ghost restart
    sudo service ghost status
  • 註冊系統啓動

    sudo update-rc.d ghost defaults
    sudo update-rc.d ghost enable
  • 注意當前用戶權限

    sudo adduser USERNAME ghost

配置詳解(config.js)

安裝ghost後,會在安裝目錄生成默認配置文件config.js,內容複製自config.example.js文件,能夠修改配置域名、郵箱、數據庫、資源目錄等等。

配置項:

名稱 是否必須 描述
url Y 設置blog的url
mail Y 設置郵件,用於找回密碼和邀請成員
database Y 配置數據庫,默認使用sqlite3
server Y ghost服務監聽地址與端口
compress N 開啓gzip壓縮
fileStorage N 開啓本地存儲
updateCheck N 禁止使用,用privacy.useUpdateCheck代替
privacy N 功能管理,如update check,rpc ping, google fonts
forceAdminSSL N 強制開啓後臺管理SSL訪問,需配置SSL
urlSSL N 定義第二個url用於SSL訪問
paths N 自定義content目錄
maintenance N 維護模式
referrerPolicy N 配置referrer metadata屬性

配置說明

  • url
    配置ghost服務URL,須要保持與訪問地址一致,指定完整域名,例如:http://ghost-blog.com

  • email
    郵箱用於找回密碼,邀請成員,官方說後面會增長郵件訂閱等更多服務

mail: {
        // 自定義from字段:默認爲 Blog Title <url>
        from: 'name@address.com',
        transport: 'SMTP',
        options: {
            host: 'smtp.126.com',
            secureConnection: false,
            port: 25,
            auth: {
                user: 'name@126.com',
                pass: 'xxxxxx'
            }
        }
    }
  • ssl 配置

    • 第一種方式是修改url配置前綴https://,開啓全站SSL

    • 第二種只開啓管理後臺SSL:forceAdminSSL: true, http訪問會自動跳轉

    • 也能夠禁止http訪問不跳轉,直接返回403:forceAdminSSL: {redirect: false}

  • database
    ghost默認配置使用SQLite做爲數據庫存儲,但同時也支持MySQL和Postgres,Postgres支持有點小問題,這裏不作說明,mysql配置實例:

database: {
        client: 'mysql',
        connection: {
            host     : '0.0.0.0',
            user     : 'ghost',
            password : '',
            database : 'ghost_testing',
            charset  : 'utf8'
        },
        // 能夠配置pool修改鏈接池大小,這裏是默認值
        pool: {
            min: 2;
            max: 10
        }
    },
  • server
    配置ghost服務監聽地址:

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

    # 也能夠配置爲socket監聽:
    server: {
        socket: {
            path: 'path/to/socket.sock',
            permissions: '0666'
        }
    }
  • gzip compression
    默認開啓,須要關閉修改:compress: false

  • fileStorage
    開啓/關閉文件存儲,有些服務器不支持持久存儲的文件系統,因此禁止上傳圖片,關閉後:fileStorage: false,上傳圖片時將只容許輸入圖片url

  • paths
    ghost默認的content目錄就在安裝目錄,能夠經過paths配置自定義路徑,如:

paths: {
        contentPath: path.join(__dirname, 'path/to/content/dir')
    },
  • privacy
    須要關閉全部可配置的功能科室直接配置useTinfoil,開啓後全部privacy配置都將失效

privacy: {
        useTinfoil: true
    }

    //單獨配置每一項:
    privacy: {
        // 更新檢查,不訂閱官方郵件不會收到通知
        useUpdateCheck: false,
        // 使用谷歌字體服務,但不影響theme中使用的Google Fonts
        useGoogleFonts: false,
        // 使用哦Gravatar檢測服務,默認會檢查郵箱是不是Gravatar帳戶
        useGravatar: false,
        // 使用RPC Ping服務,默認開啓
        useRpcPing: false,
        useStructureData: false
    }
  • maintenance
    開啓維護模式將返回503響應:maintenance: { enabled: true }

  • referrerPolicy
    配置referer metadta屬性,更多關於referrer policy參考W3C@referrer

Nginx代理

  • 安裝nginx,不在這裏扯

  • 配置

# 建立虛擬主機配置文件
    cat > /etc/nginx/sites-available/ghost.conf
    server {
        listen 80;
        server_name example.com;
    
        location / {
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   Host      $http_host;
            proxy_pass         http://127.0.0.1:2368;
        }
    }
    ctrl-d
    # 軟鏈配置文件
    sudo ln -s /etc/nginx/sites-available/ghost.conf /etc/nginx/sites-enabled/ghost.conf
  • 重啓nginx生效

    sudo service nginx restart
  • 解析域名

SSL配置

  • 獲取證書,正式的話就花錢買吧

  • 複製證書到nginx目錄

mkdir /etc/nginx/ssl
    cp server.crt /etc/nginx/ssl/server.crt
    cp server.key /etc/nginx/ssl/server.key
  • 修改ghost-nginx配置/etc/nginx/sites-available/ghost.conf

server {
        listen 80;
        listen 443 ssl;
        server_name example.com;
        ssl_certificate        /etc/nginx/ssl/server.crt;
        ssl_certificate_key    /etc/nginx/ssl/server.key;
         
        location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_pass http://127.0.0.1:2368;
        }
     }
  • 重啓nginx

  • 強制要求admin用戶使用HTTPS,修改配置文件:forceAdminSSL: true

升級

準備工做

  • 備份
    登陸管理後臺,訪問Labs設置頁:yourblog.com/ghost/settings/labs/,導出數據.json文件,備份content目錄

  • 確認服務重啓命令
    升級後須要重啓服務,確認安裝時使用的服務管理方式forever/pm2/supervisor

  • 跨版本升級,和我沒大關係

升級步驟

  • 下載新版ghost

    curl -LOk https://ghost.org/zip/ghost-latest.zip
  • 解壓到一個臨時目錄,不要直接覆蓋原安裝目錄

    unzip ghost-latest.zip -d ghost-temp
  • 進入當前ghost安裝目錄,刪除core目錄

    cd path/to/ghost
    rm -rf core
  • 進入臨時解壓目錄,複製文件

    cd path/to/ghost-temp
    cp -R core path/to/ghost
    cp index.js *.json path/to/ghost
    cp -R content/themes/casper path/to/ghost/content/themes
  • 回到安裝目錄升級ghost

    cd path/to/ghost
    chown -R ghost:ghost *
    npm install --production
  • 重啓服務

    # 注意使用安裝時的服務管理方式
    service ghost restart
    forever restart index.js
    pm2 restart ghost

Docker方案: 去他的一坨~

下載nginx、ghost鏡像

這兩個服務都有官方鏡像源,直接下載(非必須)

docker pull ghost
docker pull nginx

運行ghost

# 運行並掛載本地content目錄到容器
docker run --name ghost \
-e NODE_ENV=production \
-v /path/to/ghost-content:/var/lib/ghost \
--restart=always \
-d ghost

# 後面使用nginx代理,因此這裏不作端口映射,默認暴露`:2368`端口
# content目錄能夠包含自定義配置文件config.js,默認會自動複製config.example.js文件到content目錄config.js
# 建議提早準備好本身的配置文件,默認production的配置是不完整的
# 注意NODE_ENV環境變量,不設置爲production時默認爲development
# 每次修改完配置文件重啓: docker restart ghost

運行nginx

# 運行並掛載配置文件
docker run --name nginx \
-v path/to/nginx.conf:/etc/nginx/nginx.conf \
-v path/to/ghost.conf:/etc/nginx/conf.d/ghost.conf \
--link ghost:GHOST_HOST \
--restart=always \
-p 80:80 \
-d nginx

# 注意這裏須要同時掛載nginx服務配置和ghost代理配置
# 兩個配置文件雖然不是必須從容器外掛載,但仍是分離開方便維護
# 注意修改上面示例中 ghost.conf 文件:proxy_pass: http://GHOST_HOST:2368

參考資料

相關文章
相關標籤/搜索