以下是我在部署Hexo项目到云服务器的步骤,以及所遇到的一些问题和解决方法。

git 的安装(压缩包安装)

当我们需要将 Hexo 项目代码上传到服务器时,我们可以借助Git工具,下面是以编译的方式安装git的过程。当然,我们也可以使用 **yum install git**命令进行直接安装,但这样的方式安装的版本低。

  1. 访问 https://git-scm.com/download/linux 查看git的最新版本,这里是

    image-20230101171559934

  2. 可先将文件下载到本地后,再上传到服务器中,也可以在服务器中使用 wget 命令进行下载

    1
    2
    yum remove git -y	# 删除旧版的git
    wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.39.0.tar.gz --no-check-certificate
  3. 将下载好的压缩文件解压

    1
    tar -zxf git-2.39.0.tar.gz
  4. 切换到解压后的 git-2.39.0 文件夹中,并使用 make 命令进行编译

    1
    2
    3
    4
    5
    6
    # 进行编译前需要安装以下开发包,否则会报错
    sudo yum install -y openssl-devel
    sudo yum install -y curl-devel
    sudo yum install -y expat-devel
    # 已安装以上开发包的,执行下面命令进行编译
    make all prefix=/usr/local/git
  5. 将 git 安装到 /usr/local/git 中

    1
    make install prefix=/usr/local/git
  6. 配置 git 环境变量,vim 编辑器打开 /etc/bashrc,并写入 git 的 bin 目录

    1
    export PATH=$PATH:/usr/local/git/bin
  7. 刷新配置,使其生效

    1
    source /etc/bashrc
  8. 完成以上步骤后,可查看版本号以验证是否安装成功

    1
    git --version  # 查看 git 版本

创建用户,并配置 SSH 免密登录

服务器 ssh 密钥配置

  1. 服务器端创建用户和密码(用户名和密码自定义,这里我以 gituser 账号为例)

    1
    2
    adduser gituser		# 创建用户
    passwd gituser # 设置密码
  2. 将用户添加到 wheel 用户组

    1
    usermod -G wheel gituser
  3. 变更 sudoers 权限

    1
    chmod 740 /etc/sudoers
  4. vi 打开 sudoers 配置

    1
    vi /etc/sudoers
  5. 在 root ALL=(ALL) ALL下添加以下内容,保存并退出

    1
    gituser		ALL=(ALL)	ALL
  6. 将 sudoers 文件权限修改为只读

    1
    chmod 400 /etc/sudoers

本地生成 SSH 密钥

  1. 本地下载安装好 git ,在 https://git-scm.com/ 下载对应版本的安装包进行安装

  2. 安装好 git 后,桌面右键点击 Git Bash Here 打开 git 终端,输入:

    1
    ssh-keygen -t rsa  # 直接一直回车即可
  3. 将 .ssh 目录下的 生成的.pub 文件中的内容进行复制

服务器端配置公钥

  1. 切换到刚刚创建的用户

    1
    su gituser
  2. 创建 .ssh 文件夹,创建 authorized_keys文件,并写入刚刚复制的公钥内容

    1
    2
    3
    4
    mkdir ~/.ssh
    vim ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    chmod 700 ~/.ssh

nginx 配置(手动安装配置)

  1. 创建网站目录 hexo ,并修改其权限

    1
    2
    3
    mkdir /var/hexo
    chown -R gituser:gituser /var/hexo/
    chmod -R 755 /var/hexo/
  2. 安装 nginx

    1
    yum install -y nginx
  3. 启动 nginx

    1
    systemctl start nginx.service
  4. 查看 nginx 服务状态

    1
    systemctl status nginx.service
  5. 修改 nginx 转发配置 vim /usr/local/nginx/conf/nginx.conf,在 server 里写入以下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     server{
    listen 80
    root /var/hexo; # 改为创建的目录路径
    server_name [域名或 IP 地址];

    include /etc/nginx/default.d/*.conf;
    location / {
    }
    error_page 404 /404.html;
    location = /40x.html {
    }
    }
  6. 重启 nginx

    1
    systemctl restart nginx.service

    在搭建的时候发现一个错误,当我把网站目录所有权设置为 git 用户时,nginx 出现 403 权限问题,后来使用 ps aux|grep nginx 查看当前 nginx 的启动权限时发现 nginx 的启动权限为 www 用户,因此将其改变为 git 用户或者 root 用户权限,即可解决问题(修改权限后记得重启 nginx 服务)。

配置远程 git 仓库

  1. 切换到 root 用户,在 var 目录下创建 git 目录,并赋予其权限

    1
    2
    3
    4
    exit
    cd /var
    chown -R gituser:gituser /var/git/ # 修改目录所有权
    chmod -R 755 /var/git/ # 修改用户权限
  2. 进入 git 目录,创建 git 仓库,并修改权限

    1
    2
    3
    cd /var/git/
    git init --bare hexoblog.git
    chown gituser:gituser -R hexoblog.git
  3. 创建钩子文件

    1
    vim /var/git/hexoblog.git/hooks/post-receive
  4. 进入编辑文件,写入以下代码(以下代码要看自己设置的路径为主)

    1
    2
    #!/bin/bash
    git --work-tree=/var/hexo --git-dir=/var/git/hexoblog.git checkout -f
  5. 保存文件,并修改文件权限

    1
    chmod +x /var/git/hexoblog.git/hooks/post-receive

修改 hexo 站点配置文件

  1. 打开本地 hexo 项目的 _config.yml 文件,修改以下内容

    1
    2
    3
    4
    5
    6
    deploy:
    type: git
    repo: 'gituser@[服务器IP]:/var/git/hexoblog.git'
    # 当我们修改SSH端口时,需要指定端口,如SSH端口为 5234,则repo修改如下:
    # repo: 'ssh://gituser@[服务器IP]:5234/usr/local/nginx/git/hexoblog.git'
    branch: master
  2. 安装 hexo 自动部署工具

    1
    npm install hexo-deployer-git --save
  3. 保存配置后,重新构建和部署项目

    1
    2
    3
    hexo clean		# 清理缓存
    hexo g # 生成项目文件
    hexo d # 上传到服务器

若在使用 hexo d 提交项目文件时,出现以下错误:

1
2
3
4
On branch master
nothing to commit, working tree clean
bash: line 1: git-receive-pack: command not found
fatal: Could not read from remote repository.

排查错误发现,之前安装git时,将其安装在了/usr/local/git中,所以需要创建软连接

1
ln -s /usr/local/git/bin/git-receive-pack /usr/bin/git-receive-pack