在腾讯云 CVM(云服务器)上通过 Docker 安装 Nginx、MySQL 和 Redis 的最新稳定版,最推荐的方式是使用 docker-compose 进行编排。这种方式可以一键启动所有服务,并方便管理配置和数据持久化。
以下是完整的操作步骤,假设你使用的是 Ubuntu 20.04/22.04 或 CentOS 7/8 系统(其他 Linux 发行版命令类似)。
第一步:环境准备
首先确保你的 CVM 已经安装了 Docker 和 Docker Compose。如果未安装,请执行以下命令:
# 1. 更新包索引
sudo apt-get update -y # Ubuntu/Debian
# 或者 sudo yum update -y # CentOS/RHEL
# 2. 安装 Docker (使用官方脚本最快)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 3. 安装 Docker Compose 插件 (新版 Docker 已内置 compose 命令)
sudo apt-get install docker-compose-plugin -y
# 或者验证版本
docker compose version
注意:安装完成后,建议将当前用户加入 docker 组,避免每次都要输 sudo:
sudo usermod -aG docker $USER
newgrp docker
第二步:创建项目目录与配置文件
我们在 /root/docker-stack 目录下创建一个项目文件夹,并编写 docker-compose.yml 文件。
mkdir -p /root/docker-stack/nginx/conf.d
mkdir -p /root/docker-stack/mysql/data
mkdir -p /root/docker-stack/redis/conf
cd /root/docker-stack
1. 编写 docker-compose.yml
此文件定义了三个服务的最新稳定版镜像、端口映射、环境变量及数据卷挂载。
关键说明:
- Nginx: 默认使用
latest标签(通常指向最新稳定版),并挂载自定义配置文件。- MySQL: 使用
mysql:8.0或mysql:9.0(取决于 MySQL 9.0 是否被标记为稳定,目前生产环境建议锁定8.0或9.0,此处以8.0为例,它是目前最广泛使用的稳定版)。设置 root 密码。- Redis: 使用
redis:7-alpine,轻量且稳定。开启持久化 AOF。
创建文件:
nano docker-compose.yml
粘贴以下内容(请根据你的需求修改密码和端口):
version: '3.8'
services:
nginx:
image: nginx:latest
container_name: my-nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/html:/usr/share/nginx/html
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- mysql
- redis
networks:
- app-net
mysql:
image: mysql:8.0
container_name: my-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_strong_password_123! # 请修改为强密码
MYSQL_DATABASE: test_db
MYSQL_USER: app_user
MYSQL_PASSWORD: app_password_123! # 请修改为强密码
ports:
- "3306:3306"
volumes:
- ./mysql/data:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
networks:
- app-net
redis:
image: redis:7-alpine
container_name: my-redis
restart: always
ports:
- "6379:6379"
volumes:
- ./redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- app-net
networks:
app-net:
driver: bridge
2. 补充必要的配置文件
为了让 Nginx 正常工作,我们需要一个默认的 index.html;为了让 Redis 更安全,我们创建一个简单的配置文件。
创建 Nginx 默认页面:
mkdir -p ./nginx/html
echo "<h1>Hello from Nginx on Tencent Cloud!</h1>" > ./nginx/html/index.html
创建 Redis 配置文件 (启用密码保护):
由于 docker-compose.yml 中引用了 ./redis/conf/redis.conf,我们需要手动创建它。为了安全,建议设置密码。
cat > ./redis/conf/redis.conf <<EOF
# 绑定本地监听,禁止外部直接连接(如果需要网络访问,需配合防火墙策略)
bind 0.0.0.0
# 设置密码 (请替换为你的密码)
requirepass your_redis_password_123!
# 开启持久化 (AOF)
appendonly yes
# 关闭 RDB 快照 (可选,根据需求调整)
save ""
EOF
第三步:启动服务
在项目目录下执行启动命令:
docker compose up -d
-d: 后台运行。- 首次运行会自动拉取镜像并创建容器。
第四步:验证与检查
-
查看容器状态:
docker compose ps确保所有服务的
STATUS都是Up。 -
测试 Nginx:
在浏览器访问http://<你的CVM公网IP>,应该能看到 "Hello from Nginx…"。 -
测试 MySQL:
docker exec -it my-mysql mysql -uroot -p # 输入你在 yaml 中设置的 root 密码 # 登录成功后输入 exit -
测试 Redis:
docker exec -it my-redis redis-cli -a your_redis_password_123! ping # 应返回 PONG
第五步:腾讯云 CVM 安全组配置(非常重要)
Docker 内部服务启动后,默认只监听容器网络。必须在腾讯云控制台开放相应端口,否则外部无法访问。
- 登录 腾讯云控制台。
- 进入 云服务器 (CVM) -> 找到你的实例 -> 点击 安全组。
- 编辑安全组规则,添加入方向规则:
- 协议类型: TCP
- 端口范围:
80(Nginx Web)443(HTTPS, 如需)3306(MySQL)6379(Redis)
- 授权对象:
0.0.0.0/0(允许所有 IP,生产环境建议仅限制特定 IP 段)
安全警告:在生产环境中,强烈不建议直接将 MySQL (3306) 和 Redis (6379) 端口对
0.0.0.0/0开放。
- 最佳实践:仅在 Nginx 反向X_X后端服务,或者将数据库端口限制为你自己的办公 IP 地址。
- Redis 加固:务必在
redis.conf中设置requirepass,并在安全组中限制来源 IP。
进阶建议
- 数据备份:虽然挂载了卷 (
volumes),但建议定期使用docker compose cp或脚本将./mysql/data和./redis/conf备份到腾讯云 COS 对象存储。 - 日志管理:生产环境建议配置 Docker 的日志轮转策略,防止日志占满磁盘。可以在
docker-compose.yml的服务下添加logging配置块。 - 自动重启:
restart: always已配置,即使 CVM 重启或 Docker 崩溃,服务也会自动拉起。
云知识CLOUD