外观
PHPIPAM IP 地址管理系统部署指南
1. PHPIPAM 系统概述
1.1 系统简介
PHPIPAM 是一个开源的 IP 地址管理系统(IP Address Management,简称 IPAM),专为网络管理员设计,用于高效管理 IP 地址、网络设备和相关资产。
1.2 系统架构
系统架构说明
PHPIPAM 采用典型的三层架构:Web 前端负责用户交互,数据库层存储所有配置和资产信息,Cron 服务处理定时任务和网络扫描。
1.3 核心功能特性
- IP 地址管理:自动化分配、回收和追踪 IP 地址
- 网络扫描:自动发现网络设备和 IP 使用情况
- 设备管理:记录和管理网络设备资产信息
- DNS 集成:支持 DNS 服务器配置和域名解析
- 权限管理:基于角色的访问控制系统
- 报表功能:生成网络使用和资产统计报告
2. 环境准备
2.1 系统要求
最低系统要求
- 操作系统:Rocky Linux 9 或其他 RHEL 兼容系统
- CPU:双核 2.0GHz 以上
- 内存:4GB 以上
- 存储:50GB 可用磁盘空间
- 网络:稳定的网络连接
2.2 Docker 环境搭建
Docker 环境配置
Docker 环境的详细安装和配置步骤请参考:Docker 环境搭建指南
完成 Docker 环境搭建后,请确保:
- Docker 服务正常运行
- Docker Compose 已安装
- 防火墙已开放必要端口(80、3306 等)
- SELinux 策略已正确配置
3. PHPIPAM 系统部署
3.1 创建部署目录
bash
# 创建PHPIPAM安装目录
mkdir -p /docker/phpipam
cd /docker/phpipam1
2
3
2
3
3.2 Docker Compose 配置
安全提醒
生产环境中请修改默认数据库密码,并使用强密码策略。
创建 docker-compose.yml 配置文件:
yaml
version: "3.8"
services:
phpipam-web:
image: phpipam/phpipam-www:latest
container_name: phpipam-www
ports:
- "80:80"
environment:
- TZ=Asia/Shanghai
- IPAM_DATABASE_HOST=phpipam-mariadb
- IPAM_DATABASE_PASS=root
- IPAM_DATABASE_WEBHOST=%
restart: unless-stopped
volumes:
- ./phpipam-www/phpipam-logo:/phpipam/css/images/logo
- ./phpipam-ca-certificates:/usr/local/share/ca-certificates
depends_on:
- phpipam-mariadb
phpipam-cron:
image: phpipam/phpipam-cron:latest
container_name: phpipam-cron
environment:
- TZ=Asia/Shanghai
- IPAM_DATABASE_HOST=phpipam-mariadb
- IPAM_DATABASE_PASS=root
- SCAN_INTERVAL=1h
restart: unless-stopped
volumes:
- ./phpipam-ca-certificates:/usr/local/share/ca-certificates
depends_on:
- phpipam-mariadb
phpipam-mariadb:
image: mariadb:latest
container_name: phpipam-mariadb
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
restart: unless-stopped
volumes:
- ./phpipam-mariadb/phpipam-db-data:/var/lib/mysql1
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
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
3.3 启动服务
bash
# 启动PHPIPAM服务栈
docker-compose -f /docker/phpipam/docker-compose.yml up -d
# 验证服务启动状态
docker ps | grep phpipam1
2
3
4
5
2
3
4
5

服务组件说明
- phpipam-www: 前端 Apache PHP 容器,提供 Web 管理界面
- phpipam-cron: 定时任务容器,处理网络发现和自动化扫描
- phpipam-mariadb: MariaDB 数据库容器,存储所有配置和资产数据
4. 系统初始化配置
4.1 Web 界面初始化
访问 http://your-server-ip 进入 PHPIPAM 初始化页面。
4.1.1 选择安装类型
选择"New phpipam installation"开始全新安装。

4.1.2 选择数据库安装方式
选择"Automatic database installation"让系统自动创建数据库结构。

4.1.3 配置数据库连接
设置数据库连接信息:
- 数据库主机: phpipam-mariadb
- 数据库端口: 3306
- 数据库名称: phpipam
- 数据库用户: root
- 数据库密码: root

4.1.4 设置管理员账户
创建系统管理员账户,设置强密码并妥善保存。
密码安全
管理员密码应包含大写字母、小写字母、数字和特殊字符,至少 12 位长度。

4.1.5 完成安装
使用刚创建的管理员账户登录系统,验证安装成功。


