從零開始創(chuàng)建一個(gè)ghost博客

教你從零開始如何從一個(gè)VPS上搭建起來屬于自己的一個(gè)Ghost小而美的博客。

這是我的GHOST博客地址

先選購(gòu)一家VPS服務(wù)提供商。

這里我購(gòu)買的是國(guó)外的VPS服務(wù)提供商,主要還是便宜,還有某些不可描述的原因。
在VPS管理面板上,我選擇安裝了一個(gè)ubuntu 16.04 x64的系統(tǒng)。

1. 修改ssh端口

默認(rèn)的ssh端口(22)被人掃描的幾率實(shí)在太大,所以準(zhǔn)備將其換到 3600 去。


這里由于服務(wù)提供商已經(jīng)安裝net-tools和關(guān)閉了防火墻,所以就沒有進(jìn)行這方面操作了。

  • 修改sshd 端口
sudo vim /etc/ssh/sshd_config
找到 #Port 22 修改為如下:
Port 3600
  • 重啟sshd服務(wù)
sudo systemctl restart sshd

這里就可以使用ssh工具以新的端口號(hào)連接進(jìn)去了,注意別關(guān)閉原來的ssh連接,萬一沒改對(duì)還可以有機(jī)會(huì)嘗試改回來。


2. 安裝nginx、node.js、ghost


  • 以apt-get的方式安裝nginx.
sudo apt-get install nginx
// 啟動(dòng)nginx,可以直接通過IP地址訪問得到
/etc/init.d/nginx start
// 配置nginx 開機(jī)自啟動(dòng)
systemctl enable nginx.service

因還要申請(qǐng)證書,nginx配置稍后講述。

  • 安裝node.js(ghost只支持部分node.js版本)。

由于ghost給出了支持node.js的范圍,這里我在范圍中選擇了如下node.js

node-v0.10.48-linux-x64

以上node.js是一個(gè)x64二進(jìn)制的node.js。沒下載源碼版主要還是想省下那堆編譯苦等的時(shí)間。

解壓并修改環(huán)境變量安裝node.js。

tar -xf node-v0.10.48-linux-x64.tar.gz
vim /etc/profile   // 在文件尾部追加如下內(nèi)容
// 解壓到root下的,不是的話修改為你的解壓地址。
export NODE_HOME=/root/node-v0.10.48-linux-x64
export PATH=$PATH:$NODE_HOME/bin
export NODE_PATH=$PATH:$NODE_HOME/lib/node_modules
// 生效
source /etc/profile
  • 安裝ghost。

因?yàn)間host使用npm install --production的方式安裝,比如sqllite3死活下載不回來,這里就不折騰了。使用ghost 中文網(wǎng)提供好相關(guān)module的版本。

Ghost-0.7.4-zh-full

// 下載
wget http://dl.ghostchina.com/Ghost-0.7.4-zh-full.zip
// 解壓
unzip Ghost-0.7.4-zh-full.zip -d ghost
// 配置
cd ghost && cp config.example.js config.js && vim config.js
// 將url修改為個(gè)人的網(wǎng)站地址,可以找尋相關(guān)教材其他地方該如何修改。
url: 'http://example.com',
// 運(yùn)行
npm start --production  
// 修改ghost為開機(jī)運(yùn)行。
npm install forever -g
NODE_ENV=production forever start index.js

3. 申請(qǐng)一個(gè)合法的https證書


  • 獲取證書
/etc/init.d/nginx stop //先關(guān)閉nginx 占用80/443端口
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help //這一步會(huì)安裝很多依賴項(xiàng)
// 將下面的郵箱地址,域名地址修改為你自己的,沒有的話可以考慮去阿里云買一個(gè)
./letsencrypt-auto certonly --standalone --email example@gmail.com -d example.com -d www.example.com
// 生成dhparam 證書
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
  • 定時(shí)更新證書

由于申請(qǐng)的證書只有三個(gè)月時(shí)效性,所以需要定時(shí)更新一下。這里寫一個(gè)腳本并且使用crontab進(jìn)行定時(shí)更新。

// renewcert.sh 需要有可執(zhí)行權(quán)限

#!/bin/sh
/etc/init.d/nginx stop
/root/letsencrypt/certbot-auto renew --force-renewal
/etc/init.d/nginx start
crontab -e
// 在文件末尾追加內(nèi)容
0 3 */7 * * /root/renewcert.sh

5. 配置nginx

vim /etc/nginx/conf.d/ghost.conf 
// 將其中的 example 修改為自己的域名
upstream ghost{
        server 127.0.0.1:2368;
}

server{ 
        listen 80; 
        return 301 https://example.com;
        server_name example.com;
}

server {
        listen 443 ssl;
        server_name example.com;

        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_stapling on;
        ssl_stapling_verify on;
        add_header Strict-Transport-Security max-age=15768000;
        
        access_log /var/log/nginx/ghost.access.log;
        error_log  /var/log/nginx/ghost.error.log;

        proxy_buffers 16 64k;
        proxy_buffer_size 128k;

location / {
        proxy_pass http://ghost;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;

        proxy_set_header Host        $host;
        proxy_set_header X-Real-IP   $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容