别再手动改配置了!用Docker Compose一键部署Pikachu靶场(附完整YAML文件)
告别手动配置:Docker Compose自动化部署Pikachu靶场实战指南
每次搭建渗透测试环境都要重复安装PHP、配置MySQL、调整权限?团队协作时总遇到"在我机器上能运行"的尴尬?试试这个基于Docker Compose的一键化解决方案。本文将手把手带你用容器化技术实现Pikachu靶场的秒级部署,无论你是要快速重建实验环境,还是需要在多台设备间保持环境一致性,这套方案都能显著提升你的工作效率。
1. 为什么选择Docker Compose部署靶场环境
传统手动搭建渗透测试靶场通常需要经历以下痛苦流程:安装Web服务器→配置PHP环境→初始化MySQL数据库→导入测试数据→调整文件权限。这个过程不仅耗时,而且容易因系统差异导致各种"玄学"问题。更糟糕的是,当需要清理环境或在不同设备上重建时,所有步骤都得重来一遍。
Docker Compose通过声明式配置文件解决这些问题。我们只需要定义一个docker-compose.yml文件,就能实现:
- 环境标准化:确保开发、测试、演示各环节环境完全一致
- 快速重建:销毁和重建环境只需两条命令
- 资源隔离:避免污染宿主机环境
- 团队共享:配置文件纳入版本控制,团队成员秒级获得相同环境
version: '3'
services:
web:
image: php:7.4-apache
ports:
- "80:80"
volumes:
- ./pikachu:/var/www/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: pikachu
MYSQL_DATABASE: pikachu
这个基础配置已经包含了Web服务和数据库服务,接下来我们会逐步完善它。
2. 完整环境配置详解
2.1 文件结构规划
在开始编写配置前,建议先规划好项目目录结构:
/pikachu-docker
├── docker-compose.yml
├── pikachu/ # 靶场源码
├── mysql/ # 数据库数据持久化
└── config/
├── php.ini # PHP自定义配置
└── mysql.cnf # MySQL自定义配置
提示:这种结构将可变数据(数据库文件)与不可变数据(源码)分离,方便管理和备份。
2.2 完善docker-compose.yml
下面是经过优化的完整配置方案:
version: '3.8'
services:
web:
image: php:7.4-apache
container_name: pikachu-web
ports:
- "8080:80"
volumes:
- ./pikachu:/var/www/html
- ./config/php.ini:/usr/local/etc/php/conf.d/custom.ini
networks:
- pikachu-net
depends_on:
- db
restart: unless-stopped
db:
image: mysql:5.7
container_name: pikachu-db
environment:
MYSQL_ROOT_PASSWORD: pikachu123
MYSQL_DATABASE: pikachu
MYSQL_USER: pikachu
MYSQL_PASSWORD: pikachu123
volumes:
- ./mysql:/var/lib/mysql
- ./config/mysql.cnf:/etc/mysql/conf.d/custom.cnf
networks:
- pikachu-net
restart: unless-stopped
networks:
pikachu-net:
driver: bridge
关键配置说明:
- 网络隔离:创建专用网络确保服务间安全通信
- 数据持久化:MySQL数据存储在宿主机,避免容器销毁后数据丢失
- 配置注入:挂载自定义PHP和MySQL配置文件
- 自动重启:配置容器异常退出时自动恢复
2.3 必要的自定义配置
在config/php.ini中添加以下PHP优化设置:
upload_max_filesize = 20M
post_max_size = 20M
memory_limit = 256M
display_errors = On
error_reporting = E_ALL
MySQL配置文件config/mysql.cnf建议配置:
[mysqld]
max_connections = 200
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
3. 靶场初始化与使用技巧
3.1 一键启动与关闭
启动整个环境只需在项目目录执行:
docker-compose up -d
等待命令执行完成后,访问 http://localhost:8080 即可看到Pikachu登录页面。
关闭环境同样简单:
docker-compose down
需要彻底清理(包括持久化数据)时:
docker-compose down -v
3.2 数据库初始化
首次启动后,需要执行以下操作完成靶场初始化:
- 访问Pikachu安装页面 (
http://localhost:8080/install.php) - 按照向导填写数据库连接信息:
- 数据库地址:
db(使用Docker服务名) - 用户名:
pikachu - 密码:
pikachu123 - 数据库名:
pikachu
- 数据库地址:
注意:安装完成后务必删除或重命名
install.php文件,避免安全隐患。
3.3 常用运维命令
查看服务日志:
docker-compose logs -f web
进入容器执行命令:
docker-compose exec web bash
备份数据库:
docker-compose exec db mysqldump -u root -ppikachu123 pikachu > backup.sql
4. 高级配置与优化建议
4.1 资源限制与监控
为防止容器占用过多系统资源,可以在docker-compose.yml中添加资源限制:
services:
web:
deploy:
resources:
limits:
cpus: '1'
memory: 512M
db:
deploy:
resources:
limits:
cpus: '1'
memory: 1G
监控容器资源使用情况:
docker stats pikachu-web pikachu-db
4.2 多环境配置管理
对于开发、测试不同环境,可以使用多个Compose文件:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
docker-compose.dev.yml示例:
version: '3.8'
services:
web:
environment:
- APP_ENV=development
volumes:
- ./pikachu:/var/www/html
- ./xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
4.3 安全加固措施
- 修改默认密码:在
docker-compose.yml中更换所有默认密码 - 限制网络访问:
networks: pikachu-net: internal: true - 定期更新基础镜像版本
- 配置适当的文件权限:
chmod -R 755 pikachu/
5. 常见问题排查
Q1: 访问页面出现数据库连接错误
A1: 按顺序检查:
- 确保数据库容器已正常运行 (
docker-compose ps) - 检查
db服务是否在同一个网络 - 验证
install.php中配置的连接信息
Q2: 修改代码后页面无变化
A2: 可能是缓存导致,尝试:
- 清除浏览器缓存
- 重启Apache服务:
docker-compose exec web service apache2 reload
Q3: MySQL服务频繁重启
A3: 通常是因为内存不足,可以:
- 增加MySQL内存限制
- 优化MySQL配置参数
- 检查宿主机可用资源
这套方案已经在多个实际项目中验证过稳定性,特别是在团队培训和CTF比赛中表现出色。记得根据实际需求调整资源配置,对于性能敏感场景,可以考虑将MySQL数据目录挂载到SSD存储上。
更多推荐
所有评论(0)