phpIPAM 的常规使用者为网络管理员,大多对 LAMP 堆栈部署经验有限。本系列 Docker 镜像提供一套更简便的方式,快速搭建并维护可正常运行的 phpIPAM 环境。
面向这类使用人群,镜像设计优先追求简易性,舍弃了部分复杂高级场景的支持。
如需原生 SSL 加密访问,可使用 DockerHub 上大量现成的 HTTPS 反向代理镜像实现,下文提供 HAProxy 配置示例。
若有高度定制化高级需求,可前往官网 https://phpipam.net 查看教程,在虚拟机中手动完整安装 phpIPAM。
phpipam-www 支持多实例部署并配置负载均衡;
phpipam-cron 仅允许同时运行单个实例。
不支持无根模式(rootless)Docker 运行;
Docker 环境下,容器必须授予 NET_ADMIN、NET_RAW 内核权限,否则 Ping、SNMP 扫描功能无法使用;
若部署于 Kubernetes,需开启 allowPrivilegeEscalation=true。
latest 跟随最新稳定版本,同步推送 Alpine Linux 系统安全更新1.8x 1.8 系列维护分支,同步推送 Alpine 安全更新1.7x 1.7 维护分支(已废弃)1.6x 1.6 维护分支(已废弃)1.5x 1.5 维护分支(已废弃)1.4x 1.4 维护分支(已废弃)nightly 每日开发快照,禁止生产环境使用v1.8.x / v1.7.y / v1.6.y 固定静态版本快照,无系统安全更新推送xhprof PHP profiling enabled development build of phpIPAM. Access xhprof gui at /xhprof/ -- DEV/TEST USE ONLY --通过 docker-compose 进行全栈部署示例。
将以下配置保存并编辑为 docker-compose.ymldocker-compose -p phpIPAM up -d ,然后从同一目录运行。
# WARNING: Replace the example passwords with secure secrets.
# WARNING: 'my_secret_phpipam_pass' and 'my_secret_mysql_root_pass'
version: '3'
services:
phpipam-web:
image: wxtewx/phpipam-www:latest
ports:
- "80:80"
environment:
- TZ=Europe/London
- IPAM_DATABASE_HOST=phpipam-mariadb
- IPAM_DATABASE_PASS=my_secret_phpipam_pass
- IPAM_DATABASE_WEBHOST=%
restart: unless-stopped
volumes:
- phpipam-logo:/phpipam/css/images/logo
- phpipam-ca:/usr/local/share/ca-certificates:ro
depends_on:
- phpipam-mariadb
cap_add:
- NET_ADMIN
- NET_RAW
phpipam-cron:
image: wxtewx/phpipam-cron:latest
environment:
- TZ=Europe/London
- IPAM_DATABASE_HOST=phpipam-mariadb
- IPAM_DATABASE_PASS=my_secret_phpipam_pass
- SCAN_INTERVAL=1h
restart: unless-stopped
volumes:
- phpipam-ca:/usr/local/share/ca-certificates:ro
depends_on:
- phpipam-mariadb
cap_add:
- NET_ADMIN
- NET_RAW
phpipam-mariadb:
image: mariadb:latest
environment:
- MYSQL_ROOT_PASSWORD=my_secret_mysql_root_pass
restart: unless-stopped
volumes:
- phpipam-db-data:/var/lib/mysql
volumes:
phpipam-db-data:
phpipam-logo:
phpipam-ca:
通过 docker-compose 部署外部 MySQL 服务器示例。
将以下配置保存并编辑为docker-compose.ymldocker-compose -p phpIPAM up -d ,然后从同一目录运行。
version: '3'
services:
phpipam-web:
image: wxtewx/phpipam-www:latest
ports:
- "80:80"
environment:
- TZ=Europe/London
- IPAM_DATABASE_HOST=my.database.server
- IPAM_DATABASE_USER=existing_username
- IPAM_DATABASE_PASS=existing_password
- IPAM_DATABASE_NAME=existing_db_name
restart: unless-stopped
volumes:
- phpipam-logo:/phpipam/css/images/logo
- phpipam-ca:/usr/local/share/ca-certificates:ro
cap_add:
- NET_ADMIN
- NET_RAW
phpipam-cron:
image: wxtewx/phpipam-cron:latest
environment:
- TZ=Europe/London
- IPAM_DATABASE_HOST=my.database.server
- IPAM_DATABASE_USER=existing_username
- IPAM_DATABASE_PASS=existing_password
- IPAM_DATABASE_NAME=existing_db_name
- SCAN_INTERVAL=1h
restart: unless-stopped
volumes:
- phpipam-ca:/usr/local/share/ca-certificates:ro
cap_add:
- NET_ADMIN
- NET_RAW
volumes:
phpipam-logo:
phpipam-ca:
config.dist.php 中部分可用的 phpIPAM 配置设置可以通过 Docker 环境变量进行配置
除了通过环境变量传递敏感信息外,还可以将 _FILE 添加到标记为 📂 的环境变量后,使初始化脚本从容器中存在的文件中加载这些变量的值。特别是,这可以用于从存储在 /run/secrets/<secret_name> 文件中的 Docker secrets 加载密码。
docker ... -e IPAM_DATABASE_PASS_FILE=/run/secrets/ipam_database_password
| 环境变量 | 默认值 | WEB 容器/定时容器 | 说明 |
|---|---|---|---|
| TZ | "UTC" | ✅ ✅ | 时区 (例如 "Europe/London") |
| IPAM_DISABLE_INSTALLER 📂 | "false" | ✅ ❌ | 关闭安装引导脚本(1.6.1 及以上版本)** |
| IPAM_DATABASE_HOST 📂 | "127.0.0.1" | ✅ ✅ | MySQL 数据库地址 |
| IPAM_DATABASE_USER 📂 | "phpipam" | ✅ ✅ | MySQL 数据库账号 |
| IPAM_DATABASE_PASS 📂 | "phpipamadmin" | ✅ ✅ | MySQL 数据库密码 |
| IPAM_DATABASE_NAME 📂 | "phpipam" | ✅ ✅ | MySQL 数据库名 |
| IPAM_DATABASE_PORT 📂 | 3306 | ✅ ✅ | MySQL 数据库端口 |
| IPAM_DATABASE_WEBHOST 📂 | "localhost" | ✅ ✅ | MySQL 允许访问主机白名单 |
| IPAM_BASE | "/" | ✅ ❌ | 反向代理 / 负载均衡路径前缀,访问地址 http:/url/BASE/ |
| IPAM_TRUST_X_FORWARDED 📂 | "false" | ✅ ❌ | Trust and use X_FORWARDED_* headers set by reverse-proxies/load-balancers (v1.6.0+) * |
| PROXY_ENABLED 📂 | false | ✅ ✅ | 开启系统代理 |
| PROXY_SERVER 📂 | "myproxy.something.com" | ✅ ✅ | 代理服务器地址 |
| PROXY_PORT 📂 | 8080 | ✅ ✅ | 代理端口 |
| PROXY_USE_AUTH 📂 | false | ✅ ✅ | 代理是否需要账号认证 |
| PROXY_USER 📂 | "USERNAME" | ✅ ✅ | 代理账号 |
| PROXY_PASS 📂 | "PASSWORD" | ✅ ✅ | 代理密码 |
| IPAM_DEBUG 📂 | false | ✅ ✅ | 开启 PHP 与应用调试模式 |
| OFFLINE_MODE 📂 | false | ✅ ❌ | 离线模式,关闭服务端外网请求,内网隔离环境避免超时 (v1.5.0+) |
| COOKIE_SAMESITE 📂 | "Lax" | ✅ ❌ | Cookie 安全策略,可选 None/Lax/Strict;None 必须搭配 HTTPS. (v1.4.5+) |
| IPAM_FOOTER_MESSAGE 📂 | "" | ✅ ❌ | 全局页面底部自定义提示文字 (v1.6.0+) |
| IPAM_GMAPS_API_KEY 📂 | "" | ✅ ❌ | 谷歌地图 API 密钥(1.5 版本移除,替换为开源地图 OpenStreetMap) |
| SCAN_INTERVAL | "1h" | ❌ ✅ | 网络自动扫描周期,可选:5m/10m/15m/30m/1h/2h/4h/6h/12h |
***** 安全提示:开启 IPAM_TRUST_X_FORWARDED 前,必须由前置反向代理过滤 / 重写请求头,禁止客户端直接可控该字段,否则存在安全漏洞。
** 部署完成后,建议设置 IPAM_DISABLE_INSTALLER=1 关闭安装向导,提升安全性。
1.5 及以上版本支持通过 IPAM_CONFIG_FILE 环境变量加载持久化存储内的自定义配置文件。
启用该变量后,仅以下环境变量生效,其余配置需手动写入自定义 config.php:
| 环境变量 | 默认值 | WEB / 定时容器 | 说明 |
|---|---|---|---|
| TZ | "UTC" | ✅ ✅ | 时区 (例如 "Europe/London") |
| IPAM_CONFIG_FILE | "" | ✅ ✅ | 配置文件的完整路径 (例如 "/config/config.php") 必须以 .php 结尾 (v1.5.0+) |
| SCAN_INTERVAL | "1h" | ❌ ✅ | 网络扫描周期 = 5m,10m,15m,30m,1h,2h,4h,6h,12h |
*注意: 负载均衡多实例部署注意:需手动设置 $session_storage = "database";,保证多容器会话数据统一。
容器启动时自动执行 update-ca-certificates 命令,/usr/local/share/ca-certificates 目录下所有 PEM 格式证书会被系统信任。
可将存放自定义根证书的持久化数据卷挂载到此目录。
/usr/local/share/ca-certificates # ls
ACME_ROOT.crt ACME_INTERMEDIATE_1.crt ACME_INTERMEDIATE_2.crt
使用 HAProxy 为 phpIPAM 提供 HTTPS 加密反向代理完整方案
启动 HAProxy 容器
docker run -d -p 443:443 -p 80:80 --name HAProxy --restart always -v haproxy_ssl:/etc/ssl/certs -v haproxy_cfg:/usr/local/etc/haproxy haproxy:latest
在容器内创建 /usr/local/etc/haproxy/haproxy.cfg 配置文件
# Example /usr/local/etc/haproxy/haproxy.cfg
global
daemon
maxconn 256
resolvers mydns
# Replace with the IP addresses of your internal DNS servers
nameserver ns1 192.168.1.53:53
nameserver ns2 192.168.2.53:53
accepted_payload_size 8192
defaults
mode http
timeout connect 5000ms
timeout client 5000ms
timeout server 60000ms
option forwardfor
frontend phpipam-rp
bind *:80
bind *:443 ssl crt /etc/ssl/certs
http-request redirect scheme https code 301 unless { ssl_fc }
default_backend phpipam-web
http-request del-header X-Forwarded-For
backend phpipam-web
# Replace phpipam.local with the internal DNS name of your phpipam container.
server s1 phpipam.local:80 check resolvers mydns init-addr none
http-request set-header X-Forwarded-Uri %[url]
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
HAProxy 会读取挂载至 /etc/ssl/certs 的完整证书链与私钥文件,目录文件示例:
haproxy@HAProxy:/etc/ssl/certs$ ls
ipam.crt ipam.crt.key
重启容器并查看日志排查异常
docker restart HAProxy
docker container logs HAProxy
GNU 通用公共许可证 v3.0
Gary Allan 邮箱 [email protected]
Content type
Image
Digest
sha256:d1c8af125…
Size
48.4 MB
Last updated
about 2 months ago
docker pull wxtewx/phpipam-cron