Hexo博客部署到騰訊雲服務器全過程(Nginx,證書,HTTPS),你要的這裏都有

背景

說來也慚愧,博客已經搭建很久了,一直免費的部署在 Coding 和 Github Pages 上,前者遷移到騰訊雲 Serverless,導致原有的配置始終有問題,沒時間仔細研究,剛好騰訊服務器有羊毛可以褥,果斷作出遷移,至於選擇騰訊雲,是因爲當初備案在騰訊雲,但是購買域名是在阿里,感覺好擰巴,但是整體互不相關,沒啥影響

部署環境

環境
本地環境 MacOS Monterey 12.0.1
服務器環境 CentOS Linux release 8.2.2004 (Core)

本地環境配置

hexo 本地搭建過程網上太多了,這裏不再贅述,這裏只是做一點鏈接服務器的準備工作

生成 Git 密鑰

ssh-keygen -C "[email protected]"

一路回車,這時你應該可以在 ~/.ssh/ 目錄下看到兩個剛剛生成好的密鑰文件:

  1. 公鑰:id_rsa.pub
  2. 私鑰:id_rsa

我們一會需要把公鑰的內容拷貝到服務器上

服務器環境配置

服務器非常純淨,什麼也沒有,所以我們要一點點安裝我們所需的內容

  • Git
  • Nginx

強烈建議你重置騰訊雲服務器的默認密碼, 再進行下面操作

Git 安裝和配置

安裝

切換到 root 用戶(輸入你剛剛重置的密碼就好)

su root

首先需要安裝包的依賴

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install  gcc perl-ExtUtils-MakeMaker

進入指定目錄(這裏選擇 usr/local/src)選擇最新版本 Git (這裏使用 2.34.1)下載並解壓

cd /usr/local/src
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.34.1.tar.gz
tar -zxvf git-2.19.0.tar.gz

解壓出來的 Git 文件都是源文件,我們需要進行編譯,進入 Git 解壓目錄,進行編譯和安裝, 安裝位置(這裏選擇 usr/local/git), 整個過程可能需要一定等待......

cd git-2.34.1
make prefix=/usr/local/git all
make prefix=/usr/local/git install

安裝好後,我們需要配置環境變量,打開環境變量配置文件:

vim /etc/profile

在文件底部添加 Git 安裝目錄信息,給不熟悉 Vim 的同學快速操作步驟,按照下面依次按字母就可以了(這個保姆服務有沒有很到位)

G (光標快速到文件末尾)

o (添加新空白行並進入 Insert 模式)

粘貼下面內容

Esc (進入 Normal 模式)

:wq(保存並退出)

PATH=$PATH:/usr/local/git/bin
export PATH

刷新環境變量,使之生效

source /etc/profile

此時 Git 應該已經安裝完成,可以查看 Git 版本號是否和你指定的版本一樣:

git --version

Git 新用戶與配置

創建 git 用戶和密碼

adduser git
passwd git

將 git 用戶添加到 sudoers 文件中, 同樣給出 Vim 快捷操作

chmod 740 /etc/sudoers
vim /etc/sudoers

/## Allow

這樣可以快速定位到如下位置:

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

在下面一行添加 git 用戶內容, 保存並退出

git      ALL=(ALL)       ALL

修改回 sudoers 文件權限

chmod 400 /etc/sudoers

測試

將上面本地生成的 id_rsa.pub 公鑰內容拷貝到遠端服務器, 這個命令會默認在遠端服務器 git 用戶主目錄下生成 authorized_keys 文件 (~/.ssh/authorized_keys), 其中 server_ip 爲公網 IP,不是內部 IP,別拷貝錯了

ssh-copy-id -i ~/.ssh/id_rsa.pub git@server_ip

此時可以通過 ssh 命令(加上 -v 命令,可以輸出詳細 log)測試連接

ssh -v git@server_ip

博客網站目錄配置

創建博客網站目錄位置

