Hexo重新建站记录并使用Github Actions自动部署到服务器

康师傅 Lv3

Hexo重新建站记录并使用Github Actions自动部署到服务器

还没写完,剩下的明天再说。

window11使用fnm管理node - 水滴-石穿 - 博客园

Node版本管理用什么?–Fast Node Manager(fnm) fnm 是一个基于 Rust 的 Node.j - 掘金

Hexo 建站简易教程

如何搭建 Hexo 博客并使用 Github Actions 自动部署到自己服务器

安装 | Hexo

在 Debian 11 上安装和配置 Nginx 的逐步指南 | Friend Hosting

系统运维|在 Debian 中将用户添加到 SUDOERS 组的 2 种方法

环境准备

安装Node.js

虽然现在用不到,但是提前准备,使用fnm对Node.js进行多版本管理。

Schniz/fnm: 🚀 Fast and simple Node.js version manager, built in Rust

使用官方文档中的安装方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PS C:\Users\KSF\Desktop> winget install Schniz.fnm
“msstore”源要求在使用前查看以下协议。
Terms of Transaction: https://aka.ms/microsoft-store-terms-of-transaction
源要求将当前计算机的 2 个字母的地理区域发送到后端服务才能正常工作,(例如"US")。

是否同意所有源协议条款?
[Y] 是 [N] 否: Y
已找到 Fast Node Manager [Schniz.fnm] 版本 1.38.1
此应用程序由其所有者授权给你。
Microsoft 对第三方程序包概不负责,也不向第三方程序包授予任何许可证。
正在下载 https://github.com/Schniz/fnm/releases/download/v1.38.1/fnm-windows.zip
██████████████████████████████ 3.25 MB / 3.25 MB
已成功验证安装程序哈希
正在提取存档...
已成功提取存档
正在启动程序包安装...
已修改路径环境变量;重启 shell 以使用新值。
添加了命令行别名: "fnm"
已成功安装

环境变量已自动添加,重启终端查看:

1
2
PS C:\Users\KSF\Desktop> fnm --version
fnm 1.38.1

配置Powershell环境:(拿记事本凑合一下

1
notepad $PROFILE

如果找不到就新建一个,直接输入$PROFILE即可看见目录,例如我的是:C:\Users\KSF\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

添加:fnm env --use-on-cd | Out-String | Invoke-Expression

修改完后提示在此系统上禁止运行脚本,管理员身份运行PowerShell,输入set-executionpolicy remotesigned,设置为Y

Node.js目前最新的LTS版本是v22.12.0:fnm install 22.12.0

fnm常用命令:

fnm ls-remote 列出远程版本

fnm ls 列出本地版本

fnm install <version> 安装<version>版本

fnm uninstall <version> 卸载<version>版本

fnm use <version> 使用<version>版本

fnm default <version> 设置默认版本

换源:npm config set registry https://registry.npmmirror.com/

安装Git

Git

图形安装,注意选项Next就行)

配置Git

本地生成密钥

确认自己注册Github的邮箱,本地生成密钥,在git bash中运行:ssh-keygen -t rsa -C "<邮箱>"

1
2
3
4
5
6
7
8
9
KSF@DESKTOP-H9B1IAN MINGW64 ~
$ ssh-keygen -t rsa -C "1464837318@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/KSF/.ssh/id_rsa):
Created directory '/c/Users/KSF/.ssh'.
Enter passphrase for "/c/Users/KSF/.ssh/id_rsa" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/KSF/.ssh/id_rsa
Your public key has been saved in /c/Users/KSF/.ssh/id_rsa.pub

将公钥添加至Github账号

复制id_rsa.pub文件中的内容,进入 GitHub 的 SSH 密钥设置。点击「New SSH Key」,「Title」随便填,「Key」填写刚才复制的id_rsa.pub内容。

Git用户设置

在git bash中执行,用户名和邮箱与GitHub账户保持一致。

1
2
git config --global user.name "<用户名>"
git config --global user.email "<邮箱>"

测试与GitHub的连通性

1
ssh -T git@github.com

第一次输出:

1
2
3
4
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

输入yes:

1
2
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Hi ksf1464! You've successfully authenticated, but GitHub does not provide shell access.

Git配置完成。

本地Hexo准备

