跳到主要内容

将hexo部署到服务器


已读 0%
本篇目录
阅读设置
正文字号
18

设置仅保存在当前浏览器。

将 Hexo 部署到自己的服务器

我以前主要部署在 GitHub Pages,这篇记录用 SSH + bare Git 仓库 + post-receive hook 把 Hexo 生成结果推到自己的服务器。

安装 Git

按服务器发行版安装即可,例如:

# Debian / Ubuntu
sudo apt update && sudo apt install git

# RHEL / Rocky / AlmaLinux 等
sudo dnf install git

下面服务器端的用户创建和目录准备由管理员执行,日常推送使用 git 用户。

创建git用户

adduser git #/home 目录下生成一个git目录
passwd git #设置密码
install -d -o git -g git -m 755 /var/www/blog
# git 用户只需能写部署目录,不需要 sudo 权限

配置SSH密钥

先切换到刚创建的用户,后续仓库操作也在这个用户下完成:

su - git
mkdir -p ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
# 将本机 id_rsa.pub 或 id_ed25519.pub 的公钥内容粘贴到这里,保存退出
chmod 600 ~/.ssh/authorized_keys

创建仓库

cd /home/git
mkdir repos #创建仓库目录
cd repos
git init --bare hexo.git #创建仓库

创建一个钩子

接上面继续操作

cd /home/git/repos/hexo.git/hooks
vim post-receive

文件内容:

#!/bin/sh
set -e
git --work-tree=/var/www/blog --git-dir=/home/git/repos/hexo.git checkout -f master

保存后再执行:

chmod +x /home/git/repos/hexo.git/hooks/post-receive

本机 Hexo 的部署分支也应为 master;如果使用其他分支,两处对应修改。Web 服务的站点根目录配置为 /var/www/blog。

本地测试 SSH

前面已经把公钥写入服务器的 authorized_keys,这里不需要再重复 ssh-copy-id。在本机直接测试:

ssh git@server_ip

如果使用专门的 Ed25519 私钥,可通过 ~/.ssh/config 配置 IdentityFile,或临时使用 ssh -i <私钥路径> git@server_ip。首次连接时先核对服务器主机指纹,不要无条件接受异常变更。

更改git用户默认的shell

这一节需要在服务器管理员终端执行。前面如果仍处于 git 用户的 SSH 会话,先 exit 返回;不要在本机电脑上修改用户 shell。确认仓库、钩子和公钥已配置好,再限制 git 用户的交互式登录:

# 服务器 root 用户执行
GIT_SHELL=$(command -v git-shell)
test -n "$GIT_SHELL" || { echo "未找到 git-shell,请先安装 git" >&2; exit 1; }
usermod --shell "$GIT_SHELL" git

不需要手动编辑 /etc/passwd。若服务器的 PAM 策略要求 shell 位于 /etc/shells,由管理员核对后添加 git-shell 的实际路径。修改后普通交互式登录可能提示不允许进入 shell,这是预期行为;应在本机验证 Git 仓库访问:

git ls-remote git@server_ip:/home/git/repos/hexo.git

新建的空仓库可以没有分支输出,但命令应正常退出。然后在本机 Hexo _config.yml 中核对部署配置:

deploy:
  type: git
  repo: git@server_ip:/home/git/repos/hexo.git
  branch: master

首次使用 git 部署器时,在本机博客目录安装 hexo-deployer-git,再执行 hexo generate 与 hexo deploy。实际域名、Web 服务和 HTTPS 需另外配置到 /var/www/blog。

BUG

报错remote: fatal: cannot create directory at '2019': Permission denied

部署目录没有写的权限,改法

ls -ld /var/www/blog
# 应由 git 用户拥有写权限;由管理员检查并修正这个部署目录的所有者

文章作者: 0xdadream
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 0xdadream !
赏
评论

评论将在接近此处时加载,也可点击立即加载。

  目录