同樣切換到 root 目錄,然後爲博客網站創建根目錄(這裏選擇 /home/hexo

su root
mkdir /home/hexo

賦予 git 用戶權限

chown git:git -R /home/hexo

自動化配置

指定目錄位置(這裏選擇 git 用戶主目錄 /home/git)創建一個名爲 blog.gitbare repo

cd /home/git 
git init --bare blog.git

什麼是 bare repo,以及 bare repo 的一些高級使用,可以看下面這三篇文章,下面的一些細節只是不做過多介紹

  1. Git Worktree 大法真香
  2. Git Worktree 高級使用
  3. 一鍵生成Git Worktree 工作目錄

同樣賦予 git 用戶相應權限

chown git:git -R blog.git

使用自動化配置,自然是要用到 Git 的鉤子函數,這裏我們需要 post-receive,在博客 hooks 目錄下新建該文件:

vim blog.git/hooks/post-receive

然後添加如下內容(注意目錄匹配),保存並退出:

#!/bin/sh
git --work-tree=/home/hexo --git-dir=/home/git/blog.git checkout -f

最後,賦予這個文件可執行權限

chmod +x /home/git/blog.git/hooks/post-receive

接下來,創建個鏈接,以防後續 deploy 過程出錯

sudo ln -s /usr/local/git/bin/git-receive-pack  /usr/bin/git-receive-pack

至此,基本的準備工作就完成了,接下來我們需要處理 Nginx 的內容

Nginx 安裝和配置

安裝

同樣切換到 root 用戶,然後安裝 nginx,並最終啓動

su root
yum install -y nginx
systemctl start nginx.service

這時,在瀏覽器中輸入公網 IP 地址,應該可以看到 Nginx 默認的歡迎界面

配置

這裏配置 Nginx,將所有 Http 請求都重定向爲 Https 請求,這就需要我們有 SSL 證書,證書可以在雲服務器上申請,並下載相應的版本(這裏選擇 Nginx 證書),下載後解壓,以我的證書爲例:

.
├── 6317712_www.dayarch.top.key
└── 6317712_www.dayarch.top.pem

0 directories, 2 files

通過 scp 命令將上述證書拷貝到遠端服務器, 正常應該將 Nginx 的證書存放在 /etc/nginx/cert 目錄下,這裏選擇存放在 /home/ssl_cert 下(如果目錄不存在,請自行創建)

scp ~/Downloads/6317712_www.dayarch.top_nginx/6317712_www.dayarch.top.key root@server_ip:/home/ssl_cert
scp ~/Downloads/6317712_www.dayarch.top_nginx/6317712_www.dayarch.top.pem root@server_ip:/home/ssl_cert

然後打開 Nginx 的配置文件進行整體配置

server{
    listen 80;
    server_name dayarch.top; # 個人域名
    rewrite ^(.*)$ https://$server_name$1 permanent; # 重定向
}

server {
    listen 443; 
    server_name dayarch.top;  # 個人域名
    ssl on; 
    ssl_certificate      /home/ssl_cert/6317712_www.dayarch.top.pem; # .pem 證書
    ssl_certificate_key  /home/ssl_cert/6317712_www.dayarch.top.key; # .key 證書
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers  on;

    location / {
        root   /home/hexo;  # 博客網站主目錄
        index index.php  index.html index.htm; 
    }

    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

通過 nginx -t 命令進行檢查,一切正常會輸出如下結果:

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

重啓 Nginx 服務

systemctl restart nginx.service

至此,所有的準備工作都做完了,接下來,我們需要做一些博客配置

本地博客配置修改

我們需要將遠端服務器的 Git 倉庫信息配置到 Hexo 站點配置文件(_config.yml)中

deploy:
  - type: git
    repo: git@server_ip:/home/git/blog.git
    branch: master

陸續執行 hexo 的命令進行部署

hexo clean
hexo generate
hexo deploy

至此,距離成功,我們只差最後一步

域名解析

登陸到你購買域名服務器(比如我在阿里雲),配置域名解析,將其指向我們服務器的公網地址:

驗證

接下來,你可以在瀏覽器中輸入域名,進行驗證,享受你的成果吧
個人博客:https://dayarch.top
加我微信好友, 進羣娛樂學習交流,備註「進羣」

歡迎持續關注公衆號:「日拱一兵」

  • 前沿 Java 技術乾貨分享
  • 高效工具彙總 | 回覆「工具」
  • 面試問題分析與解答
  • 技術資料領取 | 回覆「資料」

以讀偵探小說思維輕鬆趣味學習 Java 技術棧相關知識,本着將複雜問題簡單化,抽象問題具體化和圖形化原則逐步分解技術問題,技術持續更新,請持續關注......


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章