安全提醒
首次登录后立即修改默认密码,并定期更新管理员密码。
4.2 语言设置
PHPIPAM 支持多语言界面,建议设置为中文以提升本地化体验。
4.2.1 全局语言设置
- 登录系统后,进入 Administration → Settings
- 找到 "Default language" 选项
- 从下拉菜单中选择 "Chinese"
- 点击 "Save" 保存设置
- 刷新浏览器页面使设置生效



4.2.2 个人语言设置
如果只需要为当前用户设置中文界面:
- 进入 Administration → Users
- 点击要修改的用户行
- 在用户编辑页面找到 "Language" 字段
- 选择 "Chinese"
- 保存后重新登录生效



语言设置建议
建议同时设置全局默认语言和个人语言,确保所有用户都能看到中文界面。

4.3 常用功能模块配置
根据实际网络管理需求,有选择性地启用相关功能模块,避免界面过于复杂。
| 功能模块名称 | 默认状态 | 推荐状态 | 说明 |
|---|---|---|---|
| 解析 DNS 名称 | 关闭 | 开启 | 启用 DNS 名称解析功能 |
| SNMP 模块 | 关闭 | 开启 | 启用 SNMP 设备监控 |
| 路由模块 | 关闭 | 开启 | 启用路由信息管理 |
| 链接模块 | 开启 | 关闭 | 简化界面,减少干扰 |
| 位置模块 | 开启 | 关闭 | 如不需要地理位置管理可关闭 |
| 隐藏捐赠按钮 | 关闭 | 开启 | 隐藏捐赠相关按钮 |
配置步骤
- 进入 Administration → Settings
- 找到 "Feature settings" 部分
- 根据上表调整各模块的开关状态
- 点击 "Save" 保存设置

模块配置说明
根据实际网络管理需求选择性启用功能模块,避免界面过于复杂影响操作效率。
4.4 部门和权限管理
创建部门结构并配置相应的访问权限,确保不同角色只能访问授权的网络资源。
创建部门
- 进入 Administration → Sections
- 点击 "Add section" 按钮
- 填写部门信息:
- Section name: 部门名称(如:IT 部门、网络中心)
- Description: 部门描述
- Strict mode: 严格模式(可选)
- 配置权限:
- Operators: 操作员权限
- Groups: 用户组权限
- Guests: 访客权限


权限规划原则
- 遵循最小权限原则,只授予必需的访问权限
- 定期审查和更新用户权限
- 重要部门建议启用严格模式
4.5 DNS 服务器配置
配置 DNS 服务器信息,启用 PHPIPAM 的域名解析功能。
- 进入 Administration → DNS
- 点击 "Add nameserver" 按钮
- 填写 DNS 服务器信息:
- Name: DNS 服务器名称
- Nameserver: DNS 服务器 IP 地址或域名
- Description: 服务器描述
- Permissions: 访问权限

4.6 子网管理和网络扫描
添加子网
- 进入 Subnets 页面
- 点击 "Add subnet" 按钮
- 填写子网信息:
- Subnet: 子网地址(如:192.168.1.0/24)
- Description: 子网描述
- Section: 所属部门
- VLAN: VLAN 信息(可选)

配置网络扫描
- 选择目标子网
- 点击 "Scan subnet" 按钮
- 配置扫描参数:
- Scan type: 扫描类型(ICMP、DNS、SNMP 等)
- Scan agent: 扫描代理(本地或远程)
- Ports: 扫描端口(可选)


扫描安全提醒
- 网络扫描可能会影响网络性能,建议在业务低峰期执行
- 确保扫描操作不会违反网络安全策略
- 大规模扫描前建议先进行小范围测试


5. 连接数据库,生成相关测试数据
5.1 rack(机柜表)
- 生成机柜 E01-E13 和 F01-F13

