Repository navigation
Expand file tree
/
Copy pathcompose.yaml
More file actions
102 lines (100 loc) · 4.9 KB
/
Copy pathcompose.yaml
File metadata and controls
102 lines (100 loc) · 4.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
services:
app:
build:
context: .
target: runtime
# 构建期代理(可选):DOCKER_BUILD_PROXY=http://host.docker.internal:7890 docker compose build
# 走本地 clash 等代理(需开 Allow LAN 监听 0.0.0.0;build 容器不读宿主机系统代理)。
# proxy 类 build-arg 不参与层缓存 hash,默认空串=零行为变化。若 host.docker.internal
# 在 build 内解析失败,改用宿主机局域网 IP。
args:
HTTP_PROXY: ${DOCKER_BUILD_PROXY:-}
HTTPS_PROXY: ${DOCKER_BUILD_PROXY:-}
NO_PROXY: localhost,127.0.0.1,searxng,dailyhot
NPM_REGISTRY: ${DOCKER_BUILD_NPM_REGISTRY:-}
ports:
- "127.0.0.1:${DRAFTDESK_PORT:-5173}:3000"
volumes:
# 存储根治(2026-10-10):库移入 named volume,绕开 Windows bind mount
# 共享层(9p/FUSE)——四次挂载类事故(截断/失谐/页损坏)同根因。代码零改动
# (容器内路径不变)。每日快照经 janitor 写 ./backups(bind 只追加、不扩展,无截断风险)。
- draftdesk-data:/app/data
- ./backups:/app/backups
environment:
DRAFTDESK_DATA_DIR: /app/data
DRAFTDESK_BACKUP_DIR: /app/backups
# 开发环境开关(R10.40):本地 .env 设 DRAFTDESK_EMBEDDED_WORKER=0 关闭 worker 循环
#(01:00 日批/挖掘 tick 全静默,本地变纯 API/UI 服务);生产不设=照常日批。
DRAFTDESK_EMBEDDED_WORKER: ${DRAFTDESK_EMBEDDED_WORKER:-}
DRAFTDESK_ALLOWED_HOSTS: host.docker.internal
# 会话鉴权(R10.39 上线前置):公网 HTTPS 部署时在 .env 设置访问码即启用 UI 登录门
#(PWA/浏览器走 30 天会话 cookie,机器访问可另配 DRAFTDESK_UI_TOKEN 头令牌)。
# 不设置=本机模式零变化。
DRAFTDESK_ACCESS_CODE: ${DRAFTDESK_ACCESS_CODE:-}
DRAFTDESK_AI_API_KEY: ${DRAFTDESK_AI_API_KEY:-}
DRAFTDESK_AI_BASE_URL: ${DRAFTDESK_AI_BASE_URL:-}
DRAFTDESK_AI_MODEL: ${DRAFTDESK_AI_MODEL:-qwen3.8-flash}
# 向量事件线(R10.23):Redis 8 查询引擎仅支持 db0(FT.CREATE on db!=0 报错),
# 向量 key 前缀 dd:v:* 与 RSSHub 缓存键空间隔离;未配置时向量线整体降级 no-op
REDIS_URL: redis://redis:6379/
depends_on:
- redis
restart: unless-stopped
healthcheck:
test:
[
"CMD",
"node",
"-e",
"fetch('http://127.0.0.1:3000/api/v1/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))",
]
interval: 20s
timeout: 5s
retries: 5
dailyhot:
# 热榜聚合 API:仅项目内网(工作台 core/sources.ts 写死 http://dailyhot:6688),
# 不占宿主端口。镜像按 sha256 digest 固定,升级需显式改这里。
image: imsyy/dailyhot-api@sha256:748fc79d29a422f512018e8a58ef1a0e20306dd6254637933960573fa37b1e5e
restart: unless-stopped
rsshub:
# RSSHub(R10.5):复活已下线 RSS 的四死源(机器之心/36氪/虎嗅/新浪科技)。
# 仅项目内网消费(工作台经 http://rsshub:1200/<路由>),零端口暴露,与 dailyhot/searxng 同款。
image: diygod/rsshub:latest
restart: unless-stopped
environment:
CACHE_TYPE: redis
REDIS_URL: redis://redis:6379/
depends_on:
- redis
redis:
# 集群共享 Redis:RSSHub 缓存(db0)+ 向量事件线(db1,R10.23 组摘要/词簇向量)。
# 向量数据要跨重启存续(48h 语义去重窗口)→ AOF 持久化 + named volume;零端口暴露。
image: redis:alpine
command: ["redis-server", "--appendonly", "yes"]
volumes:
- redis-data:/data
restart: unless-stopped
searxng:
# 本地元搜索:网页搜索「SearXNG 补位」后端(模型与设置里可选),零成本零密钥。
# 仅项目内网消费(工作台写死 http://searxng:8080),不占宿主端口;
# JSON 输出在 search/settings.yml 放行。
image: searxng/searxng:latest
restart: unless-stopped
environment:
SEARXNG_BASE_URL: ${SEARXNG_BASE_URL:-http://127.0.0.1:8080/}
volumes:
- ./search/settings.yml:/etc/searxng/settings.yml:ro
- searxng-cache:/var/cache/searxng
healthcheck:
test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:8080/healthz', timeout=3)\""]
interval: 20s
timeout: 5s
retries: 5
# 不声明外部网络:服务都在 compose 默认项目网络里,服务名即 DNS
# (http://dailyhot:6688、http://searxng:8080),fresh clone 一条命令即可启动。
volumes:
searxng-cache:
redis-data:
# name 固定为 draftdesk-data:compose 默认会加项目前缀(draftdesk_draftdesk-data),
# 首次搬迁已按字面名建卷,固定名避免双卷分叉(事故现场:空卷被初始化成 70 行新库)。
draftdesk-data: { driver: local, name: draftdesk-data }