PentAGI 安装(Ubuntu Server + VMware)

记录了在 VMware 虚拟机中从零开始安装 PentAGI 的完整过程,包括遇到的所有坑及解决方法。

**环境信息**

  • 宿主机:Windows + VMware Workstation
  • 虚拟机:Ubuntu Server 24.04 LTS
  • 内存:8GB(推荐)
  • 磁盘:50GB(最终扩容后)
  • 网络:NAT + Clash 代理

-–

目录

  1. 环境准备:为什么需要新虚拟机
  2. 安装 Ubuntu Server
  3. 基础网络排查
  4. 安装 Docker 环境
  5. 下载 PentAGI 配置文件
  6. Docker 代理配置(核心难点)
  7. 磁盘扩容
  8. 启动 PentAGI
  9. 首次使用与后续维护

-–

一、环境准备:为什么需要新虚拟机

1.1 原环境的问题

原有 Ubuntu 桌面版虚拟机只有 3.8GB 内存,而 PentAGI 官方最低要求 4GB,推荐 8GB+。桌面版系统本身就要吃掉 500MB~1GB 内存,再加上 Docker 和各种容器,内存严重不足。

1.2 选择 Ubuntu Server 的理由

对比项 Ubuntu 桌面版 Ubuntu Server
图形界面 有(占资源) 无(纯命令行)
空载内存 ~800MB ~200MB
Docker 兼容性 好 更好
适合场景 日常办公 服务器/容器部署

结论:装 Ubuntu Server 24.04 LTS,分配 6~8GB 内存、30GB+ 磁盘。

1.3 安装过程中的代理选项

安装程序会询问 Proxy configuration:

1
Proxy address:

直接留空,按回车选 Done。绝大多数家庭/校园网不需要代理。如果后续真的连不上网,再在系统里配置。

-–

二、安装 Ubuntu Server

2.1 安装后首次登录

Server 版没有图形界面,登录后就是纯命令行。

2.2 查看 IP 地址(ifconfig 不存在)

1
2
3
ip addr
# 或简写
ip a

解释:

  • ip 是现代 Linux 的网络配置工具,取代了老旧的 ifconfig
  • ip addr 显示所有网卡的 IP 地址、MAC 地址、状态
  • 找 ens33(或类似名称)下面的 inet 字段,如 192.168.x.x

如果确实想用 ifconfig,可以安装:

1
sudo apt install net-tools

-–

三、基础网络排查

3.1 现象:网卡状态 DOWN,没有 IP

1
2: ens33: <NO-CARRIER,BROADCAST,MULTICAST,UP> ... state DOWN

3.2 排查 netplan 配置

Ubuntu 18.04+ 使用 netplan 管理网络,配置文件在:

1
cat /etc/netplan/00-installer-config.yaml

发现配置成了静态 IP + Host-Only 网络:

1
2
3
4
5
6
7
8
network:
ethernets:
ens33:
addresses:
- 192.168.56.155/24
nameservers:
addresses:
- 192.168.56.1

问题:192.168.56.x 是 VMware 的 **Host-Only(仅主机)**网段,只能和宿主机通信,不能访问外网。

3.3 修改为 DHCP 自动获取

1
2
3
4
5
6
7
sudo tee /etc/netplan/00-installer-config.yaml << EOF
network:
version: 2
ethernets:
ens33:
dhcp4: true
EOF

解释:

  • sudo tee:用 root 权限写入文件,同时屏幕回显内容
  • << EOF:here-document 语法,表示从下一行开始到 EOF 之间的内容全部写入文件
  • dhcp4: true:启用 IPv4 DHCP,自动从路由器/VMware 获取 IP

⚠️ YAML 缩进非常重要! 必须是空格,不能用 Tab。结构是:

  • network: 顶格
  • version:、ethernets: 缩进 2 空格
  • ens33: 缩进 4 空格
  • dhcp4: 缩进 6 空格

3.4 应用配置

1
sudo netplan apply

3.5 VMware 虚拟网络设置

如果还是拿不到 IP,检查 VMware:

  1. 关闭虚拟机
  2. 虚拟机 → 设置 → 网络适配器
  3. 勾选 “已连接” 和 “启动时连接”
  4. 选择 NAT 模式
  5. 如果列表为空,去 编辑 → 虚拟网络编辑器 → 更改设置 → 还原默认设置

3.6 验证网络