sql
#生成机柜E01-E13和F01-F13
INSERT INTO racks (
NAME, size, location, ROW, hasBack, topDown, description, customer_id
) VALUES
('E01', 42, 1, 1, 0, 0, '托管机房', NULL),
('E02', 42, 1, 1, 0, 0, '托管机房', NULL),
('E03', 42, 1, 1, 0, 0, '托管机房', NULL),
('E04', 42, 1, 1, 0, 0, '托管机房', NULL),
('E05', 42, 1, 1, 0, 0, '托管机房', NULL),
('E06', 42, 1, 1, 0, 0, '托管机房', NULL),
('E07', 42, 1, 1, 0, 0, '托管机房', NULL),
('E08', 42, 1, 1, 0, 0, '托管机房', NULL),
('E09', 42, 1, 1, 0, 0, '托管机房', NULL),
('E10', 42, 1, 1, 0, 0, '托管机房', NULL),
('E11', 42, 1, 1, 0, 0, '托管机房', NULL),
('E12', 42, 1, 1, 0, 0, '托管机房', NULL),
('E13', 42, 1, 1, 0, 0, '托管机房', NULL),
('F01', 42, 1, 1, 0, 0, '托管机房', NULL),
('F02', 42, 1, 1, 0, 0, '托管机房', NULL),
('F03', 42, 1, 1, 0, 0, '托管机房', NULL),
('F04', 42, 1, 1, 0, 0, '托管机房', NULL),
('F05', 42, 1, 1, 0, 0, '托管机房', NULL),
('F06', 42, 1, 1, 0, 0, '托管机房', NULL),
('F07', 42, 1, 1, 0, 0, '托管机房', NULL),
('F08', 42, 1, 1, 0, 0, '托管机房', NULL),
('F09', 42, 1, 1, 0, 0, '托管机房', NULL),
('F10', 42, 1, 1, 0, 0, '托管机房', NULL),
('F11', 42, 1, 1, 0, 0, '托管机房', NULL),
('F12', 42, 1, 1, 0, 0, '托管机房', NULL),
('F13', 42, 1, 1, 0, 0, '托管机房', NULL);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
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
5.2 deviceTypes(设备类型类型)

sql
#1.删除系统中原本就存在的数据
TRUNCATE TABLE deviceTypes;
#2.插入自定义类型
INSERT INTO deviceTypes (tname, tdescription) VALUES
('交换机', '交换机'),
('路由器', '路由器'),
('防火墙', '防火墙'),
('集线器', '集线器'),
('无线', '无线'),
('数据库', '数据库'),
('工作站', '工作站'),
('笔记本电脑', '笔记本电脑'),
('其他', '其他'),
('KVM', 'KVM'),
('刀片服务器', '刀片服务器'),
('网络交换机', '网络交换机'),
('服务器', '服务器'),
('存储', '存储'),
('刀片服务器', '刀片服务器'),
('GPU计算', 'GPU计算'),
('网络安全', '网络安全'),
('存储盘柜', '存储盘柜'),
('光纤交换机', '光纤交换机'),
('CPU计算', 'CPU计算'),
('定制设备', '定制设备'),
('存储双活', '存储双活'),
('网络设备', '网络设备'),
('台式机', '台式机'),
('光交箱', '光交箱'),
('监控', '监控'),
('认证', '认证'),
('DNS', 'DNS'),
('负载均衡', '负载均衡'),
('VPN', 'VPN'),
('无线控制器', '无线控制器'),
('广播', '广播'),
('门禁控制器', '门禁控制器'),
('电话', '电话');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
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
5.3 devices(设备表)
- 原本表结构如下,但是考虑到实际使用中,可能会将联系人、联系电话或者设备硬件信息放在 description 中,所以要么将 description 类型改为 TEXT,或者新增自定义字段。(我采用的是二者结合的方式)

