|
|
há 1 mês atrás | |
|---|---|---|
| images | há 1 mês atrás | |
| mysql | há 1 mês atrás | |
| nginx | há 1 mês atrás | |
| php-fpm | há 1 mês atrás | |
| redis | há 1 mês atrás | |
| README.md | há 1 mês atrás | |
| deploy.sh | há 1 mês atrás | |
| docker-compose.yml | há 1 mês atrás |
基于 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-init.sql 脚本(如果存在)# 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/conf/ 目录下创建 .cnf 配置文件,例如 my.cnf:
[mysqld]
max_connections = 200
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
编辑 redis/redis.conf 文件,修改后重启容器:
docker compose restart redis
方法 1: 使用 mysql-init.sql(推荐)
将你的初始化 SQL 文件命名为 mysql-init.sql 放在项目根目录,部署脚本会自动执行:
# 部署时自动执行
./deploy.sh
方法 2: 使用 mysql/init/ 目录
将 .sql 文件放入 mysql/init/ 目录,容器首次启动时会自动执行(按字母顺序)。
注意:
# 删除数据卷
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
# 检查容器状态
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 连接
docker exec redis7_deploy redis-cli -a zskk8888 ping
# 检查密码配置
docker exec redis7_deploy redis-cli -a zskk8888 CONFIG GET requirepass
docker-compose.yml 中的所有密码