mirror of
https://github.com/ThearchyHelios/AgentLab.git
synced 2026-11-15 00:21:58 +00:00
README、部署说明补上用 PostgreSQL:AGENTLAB_DATABASE_URL、断点、连接池(含 PgBouncer)、和 SQLite 一致的那几条、从 SQLite 导入的步骤(copy-to-postgres,先停服务、先 --dry-run)、备份(pg_dump 加数据目录)、多台机器要把数据目录挂在共享存储的同一个路径上,以及实话:数据目录里的 SQLite 文件(记录表原地追加写、上传表格版本库的 flock)在网络文件系统上并发写不安全,眼下仍按单进程部署
- 依赖与锁文件:[postgres] 里装的是什么、为什么 langgraph-checkpoint 单独卡小版本、checkpoint-postgres 锁在 3.1.2;数据位置:PostgreSQL 时不再用 agentlab.db / checkpoints.db;开发与验证:scripts/test-postgres.sh - environment.yml 带上 [postgres];.env.example 补应用库一节 - deploy.sh:数据目录里没有 agentlab.db(库在 PostgreSQL)时,认 .secret_key、uploads/ 也算 AgentLab 的数据目录,不再拒绝改属主 - 断点库的连接串不带只给 asyncpg 看的参数(prepared_statement_cache_size 之类,psycopg 不认);地址规范化、启动日志不带密码的测试
This commit is contained in:
+33
-1
@@ -58,7 +58,8 @@ deploy.sh 依次:检查 docker 和架构 → 导入镜像(`docker load -i im
|
||||
|
||||
所有数据都在 `DATA_DIR`(默认是包目录下的 `data/`):数据库 `agentlab.db`、执行断点 `checkpoints.db`、
|
||||
工件、上传文件、沙箱工作区,以及加密密钥 `.secret_key`。**要备份的就是这个目录**,
|
||||
丢了 `.secret_key`,存进去的 API Key 就解不开了。
|
||||
丢了 `.secret_key`,存进去的 API Key 就解不开了。数据库放在 PostgreSQL 时(下面「用 PostgreSQL」)没有这两个库文件,
|
||||
另用 `pg_dump` 备份数据库。
|
||||
|
||||
deploy.sh 会把数据目录的属主改成容器里的用户(uid 10001),所以备份、删除要用 sudo。
|
||||
停下来备份最稳妥(以默认的 `./data` 为例,在包目录里执行):
|
||||
@@ -71,6 +72,37 @@ sudo tar -czf ../agentlab-data-$(date +%Y%m%d).tar.gz data
|
||||
|
||||
恢复:停掉容器,把备份解回 `DATA_DIR`,再 `./deploy.sh start`。
|
||||
|
||||
## 用 PostgreSQL
|
||||
|
||||
缺省数据库是数据目录里的 SQLite。要放进 PostgreSQL(库要先建好),在 `agentlab.env` 里加一行再 `./deploy.sh upgrade`
|
||||
(或 stop 再 start):
|
||||
|
||||
```bash
|
||||
AGENTLAB_DATABASE_URL=postgresql+asyncpg://agentlab:<密码>@<数据库地址>:5432/agentlab
|
||||
```
|
||||
|
||||
容器里的 `127.0.0.1` 是容器自己:数据库在别的机器上就写那台的地址;就在这台机器上,写宿主机在 docker 网桥上的地址
|
||||
(一般是 `172.17.0.1`),并让 PostgreSQL 监听这个地址、`pg_hba.conf` 放行容器的网段。执行断点也进同一个库。
|
||||
数据目录照样要挂、要备份:工件、上传文件、记录表、加密密钥 `.secret_key` 还在里面。
|
||||
|
||||
已经在用 SQLite 的,先把数据导过去(同一个镜像里带着导入命令;`--dry-run` 只核对、不写):
|
||||
|
||||
```bash
|
||||
./deploy.sh stop
|
||||
sudo tar -czf ../agentlab-data-$(date +%Y%m%d).tar.gz data # 先备份
|
||||
docker run --rm --user 10001:10001 -v "$(pwd)/data:/data" --env-file agentlab.env --entrypoint python \
|
||||
agentlab:<版本> -m app.db copy-to-postgres /data --dry-run
|
||||
docker run --rm --user 10001:10001 -v "$(pwd)/data:/data" --env-file agentlab.env --entrypoint python \
|
||||
agentlab:<版本> -m app.db copy-to-postgres /data
|
||||
./deploy.sh start # agentlab.env 里已经有 AGENTLAB_DATABASE_URL
|
||||
```
|
||||
|
||||
导入结束时逐表打印来源和目标的行数、断点的条数,对不上的列出来、退出码非零;重跑只补没有的行,不重复、不覆盖。
|
||||
停在审批上、中断了的运行导过去之后照样能接着跑。导完 `data/agentlab.db` 可以留着当回退:把那一行删掉、重新部署就回到 SQLite
|
||||
(导入之后在 PostgreSQL 上新产生的东西不会回来)。备份时除了数据目录,再用 `pg_dump` 备份这个库。
|
||||
|
||||
现在仍按一台机器、一个容器部署:多台机器共用一份数据目录的限制见仓库 README「用 PostgreSQL」。
|
||||
|
||||
## 升级
|
||||
|
||||
把新版本的离线包拷到机器上,解到一个新目录,然后:
|
||||
|
||||
+4
-2
@@ -266,8 +266,10 @@ fix_data_owner() {
|
||||
owner="$(ls -nd "$DATA_ABS" | awk '{print $3}')"
|
||||
[ "$owner" = "$uid" ] && return 0
|
||||
# 改属主前确认这确实是一个新目录或者 AgentLab 的数据目录,免得 DATA_DIR 写错改了别的东西
|
||||
if [ -n "$(ls -A "$DATA_ABS" 2>/dev/null)" ] && [ ! -e "$DATA_ABS/agentlab.db" ]; then
|
||||
die "DATA_DIR 指向的 $DATA_ABS 不是空目录,也不像 AgentLab 的数据目录(里面没有 agentlab.db)。
|
||||
# 应用库放在 PostgreSQL 时(AGENTLAB_DATABASE_URL)数据目录里没有 agentlab.db,认 .secret_key 和 uploads/
|
||||
if [ -n "$(ls -A "$DATA_ABS" 2>/dev/null)" ] && [ ! -e "$DATA_ABS/agentlab.db" ] \
|
||||
&& [ ! -e "$DATA_ABS/.secret_key" ] && [ ! -d "$DATA_ABS/uploads" ]; then
|
||||
die "DATA_DIR 指向的 $DATA_ABS 不是空目录,也不像 AgentLab 的数据目录(里面没有 agentlab.db、.secret_key、uploads)。
|
||||
为免改错别的文件的属主,请指向一个新目录,或者原来的 AgentLab 数据目录"
|
||||
fi
|
||||
say "把数据目录的属主改成容器里的用户(uid ${uid}),容器里的服务才写得进去"
|
||||
|
||||
Reference in New Issue
Block a user