Repository navigation
Expand file tree
/
Copy pathdocker-compose.dev.yml
More file actions
84 lines (80 loc) · 3.16 KB
/
Copy pathdocker-compose.dev.yml
File metadata and controls
84 lines (80 loc) · 3.16 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
name: xcash-dev
volumes:
db_data: {}
redis_data: {}
# anvil 会在 $HOME/.foundry/anvil/tmp 下按会话堆放每块 trace/receipt,独立卷便于排查与单独清理。
foundry_home: {}
# anvil 链状态必须与 dev DB 同生命周期,否则系统热钱包链上 nonce 会回到 0,
# 但 EvmTxTask 仍会从历史 nonce 继续分配,造成本地链与数据库错位。
anvil_state: {}
services:
db:
image: postgres:18.4-trixie
container_name: xcash_dev_db
restart: unless-stopped
env_file:
- .env
ports:
- "${POSTGRES_PORT:-5432}:5432"
volumes:
- db_data:/var/lib/postgresql
redis:
image: redis:8.2.1
container_name: xcash_dev_redis
restart: unless-stopped
# 与生产一致:maxmemory 上限 + volatile-lru(只淘汰带 TTL 的可重建缓存,
# timeout=None 的配置缓存豁免),让本地也能复现生产的淘汰行为。
# 改动前请先读生产 compose 里关于该策略的说明。
command:
- redis-server
- --appendonly
- "yes"
- --maxmemory
- "256mb"
- --maxmemory-policy
- volatile-lru
ports:
- "${REDIS_PORT:-6379}:6379"
volumes:
- redis_data:/data
# 本地 EVM 模拟链统一叫 anvil:与 ChainCode.Anvil、调试默认起的
# 唯一 EVM 链保持同名,避免「服务叫 ethereum、链代码却是 anvil」的认知割裂。
anvil:
image: ghcr.io/foundry-rs/foundry:v1.3.1
container_name: xcash_dev_anvil
# 开发环境直接以 root 运行,避免 Docker 命名卷根目录默认 755/root:root
# 导致镜像内 foundry 用户无法写入挂载点。
user: "0:0"
restart: unless-stopped
entrypoint: ["anvil"]
ports:
- "${LOCAL_EVM_PORT:-8545}:8545"
volumes:
# anvil 会在 $HOME/.foundry/anvil/tmp/<session> 下累积每块 trace/receipt,并仅在 graceful shutdown 时清理。
# 容器异常重启会留下数十 GB 孤儿目录。挂出独立卷避免污染容器可写层,便于按需 docker volume rm 清理。
- foundry_home:/root/.foundry
- anvil_state:/anvil
# anvil 的 stdout 每秒至少一行块日志,限制 daemon 端日志体积,避免长跑后吃满宿主机磁盘。
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"
command:
- --host
- 0.0.0.0
- --port
- "8545"
- --chain-id
- "${LOCAL_EVM_CHAIN_ID:-31337}"
# 定时自动出块,模拟真实链的区块推进,使 FULL 确认模式与链高推进触发的确认入队正常工作。
- --block-time
- "${LOCAL_EVM_BLOCK_TIME:-12}"
# 持久化本地链状态,使账户 nonce、合约代码、余额和区块环境随容器重启保留。
# 如果需要重建本地链,必须同时重置 dev DB 或清理依赖 anvil 链事实的业务数据。
- --state
- /anvil/state.json
# 周期落盘降低异常退出导致 state 丢失的窗口;不要与 --prune-history 同用,
# prune-history 会禁用 state 持久化,使链状态重新回到非持久化模式。
- --state-interval
- "${LOCAL_EVM_STATE_INTERVAL:-5}"