Java Web安全教学系统的Docker容器化部署说明。
- Docker 20.10+
- Docker Compose 2.0+
- 4GB+ 内存
- 20GB+ 磁盘空间
# 克隆项目
git clone <repository-url>
cd javaweb安全教学系统
# 构建并启动
./scripts/build.sh
./scripts/deploy.sh- 应用地址: http://localhost:8080
- API文档: http://localhost:8080/swagger-ui.html
- 健康检查: http://localhost:8080/actuator/health
# 基础构建
./scripts/build.sh
# 清理构建
./scripts/build.sh --clean
# 跳过测试
./scripts/build.sh --skip-tests
# 自定义标签
./scripts/build.sh --tag my-tag:1.0.0# 生产环境部署
./scripts/deploy.sh --env production
# 使用本地构建
./scripts/deploy.sh --build-local
# 跳过数据备份
./scripts/deploy.sh --skip-backup
# 滚动更新
./scripts/deploy.sh --rolling-update
# 回滚部署
./scripts/deploy.sh --rollback previous-tag# 启动服务
./start.sh
# 或者
docker-compose up -d
# 停止服务
./stop.sh
# 或者
docker-compose down
# 重启服务
./restart.sh
# 或者
docker-compose restart
# 查看日志
./logs.sh
# 或者
docker-compose logs -f
# 查看状态
docker-compose ps创建 .env 文件来自定义配置:
# 数据库配置
MYSQL_ROOT_PASSWORD=your_root_password
MYSQL_PASSWORD=your_user_password
# 应用配置
JWT_SECRET=your_jwt_secret
CORS_ALLOWED_ORIGINS=http://localhost:3000
# 端口配置
EXTERNAL_PORT=8080
MYSQL_EXTERNAL_PORT=3306数据存储在以下目录:
data/
├── mysql/ # MySQL数据文件
├── logs/ # 应用日志
├── uploads/ # 上传文件
└── backups/ # 数据库备份
日志文件位置:
- 应用日志:
data/logs/application.log - 错误日志:
data/logs/error.log - SQL日志:
data/logs/sql.log - 安全日志:
data/logs/security.log
# 完整健康检查
./scripts/health-check.sh
# 单项检查
./scripts/health-check.sh http
./scripts/health-check.sh database
./scripts/health-check.sh disk
./scripts/health-check.sh memory# 持续监控
./scripts/monitor.sh continuous
# 单次检查
./scripts/monitor.sh once
# 生成报告
./scripts/monitor.sh report
# 清理日志
./scripts/monitor.sh cleanup访问 /actuator/metrics 端点查看详细指标:
- JVM内存使用
- 数据库连接池状态
- HTTP请求统计
- 自定义业务指标
# 使用开发配置
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d
# 或者使用开发专用Dockerfile
docker build -f Dockerfile.dev -t security-teaching:dev .
docker run -d -p 8080:8080 -p 5005:5005 security-teaching:dev开发模式启用了远程调试:
- 调试端口: 5005
- JVM参数:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
-
更改默认密码:
export MYSQL_ROOT_PASSWORD=$(openssl rand -base64 32) export MYSQL_PASSWORD=$(openssl rand -base64 16) export JWT_SECRET=$(openssl rand -base64 64)
-
限制网络访问:
# docker-compose.yml ports: - "127.0.0.1:8080:8080" # 仅本地访问
-
启用HTTPS:
# 使用反向代理(Nginx/Traefik) # 配置SSL证书
# 手动备份
docker-compose exec security-teaching-app mysqldump \
-u root -p"$MYSQL_ROOT_PASSWORD" \
--single-transaction \
javaweb_security > backup_$(date +%Y%m%d).sql
# 自动备份(定时任务)
0 2 * * * /path/to/scripts/backup.sh-
容器启动失败:
# 查看详细日志 docker-compose logs security-teaching-app # 检查资源使用 docker stats
-
数据库连接失败:
# 检查MySQL状态 docker-compose exec security-teaching-app mysql -h localhost -u security_user -p # 重置数据库 docker-compose down -v docker-compose up -d
-
端口冲突:
# 修改端口配置 export EXTERNAL_PORT=8081 docker-compose up -d
-
内存不足:
# 调整JVM内存 export JAVA_OPTS="-Xms256m -Xmx512m" docker-compose restart
# 查看错误日志
grep -i error data/logs/application.log
# 查看最近的异常
docker-compose logs --since="1h" | grep -i exception
# 分析访问模式
grep "GET\|POST" data/logs/application.log | tail -100# docker-compose.yml
services:
security-teaching-app:
deploy:
resources:
limits:
memory: 1G
cpus: '1.0'
reservations:
memory: 512M
cpus: '0.5'# 优化MySQL配置
# 编辑 docker/mysql.cnf
[mysqld]
innodb_buffer_pool_size = 256M
query_cache_size = 32M
max_connections = 100# JVM调优
export JAVA_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+PrintGC"
# 连接池优化
# 编辑 application.yml
spring:
datasource:
hikari:
maximum-pool-size: 10
minimum-idle: 5如遇问题,请提供以下信息:
- 系统环境信息
- 错误日志
- 容器状态
- 资源使用情况
# 收集诊断信息
./scripts/health-check.sh > diagnosis.log
docker-compose ps >> diagnosis.log
docker stats --no-stream >> diagnosis.log