本篇是以windows本地已经部署好hexo之后操作,windows本地已经安装好git

windows安装git

创建git用户

打开Git Bash,依次输入以下命令

1
2
git config --global user.email "xxx@xxx.com"     # xxx@xxx.com改为邮箱
git config --global user.name "xxx" # xxx为用户名

此处的邮箱和用户名用于标识是哪位用户提交的代码,起个自己喜欢的名称即可,邮箱最好是真实的邮箱

连接服务器

使用Xshell或者其他软件连接服务器,我使用的是WindTerm,开源免费,在此放个链接WindTerm官网 (winterm.org)

查看是否安装了Git
1
git --version

若显示如下则无需再次安装GIt

1
git version 1.8.3.1
若未安装则进行安装
1
2
yum install -y git   # CentOS使用yum安装,Debian使用apt-get安装 请自行查找命令
git --vesion #显示git版本号,说明安装成功
添加git用户
  1. root用户默认的权限过大,出于安全考虑,我们为服务器添加一个名为git的用户,用于将博客自动部署至服务器上(不需要主动切换到git用户,我们所有的操作都用root用户即可)。

    1
    2
    useradd git     #添加名为git的用户
    passwd git #修改git用户的密码
  2. 为git用户授予sudo权限,用WindTerm打开 /etc 目录下的 sudoers 文件,在 root ALL=(ALL) ALL 语句下添加 git ALL=(ALL) ALL ,如图所示。

    image-20241013170104029

或者在/etc/sudoers.d目录下,新建usergit文件,添加git ALL=(ALL) NOPASSWD:ALL并保存,效果一样

1
2
vim /etc/sudoers.d/usergit
git ALL=(ALL) NOPASSWD:ALL
为git用户添加SSH密钥

若不添加SSH密钥,那么本地计算机对服务器的git仓库进行的所有操作都需要输入密码,我们可以通过为git用户添加SSH密钥的方式来实现免密登录。

  1. 本地计算机在任意位置打开Git Bash,输入以下命令生成密钥

    1
    ssh-keygen

    按三次Enter即可生成密钥

  2. 进入C:\Users\用户名里面有.ssh目录,里面的id_rsa.pub就是我们需要的文件,例如我的如下

image-20241013170251887

  1. 服务器中进入/home/git目录,创建.ssh目录,并新建名为authorized_keys的文件,将id_rsa.pub的内容复制进去并保存

    1
    2
    3
    cd /home/git
    mkdir .ssh
    vim authorized_keys
  2. 为公钥文件和文件夹设置读写权限

    1
    2
    chmod 600 /home/git/.ssh/authorized_keys
    chmod 700 /home/git/.ssh
  3. 将.ssh文件夹及其内的文件所有权移交给git用户

    1
    chown -R git:git /home/git/.ssh
  4. 在本地计算机测试是否可以用ssh免密登录服务器。打开Git Bash

    1
    ssh -v git@xxx.xxx.xxx.xxx     #git@后填写服务器的公网ip

    第一次免密登录会提示让你输入yes/no,输入yes即可,之后就不需要输入yes了,显示以下内容即免密登录成功

    1
    Last login: Tue Jun 18 15:21:51 2024 from 111.194.209.107

服务器创建Git仓库并配置自动部署

这里的Git仓库(repository)可以理解为一个存放着不同版本代码的代码库,包含了项目所有的源文件和版本控制信息。但我们在这里需要用到的是裸库,即仅包含版本控制信息的仓库。后者不保存文件,常用作服务器仓库,实现数据共享和同步。

自动部署的核心在于git-hooks(钩子),可以理解为一种脚本,在特定条件下触发时会调用钩子并执行钩子文件中的内容。

  1. 创建进入自己想初始化git仓库的目录

    1
    2
    3
    mkdir -p /home/repo
    cd /home/repo
    git init --bare hexo-blog.git #创建一个名为blog的仓库,--bare参数为创建裸库
  2. 进入/home/repo/hexo-blog.git/hooks目录,找到post-receive文件(若无则创建),在里面输入git --work-tree=/home/blog/hexo --git-dir=/home/repo/hexo-blog.git checkout -f(work-tree为hexo的部署目录,git-dir为Git仓库的目录)

    1
    2
    3
    cd /home/repo/hexo-blog.git/hooks
    vim post-receive
    mkdir -p /home/blog/hexo
  3. 这里我们使用的是 post-receive钩子,当Git收到push请求的时候就会调用这个钩子。这个钩子中添加的语句执行的操作为:删除hexo部署目录中原有的文件,然后将Git仓库中的内容clone至hexo部署目录下。这样我们在本地更新博客并且执行部署命令后,网页文件会被push至服务器的Git仓库内,钩子文件则会将Git仓库内的网页文件复制到hexo部署目录下,从而实现自动部署功能。

  4. 为钩子文件及Git仓库目录配置权限。这里需要将我们创建的仓库及部署目录的所有权移交给git用户,因为linux下创建文件时默认只有拥有者(即创建者)才具有读写权限,而Git进行push操作时登录的用户为git用户。

    1
    2
    3
    chmod +x /home/repo/hexo-blog.git/hooks/post-receive     #为钩子文件授予可执行权限(+x)
    chown -R git:git /home/repo #将仓库目录的所有权移交给git用户
    chown -R git:git /home/blog/hexo #将hexo部署目录的所有权移交给git用户
  5. 修改本地Hexo的配置文件_config.yml

    1
    2
    3
    4
    deploy:
    - type: git
    repo: git@你的公网ip:/home/repo/hexo-blog.git
    branch: master

安装Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
1.Centos7使用yum安装
[root@luay ~]# yum -y install nginx

2.编写hexo的配置文件
[root@luay ~]# vim /etc/nginx/conf.d/hexo.conf
server {
listen 80;
# 服务器公网IP
server_name 123.123.123.123;
# 项目的部署地址
root /home/blog/hexo;
location /{
}

# 以下配置是绑定SSL证书时使用的,若域名没备案就先不填,使用上面的就行了
# listen 443 ssl;
# 请填写绑定证书的域名
# server_name huochairener-blog.cn;

# 部署ssl使用的参数
# if ($server_port !~ 443){
# rewrite ^(/.*)$ https://$host$1 permanent;
# }

# 请填写证书文件的相对路径或绝对路径
# ssl_certificate /xx/xx/xxxx.crt;
# 请填写私钥文件的相对路径或绝对路径
# ssl_certificate_key /xx/xx/xxx.key;
# ssl_session_timeout 10m;
# 请按照以下协议配置
# ssl_protocols TLSv1.2 TLSv1.3;
# 请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
# ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
# ssl_prefer_server_ciphers on;

}

3.检查nginx语法
nginx -t # 一般报错信息很明确,翻译一下就行。若不知道就查查,或者看看文件里有没有多余的空格

4.启动nginx
[root@luay ~]# systemctl start nginx

5.访问网站
使用http://你的公网ip
默认情况下输入你的公网ip地址

nginx常用命令

1
2
3
nginx -s stop    # 停止nginx
nginx -s reload # 重载nginx,修改配置文件后使用
nginx -t # 检查配置文件语法是否有错误,常用于修改配置文件后的检查