不管是在腾讯云,阿里云,还是海外vps上部署hugo博客,本教程均适用,详细记录,以备不时之需.

1. 场景

ubuntu 20.04,使用root账号,创建普通账号,并赋予root权限。

查看系统发行版本,命令如下:

1
lsb_release -a

2. 服务器端

接下来就是网上介绍比较少的服务端配置

1 .ssh 进自己的服务器
1
ssh root@XXX.XXX.XX.XX
2 .建立 git 用户
1
adduser git

默认会在/home路径下创建一个与用户名相同的用户目录。

3. 安装 git
1
sudo apt install git
4. 给新用户添加管理权限

如果希望新创建的用户具有管理权限,将用户添加到sudo组即可!

将新用户添加到 sudo 组,命令如下:

1
adduser git sudo
5. 账号切换

root账号切换到普通账号:

1
sudo su git

由普通账号切换到root账号:或者exit

1
sudo su root

注意:切换到root账号时,需要输入当前账号的密码

6. 在服务端新建 git 仓库

注意这里建的不是 Github仓库,是自己的服务器上的 git 仓库

  • git目录下建立一个仓库 hugo.git
  • 同时建立一个文件夹hugo用来存放仓库文件
1
2
3
4
5
6
7
su git
cd /home
mkdir git
cd git
git init --bare hugo.git
sudo chown -R git:git hugo.git
mkdir hugo
7. 配置钩子
1
vim /home/git/hugo.git/hooks/post-receive

写入以下文本

1
git --work-tree=/home/git/hugo --git-dir=/home/git/hugo.git checkout -f

配置权限

1
sudo chmod +x /home/git/hugo.git/hooks/post-receive
8. 配置SSH公钥

先在本地生成

1
2
ssh-keygen -t RSA -C "usr邮箱"
cat .ssh/id_rsa.pub

然后把 cat 内容复制到服务端的 .ssh/authorized_keys 文件内

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

到此为止完成了服务端全部配置,以上任何一步操作如果提示缺少了什么就sudo apt install一下

3. 部署本地到服务端

在本地运行

1
hugo

命令后,网站根目录内生成一个 public 文件夹,里面是静态网页文件,把这个 public文件夹整个 push 到我们刚刚在服务器端配置的 hugo.git 仓库里面

远程 git 仓库地址格式, 例如ip8.8.8.8举例

git@8.8.8.8:/home/git/hugo.git

注意: 默认ssh是22 如果不是,请往下看

1
2
3
4
5
6
cd public
git init
git add .
git commit -m 'First Commit'
git remote add origin git@8.8.8.8:/home/git/hugo.git
git push -u origin master

如果一切顺利,那么 hugo 站点已经成功部署在云服务器上,配置好Nginx, 访问域名即可显示

如果SSH是其他端口

比如SSH:33 ip:8.8.8.8

1
2
3
4
5
6
cd public
git init
git add .
git commit -m 'First Commit'
git remote add origin ssh://git@8.8.8.8:33/home/git/hugo.git
git push -u origin master 

或者

1
git push -u ssh://git@8.8.8.8:33/home/git/hugo.git master

验证本地仓库关联到远程服务器的 Git 仓库

  1. 打开终端或命令行,进入到您本地的 Git 仓库目录。

  2. 运行以下命令,查看当前配置的远程仓库信息:

1
git remote -v

显示本地仓库的远程关联信息。如果您已经成功关联了远程仓库,您会看到类似于以下的输出:

1
2
origin  ssh://git@8.8.8.8:33/home/git/hugo.git (fetch)
origin  ssh://git@8.8.8.8:33/home/git/hugo.git (push)

在这个输出中,origin 是远程仓库的名称,后面的 URL 显示了远程仓库的地址。如果您在这里看到您想要关联的服务器地址和端口,说明关联已经成功。

  1. 您还可以尝试进行一次 git fetch 操作,以从远程仓库获取最新的更新:
1
git fetch origin

如果操作成功,说明您的本地仓库可以与远程仓库通信。

  1. 最后,您可以尝试进行一次 git push 操作,将本地的更改推送到远程仓库:
1
git push origin master
  1. 测试 SSH 连接 (注意:ssh是33)
1
ssh -p 33 git@8.8.8.8

这是是一个用于测试 SSH 连接的命令,它会尝试使用 SSH 协议通过指定的端口连接到指定的 IP 地址。如果成功连接,您将会看到类似于以下的输出

Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-155-generic x86_64)
...

4. 自动推送脚本

每次都需要生成静态文件再推到服务端仓库,很麻烦,所以写一个脚本

网站根目录 Mysite 下新建一个 vps.sh 脚本文件

1
2
cd Mysite
touch vps.sh

向其中添加内容:记得修改为你的 ip

1
2
3
4
5
6
7
#!/bin/bash
hugo -D --gc
cd public
git init
git add .
git commit -m 'Update My Site to vps'
git push origin master

双击打开运行vps.sh即可自动推送文件到仓库,以后写完博客或修改博客后都需要运行一下vps.sh,才能部署到云端

注意,第一次运行vps.sh可能会出现如图这种情况,直接输入yes回车即可,如果仓库里没发现上传的文件可以再运行一次vps.sh

5. 拉取远程更改并合并

  1. 在运行 git push 之前,先运行以下命令来拉取远程仓库的更改并尝试合并它们到你的本地分支:
1
git pull origin master

如果出现冲突,需要解决冲突后再次提交

  1. 强制推送: 如果你确定你的本地更改是正确的,而且你不需要保留远程仓库的更改,可以使用强制推送。但要注意,强制推送会覆盖远程分支的历史,可能会导致数据丢失。
1
git push -f origin master