在腾讯云 CVM(云服务器)上通过 Docker 快速部署 Nginx、MySQL 和 Redis,推荐使用最新稳定版的官方镜像。
以下是完整的操作指南,包含安装前的环境准备、一键启动命令以及数据持久化配置(防止重启后数据丢失)。
1. 前置准备:登录与基础检查
首先,通过 SSH 登录到你的腾讯云 CVM,并确认 Docker 已安装。如果未安装,请执行以下命令:
# 更新软件源
sudo apt-get update -y
# 安装 Docker (以 Ubuntu/Debian 为例,CentOS 使用 yum)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 启动 Docker 服务并设置开机自启
sudo systemctl enable docker
sudo systemctl start docker
注意:在腾讯云上,建议先配置安全组(Security Group),放行
80(Nginx),3306(MySQL),6379(Redis) 端口,否则外部无法访问。
2. 创建本地目录结构
为了数据持久化(避免容器删除后数据丢失),我们需要在宿主机上创建对应的挂载目录。
# 创建统一的数据目录
mkdir -p /data/nginx/conf.d
mkdir -p /data/mysql/data
mkdir -p /data/redis/conf
mkdir -p /data/redis/data
# 赋予当前用户权限(根据你的实际用户名调整,如 root 则跳过)
# sudo chown -R $USER:$USER /data
3. 启动容器 (推荐方式:Docker Compose)
虽然可以使用 docker run 命令逐一切入,但使用 docker-compose 管理多容器更稳定且易于维护。
步骤 A:编写 docker-compose.yml
在项目目录(例如 /data/docker-stack)下创建文件:
cd /data
mkdir docker-stack
cd docker-stack
nano docker-compose.yml
将以下内容粘贴进去(已配置为拉取 latest 标签的最新稳定版):
version: '3.8'
services:
# --- Nginx ---
nginx:
image: nginx:latest
container_name: my-nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/html:/usr/share/nginx/html
- ./nginx/conf.d:/etc/nginx/conf.d
restart: always
networks:
- app-net
# --- MySQL ---
mysql:
image: mysql:latest
container_name: my-mysql
environment:
MYSQL_ROOT_PASSWORD: your_strong_password_123 # 请修改此密码
MYSQL_DATABASE: test_db
MYSQL_USER: dev_user
MYSQL_PASSWORD: dev_password_123
ports:
- "3306:3306"
volumes:
- ./mysql/data:/var/lib/mysql
restart: always
command: --default-authentication-plugin=mysql_native_password
networks:
- app-net
# --- Redis ---
redis:
image: redis:latest
container_name: my-redis
ports:
- "6379:6379"
volumes:
- ./redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./redis/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
restart: always
networks:
- app-net
networks:
app-net:
driver: bridge
关键提示:
- 密码安全:请务必将
MYSQL_ROOT_PASSWORD等替换为你自己的强密码。- Redis 配置:上面的命令使用了自定义配置文件来开启持久化。你需要手动创建一个空的
redis.conf文件放在./redis/conf/目录下,或者直接使用默认配置(去掉command和volumes中的 conf 映射即可,但那样会丢失数据)。
- 简化方案:如果你不想写复杂的 redis.conf,可以直接删除
command行,并将./redis/conf/redis.conf卷映射移除,只保留./redis/data:/data。
步骤 B:初始化目录并启动
根据你刚才编辑的配置,确保目录存在并启动:
# 创建必要的空目录供 Nginx 和 Redis 使用
mkdir -p html
touch html/index.html
mkdir -p conf.d
mkdir -p redis/conf
# 如果是简化的 Redis 配置(无自定义 conf 文件),请注释掉 docker-compose.yml 中 redis 服务的 command 和 conf 卷映射部分。
# 这里假设我们使用最简单的默认配置启动:
# 重新编辑 docker-compose.yml 中的 redis 部分如下(更简单):
# redis:
# image: redis:latest
# container_name: my-redis
# ports:
# - "6379:6379"
# volumes:
# - ./redis/data:/data
# restart: always
# command: redis-server --appendonly yes # 开启持久化
# 启动所有服务
docker-compose up -d
(注:如果你复制了上面的完整 YAML 文件,请先确保 redis/conf/redis.conf 文件存在,或者按照“简化方案”修改 YAML)
4. 验证运行状态
查看容器状态
docker-compose ps
你应该看到 my-nginx, my-mysql, my-redis 三个容器状态均为 Up。
测试连通性
- Nginx: 浏览器访问
http://<你的CVM公网IP>,应看到 Nginx 欢迎页。 - MySQL:
docker exec -it my-mysql mysql -uroot -p # 输入密码后,输入 show databases; 查看是否成功 - Redis:
docker exec -it my-redis redis-cli ping # 应返回 PONG
5. 进阶优化建议 (生产环境必读)
-
网络隔离:
上述配置将 MySQL 和 Redis 暴露到了公网端口 (3306,6379)。在生产环境中,强烈建议不要直接暴露数据库端口到公网。- 做法:在
docker-compose.yml中移除ports字段,让 Nginx 通过内部网络访问它们。 - 例外:只有当你在腾讯云控制台的“安全组”中严格限制了特定 IP 访问时,才允许开放数据库端口。
- 做法:在
-
环境变量加密:
不要直接在docker-compose.yml中明文写密码。建议使用.env文件和environment_file功能。- 创建
.env文件存放密码。 - 在 yaml 中使用
env_file: .env。
- 创建
-
日志管理:
默认情况下 Docker 日志会无限增长。建议在docker-compose.yml中为每个服务添加logging配置限制大小:logging: driver: "json-file" options: max-size: "10m" max-file: "3" -
备份策略:
定期备份/data/mysql/data和/data/redis/data目录到对象存储 (COS) 或本地其他磁盘,以防服务器故障。
通过以上步骤,你就在腾讯云 CVM 上完成了一个基于 Docker 的最新稳定版 Nginx + MySQL + Redis 开发/生产环境搭建。
轻量云Cloud