准备工作

  • Ubuntu(Linux)系统
  • Git
  • Nginx
  • Hexo(本地)

环境配置

1.使用root用户或者具有管理员权限的用户连接至云服务器

2.安装Git

(1)查看是否安装好git

1
git --version

如果提示git版本,说明已经安装git,跳到下一步。如果提示找不到git命令,说明未安装。

运行以下命令安装git:

1
apt install git

再次查看是否完成git安装:

1
git --version

(2)创建git用户,并配置仓库

创建用户

1
adduser git

根据提示设置密码,其他信息可以位空

切换至git用户

1
su git

打开用户目录

1
cd

cd默认打开当前用户的目录,即/home/git/

创建一个保存网页文件的文件夹

1
mkdir -p projects/hexo-blog

新建并打开仓库文件夹

1
mkdir repos && cd repos

第一次使用git会提示设置默认分支名称,我们这里提前设置为main(或者master)

如果之前一直在使用github的pages,大概率你的主分支是main,为了方便统一,这里也设置为main

1
git config --global init.defaultBranch main

初始化仓库

1
git init --bare hexo-blog.git

(3)创建钩子函数

1
cd hexo-blog.git/hooks

新建文件

1
vim post-receive

i进入编辑模式

粘贴以下内容:

1
2
#!/bin/sh
git --work-tree=/home/git/projects/hexo-blog --git-dir=/home/git/repos/hexo-blog checkout -f

ESC再输入:wq按Enter即可

(4)修改权限

1
chmod +x post-receive

退回root用户(也可以切换到可以使用sudo的用户,使用sudo完成)

1
exit

修改权限

1
chown -R git:git /home/git/repos/hexo-blog.git

(5)测试可用性

在本地终端中使用:

1
git clone git@<ip>:/home/git/repos/hexo-blog.git

ip为远程服务器的ip

3.设置免密SSH连接

(1)创建authorized_keys并修改权限

使用git用户建立远程连接

1
cd /home/git/.ssh

如果没有就创建该目录

1
touch authorized_keys

该文件内保存公钥(.pub)内容

修改权限

1
chmod 600 authorized_keys

(2)创建密钥对(如果已有可跳过)

查看本地是否存在密钥

Windows:C:/Users/<username>/.ssh

Linux:/home/<username>/.ssh

Mac:/Users/<username>/.ssh

如果目录下存在id_rsaid_rsa.pub则说明存在密钥对

如果没有

1
ssh-keygen -t rsa

全Enter即可

(3)建立链接

本地终端输入

1
ssh-copy-id -i C:/Users/<username>/.ssh/id_rsa.pub git@<ip>

也可以手动复制文件id_rsa.pub的内容到远程authorized_keys

测试连接

本地终端输入

1
ssh git@<ip>

此时使用git登陆远程主机,不需要输入密码

如果仍然需要密码,排查前面步骤是否出错,可以查看/home/git/.ssh/authorized_keys文件的内容是否与本地一致

确认前面没有问题,需要修改ssh的配置文件

1
sudo vim /etc/ssh/sshd_config

修改其中的一些配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 是否让 sshd 去检查用户家目录或相关档案的权限数据,
# 这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致。
# 例如使用者的 ~.ssh/ 权限设错时,某些特殊情况下会不许用户登入
# 修改此项仅为临时方案,建议将目录权限修改为正确权限(chmod)
StrictModes no

# 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。
# 至于自制的公钥数据就放置于用户家目录下的 .ssh/authorized_keys 内
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# 有了证书登录了,就禁用密码登录。
PasswordAuthentication no

保存配置,重启ssh

1
systemctl restart ssh

或者

1
systemctl restart sshd

4.安装Nginx

(1)使用root或者带有管理权限的用户登陆

1
apt install nginx

或者

1
sudo apt install nginx

查看是否安装完成

1
nginx -v

显示版本信息就说明安装完成

运行nginx

1
nginx

在本地浏览器输入可以看到

PixPin_2025-03-08_21-15-24

如果拒绝访问,确认自己的服务器开放了80端口

(2)配置nginx

远程连接服务器

备份配置文件

1
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.default

编辑配置文件

1
sudo vim /etc/nginx/nginx.conf

找到http {开头的块

里面会有server开头的块,如下图,默认不是注释掉的

PixPin_2025-03-08_21-24-34

只需要修改80端口server里面的就可以,后面解释ssl的配置

把其中的

1
root         /usr/share/nginx/html;

修改为

1
root         /home/git/projects/hexo-blog;

保存,检验配置

1
sudo nginx -t

如果不使用sudo可能会有警告提示user命令失效

PixPin_2025-03-08_21-29-38

说明配置正确,如果提示其他内容,检查是否存在拼错或者其他错误

重启nginx

1
systemctl reload nginx
1
systemctl restart nginx

或者

1
sudo nginx -s reload

5.配置Hexo

编辑本地网站主目录下的_config.yml

找到

1
2
3
4
5
6
7
deploy:
type: git
repo:
github: git@github.com:xxxxxxxxxx.github.io.git
git1: git@<ip1>:/home/git/repos/hexo-blog.git
git2: git@<ip2>:/home/git/repos/hexo-blog.git
branch: main

可以同时上传到多个服务器上

上传网站

1
hexo g -d

6.限制git用户权限(可选)

查看git-shells是否在登录方式里

1
cat /etc/shells

如果没有

1
2
which git-shell
sudo vim /etc/shells

添加到后面

1
/usr/bin/git-shell

如下图

PixPin_2025-03-08_21-43-36

然后修改

1
sudo vim /etc/passwd

找到git用户

只修改划线部分

1
/usr/bin/git-shell

PixPin_2025-03-08_21-45-35