前言
hexo 部署服務(wù)器的原理:將代碼上傳至 git 庫 -> 觸發(fā) git push 鉤子函數(shù) -> 鉤子函數(shù)將代碼拷貝到 www 文件夾下

連接遠(yuǎn)端服務(wù)器
ssh 用戶名@ip
安裝 git、node、nginx
- 安裝 git
yum install git
檢測是否安裝成功 git --version
- 安裝 nodejs
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum install -y nodejs
檢查是否安裝成功 node -v、npm -v
- 安裝 nginx
yum install -y nginx
新建用戶、git 倉庫
新建用戶
adduser git # 創(chuàng)建 git 用戶
chmod 740 /etc/sudoers # 修改 git 用戶的權(quán)限
vim /etc/sudoers # 打開文件
找到 root ALL=(ALL) ALL,在下面添加一行 git ALL=(ALL) ALL
保存退出后改回權(quán)限
chmod 400 /etc/sudoers
設(shè)置 git 用戶密碼
sudo passwd git
這樣就可以使用 git 用戶遠(yuǎn)程登錄阿里云服務(wù)器了
為 hexo 創(chuàng)建部署目錄
mkdir -p /var/www/hexo
新建 git 倉庫
mkdir /var/repo
cd /var/repo
git init --bare blog.git
添加核心鉤子函數(shù)
vim /var/repo/blog.git
輸入
git --work-tree=/var/www/hexo --git-dir=/var/repo/blog.git checkout -f
然后授權(quán)鉤子文件可執(zhí)行權(quán)限,讓它可以將文件拷貝到部署目錄
chmod +x /var/repo/blog.git/hooks/post-receive
sudo chmod -R 777 /var/www/hexo
改變 blog.git 目錄的擁有者為 git 用戶(這一步是確保安全性)
chown -R git:git blog.git
配置 Nginx
/etc/nginx/nginx.conf 配置(保持默認(rèn)配置)
server {
listen 80;
server_name _;
root /var/www/hexo;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf; #這句是重點(diǎn)
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
在 /etc/nginx/conf.d下新建 hexo.conf,并添加配置
server {
listen 80;
root /var/www/hexo;
server_name *.xxx.com;
access_log /var/log/nginx/hexo_access.log;
error_log /var/log/nginx/hexo_error.log;
location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
root /var/www/hexo;
access_log off;
expires 30s;
}
location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
root /var/www/hexo;
access_log off;
expires 30s;
}
location / {
root /var/www/hexo;
if (-f $request_filename) {
rewrite ^/(.*)$ /$1 break;
}
}
}
這里之所以重新創(chuàng)建一個(gè) .conf 文件是因?yàn)橐慌_(tái)機(jī)器上往往會(huì)有多個(gè)站點(diǎn),每個(gè)站點(diǎn)都有一個(gè)單獨(dú)的 conf 文件更方便維護(hù),出錯(cuò)了也容易排查( nginx 經(jīng)常一個(gè)配置出問題就全部罷工)討論詳情
啟動(dòng)nginx并設(shè)置開機(jī)自啟
service nginx start
systemctl enable nginx
更改 nginx 文件并重啟 nginx 服務(wù),可以使用 niginx -s reload 命令
hexo 項(xiàng)目修改 _config.xml
deploy:
- type: git
repo: git@XXX:/var/repo/blog.git
branch: master
message: "commit_message"
執(zhí)行 hexo deploy 即可發(fā)布到服務(wù)器
注意:hexo deploy要在 git bash下執(zhí)行,否則會(huì)報(bào)錯(cuò)

如果用 git bash 依舊部署依舊報(bào)錯(cuò),且本機(jī)可以通過 ssh 連上遠(yuǎn)端服務(wù)器,首先考慮是不是
.deploy_git 緩存導(dǎo)致的,先清除 .deploy_git 和 node_modules 再嘗試。
常見問題
部署后訪問網(wǎng)站,網(wǎng)站報(bào)錯(cuò)”拒絕連接“,查看是不是 nginx 出了問題。