虚拟机搭建公安电子证据平台
VMware虚拟机搭建私有OSS(MinIO,兼容阿里云S3,对接ThinkPHP8公安电子证据平台)
VMware 虚拟机搭建私有 OSS(MinIO,兼容阿里云 S3,对接 ThinkPHP8 公安电子证据平台)
方案说明
MinIO = 私有化对象存储,完全兼容 S3 协议,可替代阿里云 OSS;单虚拟机即可部署,支持图片 / 视频 / 取证大文件存储、权限管控、内网访问,适配公安内网电子证据存储场景。 整体流程:VMware 网络配置 → CentOS 虚拟机安装 MinIO → 防火墙放行端口 → 创建存储桶 → ThinkPHP8 修改 filesystem 对接 MinIO 私有 OSS。
一、VMware 虚拟机网络设置(关键,宿主机可互通)
1. 虚拟机网卡模式选择
虚拟机设置 → 网络适配器:桥接模式(推荐,和宿主机同一局域网,真实内网 IP)
不要用仅主机 / NAT,否则宿主机 TP8 项目无法正常上传访问文件
2. 查看虚拟机内网 IP(CentOS)
ip a # 找到ens33,记录inet地址,示例:192.168.1.100
3. 宿主机 Windows 测试连通
ping 192.168.1.100 # 能ping通代表网络正常
二、CentOS7/8 虚拟机安装 MinIO(单节点离线二进制,无依赖)
1. 下载 MinIO 服务端
# 在线下载,无外网可宿主机下载上传到虚拟机 wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio mv minio /usr/local/bin/
2. 创建数据存储目录(存放电子证据)
mkdir -p /data/minio/evidence mkdir -p /etc/minio
3. 创建系统服务(开机自启,生产稳定)
① 环境配置文件/etc/default/minio
vim /etc/default/minio
写入(密码≥8 位,公安环境设置复杂密码):
# 存储数据目录 MINIO_VOLUMES="/data/minio/evidence" # API端口9000(对接TP8),控制台9001(网页管理) MINIO_OPTS="--address 192.168.1.100:9000 --console-address 192.168.1.100:9001" # 访问密钥(对应OSS的AccessKey/SecretKey) MINIO_ROOT_USER=adminoss MINIO_ROOT_PASSWORD=Evidence@2026 # 区域(随便填,本地统一local) MINIO_REGION_NAME=local
② 系统服务文件/etc/systemd/system/minio.service
vim /etc/systemd/system/minio.service
[Unit] Description=MinIO Object Storage Documentation=https://docs.min.io Wants=network-online.target After=network-online.target [Service] User=root Group=root EnvironmentFile=/etc/default/minio ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES Restart=always LimitNOFILE=65536 [Install] WantedBy=multi-user.target
4. 放行防火墙端口(宿主机才能访问 9000/9001)
# 永久放行 firewall-cmd --permanent --add-port=9000/tcp firewall-cmd --permanent --add-port=9001/tcp firewall-cmd --reload # 验证端口 firewall-cmd --list-ports
5. 启动 & 自启 MinIO
systemctl daemon-reload systemctl start minio systemctl enable minio # 查看运行状态 systemctl status minio
三、访问 MinIO 管理后台,创建证据存储桶
宿主机浏览器打开:
http://192.168.1.100:9001登录账号:
adminoss/Evidence@2026左侧 Buckets → Create Bucket,桶名:
evidence-store(TP8 配置 bucket 名称)桶权限设置(公安内网只读,禁止公开):
Bucket Policy → 关闭公开访问,仅密钥鉴权上传下载
四、ThinkPHP8 对接 VMware 虚拟机 MinIO 私有 OSS
1. 安装 S3 驱动(MinIO 基于 S3 协议,不用阿里云 oss 包)
composer require league/flysystem-aws-s3-v3
2. 修改.env环境配置
# MinIO私有OSS(VMware虚拟机) MINIO_ENDPOINT=http://192.168.1.100:9000 MINIO_KEY=adminoss MINIO_SECRET=Evidence@2026 MINIO_BUCKET=evidence-store MINIO_REGION=local MINIO_SSL=false
3. 配置config/filesystem.php新增 minio 磁盘
return [ 'default' => env('filesystem.driver', 'minio'), 'disks' => [ 'local' => [...], 'public' => [...], // VMware虚拟机MinIO私有OSS 'minio' => [ 'type' => 's3', 'region' => env('MINIO_REGION','local'), 'endpoint' => env('MINIO_ENDPOINT'), 'key' => env('MINIO_KEY'), 'secret' => env('MINIO_SECRET'), 'bucket' => env('MINIO_BUCKET'), 'ssl' => env('MINIO_SSL',false), 'prefix' => 'upload', // 文件前缀 upload/image/xxx.jpg ] ] ];
4. 原有 OSS 上传工具类无缝兼容 MinIO
只需修改磁盘名为minio,原有上传、哈希、Vditor 图片上传代码完全不用改动:
// OssUpload.php 上传一行改动 $savePath = Filesystem::disk('minio')->putFile($dir, $file);
文件访问 URL 示例:http://192.168.1.100:9000/evidence-store/upload/image/xxx.jpg
五、公安电子证据平台专属安全加固(虚拟机 MinIO)
禁止外网访问:VMware 仅桥接内网,不映射公网端口;虚拟机关闭多余端口 22/80 等
强密钥策略:MINIO_ROOT_PASSWORD 必须大小写 + 数字 + 特殊符号,长度≥12 位
关闭桶公开权限:所有证据桶禁止匿名访问,仅 TP8 服务端通过密钥鉴权
数据多副本:MinIO 单节点开启 2 副本,防止取证文件丢失
控制台 Bucket → Replication 副本策略 2 份
访问日志留存:开启 MinIO 审计日志,记录所有文件上传 / 下载,同步公安 sys_audit_log 审计表
文件后缀拦截:TP8 上传层过滤 php/exe/bat 等脚本,仅允许图片 / 视频 /pdf 取证格式
定期备份:定时脚本打包
/data/minio/evidence证据目录到虚拟机第二块硬盘
六、常见故障排查
宿主机无法访问 9001 控制台
虚拟机防火墙未放行 9000/9001 端口,重新执行 firewall 放行命令
MinIO 启动绑定 [127.0.0.1](127.0.0.1),修改
MINIO_OPTS为虚拟机真实内网 IP
ThinkPHP8 上传返回 403
核对 env 内 key/secret、bucket 名称、endpoint 地址
MinIO 桶名区分大小写,创建桶名称和配置完全一致
文件 URL 无法直接预览图片
虚拟机防火墙放行 9000 端口,浏览器直接访问 MinIO 文件地址测试
虚拟机存储容量不足
VMware 设置 → 硬盘 → 扩展磁盘大小,虚拟机内扩容分区挂载到 /data/minio
七、Docker 极简快速部署(不想装二进制可选)
虚拟机安装 docker 后一键启动 MinIO,适合快速测试:
docker run -d \ --name minio-oss \ --restart always \ -p 9000:9000 -p 9001:9001 \ -e MINIO_ROOT_USER=adminoss \ -e MINIO_ROOT_PASSWORD=Evidence@2026 \ -v /data/minio/evidence:/data \ minio/minio server /data --console-address ":9001"
