威联通NAS使用docker compose部署lobe-chat+watchtower自动更新的方法
我是用的是威联通nas
如下docker compose每一个小时自动更新一次
version: '3.8'
services:
lobe-chat:
image: lobehub/lobe-chat
container_name: lobe-chat
restart: always
ports:
- '3210:3210'
environment:
OPENAI_API_KEY: sk-xxxx
OPENAI_PROXY_URL: https://api-proxy.com/v1
ACCESS_CODE: lobe66
labels:
- "com.centurylinklabs.watchtower.enable=true"
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --cleanup --schedule "0 1 * * * *" --label-enable
这个配置文件的主要变化和说明:
1. 我们保留了 lobe-chat 的原始配置。
2. 在 lobe-chat 服务中,我们添加了一个标签:
labels:
- "com.centurylinklabs.watchtower.enable=true"
这个标签告诉 Watchtower 这个容器应该被监控和更新。
3. Watchtower 服务的配置保持不变,使用了 `–label-enable` 参数。
4. Watchtower 将在每天 10:30(上海时间)检查更新。
5. `–cleanup` 参数确保在更新后删除旧的镜像。
6. lobe-chat 的 `restart: always` 策略确保在更新后(或任何其他原因导致的停止后)自动重启。
使用这个配置:
1. Watchtower 将每天 10:30 检查 lobe-chat 的更新。
2. 如果有新版本可用,Watchtower 将更新 lobe-chat 容器。
3. 更新过程会导致 lobe-chat 容器重启。
4. 由于 `restart: always` 策略,如果更新过程中 lobe-chat 容器停止,它会自动重启。
请注意,确保您的 `OPENAI_API_KEY` 和其他敏感信息在生产环境中得到适当保护。您可能想要使用环境变量或 Docker secrets 来管理这些敏感信息。
使用这个配置,您应该能够实现 lobe-chat 的自动更新和重启。
关于watchtower的cron定时表达的问题
如果您想按照 Spring 风格的 cron 表达式格式,让任务每小时执行一次,您可以使用以下表达式:
0 0 * * * *
这个表达式的含义是:
- 0: 秒 (每小时的第 0 秒)
- 0: 分钟 (每小时的第 0 分钟)
- *: 小时 (每小时)
- *: 日 (每天)
- *: 月 (每月)
- *: 星期 (每周的每一天)
这个表达式会使任务在每小时的整点执行,例如:00:00:00, 01:00:00, 02:00:00, 以此类推。
如果您不需要精确到秒,只关心分钟级别的精度,您也可以使用:
0 0 * * * ?
这里,最后一个字段使用 ? 表示 “不指定”,这在某些系统中是允许的,用于表示对该字段不关心。
在 Watchtower 的配置中,您可以这样使用:
version: "3"
services:
watchtower:
image: containrrr/watchtower
environment:
- WATCHTOWER_SCHEDULE=0 0 * * * *
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --cleanup
这样配置会使 Watchtower 每小时检查一次更新,并在需要时更新容器。
记住,Spring 风格的 cron 表达式允许更精细的时间控制,包括秒级别的精度,这在某些情况下可能很有用。