2.9 KiB
2.9 KiB
Linux 定时部署脚本说明
适用于当前这套流程:
- log 由另一个服务生成
- log 落到宿主机目录
- 宿主机定时任务复制 log 到 homepage 仓库
- 宿主机执行
npm run rebuild - 宿主机执行
docker compose up -d --build homepage
统一脚本:
scripts/deploy-homepage.sh
1. 当前默认值
脚本里的默认值已经按当前主页项目直接写死:
| 变量 | 默认值 | 说明 |
|---|---|---|
LOG_SOURCE_DIR |
/home/basil/bot/data/git-summary |
日志生成服务写入的源目录 |
SITE_DIR |
/home/basil/source/personal-homepage |
个人主页仓库根目录 |
LOG_TARGET_DIR |
$SITE_DIR/src/content/logs |
复制后的日志目标目录 |
DOCKER_COMPOSE_FILE |
$SITE_DIR/docker-compose.yml |
Compose 文件 |
DOCKER_SERVICE_NAME |
homepage |
要重建/重启的服务名 |
RSYNC_DELETE |
false |
同步时默认不删除旧日志 |
RUN_LOCAL_REBUILD |
true |
默认先在宿主机执行 npm run rebuild |
LOCK_FILE |
/tmp/personal-homepage-deploy.lock |
防止重复执行的锁文件 |
如果你的机器目录不同,可以通过环境变量覆盖。
2. 脚本实际执行内容
脚本默认顺序如下:
- 检查目录与命令是否存在
- 获取锁文件,避免重复执行
- 把
LOG_SOURCE_DIR同步到LOG_TARGET_DIR - 进入
SITE_DIR执行npm run rebuild - 进入
SITE_DIR执行:
docker compose -f "$DOCKER_COMPOSE_FILE" up -d --build "$DOCKER_SERVICE_NAME"
3. 直接执行
使用默认值:
./scripts/deploy-homepage.sh
覆盖部分变量:
LOG_SOURCE_DIR=/data/logs \
SITE_DIR=/srv/personal-homepage \
RSYNC_DELETE=true \
./scripts/deploy-homepage.sh
如果你只想做 log 同步 + Docker 重建,不想先在宿主机跑一次 npm run rebuild:
RUN_LOCAL_REBUILD=false ./scripts/deploy-homepage.sh
4. 推荐的 cron 配置
例如每天 00:00 执行一次:
0 0 * * * /home/basil/source/personal-homepage/scripts/deploy-homepage.sh >> /var/log/personal-homepage-deploy.log 2>&1
例如每 30 分钟执行一次:
*/30 * * * * /home/basil/source/personal-homepage/scripts/deploy-homepage.sh >> /var/log/personal-homepage-deploy.log 2>&1
因为脚本内部已经带了 LOCK_FILE 锁,所以 cron 不一定还要额外再包一层 flock。
5. 推荐前提
宿主机应具备:
dockerdocker composenpmrsync(推荐,有则优先使用)flock(推荐,用于避免重入)
如果没有 rsync,脚本会自动退回到 cp -a。
如果没有 flock,脚本也能跑,只是没有并发保护。
6. 建议
当前建议:
LOG_SOURCE_DIR作为日志服务的宿主机挂载目录SITE_DIR直接指向 homepage 仓库根目录- 优先先手动跑通一次:
./scripts/deploy-homepage.sh
确认没问题后再挂 cron。