spacsonline容器化部署

gengjunfang b43fe6e025 添加镜像文件 1 ماه پیش
images b43fe6e025 添加镜像文件 1 ماه پیش
mysql 41a8380adc 初始化容器化部署项目 1 ماه پیش
nginx 8724791ecb 初始化容器化部署项目 1 ماه پیش
php-fpm 8724791ecb 初始化容器化部署项目 1 ماه پیش
redis 8724791ecb 初始化容器化部署项目 1 ماه پیش
README.md 8724791ecb 初始化容器化部署项目 1 ماه پیش
deploy.sh 8724791ecb 初始化容器化部署项目 1 ماه پیش
docker-compose.yml 8724791ecb 初始化容器化部署项目 1 ماه پیش

README.md

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 中修改)

快速开始

方法一:使用部署脚本(推荐)

# 1. 进入项目目录
cd deploy-test

# 2. (可选)放置自定义的 MySQL 初始化脚本
# 将你的 SQL 文件命名为 mysql-init.sql 放在当前目录

# 3. 运行部署脚本
./deploy.sh

说明

  • 如果存在 mysql-init.sql 文件,脚本会自动执行该文件初始化数据库
  • 如果不存在,则跳过初始化步骤

方法二:手动部署

# 1. 进入项目目录
cd deploy-test

# 2. 启动服务
docker compose up -d

# 3. 查看服务状态
docker compose ps

# 4. 查看日志
docker compose logs -f

离线部署

准备镜像包(在有网络的机器上)

# 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  # 如果有自定义初始化脚本

目标服务器部署(无网络环境)

# 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,会自动执行数据库初始化

常用命令

服务管理

# 启动服务
docker compose up -d

# 停止服务
docker compose stop

# 重启服务
docker compose restart

# 删除服务(保留数据)
docker compose down

# 删除服务及数据卷
docker compose down -v

查看状态和日志

# 查看服务状态
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 连接

# 方法 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 连接

# 方法 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 备份

# 备份单个数据库
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 备份

# 手动触发 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

[mysqld]
max_connections = 200
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

修改 Redis 配置

编辑 redis/redis.conf 文件,修改后重启容器:

docker compose restart redis

MySQL 初始化脚本

方法 1: 使用 mysql-init.sql(推荐)

将你的初始化 SQL 文件命名为 mysql-init.sql 放在项目根目录,部署脚本会自动执行:

# 部署时自动执行
./deploy.sh

方法 2: 使用 mysql/init/ 目录

.sql 文件放入 mysql/init/ 目录,容器首次启动时会自动执行(按字母顺序)。

注意:

  • 方法 1 每次部署都会执行(适合测试环境)
  • 方法 2 只在首次启动时执行,如需重新初始化需删除数据卷:
# 删除数据卷
docker compose down -v

# 重新启动
docker compose up -d

多架构支持

如果需要在不同 CPU 架构的服务器上部署(x86_64、ARM64),需分别构建镜像:

# 在 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

故障排查

容器无法启动

# 查看详细日志
docker compose logs mysql
docker compose logs redis

# 检查端口占用
lsof -i:3306
lsof -i:6379

# 检查权限
ls -la data/mysql
ls -la data/redis

MySQL 连接失败

# 检查容器状态
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 连接失败

# 测试 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 Compose: 3.8+
  • MySQL: 8.0
  • Redis: 7-alpine
  • 创建日期: 2025-10-15