文档:记录两个部署目标的服务方式,并开启线上压缩

排查「树莓派预览打不开」时发现两件事,都不是这次部署造成的,但都修了/记了:

1) 树莓派上根本没有 web 服务
   - nginx 未安装(Unit nginx.service could not be found),80 端口无人监听
   - deploy.sh 一直把文件 rsync 到 /home/pi/www/Astro_firefly(这次也确实到了,
     index.html 17:54、59 个 KaTeX 字体都在),但没有服务对外提供
   - 补了 Caddy 容器 blog-caddy(--restart unless-stopped,配置 /home/pi/caddy/Caddyfile,
     站点根挂到 /srv:ro),http://192.168.1.87 现在正常,各页面 200

2) 云服务器的 Caddy 一条 encode 都没有,全站裸传
   - twikoo.min.js 506 KB、主 CSS 231 KB、首页 HTML 134 KB
   - 站点块加 encode zstd gzip(改前按已有习惯备份成
     Caddyfile.bak.gzip.20260915_175943,validate 通过后 reload)
   - 实测 twikoo.min.js 506108 -> 160547 B(省 68%),CSS 230615 -> 40822 B(省 82%)
   - Caddy 按 Accept-Encoding 协商 zstd / gzip,所有页面仍 200

README 与操作指南补了「两个目标各自怎么服务的」和 Pi Caddy 的重建命令,
并注明 1Panel 管的 Caddyfile 手改后要注意什么、reload 为什么是安全的。
This commit is contained in:
dsh
2026-09-15 18:00:33 +08:00
parent d0e504d1c3
commit 71026ee291
3 changed files with 35 additions and 1 deletions
+29
View File
@@ -360,6 +360,35 @@ src/components/bookshelf-content.astro
目标地址和 SSH 密钥在脚本顶部的**配置区**。脚本会在构建失败或产物异常时**直接中止**——因为推送用的是 `rsync --delete`,拿一个残缺的 `dist/` 上去会清空线上目录。
### 两个目标各自怎么服务的
| 目标 | 服务方式 | 地址 |
|---|---|---|
| 云服务器 | **1Panel 管理的 Caddy 容器**(`1Panel-caddy-meZ7`),配置在 `/opt/1panel/apps/caddy/caddy/data/conf/Caddyfile`,站点根 `/srv/astro-blog` | <https://tianxuetao.top> |
| 树莓派 | **Caddy 容器**(`blog-caddy`,`--restart unless-stopped`),配置在 `/home/pi/caddy/Caddyfile`,站点根 `/home/pi/www/Astro_firefly` | <http://192.168.1.87> |
**两个都开了压缩**(`encode zstd gzip`)。这个别删:`twikoo.min.js` 裸传 506 KB、压完 160 KB,主 CSS 231 KB → 41 KB。Caddy 按 `Accept-Encoding` 自动协商 zstd / gzip。
Pi 上原本没有 web 服务(文件 rsync 过去了但 80 端口没人听),2026-09-15 补了 Caddy 容器。重建命令:
```bash
ssh pi@192.168.1.87
mkdir -p /home/pi/caddy/{data,config}
cat > /home/pi/caddy/Caddyfile <<'EOF'
:80 {
root * /srv
encode zstd gzip
file_server
}
EOF
docker run -d --name blog-caddy --restart unless-stopped -p 80:80 \
-v /home/pi/caddy/Caddyfile:/etc/caddy/Caddyfile:ro \
-v /home/pi/caddy/data:/data -v /home/pi/caddy/config:/config \
-v /home/pi/www/Astro_firefly:/srv:ro caddy:alpine
```
> 云服务器的 Caddyfile 是 1Panel 生成的。手动改完之后 1Panel 那边可能不认识,**改前先按它已有的习惯备份**(`Caddyfile.bak.<说明>.<时间戳>`),改完用 `docker exec 1Panel-caddy-meZ7 caddy validate --config /etc/caddy/Caddyfile` 校验再 `caddy reload`——reload 是原子的,配置有错会保留旧配置继续跑,站点不会挂。
`vercel.json` 仍然保留,把它接到 Vercel 也可以。走 Vercel 时需要在项目里配置环境变量 `PUBLIC_TWIKOO_ENV_ID`(评论后端地址,留空则不渲染评论区);本地开发写进 `.env`(已 gitignore),参考 `.env.example`。
---
+5
View File
@@ -162,6 +162,11 @@ pnpm preview # 本地预览构建产物(搜索功能只有这里才生效
它会构建一次,然后 rsync 到树莓派和云服务器,覆盖生产前会问你一句确认。
两个目标都是 **Caddy** 在服务,而且都开了压缩(`twikoo.min.js` 506 KB → 160 KB)。
- 云服务器:1Panel 管的 Caddy 容器,配置 `/opt/1panel/apps/caddy/caddy/data/conf/Caddyfile`
- 树莓派:Caddy 容器 `blog-caddy`,配置 `/home/pi/caddy/Caddyfile`
| 命令 | 用途 |
|---|---|
| `./deploy.sh` | 构建 + 部署两个目标 |
+1 -1
View File
@@ -1,5 +1,5 @@
{
"updatedAt": "2026-09-15T09:51:31.421Z",
"updatedAt": "2026-09-15T10:00:22.188Z",
"source": "weread",
"books": [
{