我这个博客站经过我的多次折腾,最终又回到了Hugo,虽然还算比较喜欢wordpress强大齐全的功能,但架不住未来肉眼可见即将飙升的内存占用率,因此还是决定安家于Hugo家庭。对于只想分享经验和知识的小小需求,这里足以。
Prerequisites
- VPS:我这里选的是Vultr,当年的胎盘价$2.5/月购入,现如今已经用了5年了。
- github仓库
Components
- Nginx
- hugo
- Certbot
- github actions runner
Build repo from scratch
Blog repo
在本地创建一个blog文件夹
hugo new site hugo-blog-example && cd hugo-blog-example
目录结构如下
~ tree -L 3 . ├── archetypes │ └── default.md ├── assets ├── config.toml ├── content ├── data ├── layouts ├── public ├── static └── themes
在github上创建一个空的私有仓库
提交当前所有文件到私有仓库
git init git add . git commit -m "first commit" git branch -M main git remote add origin https://github.com/[YOUR NAME]/[YOUR REPO].git git push -u origin main
在Hugo主题库选一个喜欢的主题, 并安装
这里以Paper为例, 在你的项目里运行以下command
git submodule add https://github.com/nanxiaobei/hugo-paper themes/paper
打开
config.toml
, 将主题改为pagertheme = "paper"
因为这里用到了git submodule,可参考这里查看一些相关的命令
在本地起一个hugo server,端口默认是1313
hugo server -D
浏览器里输入
localhost:1313
,即可看到你fancy的站点啦。修改配置文件
config.toml
,来更改站点的设置结合样例配置,和hugo官方配置文档来修改所需功能,这里需要花蛮多的时间,可以配置友链,评论系统,SEO等功能。
baseURL = "https://blog.dustbreak.com/" author = "Mingo Gao" copyright = "Copyright © 2021–2022, Mingo Gao all rights reserved." paginate = 5 languageCode = "en" DefaultContentLanguage = "en" enableInlineShortcodes = true ...
修改完毕后,记得提交代码,利用github来持久化存放你的所有blog
github actions runner
安装github action runner 可以根据此文档 在你的VM上,下载安装一个runner。 在Settings->Actions->Runners上会看到如下命令
# Create a folder $ mkdir actions-runner && cd actions-runner# Download the latest runner package $ curl -o actions-runner-linux-x64-2.299.1.tar.gz -L https://github.com/actions/runner/releases/download/v2.299.1/actions-runner-linux-x64-2.299.1.tar.gz# Optional: Validate the hash $ echo "147c14700c6cb997421b9a239c012197f11ea9854cd901ee88ead6fe73a72c74 actions-runner-linux-x64-2.299.1.tar.gz" | shasum -a 256 -c# Extract the installer $ tar xzf ./actions-runner-linux-x64-2.299.1.tar.gz
并注册此runner
# Create the runner and start the configuration experience $ ./config.sh --url https://github.com/m1n9o/hugo-blog --token THISISALONGTOKEN
配置runner为service
我们希望此runner可以开机自启,而不需要每次重启服务都得手动启动,根据此文档配置即可。
配置部署文件
在项目中创建`.github/workflows/deploy.yml`
```
name: Custom Server
on:
push:
branches:
- main # Set a branch to deploy
pull_request:
jobs:
deploy:
runs-on: self-hosted # 因为我们用了自己创建的runner,所以指定self-hosted
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
steps:
- uses: actions/checkout@v3
with:
submodules: true # Fetch Hugo themes (true OR recursive)
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: '0.100.2'
extended: true
- name: Build
run: hugo --minify
- name: rsync
run: rsync -r ./public/ /var/www/html/hugo-blog --delete # 将渲染出来的文件同步到指定目录下
```
以上github相关的配置就差不多了,接下来就需要在VM上配一下环境了
Build environment for blog
Hugo
- 安装Hugo
sudo apt update sudo apt install hugo
Nginx
- 安装Nginx
sudo apt update sudo apt install nginx
- 配置防火墙
sudo ufw allow 'Nginx Full' # 会开启80和443端口 sudo ufw status # 检查改动
- 检查web server
systemctl status nginx # systemctl restart nginx
Certbot
安装Certbot
add-apt-repository universe && add-apt-repository ppa:certbot/certbot apt-get install certbot python-certbot-nginx
创建certificate
现在的certbot更强大了,在创建certificate的时候,可以自动配置nginx,并且可以定期自动renew,完全解放了双手。
sudo certbot --nginx -d dustbreak.com -d blog.dustbreak.com
nginx配置
修改目标路径
还记得在github actions的最后一步吗?需在
/etc/nginx/nginx.conf
文件里修改目标路径。root /var/www/html/hugo-blog;
到此就大功告成了!
Commands
# 删除submodule
git rm --cached path/to/submodule
rm -rf path/to/submodule
rm -rf .git/modules/<path-to-submodule>
git config --remove-section submodule.<path-to-submodule>
# 列出已安装的app
apt list --installed
# 更新证书
certbot renew --dry-run
certbot renew