1
ping -c 3 baidu.com

-–

四、安装 Docker 环境

4.1 更新软件源

1
sudo apt update

注意拼写,不要打成 opadte。

4.2 安装 Docker

1
sudo apt install -y docker.io docker-compose

解释:

  • docker.io:Ubuntu 官方仓库里的 Docker 引擎
  • docker-compose:Docker Compose 独立包(Ubuntu 24.04 用这个)
  • -y:自动确认,不需要手动输入 Y

4.3 启动并设置开机自启

1
2
sudo systemctl start docker
sudo systemctl enable docker

4.4 将当前用户加入 docker 组

1
2
sudo usermod -aG docker $USER
newgrp docker

解释:

  • usermod -aG docker $USER:将当前用户追加(-a)到 docker 用户组(-G)
  • 加入 docker 组后,用户可以直接运行 docker 命令,不需要每次加 sudo
  • newgrp docker:立即刷新用户组权限,不用重新登录

4.5 验证安装

1
2
docker --version
docker compose version

-–

五、下载 PentAGI 配置文件

5.1 创建工作目录

1
2
cd \~
mkdir -p pentagi \&\& cd pentagi

建议放在用户目录下(\~/pentagi),不要放在根目录 /pentagi,否则会有权限问题。

5.2 下载官方配置文件

1
2
curl -o docker-compose.yml https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose.yml
curl -o .env https://raw.githubusercontent.com/vxcontrol/pentagi/master/.env.example

解释:

  • curl -o 文件名 URL:将远程文件下载保存为指定文件名
  • -o 参数必须在文件名和 URL 之间,顺序不能错

5.3 GitHub 被墙的问题

由于网络原因,raw.githubusercontent.com 经常连不上,表现为:

  • curl: (7) Failed to connect
  • 下载的文件只有几十行(被截断)
  • wget 重试多次后失败

正常文件大小:

  • docker-compose.yml:约 287 行
  • .env.example:约 525 行

验证文件完整性:

1
2
3
wc -l docker-compose.yml   # 应该显示 287
head -5 docker-compose.yml # 开头应该是 version: '3.8' 或 volumes:
grep -n "services:" docker-compose.yml # services 应该在第 24 行左右

如果下载不完整,需要配置代理(见下一章)。

5.4 docker-compose.yml 的端口映射陷阱

官方 docker-compose.yml 中,PentAGI 的端口绑定使用了环境变量:

1
2
ports:
- "${PENTAGI\_LISTEN\_IP:-127.0.0.1}:${PENTAGI\_LISTEN\_PORT:-8443}:8443"

问题:默认值 127.0.0.1 表示只监听容器内部回环地址,外部浏览器无法访问。

解决:修改 .env 文件:

1
nano .env

找到:

1
PENTAGI\_LISTEN\_IP=

改为:

1
PENTAGI\_LISTEN\_IP=0.0.0.0

同时修改:

1
2
PUBLIC\_URL=https://192.168.247.129:8443
CORS\_ORIGINS=https://192.168.247.129:8443

(将 IP 替换为你虚拟机的实际 IP)

解释:

  • 0.0.0.0:监听所有网络接口,允许外部访问
  • 127.0.0.1:仅监听本地回环,外部无法访问

-–

六、Docker 代理配置(核心难点)

这是整个安装过程中最折腾的部分。Docker Hub(registry-1.docker.io)在国内被墙,拉取镜像需要代理。

6.1 确认宿主机代理状态

假设你使用 Clash 作为代理工具:

  1. 查看 Clash 端口:默认 HTTP 代理端口是 7890
  2. 开启 Allow LAN:在 Clash General 页面勾选 “Allow LAN”(允许局域网连接)
  3. 确认监听地址:在 Windows CMD 执行:
1
netstat -ano | findstr ":7890"

应该看到 0.0.0.0:7890(而不是 127.0.0.1:7890)

  1. 确认 VMnet8 IP:
1
ipconfig

找 VMware Network Adapter VMnet8,记录 IP(如 192.168.247.1)

6.2 配置 Docker 代理(daemon.json 方式)

推荐方式,比 systemd drop-in 更稳定。

1
2
3
4
5
6
7
8
9
sudo tee /etc/docker/daemon.json << EOF
{
"proxies": {
"http-proxy": "http://192.168.247.1:7890",
"https-proxy": "http://192.168.247.1:7890",
"no-proxy": "localhost,127.0.0.1"
}
}
EOF

