Sign inSign up

wxtewx/phpipam-www

By wxtewx

•Updated about 2 months ago

phpIPAM 是一款开源网页版 IP 地址管理系统(IPAM)。

Image
0

1.5K

wxtewx/phpipam-www repository overview

⁠phpIPAM Apache2 Container
⁠适用人群

phpIPAM 的常规使用者为网络管理员,大多对 LAMP 堆栈部署经验有限。本系列 Docker 镜像提供一套更简便的方式,快速搭建并维护可正常运行的 phpIPAM 环境。

面向这类使用人群,镜像设计优先追求简易性,舍弃了部分复杂高级场景的支持。

如需原生 SSL 加密访问,可使用 DockerHub 上大量现成的 HTTPS 反向代理镜像实现,下文提供 HAProxy 配置示例。

若有高度定制化高级需求,可前往官网 https://phpipam.net⁠ 查看教程,在虚拟机中手动完整安装 phpIPAM。

⁠容器镜像说明
  • phpipam-www:前端 Apache+PHP 业务容器
  • phpipam-cron:定时任务容器,负责执行网络自动扫描任务

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独立版

通过 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 外部 MySQL 服务器

通过 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:
⁠配置
⁠支持的 Docker 环境变量

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 关闭安装向导,提升安全性。

⁠挂载自定义 config.php 配置文件

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 HTTPS 反向代理示例

使用 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]⁠

Tag summary

Content type

Image

Digest

sha256:8cc0e675a…

Size

48.4 MB

Last updated

about 2 months ago

docker pull wxtewx/phpipam-www