概述
博客由两部分组成,互相独立:
mycontent/— Obsidian 笔记,存放所有文章myblog/— Hugo 框架,负责生成网站
写完文章后,运行 sync.py 同步内容,再用 hugo 构建,最后上传到服务器。
本地
安装 Hugo
winget install Hugo.Hugo.Extended
安装后重启终端,验证:
hugo version
目录结构
A67_boke/
├── mycontent/ ← Obsidian 笔记
│ └── 主题/
│ ├── 文章.md
│ └── files/ ← 文章配图
└── myblog/ ← Hugo 框架
├── hugo.toml
├── sync.py ← 同步脚本
├── themes/
└── content/ ← 由 sync.py 生成,不要手动修改
同步内容
sync.py 把 mycontent/ 转成 Hugo 格式,自动处理:
- 添加 front matter(标题、日期)
- 图片重命名(去掉空格)并复制到文章目录
cd myblog
python sync.py
本地预览
hugo server
打开 http://localhost:1313 查看效果。
构建
hugo
生成的静态文件在 myblog/public/ 目录。
服务器
服务器系统:Debian,Web 服务器:Nginx。
安装 Nginx
apt update && apt install nginx -y
创建站点目录
mkdir -p /var/www/blog
配置 Nginx
新建配置文件:
nano /etc/nginx/sites-available/blog
写入以下内容,替换 yourdomain.com 为你的域名:
server {
listen 80;
server_name yourdomain.com;
root /var/www/blog;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
启用配置:
ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
上传文件
本地构建后,用 rsync 上传 public/ 目录:
rsync -avz --delete public/ user@yourdomain.com:/var/www/blog/
--delete 会删除服务器上多余的旧文件,保持同步。
发布流程总结
每次写完新文章:
apt install rsync -y
cd myblog
python sync.py # 同步 Obsidian 内容
hugo # 构建静态文件
rsync -avz --delete public/ user@yourdomain.com:/var/www/blog/
# /mnt/c/Users/20881/vscode/A67_boke/myblog/public/
# 申请证书
apt install certbot python3-certbot-nginx -y
certbot --nginx -d yourdomain.com # 输入到期提醒(90天有效期)邮箱, 同意条款
三条命令,完成发布。