⚠️ 重要陷阱:https-proxy 的值也必须用 http:// 开头,不是 https://!

解释:

  • Docker 访问 HTTPS 仓库时,会通过 HTTP 代理的 CONNECT 隧道方式连接
  • 代理服务器本身跑的是 HTTP 协议(Clash 的 7890 端口是 HTTP 代理)
  • 如果写成 https://192.168.247.1:7890,Docker 会尝试用 TLS 连接代理服务器,代理不认识,直接断开(EOF 错误)

6.3 重启 Docker 生效

1
2
sudo systemctl restart docker
sudo docker info | grep -i proxy

应该显示:

1
2
3
HTTP Proxy: http://192.168.247.1:7890
HTTPS Proxy: http://192.168.247.1:7890
No Proxy: localhost,127.0.0.1

6.4 验证代理通路

1
curl -x http://192.168.247.1:7890 -I https://registry-1.docker.io/v2/

正常应该返回 HTTP/2 401(未授权,说明连上了)。

6.5 Clash 模式问题

如果 Docker pull 时还是报错 EOF 或 connection refused,检查 Clash:

  • Rule(规则)模式:可能把 registry-1.docker.io 判定为直连,但直连又被墙
  • Global(全局)模式:所有流量都走代理,最稳妥

建议:拉镜像时切到 Global 模式。

6.6 阿里云镜像加速器的坑

一开始配置了阿里云镜像加速器:

1
2
3
{
"registry-mirrors": \["https://xxx.mirror.aliyuncs.com"]
}

但对 vxcontrol/pentagi、vxcontrol/scraper 等私有/小众镜像,阿里云返回 403 Forbidden。

结论:小众镜像加速器没用,必须走代理直接连 Docker Hub。

6.7 完整的 daemon.json(代理 + 可选镜像加速)

1
2
3
4
5
6
7
8
{
"registry-mirrors": \["https://xxx.mirror.aliyuncs.com"],
"proxies": {
"http-proxy": "http://192.168.247.1:7890",
"https-proxy": "http://192.168.247.1:7890",
"no-proxy": "localhost,127.0.0.1"
}
}

Docker 会先尝试镜像加速器,失败后再走代理。

-–

七、磁盘扩容

7.1 现象

pgvector 容器报错:

1
initdb: error: could not create directory "/var/lib/postgresql/data/pg\_wal": No space left on device

7.2 查看磁盘使用

1
df -h

发现根分区只有 9.8GB,已用 100%。

7.3 原因

创建虚拟机时磁盘分配太小(如 20GB),Docker 镜像和容器数据占满空间。

7.4 扩容步骤

步骤 1:在 VMware 中扩展虚拟磁盘

  1. 关闭虚拟机(sudo shutdown now)
  2. VMware → 虚拟机 → 设置 → 硬盘 → 扩展
  3. 将大小从 20GB 调到 50GB
  4. 点击”扩展”,等待完成

步骤 2:在系统中扩展分区

启动虚拟机后依次执行:

1
2
# 1. 查看磁盘结构
sudo lsblk

应该看到 sda 是 50G,但 sda3 还是原来的大小。

1
2
# 2. 扩展物理分区(假设是 /dev/sda3)
sudo growpart /dev/sda 3

解释:

  • growpart:扩展分区工具,属于 cloud-guest-utils 包
  • /dev/sda:磁盘设备
  • 3:第 3 个分区(sda3)
  • 如果提示 command not found,先安装:sudo apt install -y cloud-guest-utils
1
2
# 3. 扩展物理卷(Physical Volume)
sudo pvresize /dev/sda3

解释:

  • Ubuntu Server 安装时默认使用 LVM(逻辑卷管理)
  • pvresize:将物理卷扩展到分区的新大小
1
2
# 4. 扩展逻辑卷,占满所有空闲空间
sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv

解释:

  • lvextend:扩展逻辑卷
  • -l +100%FREE:将物理卷中所有剩余空闲空间分配给该逻辑卷
  • /dev/mapper/ubuntu--vg-ubuntu--lv:根分区对应的逻辑卷路径
1
2
# 5. 扩展文件系统
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

解释:

  • resize2fs:调整 ext4 文件系统大小,使其匹配新的逻辑卷大小
  • 这一步执行后,系统才能真正使用扩展后的空间
