# docker-compose **Repository Path**: maike01/docker-compose ## Basic Information - **Project Name**: docker-compose - **Description**: 使用compose快速部署项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-08-05 - **Last Updated**: 2025-08-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Docker Compose 全端应用部署方案 这是一个完整的web应用部署方案,使用Docker Compose统一管理多个服务,包括后端应用、缓存、反向代理和对象存储等核心组件。 ## 🏗️ 架构概览 本项目使用微服务架构,包含以下四个核心服务: - **Java 应用服务器** - 后端API服务 - **Redis 缓存服务** - 数据缓存和会话存储 - **Nginx 反向代理** - 前端静态资源服务和API代理 - **MinIO 对象存储** - 文件存储服务 ## 📁 项目结构 ``` docker-compose/ ├── docker-compose.yml # Docker Compose配置文件 ├── README.md # 项目说明文档 └── data/ # 数据持久化目录 ├── config/ # 应用配置文件目录 ├── dist/ # 前端构建产物目录 ├── jar/ # Java应用JAR包目录 ├── logs/ # 日志文件目录 │ ├── java/ # Java应用日志 │ ├── nginx/ # Nginx访问日志 │ └── minio/ # MinIO服务日志 ├── nginx/ # Nginx配置目录 │ └── proxy.conf # 反向代理配置 ├── redis/ # Redis数据目录 └── minio/ # MinIO数据目录 └── data/ # 对象存储数据 ``` ## 🐳 服务详解 ### 1. Redis 缓存服务 **镜像版本**: `redis:6.2.14` **端口映射**: `6379:6379` **容器名称**: `redis` - **功能**: 提供高性能内存数据库服务,用于缓存和会话存储 - **数据持久化**: `./data/redis:/data` - Redis数据持久化到本地 - **特性**: - 自动重启策略 - 数据持久化保障 - 支持主从复制(可扩展) **使用方法**: ```bash # 连接Redis客户端 docker exec -it redis redis-cli # 查看Redis状态 docker exec -it redis redis-cli info ``` ### 2. Java 应用服务 **镜像版本**: `openjdk:17-jdk` **端口映射**: `8080:8080` **容器名称**: `java-app` - **功能**: 运行Spring Boot后端应用,提供REST API服务 - **依赖服务**: Redis(确保Redis先启动) - **挂载目录**: - `./data/jar:/app` - JAR包目录 - `./data/config:/app/config` - 外部配置文件 - `./data/logs/java:/app/logs` - 应用日志输出 - **启动命令**: 使用外部配置文件启动Spring Boot应用 **部署步骤**: 1. 将编译好的JAR包命名为`app.jar`并放入`./data/jar/`目录 2. 将配置文件放入`./data/config/`目录 3. 启动服务 **配置说明**: - 支持外部配置文件覆盖内部配置 - 日志自动输出到`./data/logs/java/`目录 - JVM参数可通过环境变量调整 ### 3. Nginx 反向代理服务 **镜像版本**: `nginx:1.26.1-alpine3.19` **端口映射**: `80:80` **容器名称**: `nginx` - **功能**: - 静态资源服务器(前端Vue应用) - API反向代理(转发到Java应用) - 负载均衡(可扩展) - **依赖服务**: Java应用(确保后端API可用) - **挂载目录**: - `./data/dist:/usr/share/nginx/html` - 前端静态资源 - `./data/nginx/nginx.conf:/etc/nginx/nginx.conf` - Nginx主配置 - `./data/logs/nginx:/var/log/nginx` - 访问日志和错误日志 **路由规则**: - `/` - 前端Vue应用静态资源 - `/api/*` - API请求代理到Java应用(去除/api前缀) **使用方法**: ```bash # 重新加载Nginx配置 docker exec -it nginx nginx -s reload # 查看Nginx状态 docker exec -it nginx nginx -t ``` ### 4. MinIO 对象存储服务 **镜像版本**: `quay.io/minio/minio:RELEASE.2024-06-06T21-36-34Z` **端口映射**: - `9000:9000` - API服务端口 - `9001:9001` - Web控制台端口 **容器名称**: `minio` - **功能**: 提供S3兼容的对象存储服务,用于文件上传下载 - **默认凭据**: - 用户名: `minioadmin` - 密码: `minio#098MK` - **挂载目录**: - `./data/minio/data:/data` - 对象存储数据 - `./data/logs/minio:/var/log/minio` - MinIO服务日志 **管理控制台**: - 访问地址: `http://localhost:9001` - 使用默认凭据登录进行bucket管理、用户权限设置等操作 **API使用**: - API地址: `http://localhost:9000` - 支持S3 SDK进行编程访问 ## 🚀 快速开始 ### 前置要求 - Docker 20.10+ - Docker Compose 2.0+ - 至少4GB可用内存 ### 部署步骤 1. **克隆项目** ```bash git clone <项目地址> cd docker-compose ``` 2. **准备应用文件** ```bash # 放置Java应用JAR包 cp your-app.jar ./data/jar/app.jar # 放置前端构建产物 cp -r your-frontend-dist/* ./data/dist/ # 配置应用参数 cp your-config-files ./data/config/ ``` 3. **启动所有服务** ```bash # 后台启动所有服务 docker-compose up -d # 查看服务状态 docker-compose ps # 查看服务日志 docker-compose logs -f ``` 4. **验证部署** - 前端应用: `http://localhost` - Java API: `http://localhost/api/` - MinIO控制台: `http://localhost:9001` - Redis: `localhost:6379` ## 🛠️ 运维管理 ### 常用命令 ```bash # 启动所有服务 docker-compose up -d # 停止所有服务 docker-compose down # 重启指定服务 docker-compose restart java-app # 查看服务日志 docker-compose logs -f java-app # 进入容器执行命令 docker exec -it java-app bash # 更新服务(重新拉取镜像) docker-compose pull docker-compose up -d --force-recreate ``` ### 服务依赖关系 ``` nginx (端口80) ↓ 依赖 java-app (端口8080) ↓ 依赖 redis (端口6379) minio (端口9000/9001) - 独立服务 ``` 启动顺序:Redis → Java应用 → Nginx → MinIO ### 日志管理 所有服务日志都持久化到`./data/logs/`目录: ```bash # 查看Java应用日志 tail -f ./data/logs/java/application.log # 查看Nginx访问日志 tail -f ./data/logs/nginx/access.log # 查看Nginx错误日志 tail -f ./data/logs/nginx/error.log ``` ### 数据备份 重要数据目录备份建议: ```bash # 备份Redis数据 tar -czf redis-backup-$(date +%Y%m%d).tar.gz ./data/redis/ # 备份MinIO数据 tar -czf minio-backup-$(date +%Y%m%d).tar.gz ./data/minio/ # 备份应用配置 tar -czf config-backup-$(date +%Y%m%d).tar.gz ./data/config/ ``` ## 🔧 配置说明 ### 环境变量配置 可以通过`.env`文件或环境变量调整服务配置: ```bash # Redis配置 REDIS_PORT=6379 # Java应用配置 JAVA_APP_PORT=8080 JAVA_OPTS=-Xmx1g -Xms512m # Nginx配置 NGINX_PORT=80 # MinIO配置 MINIO_API_PORT=9000 MINIO_CONSOLE_PORT=9001 MINIO_ROOT_USER=minioadmin MINIO_ROOT_PASSWORD=minio#098MK ``` ### 扩展配置 **水平扩展Java应用**: ```yaml java-app: scale: 3 # 启动3个实例 deploy: replicas: 3 ``` **添加MySQL数据库**: ```yaml mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: myapp ports: - "3306:3306" volumes: - ./data/mysql:/var/lib/mysql ``` ## 🔒 安全建议 1. **修改默认密码**: 更改MinIO默认管理员密码 2. **网络隔离**: 生产环境建议使用Docker网络隔离 3. **SSL证书**: 配置HTTPS证书,启用TLS加密 4. **访问控制**: 限制MinIO和Redis的外网访问 5. **定期备份**: 建立自动化数据备份策略 ## 🐛 故障排除 ### 常见问题 **Java应用启动失败**: ```bash # 检查JAR包是否存在 ls -la ./data/jar/app.jar # 查看启动日志 docker-compose logs java-app # 检查配置文件 ls -la ./data/config/ ``` **Nginx代理失败**: ```bash # 检查Nginx配置语法 docker exec -it nginx nginx -t # 查看错误日志 docker-compose logs nginx # 测试后端连通性 docker exec -it nginx wget http://java-app:8080/actuator/health ``` **Redis连接失败**: ```bash # 测试Redis服务 docker exec -it redis redis-cli ping # 检查网络连通性 docker exec -it java-app telnet redis 6379 ``` **性能优化**: - 调整JVM参数优化Java应用内存使用 - 配置Redis内存策略和持久化参数 - 优化Nginx缓存和gzip压缩设置 - 监控磁盘空间,定期清理日志文件 ## 📊 监控建议 建议集成以下监控工具: - **Prometheus + Grafana**: 服务监控和可视化 - **ELK Stack**: 日志聚合和分析 - **Cadvisor**: 容器资源监控 - **Portainer**: Docker可视化管理 --- ## 📞 技术支持 如有问题,请检查: 1. Docker和Docker Compose版本是否满足要求 2. 端口是否被其他服务占用 3. 磁盘空间是否充足 4. 服务启动顺序是否正确 更多技术细节请参考各服务的官方文档。