更新博客备忘录
站点已经迁到自己的服务器上了,以前的 Vercel / EdgeOne Pages 那两条路都废弃了。现在只剩一条链路:
本地写 markdown → 本地构建 → 上传到服务器 → 线上生效一、日常更新:三步
# 1. 新建文章(会生成带 front-matter 的模板)pnpm new-post ctf
# 2. 本地预览,边写边看pnpm dev # 浏览器打开 http://localhost:4321
# 3. 写完发布bash scripts/deploy-to-server.sh第 3 步会自动做完整套事情:pnpm build 构建 → 打包 dist/ → 上传到服务器 /var/www/lyh-blogs → 收敛文件权限。跑完输出 服务器文件数: N 就算成功。
只想改一篇文章、不新建,就跳过第 1 步,改完直接跑第 3 步。
二、文章写在哪、怎么写
文章都在 src/content/posts/ 下,一个 .md 文件就是一篇。文件名决定网址:
src/content/posts/ctf.md ↓https://lyh-blogs.top/posts/ctf/pnpm new-post 生成的模板长这样:
---title: ctfpublished: 2026-09-25description: ''image: ''tags: []category: ''draft: falselang: ''---常用字段:
title— 标题,一定要改,默认是文件名published— 发布日期,决定排序,写成2026-09-25这种格式description— 摘要,会出现在首页卡片和搜索引擎结果里tags— 标签数组,写成[ctf, pwn]category— 分类,单个字符串draft— 置true就是草稿。本地pnpm dev能看到,线上构建会被排除,想先存着不发就用它image— 封面图,写相对路径pinned— 置true会置顶
三、配图:必须用相对路径
这是踩过的坑,写错了线上就是一个个断图。
图片统一放 src/content/posts/images/ 下,建议按主题建子目录:
src/content/posts/images/├── moectf-2026/│ ├── level1.jpg│ └── cat.png└── writeup_images/ └── 1.png在文章里用相对路径引用,且路径是相对于 .md 文件本身:
写完之后,Astro 会自动把图片处理成 /_astro/level1.<哈希>.webp,顺手做了压缩和格式转换,这是正常的、也是我们想要的效果。
不要用以 / 开头的绝对路径:
 <!-- 错!线上 404 -->Astro 会把这种路径当成”放在 public/ 里的静态文件”原样输出,而图片并不在 public/ 下,所以线上直接 404。
两种写法的实测对照:
./images/ctf/level1.jpg→ 构建成/_astro/level1.Deo-b12t.jpg→ 访问 200/posts/images/ctf/level1.jpg→ 原样保留 → 访问 404
顺带两个容易手滑的地方:
- 括号别写成花括号。
是对的,![图]{路径}会渲染成一段纯文本 - 中文文件名和带空格的目录名尽量别用,URL 里要转义,麻烦
四、发布完怎么确认
# 首页通不通curl -s -o /dev/null -w "%{http_code}\n" https://lyh-blogs.top/
# 刚发的那篇通不通curl -s -o /dev/null -w "%{http_code}\n" https://lyh-blogs.top/posts/文章名/看状态码:
200— 成功404— 文件没传上去,或者权限不对(见下一节)403— 权限问题
五、出问题先看这两个地方
整站 404,但服务器上文件数正常
九成是站点根目录权限被带歪了。tar 打包会把本地 dist/ 的权限原样带上服务器,本地 dist/ 有时是 700,Web 服务器进不去目录,就整站 404。
ssh -i ~/.ssh/id_ed25519 ubuntu@123.207.244.94ls -ld /var/www/lyh-blogs # 应该是 drwxr-xr-x,如果是 drwx------ 就是这个问题修复:
sudo chmod 755 /var/www/lyh-blogssudo find /var/www/lyh-blogs -type d -exec chmod 755 {} +sudo find /var/www/lyh-blogs -type f -exec chmod 644 {} +部署脚本里已经内置了这一步,正常不会再犯。如果又出现了,说明脚本被人改过。
图片不显示
先按 F12 看控制台里图片请求的地址:
- 地址是
/_astro/xxx.webp却 404 → 图片文件本身没传上去,检查src/content/posts/images/下有没有这个文件 - 地址是
/posts/images/xxx.png这种裸路径 → 引用写法错了,改回相对路径
六、运维备忘
服务器信息:
- 公网 IP
123.207.244.94(腾讯云轻量,Ubuntu 22.04) - 登录
ssh -i ~/.ssh/id_ed25519 ubuntu@123.207.244.94 - 站点根目录
/var/www/lyh-blogs - Nginx 配置
/etc/nginx/sites-available/lyh-blogs
改 Nginx 配置之后:
sudo nginx -t && sudo systemctl reload nginxHTTPS 证书由 Let’s Encrypt 签发,已装自动续期,不用手动管。手动查剩多久:
sudo certbot certificatesSSH 只认密钥,密码已关闭
服务器已加固,现在只能用密钥登录,密码登录和 root 直接登录都被拒绝了。这是有意为之 —— 云服务器默认开着密码登录,22 端口又对全网开放,等于给爆破留门。
配置在 /etc/ssh/sshd_config.d/00-hardening.conf,内容也留在仓库 deploy/ssh-hardening.conf。
几点要注意:
- 换电脑或重装系统后,先把新公钥传到服务器,别等登不上了才想起来:
ssh-copy-id -i ~/.ssh/id_ed25519.pub ubuntu@123.207.244.94 - 万一真登不上,去腾讯云控制台用 VNC 登录,然后删掉那个文件恢复密码登录:
sudo rm /etc/ssh/sshd_config.d/00-hardening.conf && sudo systemctl reload ssh - 别把私钥
~/.ssh/id_ed25519弄丢,也没有别忘了备份
关于服务器 IP 是否算敏感信息
不算。域名有 A 记录,dig lyh-blogs.top 谁都能查到这台服务器的 IP,浏览器访问你的网站时本来也知道它,公安备案表还要求你填。IP 藏不住,也不值得藏。
真正决定安全的不是 IP 有没有被知道,而是两件事:
- 谁能登录 —— 现在只认密钥,爆破没有着力点
- 对外开了哪些端口 —— 只有 22(SSH)、80、443,没有多余服务
想看当前开了哪些端口:
sudo ss -tlnp想看看有没有人在尝试爆破:
sudo fail2ban-client status sshd # 已装 fail2ban,5 次失败封 1 小时七、简版速查
pnpm new-post 文章名 # 新建文章pnpm dev # 本地预览 localhost:4321bash scripts/deploy-to-server.sh # 构建 + 上传 + 上线文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!