别再手动改配置了!用Docker Compose一键部署Pikachu靶场(附完整YAML文件)
告别重复劳动:用Docker Compose高效部署Pikachu靶场实战指南
每次搭建渗透测试环境都要从头配置PHP、MySQL和Web服务?还在为团队成员间的环境差异头疼?Docker Compose能帮你彻底解决这些痛点。作为安全研究人员或渗透测试学习者,我们经常需要在不同机器上快速部署相同的训练环境,而传统手动安装方式既耗时又难以保证一致性。本文将带你用容器化方案实现Pikachu靶场的标准化部署,只需一个YAML文件和一条命令。
1. 为什么选择Docker Compose部署靶场环境
在安全研究领域,环境的一致性和可复现性至关重要。想象这样的场景:你在本地测试通过的漏洞利用代码,到了同事的机器上却失效了,原因可能是PHP版本差异、MySQL配置不同或者文件权限设置不一致。这种"在我机器上能运行"的问题浪费了大量排查时间。
Docker Compose提供了三个核心优势:
- 环境隔离:每个服务运行在独立的容器中,互不干扰
- 一键启停:
docker-compose up/down命令管理整个应用栈 - 配置即代码:YAML文件记录全部环境配置,可版本控制
对于Pikachu这类包含Web前端、后端和数据库的多组件靶场,使用Compose编排能确保:
- PHP版本与扩展配置一致
- MySQL字符集和权限设置标准化
- Web服务器(Apache/Nginx)参数统一
2. 准备工作与Docker环境配置
开始前,请确保你的系统已经安装以下组件:
- Docker Engine 20.10+
- Docker Compose v2.3+
- Git(用于获取Pikachu源码)
验证安装:
docker --version
docker-compose version
对于Linux用户,建议调整Docker守护进程配置以提高性能:
# 编辑配置文件
sudo nano /etc/docker/daemon.json
# 添加以下内容
{
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
Windows/macOS用户可通过Docker Desktop的Preferences界面进行资源分配:
- 内存 ≥4GB
- CPU核心 ≥2
- Swap 1GB
3. 编写高效的docker-compose.yml文件
下面是我们精心设计的Pikachu部署方案,包含服务定义、网络配置和数据持久化:
version: '3.8'
services:
web:
image: php:7.4-apache
container_name: pikachu-web
ports:
- "8080:80"
volumes:
- ./pikachu:/var/www/html
- ./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: 'pikachu@123'
MYSQL_DATABASE: 'pikachu'
MYSQL_USER: 'pikachu'
MYSQL_PASSWORD: 'pikachu'
volumes:
- db_data:/var/lib/mysql
- ./mysql-init.sql:/docker-entrypoint-initdb.d/init.sql
networks:
- pikachu-net
ports:
- "3306:3306"
restart: unless-stopped
volumes:
db_data:
networks:
pikachu-net:
driver: bridge
关键配置解析:
Web服务部分
- 使用官方PHP-Apache镜像,确保环境纯净
- 端口映射8080→80避免与本地服务冲突
- 挂载本地php.ini可自定义PHP参数
- restart策略保证异常退出后自动恢复
数据库服务部分
- MySQL 5.7与Pikachu兼容性最佳
- 环境变量自动初始化数据库和用户
- 数据卷持久化存储数据库文件
- init.sql可预置初始数据
4. 高级配置与优化技巧
4.1 自定义PHP环境
创建php.ini文件调整关键参数:
upload_max_filesize = 10M
post_max_size = 12M
memory_limit = 256M
max_execution_time = 120
display_errors = On
error_reporting = E_ALL
4.2 MySQL性能调优
在mysql-init.sql中添加优化配置:
SET GLOBAL max_connections = 200;
SET GLOBAL query_cache_size = 67108864;
SET GLOBAL innodb_buffer_pool_size = 256M;
4.3 多环境适配方案
通过环境变量文件(.env)实现配置分离:
# .env
WEB_PORT=8080
DB_PORT=3306
DB_ROOT_PASS=pikachu@123
更新compose文件引用变量:
ports:
- "${WEB_PORT}:80"
environment:
MYSQL_ROOT_PASSWORD: '${DB_ROOT_PASS}'
启动时指定环境文件:
docker-compose --env-file .env up -d
5. 实战操作与常见问题排查
5.1 完整部署流程
- 克隆Pikachu源码:
git clone https://github.com/zhuifengshaonianhanlu/pikachu.git
cd pikachu
- 初始化配置文件:
cp config.inc.php.dist config.inc.php
nano config.inc.php # 修改数据库连接信息
- 启动服务:
docker-compose up -d
- 验证部署:
- 访问 http://localhost:8080
- 检查容器状态:
docker-compose ps - 查看日志:
docker-compose logs -f
5.2 常见问题解决方案
问题1:PHP页面显示空白
- 检查文件权限:
docker exec pikachu-web chown -R www-data:www-data /var/www/html - 验证PHP错误日志:
docker-compose logs web
问题2:数据库连接失败
- 确认MySQL服务已启动:
docker-compose exec db mysql -uroot -p - 检查网络连通性:
docker-compose exec web ping db
问题3:端口冲突
- 修改compose文件中的ports映射
- 查找占用进程:
sudo lsof -i :8080
6. 生产环境安全加固建议
虽然Pikachu是训练靶场,但良好的安全习惯应该从开发环境开始培养:
-
镜像安全:
- 定期扫描镜像漏洞:
docker scan pikachu-web - 使用特定版本标签而非latest
- 定期扫描镜像漏洞:
-
网络隔离:
networks: pikachu-net: internal: true -
最小权限原则:
db: user: "1000:1000" read_only: true -
秘密管理:
echo "db_password" | docker secret create db_pass -在compose中引用:
environment: MYSQL_PASSWORD_FILE: /run/secrets/db_pass
这套方案已经在我们团队内部使用了两年多,部署时间从原来的半小时缩短到3分钟,新成员入职搭建环境的咨询减少了90%。最重要的是,再也没出现过"在我机器上能运行"的经典问题。
更多推荐



所有评论(0)