记录了在 VMware 虚拟机中从零开始安装 PentAGI 的完整过程,包括遇到的所有坑及解决方法。
**环境信息**
- 宿主机:Windows + VMware Workstation
- 虚拟机:Ubuntu Server 24.04 LTS
- 内存:8GB(推荐)
- 磁盘:50GB(最终扩容后)
- 网络:NAT + Clash 代理
-–
目录
- 环境准备:为什么需要新虚拟机
- 安装 Ubuntu Server
- 基础网络排查
- 安装 Docker 环境
- 下载 PentAGI 配置文件
- Docker 代理配置(核心难点)
- 磁盘扩容
- 启动 PentAGI
- 首次使用与后续维护
-–
一、环境准备:为什么需要新虚拟机
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 | ip addr |
解释:
ip是现代 Linux 的网络配置工具,取代了老旧的ifconfigip 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 | network: |
问题:192.168.56.x 是 VMware 的 **Host-Only(仅主机)**网段,只能和宿主机通信,不能访问外网。
3.3 修改为 DHCP 自动获取
1 | sudo tee /etc/netplan/00-installer-config.yaml << 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:
- 关闭虚拟机
- 虚拟机 → 设置 → 网络适配器
- 勾选 “已连接” 和 “启动时连接”
- 选择 NAT 模式
- 如果列表为空,去 编辑 → 虚拟网络编辑器 → 更改设置 → 还原默认设置
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 | sudo systemctl start docker |
4.4 将当前用户加入 docker 组
1 | sudo usermod -aG docker $USER |
解释:
usermod -aG docker $USER:将当前用户追加(-a)到docker用户组(-G)- 加入
docker组后,用户可以直接运行docker命令,不需要每次加sudo newgrp docker:立即刷新用户组权限,不用重新登录
4.5 验证安装
1 | docker --version |
-–
五、下载 PentAGI 配置文件
5.1 创建工作目录
1 | cd \~ |
建议放在用户目录下(\~/pentagi),不要放在根目录 /pentagi,否则会有权限问题。
5.2 下载官方配置文件
1 | curl -o docker-compose.yml https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose.yml |
解释:
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 | wc -l docker-compose.yml # 应该显示 287 |
如果下载不完整,需要配置代理(见下一章)。
5.4 docker-compose.yml 的端口映射陷阱
官方 docker-compose.yml 中,PentAGI 的端口绑定使用了环境变量:
1 | ports: |
问题:默认值 127.0.0.1 表示只监听容器内部回环地址,外部浏览器无法访问。
解决:修改 .env 文件:
1 | nano .env |
找到:
1 | PENTAGI\_LISTEN\_IP= |
改为:
1 | PENTAGI\_LISTEN\_IP=0.0.0.0 |
同时修改:
1 | PUBLIC\_URL=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 作为代理工具:
- 查看 Clash 端口:默认 HTTP 代理端口是
7890 - 开启 Allow LAN:在 Clash General 页面勾选 “Allow LAN”(允许局域网连接)
- 确认监听地址:在 Windows CMD 执行:
1 | netstat -ano | findstr ":7890" |
应该看到 0.0.0.0:7890(而不是 127.0.0.1:7890)
- 确认 VMnet8 IP:
1 | ipconfig |
找 VMware Network Adapter VMnet8,记录 IP(如 192.168.247.1)
6.2 配置 Docker 代理(daemon.json 方式)
推荐方式,比 systemd drop-in 更稳定。
1 | sudo tee /etc/docker/daemon.json << 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 | sudo systemctl restart docker |
应该显示:
1 | HTTP Proxy: http://192.168.247.1:7890 |
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 | { |
但对 vxcontrol/pentagi、vxcontrol/scraper 等私有/小众镜像,阿里云返回 403 Forbidden。
结论:小众镜像加速器没用,必须走代理直接连 Docker Hub。
6.7 完整的 daemon.json(代理 + 可选镜像加速)
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 中扩展虚拟磁盘
- 关闭虚拟机(
sudo shutdown now) - VMware → 虚拟机 → 设置 → 硬盘 → 扩展
- 将大小从 20GB 调到 50GB
- 点击”扩展”,等待完成
步骤 2:在系统中扩展分区
启动虚拟机后依次执行:
1 | # 1. 查看磁盘结构 |
应该看到 sda 是 50G,但 sda3 还是原来的大小。
1 | # 2. 扩展物理分区(假设是 /dev/sda3) |
解释:
growpart:扩展分区工具,属于cloud-guest-utils包/dev/sda:磁盘设备3:第 3 个分区(sda3)- 如果提示
command not found,先安装:sudo apt install -y cloud-guest-utils
1 | # 3. 扩展物理卷(Physical Volume) |
解释:
- Ubuntu Server 安装时默认使用 LVM(逻辑卷管理)
pvresize:将物理卷扩展到分区的新大小
1 | # 4. 扩展逻辑卷,占满所有空闲空间 |
解释:
lvextend:扩展逻辑卷-l +100%FREE:将物理卷中所有剩余空闲空间分配给该逻辑卷/dev/mapper/ubuntu--vg-ubuntu--lv:根分区对应的逻辑卷路径
1 | # 5. 扩展文件系统 |
解释:
resize2fs:调整 ext4 文件系统大小,使其匹配新的逻辑卷大小- 这一步执行后,系统才能真正使用扩展后的空间
1 | # 6. 验证 |
根分区应该变成 40G+。
-–
八、启动 PentAGI
8.1 启动容器
1 | cd /pentagi |
-d 表示后台运行(detached 模式)。
8.2 检查容器状态
1 | sudo docker ps |
期望看到:
1 | CONTAINER ID IMAGE STATUS PORTS |
8.3 查看日志(排错用)
1 | # 查看 PentAGI 主服务日志 |
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 | # 1. 确保 Docker 在运行 |
9.3 日常维护建议
| 场景 | 推荐操作 | 命令 |
|---|---|---|
| 暂时不用(几小时内) | 放着不管 | - |
| 隔夜/几天不用 | 挂起(Suspend) | VMware 菜单:虚拟机 → 电源 → 挂起客户机 |
| 长期不用 | 关机 | sudo shutdown now |
为什么推荐挂起而不是关机?
- 挂起:保存当前内存状态到硬盘,下次”继续运行”秒开,容器状态保留
- 关机:完全断电,下次需要重新启动 Docker 和容器
9.4 常用命令速查
1 | # 查看容器状态 |
-–
附录:完整问题清单
| 问题 | 原因 | 解决 |
|---|---|---|
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 渗透测试平台,安装过程虽然曲折,但跑起来后非常香。祝挖洞愉快!🎯