1
2
# 6. 验证
df -h

根分区应该变成 40G+。

-–

八、启动 PentAGI

8.1 启动容器

1
2
cd /pentagi
sudo docker compose up -d

-d 表示后台运行(detached 模式)。

8.2 检查容器状态

1
sudo docker ps

期望看到:

1
2
3
4
5
CONTAINER ID   IMAGE                        STATUS          PORTS
xxx vxcontrol/pentagi:latest Up 5 minutes 0.0.0.0:8443->8443/tcp
xxx vxcontrol/scraper:latest Up 5 minutes ...
xxx vxcontrol/pgvector:latest Up 5 minutes (healthy) ...
xxx postgres-exporter Up 5 minutes ...

8.3 查看日志(排错用)

1
2
3
4
5
6
7
8
# 查看 PentAGI 主服务日志
sudo docker logs pentagi

# 查看数据库日志
sudo docker logs pgvector

# 查看所有服务的实时日志
sudo docker compose logs -f

8.4 浏览器访问

在 Windows 浏览器打开:

1
https://192.168.247.129:8443

注意:

  • 必须是 https,不是 http
  • 端口是 8443
  • IP 是虚拟机的 IP(hostname -I 查看)

第一次访问会提示证书不安全,点击”高级” → “继续前往”即可(PentAGI 使用的是自签名证书)。

-–

九、首次使用与后续维护

9.1 首次创建 Flow 的额外镜像

点击 “New flow” 时,PentAGI 会动态创建终端容器,需要拉取 debian:latest 镜像。

如果报错拉取失败,手动拉取:

1
sudo docker pull debian:latest

9.2 强制关机后的恢复

如果直接强制关机或重启虚拟机,Docker 服务可能没自动启动,或者容器没自动运行。

恢复步骤:

1
2
3
4
5
6
7
8
9
10
11
# 1. 确保 Docker 在运行
sudo systemctl start docker

# 2. 进入目录
cd /pentagi

# 3. 启动所有容器
sudo docker compose up -d

# 4. 检查状态
sudo docker ps

9.3 日常维护建议

场景 推荐操作 命令
暂时不用(几小时内) 放着不管 -
隔夜/几天不用 挂起(Suspend) VMware 菜单:虚拟机 → 电源 → 挂起客户机
长期不用 关机 sudo shutdown now

为什么推荐挂起而不是关机?

  • 挂起:保存当前内存状态到硬盘,下次”继续运行”秒开,容器状态保留
  • 关机:完全断电,下次需要重新启动 Docker 和容器

9.4 常用命令速查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 查看容器状态
sudo docker ps

# 查看所有容器(包括停止的)
sudo docker ps -a

# 重启所有容器
cd /pentagi \&\& sudo docker compose restart

# 停止所有容器
cd /pentagi \&\& sudo docker compose down

# 查看容器日志
sudo docker logs -f 容器名

# 进入容器内部
sudo docker exec -it 容器名 /bin/bash

# 清理无用镜像和缓存
sudo docker system prune -a -f

-–

附录:完整问题清单

问题 原因 解决
ifconfig 不存在 新版 Linux 已弃用 使用 ip a
网卡状态 DOWN VMware 网络设置问题 检查 NAT + 还原虚拟网络编辑器
YAML 缩进错误 用了 Tab 或空格不对 严格用空格缩进
apt update 报错 拼写错误 是 update 不是 opadte
权限 denied 目录属于 root 用 \~/pentagi 而不是 /pentagi
GitHub 下载失败 被墙/限速 配置 Clash 代理或换镜像源
Docker pull 403 阿里云镜像不支持该镜像 走代理直连 Docker Hub
Docker pull EOF Clash 规则模式拦截 切到 Global 全局模式
代理配置不生效 Docker 29.x bug / 配置位置不对 改用 daemon.json proxies 块
https-proxy 写错 写成了 https:// 必须是 http://
磁盘满 分配太小 VMware 扩容 + LVM 扩展
浏览器拒绝连接 端口绑定 127.0.0.1 .env 里改 PENTAGI\_LISTEN\_IP=0.0.0.0
强制关机后打不开 容器没自动启动 cd /pentagi \&\& docker compose up -d

-–

**最后**:PentAGI 是一个功能强大的 AI 渗透测试平台,安装过程虽然曲折,但跑起来后非常香。祝挖洞愉快!🎯