仍需解决的问题
前言
之前的那些方案总感觉有些不得劲
所以本次的技术方案为:
| 项目 | 技术 |
|---|
| 服务端 | Nginx |
| 证书自动续签 | Acmebot |
| 静态站点生成器 | Hugo |
| 文档同步 | Git |
| 博文管理 | Obsidian |
Hugo的主题我选用的 西班牙 中国开发者Jimmy的stack主题
站点的搭建
Hugo的安装与初始化
Nginx和Acmebot的安装配置暂且略过,直接快进到Hugo这一步
首先需要在Hugo的releases中下载插件版(即开头是hugo_extended)
熟悉我的人应该都知道我Linux使用的是Debian,所以接下来一切都以Debian系系统为基准操作
执行
1
| sudo dpkg -i ./hugo_extended_0.145.0_linux-arm64.deb
|
安装完毕后,cd进网站目录,初始化博客文件夹
1
2
| sudo hugo new site blog
cd blog
|
这个时候blog文件夹中就是存有hugo目录结构的文件夹
如果想要了解更多,可以看hugo官方文档
主题的安装与配置、网站的生成
根据Stack文档的说法,在theme直接Clone仓库即可,即:
1
2
| cd theme
sudo git clone https://github.com/CaiJimmy/hugo-theme-stack.git
|
为了使用该主题,我们还要进行配置,配置文件可以在./hugo-theme-stack/exampleSite/中找到,或者也可以直接执行:
1
2
| sudo rm ../hugo.*
sudo cp ./hugo-theme-stack/exampleSite/hugo.yaml ../
|
此时可以直接sudo vim ../hugo.yaml,或者chown之后用其他软件修改
具体修改的内容可以参考Stack文档
⚠注意,需要在./content中创建文件夹page并在page中创建标签页信息,在content文件夹中创建_index.md等,详见Stack文档
修改完成后,只需要执行:
然后将blog.yourdomain的地址解析到/www/wwwroot/blog/publish就可以访问了
文档同步
对于文档而言,存在于/www/wwwroot/blog/content/posts(我这里做了修改,默认应该是post)文件夹中,但是出于偶尔可能要修改page,所以同步整个content
创建Git用户
不太喜欢弄混,所以在这里新建一个用户blog,隶属于组blog
1
| sudo usradd blog -G blog
|
初始化Git仓库
1
2
3
| sudo -u blog git init /www/wwwroot/blog/content
sudo chown -R blog:blog /www/wwwroot/blog/content
sudo chmod -R 775 /www/wwwroot/blog/content
|
设置Git裸仓库
为了允许远程访问,需要创建一个裸仓库,使用钩子函数设置自动同步
1
2
3
4
| sudo mkdir /home/blog
sudo chown -R blog:blog /home/blog
sudo -u blog git init --bare /home/blog/blog-content.git
sudo -u blog vim /home/blog/blog-content.git/hooks/post-receive
|
post-receive的内容为
1
2
| #!/bin/bash
GIT_WORK_TREE=/www/wwwroot/blog/content git checkout -f
|
给post-receive设置可执行
1
| sudo chmod +x /home/blog/blog-content.git/hooks/post-receive
|
仓库提交
因为刚刚创建了裸仓库blog-content.git,而且 /www/wwwroot/blog/content 有文件
所以我们需要进行一次提交:
1
2
3
4
5
6
| cd /www/wwwroot/blog/content
sudo -u blog git init
sudo -u blog git add .
sudo -u blog git commit -m "Initial commit"
sudo -u blog git remote add origin /home/blog/blog-content.git
sudo -u blog git push -u origin master
|
此时本地就可以直接clone了
1
| git clone blog@your-server-ip:/home/blog/blog-content.git
|
权限设置&博客自动生成
因为pull操作后所有文件会变为644(-rw-r--r--),所以需要将文件权限自动设置为775(-rwxrwxr-x),我们还是使用钩子函数,顺便把博客自动生成做了
1
2
3
| sudo chown -R blog:blog /www/wwwroot/blog
sudo chmod -R 775 /www/wwwroot/blog
sudo -u blog vim /home/blog/blog-content.git/hooks/post-checkout
|
post-checkout的内容为
1
2
3
4
| #!/bin/bash
echo "Fixing file permissions..."
find /www/wwwroot/blog/content -type d -exec chmod 775 {} \;
find /www/wwwroot/blog/content -type f -exec chmod 664 {} \;
|
给post-checkout设置可执行
1
| sudo chmod +x /home/blog/blog-content.git/hooks/post-checkout
|
Git免密
为了让后续访问不需要输密码,需要配置SSH密钥
在本地主机执行(我用的是Win11):
1
| ssh-keygen -t ed25519 -f "$HOME\.ssh\blog" -C "blog@your-server-ip"
|
或者如果你用的是Linux的话:
1
| ssh-keygen -t ed25519 -f "~\.ssh\blog" -C "blog@your-server-ip"
|
进入对应目录,打开终端,输入:
获取公钥,进入服务器SSH,执行操作:
1
2
3
4
| sudo -u blog mkdir -p ~/.ssh
sudo -u blog chmod 700 ~/.ssh
sudo -u blog echo "公钥内容" >> ~/.ssh/authorized_keys
sudo -u blog chmod 600 ~/.ssh/authorized_keys
|
在本地主机(我用的是Win11):
打开$HOME\.ssh文件夹
使用记事本编辑config文件
或者如果你用的是Linux的话,执行:
1
2
| cd ~\.ssh\
sudo -u blog vim config
|
输入以下内容
1
2
3
4
5
| Host blog
HostName your_server_ip
User blog
IdentityFile ~/.ssh/blog
IdentitiesOnly yes
|
然后cd进克隆仓库,设置局部Git信息
这样我们的博文只需要在本地的blog-content文件夹中进行修改,再push回服务器就可以实现博客的自动更新了
Obsidian的搭建
模板创建
在设置-第三方插件安装Template
创建一个笔记Template.md作为模板,添加以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| ---
description:
title:
date: <% tp.date.now("YYYY-MM-DDTHH:mm:ss+08:00")%>
tags: []
categories: []
featured: true
---
|
同时开启插件设置的Enable folder templates
此时每创建一个笔记,都会自动应用模板并添加时间信息