Hexo重新建站记录并使用Github Actions自动部署到服务器
Hexo重新建站记录并使用Github Actions自动部署到服务器
还没写完,剩下的明天再说。
window11使用fnm管理node - 水滴-石穿 - 博客园
Node版本管理用什么?–Fast Node Manager(fnm) fnm 是一个基于 Rust 的 Node.j - 掘金
如何搭建 Hexo 博客并使用 Github Actions 自动部署到自己服务器
环境准备
安装Node.js
虽然现在用不到,但是提前准备,使用fnm
对Node.js进行多版本管理。
Schniz/fnm: 🚀 Fast and simple Node.js version manager, built in Rust
使用官方文档中的安装方法:
1 | PS C:\Users\KSF\Desktop> winget install Schniz.fnm |
环境变量已自动添加,重启终端查看:
1 | PS C:\Users\KSF\Desktop> fnm --version |
配置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
图形安装,注意选项Next就行)
配置Git
本地生成密钥
确认自己注册Github的邮箱,本地生成密钥,在git bash中运行:ssh-keygen -t rsa -C "<邮箱>"
。
1 | KSF@DESKTOP-H9B1IAN MINGW64 ~ |
将公钥添加至Github账号
复制id_rsa.pub
文件中的内容,进入 GitHub 的 SSH 密钥设置。点击「New SSH Key」,「Title」随便填,「Key」填写刚才复制的id_rsa.pub
内容。
Git用户设置
在git bash中执行,用户名和邮箱与GitHub账户保持一致。
1 | git config --global user.name "<用户名>" |
测试与GitHub的连通性
1 | ssh -T git@github.com |
第一次输出:
1 | The authenticity of host 'github.com (20.205.243.166)' can't be established. |
输入yes:
1 | Warning: Permanently added 'github.com' (ED25519) to the list of known hosts. |
Git配置完成。
本地Hexo准备
安装Hexo
1 | npm install -g hexo-cli |
本地目录初始化
接下来进行本地目录的初始化,参考:安装 | Hexo。
启动终端,进入要建站的目录:
1 | cd C:\Users\KSF\Desktop\Blog |
安装 Hexo 完成后,请执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。
1 | hexo init <folder> |
- 新建一个 Hexo 项目,起名为 myblog:
hexo init myblog
- 进入项目目录:
cd myblog
- 安装依赖:
npm install
初始化后,您的项目文件夹将如下所示:
1 | . |
之后就可以本地对博客进行预览:hexo s
博客上传至Github
注意网络连通性。
部署在 GitHub Pagse 的 Hexo 可以不需要进行 hexo g
来生成站点了。利用 GitHub Actions,我们可以白嫖 GitHub 的服务器资源来帮助我们自动化生成站点并部署。
建立 Git 仓库
排除一些不上传的目录和文件,自定义 .gitignore
文件:
1 | .DS_Store |
进入到站点目录。也就是 hexo init
生成的那个文件夹里。执行下面的命令:
1 | git init |
推送到Github
在 GitHub 上新建一个空仓库(repo)。如果想要白嫖 GitHub 的 *.github.io 的域名来访问静态博客,那就把仓库起名为「用户名.github.io」。其他的就用默认设置就行了。
此时还是在你的站点目录里面,执行下面的命令。GitHub 在空仓库的界面也会显示这些命令(选择 SSH,在第二个内容块)。
1 | git remote add origin git@github.com:用户名/仓库名.git |
执行完这些命令,没报错的话就是推送到 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 | server { |
在这个例子中,我们创建了一个虚拟主机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 | sudo adduser git |
添加git的sudo权限:
打开/etc/sudoers
文件。
1 | sudo nano /etc/sudoers |
添加:
1 | git ALL=(ALL) ALL |
保存并关闭文件。然后,注销并重新登录。
验证SUDOERS组成员:sudo -l -U git
为git用户设置SSH
既然这个用户要接收静态文件,自然需要配置 SSH 进行身份认证。
1 | su git |
生成新的密钥对用于身份验证:
1 | ssh-keygen # 生成新密钥对,一路回车 |
创建用于接收文件的 git 仓库
安装git:sudo apt install git
由于 hexo-deployer-git
插件会把博客在本地生成的静态文件部署到一个远程仓库,我们现在在服务端,需要建立一个这样的仓库用于接收:
1 | su git |
接下来我们为这个仓库创建一个钩子(hook): 当静态文件被推送到这个仓库后,这个 hook 会自动触发,把静态文件复制到网站根目录中进行部署:
1 | nano ~/blog.git/hooks/post-receive |
然后填入:
1 | # post-receive |
意思就是 /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 | # ... |
手动部署
然后执行 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 进行许可。