前言
hexo 部署服务器的原理:将代码上传至 git 库 -> 触发 git push 钩子函数 -> 钩子函数将代码拷贝到 www 文件夹下
连接远端服务器
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 # 创建 git 用户
chmod 740 /etc/sudoers # 修改 git 用户的权限
vim /etc/sudoers # 打开文件
找到 root ALL=(ALL) ALL
,在下面添加一行 git ALL=(ALL) ALL
保存退出后改回权限
chmod 400 /etc/sudoers
设置 git 用户密码
sudo passwd git
这样就可以使用 git 用户远程登录阿里云服务器了
为 hexo 创建部署目录
mkdir -p /var/www/hexo
新建 git 仓库
mkdir /var/repo
cd /var/repo
git init --bare blog.git
添加核心钩子函数
vim /var/repo/blog.git
输入
git --work-tree=/var/www/hexo --git-dir=/var/repo/blog.git checkout -f
然后授权钩子文件可执行权限,让它可以将文件拷贝到部署目录
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
配置(保持默认配置)
server {
listen 80;
server_name _;
root /var/www/hexo;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf; #这句是重点
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;
}
}
}
这里之所以重新创建一个 .conf 文件是因为一台机器上往往会有多个站点,每个站点都有一个单独的 conf 文件更方便维护,出错了也容易排查( nginx 经常一个配置出问题就全部罢工)讨论详情
启动nginx并设置开机自启
service nginx start
systemctl enable nginx
更改 nginx 文件并重启 nginx 服务,可以使用 niginx -s reload
命令
hexo 项目修改 _config.xml
deploy:
- type: git
repo: git@XXX:/var/repo/blog.git
branch: master
message: "commit_message"
执行 hexo deploy
即可发布到服务器
注意:hexo deploy
要在 git bash下执行,否则会报错
如果用 git bash 依旧部署依旧报错,且本机可以通过 ssh 连上远端服务器,首先考虑是不是
.deploy_git
缓存导致的,先清除 .deploy_git 和 node_modules 再尝试。
常见问题
部署后访问网站,网站报错”拒绝连接“,查看是不是 nginx 出了问题。