0. 本地与服务器之间的SSH公钥验证(免密登录)
这是 Hexo → Git → 服务器 自动部署前必须做的准备步骤
SSH 公钥用于在 本地 Windows/Linux/macOS 与 云服务器 之间建立安全、免密码的访问,这样才能正常通过命令:
git push origin master
将 Hexo 网站部署到服务器
0.1 在本地生成 SSH 密钥
在本地电脑上打开终端(git bash / wsl / cmd 都可以)输入以下内容
ssh-keygen -t ed25519 -C "your_email@example.com"
一直回车即可
生成的密钥位置通常为
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub
0.2 查看本地公钥内容
cat ~/.ssh/id_ed25519.pub
会看到类似
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEXAMPLEKEYxxxx your_email@example.com
复制整行内容
0.3 将公钥添加到云服务器
登录云服务器
ssh root@服务器IP
创建 SSH 目录
mkdir -p ~/.ssh
chmod 700 ~/.ssh
编辑授权 key 文件:
vim ~/.ssh/authorized_keys
将刚才复制的 id_ed25519.pub 内容粘贴进去。
保存并设置权限:
chmod 600 ~/.ssh/authorized_keys
0.4 测试 SSH 免密登录
在本地终端输入以下命令,尝试连接到服务器:
ssh root@服务器IP
如果没有要求输入密码,说明配置成功,可以使用 SSH 免密登录
1. 本地生成最新静态文件
在 hexo 根目录依次执行:
1.1 清理旧文件
hexo clean
1.2 生成新文件
hexo g
2. 进入public目录
cd public
⚠ 注意:必须在 public 目录中执行 Git 推送
因为 Hexo 最终部署的是 public 生成的静态文件
3. 提交并推送到服务器
将当前目录下“所有文件的变更”添加到 Git 的暂存区(stage)
git add .
将暂存区中的内容正式提交到本地 Git 仓库,创建一个版本快照
git commit -m "update"
把本地的最新提交(commit)推送到远程 Git 仓库(origin),推送的分支是 master。
git push origin master
4. 后记:用 Git 部署到其他服务器的操作
流程本质上都是一样的,只需要在 新服务器 上重新做一份 裸仓库 + 自动部署目录 + post-receive 钩子,然后本地添加新的远程仓库即可
4.1. 在新服务器创建裸仓库
假设你服务器 SSH 地址为:
root@NEW_SERVER_IP
登录:
ssh root@NEW_SERVER_IP
创建裸仓库:
mkdir -p /var/www/hexo.git
cd /var/www/hexo.git
git init --bare
4.2 创建静态站点部署目录
mkdir -p /var/www/hexo-site
4.3 配置 post-receive 自动部署
编辑钩子:
vim /var/www/hexo.git/hooks/post-receive
内容
#!/bin/bash
GIT_REPO=/var/www/hexo.git
WEB_ROOT=/var/www/hexo-site
git --work-tree=$WEB_ROOT --git-dir=$GIT_REPO checkout -f
保存后赋权
chmod +x /var/www/hexo.git/hooks/post-receive
4.4 新服务器配置 Nginx 指向 hexo-site
编辑配置:
vim /etc/nginx/sites-available/default
找到:
root /var/www/html;
改为:
root /var/www/hexo-site;
保存并重启:
nginx -t
systemctl restart nginx
4.5 本地 Hexo 添加新的远程仓库
回到本地:
hexo根目录/public
进入:
cd 网站根目录/public
查看已有远程:
git remote -v
替换旧服务器
git remote remove origin
git remote add origin ssh://root@NEW_SERVER_IP/var/www/hexo.git
多服务器部署
可以同时向多个服务器推送:
git remote add server1 ssh://root@OLD_IP/var/www/hexo.git
git remote add server2 ssh://root@NEW_SERVER_IP/var/www/hexo.git
然后分别部署:
git push server1 master
git push server2 master
一次全部推:
git push --all
4.6 以后更新网站的步骤
hexo clean
hexo g
cd public
git add .
git commit -m "update"
git push server2 master
Comments NOTHING