-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
112 lines (104 loc) · 4.62 KB
/
Copy pathdocker-compose.yml
File metadata and controls
112 lines (104 loc) · 4.62 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
103
104
105
106
107
108
109
110
111
112
# Argus 私网部署的最小 docker-compose 模板
#
# 核心服务(不含 java-analyzer):
# docker compose up -d --build
#
# 含 Java 源码分析(附加 java-analyzer):
# docker compose --profile java up -d --build
#
# 升级到新版本:
# git pull && docker compose build && docker compose up -d
#
# 备份数据库(在 host 上执行):
# docker compose exec argus python scripts/backup_db.py --keep 7
#
# 注意:
# - 显式 deploy.replicas: 1 配合 CLI 的多 worker 护栏,防止运维误调副本数
# 导致任务双发、WebSocket 事件丢失(任务队列与 EventBus 是进程内)。
# - 默认 fail-closed:Python 宿主端口只绑定 127.0.0.1(不暴露到局域网),
# Java Analyzer 只 expose 给 Compose 内部网络、不映射宿主端口。
# 确需内网开放时使用单独覆盖文件(见 docs/deployment.zh.md):
# docker compose --profile java -f docker-compose.yml -f docker-compose.intranet.example.yml up -d
# 并务必设置强 ARGUS_API_TOKEN(非回环监听 + 弱/无 Token 时 serve 会拒启)。
# - config/ 通过 bind mount 让运维直接修改 server.yaml;
# .fernet_key 也写在这里(首次启动自动生成),切勿误删。
# - outputs 用 named volume,避免 host 权限错乱。
# - java-analyzer 使用 profiles: [java],默认不启动;需要时加 --profile java。
services:
argus:
build:
context: .
dockerfile: Dockerfile
image: argus:latest
container_name: argus
restart: unless-stopped
# 默认只绑定宿主机回环地址;需要从局域网访问时使用 intranet override。
ports:
- "127.0.0.1:8000:8000"
environment:
PYTHONUNBUFFERED: "1"
# 显式 1:与 CLI guard 一致,K8s 注入 WEB_CONCURRENCY > 1 会被拒启
WEB_CONCURRENCY: "1"
# 标准 Compose:宿主端口由下方 127.0.0.1 绑定收敛,容器内 0.0.0.0 不触发
# serve 的"非回环无鉴权"拒启;内网开放覆盖文件会清空此标记并强制 Token。
ARGUS_BIND_LOOPBACK_ONLY: "1"
# Python clone/copy 的源码快照与 Java 使用相同绝对路径
ARGUS_WHITEBOX_SOURCE_WORK_DIR: "/tmp/sources"
# fail-closed:本地路径分析输入必须位于共享源码目录内(未配置时 serve 告警)
ARGUS_WHITEBOX_ALLOWED_SOURCE_ROOTS: "/tmp/sources"
# 与 Java 侧 ENTRYPOINT 的 -Dargus.analysis.allowed-source-roots=/tmp/sources
# 保持一致,无需单独设置 ARGUS_ANALYSIS_ALLOWED_SOURCE_ROOTS。
ARGUS_JAVA_ANALYZER_URL: "http://java-analyzer:8081"
# 若内部 LLM 用域名访问 SSO,可在此追加:
# ARGUS_PROJECT_ROOT: "/app"
# 暴露到非可信网络前必须设置随机 Token:
# ARGUS_API_TOKEN: "请替换为32字节以上的随机串"
volumes:
# 配置目录:rw,因为首次启动会自动生成 config/.fernet_key
- ./config:/app/config
# 运行时产物:DB、screenshots、reports、traces、备份
- argus-outputs:/app/outputs
# 白盒源码快照:与 Java Analyzer 共享
- java-analyzer-sources:/tmp/sources
# 健康检查已在 Dockerfile 中定义(HEALTHCHECK),compose 不再重复
# 单副本是硬约束(见上文);以下显式声明便于 swarm / k8s 转换时一目了然
deploy:
replicas: 1
restart_policy:
condition: on-failure
max_attempts: 5
java-analyzer:
profiles: [java]
build:
context: ./java_analyzer
dockerfile: Dockerfile
image: argus-java-analyzer:latest
container_name: argus-java-analyzer
restart: unless-stopped
# 只暴露给 Compose 内部网络(Python 通过 http://java-analyzer:8081 访问)。
# 不映射宿主端口:Java Analyzer 不是可信公网接口,本地独立调试用
# docker-compose.intranet.example.yml 覆盖或直接 `mvn spring-boot:run`。
expose:
- "8081"
environment:
# 显式收紧:仅允许分析共享源码目录(与 Python 侧 allowed roots 对齐)。
SPRING_APPLICATION_JSON: '{"argus":{"analysis":{"allowed-source-roots":"/tmp/sources"}}}'
volumes:
# 挂载临时源码目录供分析(Python 端 git clone 后的产物)
- java-analyzer-sources:/tmp/sources
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:8081/actuator/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 30s
deploy:
replicas: 1
restart_policy:
condition: on-failure
max_attempts: 3
volumes:
argus-outputs:
name: argus-outputs
java-analyzer-sources:
name: argus-java-analyzer-sources