安装Hexo

1
npm install -g hexo-cli

本地目录初始化

接下来进行本地目录的初始化,参考:安装 | Hexo

启动终端,进入要建站的目录:

1
cd C:\Users\KSF\Desktop\Blog

安装 Hexo 完成后,请执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。

1
2
3
$ hexo init <folder>
$ cd <folder>
$ npm install
  1. 新建一个 Hexo 项目,起名为 myblog: hexo init myblog
  2. 进入项目目录:cd myblog
  3. 安装依赖:npm install

初始化后,您的项目文件夹将如下所示:

1
2
3
4
5
6
7
8
.
├── _config.yml
├── package.json
├── scaffolds
├── source
| ├── _drafts
| └── _posts
└── themes

之后就可以本地对博客进行预览:hexo s

博客上传至Github

注意网络连通性。

部署在 GitHub Pagse 的 Hexo 可以不需要进行 hexo g 来生成站点了。利用 GitHub Actions,我们可以白嫖 GitHub 的服务器资源来帮助我们自动化生成站点并部署。

建立 Git 仓库

排除一些不上传的目录和文件,自定义 .gitignore 文件:

1
2
3
4
5
6
7
8
9
10
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy_git/
.deploy*/
_multiconfig.yml
.vscode/

进入到站点目录。也就是 hexo init 生成的那个文件夹里。执行下面的命令:

1
2
3
git init
git add . # 有个点
git commit -m "initial commit" # 引号里面的是提交信息,可以随便写

推送到Github

在 GitHub 上新建一个空仓库(repo)。如果想要白嫖 GitHub 的 *.github.io 的域名来访问静态博客,那就把仓库起名为「用户名.github.io」。其他的就用默认设置就行了。

此时还是在你的站点目录里面,执行下面的命令。GitHub 在空仓库的界面也会显示这些命令(选择 SSH,在第二个内容块)。

1
2
3
git remote add origin git@github.com:用户名/仓库名.git
git branch -M main
git push -u origin main

执行完这些命令,没报错的话就是推送到 GitHub 上了,可以刷新 GitHub 看看。

还差点,先记着。

服务器

注意创建个自己的账号,不要用root一撸到底

安装Nginx

我用的Debian。

安装Nginx:sudo apt install nginx

设置开机自启动:sudo systemctl enable nginx

查看Nginx状态: systemctl status nginx

如果没启动,进行启动:sudo systemctl start nginx

在服务器控制面板放行80和443端口。

之后浏览器访问服务器IP地址,看到**Welcome to nginx!**即安装成功。

配置虚拟主机

如果要设置虚拟主机,请在/etc/nginx/sites-available目录中创建新的配置文件。

1
sudo nano /etc/nginx/sites-available/blog.ksfu.top

在文件中写入:

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80;
listen [::]:80;

server_name blog.ksfu.top;

root /var/www/blog.ksfu.top/;
index index.html;

location / {
try_files $uri $uri/ =404;
}
}

在这个例子中,我们创建了一个虚拟主机blog.ksfu.top,设置了根目录,并定义了用于索引的文件。我们还配置了在请求时进行文件和文件夹检查。

让我们更详细地了解虚拟主机的配置。

listen:确定要监听哪个IP地址和端口以接收传入连接。在此示例中,“listen 80”表示服务器将监听端口80上的连接,该端口通常用于HTTP流量。

server_name:指定此虚拟主机提供服务的网站域名。在此示例中,“server_name blog.ksfu.topt”表示该虚拟主机将为域名为blog.ksfu.top的网站提供服务。

root:指定网站文件所在的根目录。在此示例中,“root /var/www/blog.ksfu.top”表示网站文件位于目录/var/www/blog.ksfu.top中。

index:指定用作网站主页的文件名称。在此示例中,“index index.html”表示文件index.html将用作主页。

location:根据URL地址指定处理请求的其他设置。在此示例中,“location /”表示所有以/开头的请求都将根据指定的规则进行处理。在这种情况下,如果找不到请求的文件,Nginx将返回404错误。

激活虚拟主机

要激活虚拟主机,请在sites-enabled目录中创建一个符号链接到配置文件:

1
sudo ln -s /etc/nginx/sites-available/blog.ksfu.top /etc/nginx/sites-enabled/

