← 返回首页
· 6 min read · Tech Notes

威联通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 * * * *

这个表达式的含义是:

  1. 0: 秒 (每小时的第 0 秒)
  2. 0: 分钟 (每小时的第 0 分钟)
  3. *: 小时 (每小时)
  4. *: 日 (每天)
  5. *: 月 (每月)
  6. *: 星期 (每周的每一天)

这个表达式会使任务在每小时的整点执行,例如: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 表达式允许更精细的时间控制,包括秒级别的精度,这在某些情况下可能很有用。

Keep building

从实验到生产,把经验写清楚

NAS · Docker · 网络 · 自动化 — 持续沉淀可复用的判断与方案。