# pacsonline 容器化 部署方案 基于 Docker Compose 的 MySQL 8.0 、 Redis 7 、 php-fpm 7.4 、nginx 一键部署方案,支持离线部署。 ## 项目结构 ``` deploy-test/ ├── docker-compose.yml # Docker Compose 编排文件 ├── deploy.sh # 一键部署脚本 ├── README.md # 说明文档 ├── mysql-init.sql # MySQL 初始化脚本(用户自定义) ├── mysql-image.tar # MySQL 8.0 原始镜像包 ├── redis-image.tar # Redis 7 镜像包 ├── mysql/ │ ├── init/ # MySQL 初始化 SQL 脚本目录(可选) │ └── conf/ # MySQL 配置文件目录(可选) ├── redis/ │ └── redis.conf # Redis 配置文件 └── data/ ├── mysql/ # MySQL 数据持久化目录 └── redis/ # Redis 数据持久化目录 ``` ## 服务配置 ### MySQL 8.0 - **容器名称**: mysql8_deploy - **端口**: 3306 - **数据库**: ris - **用户**: ris - **密码**: zskk8888 - **Root 密码**: zskk8888 - **初始化**: 部署时自动执行 `mysql-init.sql` 脚本(如果存在) ### Redis 7 - **容器名称**: redis7_deploy - **端口**: 6379 - **密码**: zskk8888 - **持久化**: 启用 RDB + AOF 双重持久化 - **最大内存**: 256MB(可在 redis.conf 中修改) ## 快速开始 ### 方法一:使用部署脚本(推荐) ```bash # 1. 进入项目目录 cd deploy-test # 2. (可选)放置自定义的 MySQL 初始化脚本 # 将你的 SQL 文件命名为 mysql-init.sql 放在当前目录 # 3. 运行部署脚本 ./deploy.sh ``` **说明**: - 如果存在 `mysql-init.sql` 文件,脚本会自动执行该文件初始化数据库 - 如果不存在,则跳过初始化步骤 ### 方法二:手动部署 ```bash # 1. 进入项目目录 cd deploy-test # 2. 启动服务 docker compose up -d # 3. 查看服务状态 docker compose ps # 4. 查看日志 docker compose logs -f ``` ## 离线部署 ### 准备镜像包(在有网络的机器上) ```bash # 1. 拉取并导出 MySQL 原始镜像 docker pull mysql:8.0 docker save -o mysql-image.tar mysql:8.0 # 2. 拉取并导出 Redis 镜像 docker pull redis:7-alpine docker save -o redis-image.tar redis:7-alpine # 3. 打包部署文件 tar -czf deploy-package.tar.gz \ docker-compose.yml \ deploy.sh \ README.md \ mysql/ \ redis/ \ mysql-image.tar \ redis-image.tar \ mysql-init.sql # 如果有自定义初始化脚本 ``` ### 目标服务器部署(无网络环境) ```bash # 1. 传输部署包到目标服务器 # 使用 scp、U盘等方式 # 2. 解压部署包 tar -xzf deploy-package.tar.gz cd deploy-test # 3. (可选)放置自定义的 MySQL 初始化脚本 # 如果在打包时没有包含,可以在此步骤添加 mysql-init.sql # 4. 运行部署脚本 ./deploy.sh ``` **说明**: - 镜像文件:`mysql-image.tar` (~757MB) + `redis-image.tar` (~41MB) - 部署脚本会自动检测并加载镜像文件 - 如果存在 `mysql-init.sql`,会自动执行数据库初始化 ## 常用命令 ### 服务管理 ```bash # 启动服务 docker compose up -d # 停止服务 docker compose stop # 重启服务 docker compose restart # 删除服务(保留数据) docker compose down # 删除服务及数据卷 docker compose down -v ``` ### 查看状态和日志 ```bash # 查看服务状态 docker compose ps # 查看所有日志 docker compose logs # 查看 MySQL 日志 docker compose logs -f mysql # 查看 Redis 日志 docker compose logs -f redis # 查看最近 100 行日志 docker compose logs --tail=100 ``` ### 连接服务 **MySQL 连接** ```bash # 方法 1: 从容器内连接 docker exec -it mysql8_deploy mysql -uris -pzskk8888 -D ris # 方法 2: 从容器内使用 root 连接 docker exec -it mysql8_deploy mysql -uroot -pzskk8888 # 方法 3: 从宿主机连接(需安装 mysql 客户端) mysql -h 127.0.0.1 -P 3306 -uris -pzskk8888 -D ris ``` **Redis 连接** ```bash # 方法 1: 从容器内连接 docker exec -it redis7_deploy redis-cli -a zskk8888 # 方法 2: 从宿主机连接(需安装 redis-cli) redis-cli -h 127.0.0.1 -p 6379 -a zskk8888 # 测试连接 docker exec -it redis7_deploy redis-cli -a zskk8888 ping # 应该返回: PONG ``` ### 数据备份 **MySQL 备份** ```bash # 备份单个数据库 docker exec mysql8_deploy mysqldump -uroot -pzskk8888 ris > backup_ris.sql # 备份所有数据库 docker exec mysql8_deploy mysqldump -uroot -pzskk8888 --all-databases > backup_all.sql # 恢复数据库 docker exec -i mysql8_deploy mysql -uroot -pzskk8888 ris < backup_ris.sql ``` **Redis 备份** ```bash # 手动触发 RDB 快照 docker exec redis7_deploy redis-cli -a zskk8888 BGSAVE # 备份 RDB 文件 docker cp redis7_deploy:/data/dump.rdb ./backup_redis_dump.rdb # 备份 AOF 文件 docker cp redis7_deploy:/data/appendonly.aof ./backup_redis_aof.aof ``` ## 自定义配置 ### 修改 MySQL 配置 在 `mysql/conf/` 目录下创建 `.cnf` 配置文件,例如 `my.cnf`: ```ini [mysqld] max_connections = 200 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci ``` ### 修改 Redis 配置 编辑 `redis/redis.conf` 文件,修改后重启容器: ```bash docker compose restart redis ``` ### MySQL 初始化脚本 **方法 1: 使用 mysql-init.sql(推荐)** 将你的初始化 SQL 文件命名为 `mysql-init.sql` 放在项目根目录,部署脚本会自动执行: ```bash # 部署时自动执行 ./deploy.sh ``` **方法 2: 使用 mysql/init/ 目录** 将 `.sql` 文件放入 `mysql/init/` 目录,容器首次启动时会自动执行(按字母顺序)。 **注意**: - 方法 1 每次部署都会执行(适合测试环境) - 方法 2 只在首次启动时执行,如需重新初始化需删除数据卷: ```bash # 删除数据卷 docker compose down -v # 重新启动 docker compose up -d ``` ## 多架构支持 如果需要在不同 CPU 架构的服务器上部署(x86_64、ARM64),需分别构建镜像: ```bash # 在 x86_64 机器上构建 docker buildx build --platform linux/amd64 -t my-mysql:v1.0-amd64 . docker save -o mysql-redis-amd64.tar my-mysql:v1.0-amd64 my-redis:v1.0-amd64 # 在 ARM64 机器上构建 docker buildx build --platform linux/arm64 -t my-mysql:v1.0-arm64 . docker save -o mysql-redis-arm64.tar my-mysql:v1.0-arm64 my-redis:v1.0-arm64 ``` ## 故障排查 ### 容器无法启动 ```bash # 查看详细日志 docker compose logs mysql docker compose logs redis # 检查端口占用 lsof -i:3306 lsof -i:6379 # 检查权限 ls -la data/mysql ls -la data/redis ``` ### MySQL 连接失败 ```bash # 检查容器状态 docker compose ps # 测试网络连接 docker exec mysql8_deploy mysqladmin -uroot -pzskk8888 ping # 检查用户权限 docker exec -it mysql8_deploy mysql -uroot -pzskk8888 -e "SELECT user, host FROM mysql.user;" ``` ### Redis 连接失败 ```bash # 测试 Redis 连接 docker exec redis7_deploy redis-cli -a zskk8888 ping # 检查密码配置 docker exec redis7_deploy redis-cli -a zskk8888 CONFIG GET requirepass ``` ## 安全建议 1. **修改默认密码**: 部署到生产环境前,请修改 `docker-compose.yml` 中的所有密码 2. **限制访问**: 如果不需要外部访问,可以移除端口映射或使用防火墙限制 3. **定期备份**: 建议定期备份数据库和 Redis 数据 4. **更新镜像**: 定期更新到最新的稳定版本以获取安全补丁 ## 技术支持 - Docker 官方文档: https://docs.docker.com/ - MySQL 官方文档: https://dev.mysql.com/doc/ - Redis 官方文档: https://redis.io/documentation ## 版本信息 - Docker Compose: 3.8+ - MySQL: 8.0 - Redis: 7-alpine - 创建日期: 2025-10-15