然后,重新启动Nginx:

1
sudo systemctl restart nginx

创建网站目录

为了为 blog.ksfu.top 虚拟主机创建根目录,在终端中运行以下命令:

1
sudo mkdir -p /var/www/blog.ksfu.top

此命令在 /var/www/ 目录中创建 log.ksfu.top 目录。-p 选项允许您递归创建目录(如果它们尚不存在)。如果 /var/www/ 目录尚不存在,则这很有用。

创建目录后,您需要为其设置正确的权限。由于在我们的示例中 Nginx Web 服务器以 www-data 用户身份运行,因此该用户需要对网站根目录拥有读写权限。

要设置正确的权限,请运行以下命令:

1
sudo chown -R www-data:www-data /var/www/blog.ksfu.top

此命令将 blog.ksfu.top 目录的所有者和组更改为 www-data。-R 选项允许您递归更改目录内所有文件和子目录的所有者。运行此命令后,Nginx 将能够访问 blog.ksfu.top 目录中的文件并将其用于提供网站服务。

添加用于博客部署的用户

我们接下来新建一个用户 git, 用于接收 Hexo 部署时上传的静态文件。

1
2
sudo adduser git
sudo chown git /var/www/blog.ksfu.top # 把网站根目录所有者设为 git 用户,根目录和上面保持一致

添加git的sudo权限:

打开/etc/sudoers 文件。

1
sudo nano /etc/sudoers

添加:

1
git ALL=(ALL) ALL

保存并关闭文件。然后,注销并重新登录。

验证SUDOERS组成员:sudo -l -U git

为git用户设置SSH

既然这个用户要接收静态文件,自然需要配置 SSH 进行身份认证。

1
2
3
su git
mkdir ~/.ssh
cd ~/.ssh

生成新的密钥对用于身份验证:

1
ssh-keygen # 生成新密钥对,一路回车

创建用于接收文件的 git 仓库

安装git:sudo apt install git

由于 hexo-deployer-git 插件会把博客在本地生成的静态文件部署到一个远程仓库,我们现在在服务端,需要建立一个这样的仓库用于接收:

1
2
3
su git
cd ~
git init --bare blog.git # 裸仓库

接下来我们为这个仓库创建一个钩子(hook): 当静态文件被推送到这个仓库后,这个 hook 会自动触发,把静态文件复制到网站根目录中进行部署:

1
nano ~/blog.git/hooks/post-receive

然后填入:

1
2
# post-receive
git --work-tree=/var/www/blog.ksfu.top --git-dir=/home/git/blog.git checkout -f

意思就是 /home/git/blog.git 仓库接收到静态文件后把这些文件检出到 /var/www/blog.ksfu.top
所以这里 --work-tree 要和之前设定的网站根目录一致。

添加可执行权限chmod +x ~/blog.git/hooks/post-receive

本地测试

安装插件:npm install hexo-deployer-git --save

_config.yml 中配置如下:

1
2
3
4
5
6
7
8
9
10
# ...

# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
type: 'git'
repository:
my_repo_name: git@my_blog_server.com:/home/git/blog.git,master # 替换成你自己的服务器地址、分支名(尤其注意是 master 还是 main)等

# ...

手动部署

然后执行 hexo clean 清除本地缓存、执行 hexo g -d 完成静态文件生成并部署:这也可以顺带验证一下服务端配置是否正常。

之后如果有关于配置文件或是页面布局的变更,部署前都尽量先清除缓存再生成静态文件。

如果不出意外,你的博客已经完全搭建完毕!可以访问你的博客看看是否已经正常工作了。

如果勾子函数失败,注意检查/var/www/blog.ksfu.top所有者是否有git用户,若没有,执行:sudo chown git /var/www/blog.ksfu.top

不过我们一开始的目的是要实现 CICD 自动部署,所以先别急着 git commit! 现在让我们把服务器源地址藏一下。

配置 GitHub Actions

后头再写

  • 标题: Hexo重新建站记录并使用Github Actions自动部署到服务器
  • 作者: 康师傅
  • 创建于 : 2025-02-04 21:16:29
  • 更新于 : 2025-02-04 21:21:30
  • 链接: https://blog.ksfu.top/posts/29c5/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论