背景
說來也慚愧,部落格已經搭建很久了,一直免費的部署在 Coding 和 Github Pages 上,前者遷移到騰訊雲 Serverless,導致原有的配置始終有問題,沒時間仔細研究,剛好騰訊伺服器有羊毛可以褥,果斷作出遷移,至於選擇騰訊雲,是因為當初備案在騰訊雲,但是購買域名是在阿里,感覺好擰巴,但是整體互不相關,沒啥影響
部署環境
環境 | |
---|---|
本地環境 | MacOS Monterey 12.0.1 |
伺服器環境 | CentOS Linux release 8.2.2004 (Core) |
本地環境配置
hexo 本地搭建過程網上太多了,這裡不再贅述,這裡只是做一點連結伺服器的準備工作
生成 Git 金鑰
ssh-keygen -C "your@mail.com"
一路回車,這時你應該可以在 ~/.ssh/ 目錄下看到兩個剛剛生成好的金鑰檔案:
- 公鑰:id_rsa.pub
- 私鑰: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.git
的 bare repo
cd /home/git
git init --bare blog.git
什麼是 bare repo,以及 bare repo 的一些高階使用,可以看下面這三篇文章,下面的一些細節只是不做過多介紹
同樣賦予 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
至此,距離成功,我們只差最後一步
域名解析
登陸到你購買域名伺服器(比如我在阿里雲),配置域名解析,將其指向我們伺服器的公網地址:
驗證
接下來,你可以在瀏覽器中輸入域名,進行驗證,享受你的成果吧
日拱一兵 | 原創