sql
-- 修改description字段类型以支持更长的设备信息
ALTER TABLE devices MODIFY description TEXT;
-- 新增自定义图片字段,用于存储设备图片链接
ALTER TABLE devices ADD custom_image VARCHAR(128);
-- 插入示例设备数据(已进行数据脱敏处理)
INSERT INTO devices (hostname, ip_addr, TYPE, description, sections, rack, rack_start, rack_size, location) VALUES
('compute-node-01', NULL, 11, 'DELL PowerEdge MX7000, 资产号: [已脱敏], 购置日期: 2019-12-12, 托管情况: 整机托管, 资产所属部门: [已脱敏], 应用部门: [已脱敏], 机房: 托管机房, 机柜: E05, U数: 07-13, Service Tag: [已脱敏], 联系人: [已脱敏], 设备状态: 正常运行, 操作系统: Linux CentOS 7.9, CPU配置: Intel Xeon Gold 6230 * 2, 核心数(物理核): 40, 核心数(逻辑核): 80, GPU配置: NULL, 硬盘配置: 2T*2, 裸磁盘(TB): NULL, 内存: 4, 标签: 科研管理', 3, 5, 7, 5, NULL),
('compute-node-02', NULL, 11, 'DELL PowerEdge MX7000, 资产号: [已脱敏], 购置日期: 2019-12-12, 托管情况: 整机托管, 资产所属部门: [已脱敏], 应用部门: [已脱敏], 机房: 托管机房, 机柜: E05, U数: 07-13, Service Tag: NULL, 联系人: [已脱敏], 设备状态: 正常运行, 操作系统: Linux CentOS 7.6, CPU配置: Intel Xeon Gold 6230 * 2, 核心数(物理核): 40, 核心数(逻辑核): 80, GPU配置: NULL, 硬盘配置: 2T*2, 裸磁盘(TB): NULL, 内存: 4, 标签: 科研管理', 3, 5, 7, 5, NULL),
('compute-node-03', NULL, 11, 'DELL PowerEdge MX7000, 资产号: [已脱敏], 购置日期: 2019-12-12, 托管情况: 整机托管, 资产所属部门: [已脱敏], 应用部门: [已脱敏], 机房: 托管机房, 机柜: E05, U数: 07-13, Service Tag: NULL, 联系人: [已脱敏], 设备状态: 正常运行, 操作系统: Linux CentOS 7.6, CPU配置: Intel Xeon Gold 6230 * 2, 核心数(物理核): 40, 核心数(逻辑核): 80, GPU配置: NULL, 硬盘配置: 2T*2, 裸磁盘(TB): NULL, 内存: 4, 标签: 科研管理', 3, 5, 7, 5, NULL),
('compute-node-04', NULL, 11, 'DELL PowerEdge MX7000, 资产号: [已脱敏], 购置日期: 2019-12-12, 托管情况: 整机托管, 资产所属部门: [已脱敏], 应用部门: [已脱敏], 机房: 托管机房, 机柜: E05, U数: 07-13, Service Tag: NULL, 联系人: [已脱敏], 设备状态: 正常运行, 操作系统: Linux CentOS 7.6, CPU配置: Intel Xeon Gold 6230 * 2, 核心数(物理核): 40, 核心数(逻辑核): 80, GPU配置: NULL, 硬盘配置: 2T*2, 裸磁盘(TB): NULL, 内存: 4, 标签: 科研管理', 3, 5, 7, 5, NULL),
('compute-node-05', NULL, 11, 'DELL PowerEdge MX7000, 资产号: [已脱敏], 购置日期: 2019-12-12, 托管情况: 整机托管, 资产所属部门: [已脱敏], 应用部门: [已脱敏], 机房: 托管机房, 机柜: E05, U数: 07-13, Service Tag: NULL, 联系人: [已脱敏], 设备状态: 正常运行, 操作系统: Linux CentOS 7.6, CPU配置: Intel Xeon Gold 6230 * 2, 核心数(物理核): 40, 核心数(逻辑核): 80, GPU配置: NULL, 硬盘配置: 2T*2, 裸磁盘(TB): NULL, 内存: 4, 标签: 科研管理', 3, 5, 7, 5, NULL),
('compute-node-06', NULL, 11, 'DELL PowerEdge MX7000, 资产号: [已脱敏], 购置日期: 2019-12-12, 托管情况: 整机托管, 资产所属部门: [已脱敏], 应用部门: [已脱敏], 机房: 托管机房, 机柜: E05, U数: 07-13, Service Tag: NULL, 联系人: [已脱敏], 设备状态: 正常运行, 操作系统: Linux CentOS 7.9, CPU配置: Intel Xeon Gold 6230 * 2, 核心数(物理核): 40, 核心数(逻辑核): 80, GPU配置: NULL, 硬盘配置: 2T*2, 裸磁盘(TB): NULL, 内存: 4, 标签: 科研管理', 3, 5, 7, 5, NULL);1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
数据安全提醒
以上设备数据已进行脱敏处理,实际部署时请根据组织的安全策略和合规要求妥善处理敏感信息。
5.4 DNS 服务器配置
sql
-- 添加DNS服务器配置(示例数据已脱敏)
INSERT INTO nameservers (NAME, namesrv1, description, permissions, editDate) VALUES
('internal-dns', 'dns-server-1.example.com;dns-server-2.example.com', '内部DNS服务器', '3', NOW());1
2
3
2
3
DNS 配置说明
根据实际网络环境配置正确的 DNS 服务器地址,确保 IP 地址管理系统的域名解析功能正常工作。
6. 总结
PHPIPAM 作为开源的 IP 地址管理系统,为网络管理员提供了强大的 IP 资产管理能力。通过 Docker 容器化部署,可以快速搭建专业的 IPAM 环境,实现 IP 地址的自动化分配、子网自动化扫描、设备管理和网络监控等功能。
最佳实践建议
- 定期更新系统和容器镜像
- 实施严格的访问控制和权限管理
- 建立完善的备份和灾难恢复机制
- 持续监控系统性能和安全状态