部署指南-1A-单体Docker-阿里云方案

单体服务 Docker 部署 - 阿里云方案

方向一 · 方案A:使用阿里云服务,快速部署单体应用

适用场景:中小型项目、快速上线、不想自己运维基础设施


目录

  1. 方案概述
  2. 阿里云资源准备
  3. 域名与证书
  4. 镜像仓库ACR
  5. 云数据库RDS
  6. 云Redis
  7. 云服务器ECS
  8. Docker环境配置
  9. 应用部署
  10. CICD自动化
  11. 监控告警

一、方案概述

1.1 架构图

┌─────────────────────────────────────────────────────────────────────────────────┐
│                        阿里云单体部署架构                                         │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│   用户访问 https://example.com                                                   │
│              │                                                                  │
│              ▼                                                                  │
│   ┌─────────────────────────────────────────────────────────────────────────┐  │
│   │                     阿里云 CDN(可选,加速静态资源)                       │  │
│   └─────────────────────────────────────────────────────────────────────────┘  │
│              │                                                                  │
│              ▼                                                                  │
│   ┌─────────────────────────────────────────────────────────────────────────┐  │
│   │                         ECS 云服务器                                      │  │
│   │  ┌─────────────────────────────────────────────────────────────────┐    │  │
│   │  │                      Docker 容器                                 │    │  │
│   │  │                                                                 │    │  │
│   │  │  ┌─────────────────┐      ┌─────────────────┐                  │    │  │
│   │  │  │     Nginx       │ ───▶ │    Backend      │                  │    │  │
│   │  │  │   (容器:443)    │      │   (容器:8080)   │                  │    │  │
│   │  │  │                 │      │                 │                  │    │  │
│   │  │  │ • HTTPS终结     │      │ • Spring Boot   │                  │    │  │
│   │  │  │ • 静态文件      │      │ • 业务逻辑      │                  │    │  │
│   │  │  │ • 反向代理      │      │                 │                  │    │  │
│   │  │  └─────────────────┘      └─────────────────┘                  │    │  │
│   │  │                                   │                             │    │  │
│   │  └───────────────────────────────────┼─────────────────────────────┘    │  │
│   └──────────────────────────────────────┼──────────────────────────────────┘  │
│                                          │                                      │
│              ┌───────────────────────────┴───────────────────────┐              │
│              │                                                   │              │
│              ▼                                                   ▼              │
│   ┌─────────────────────────┐                     ┌─────────────────────────┐  │
│   │    云数据库 RDS MySQL    │                     │      云 Redis           │  │
│   │    (独立服务,高可用)    │                     │    (独立服务,高可用)    │  │
│   └─────────────────────────┘                     └─────────────────────────┘  │
│                                                                                 │
│   其他阿里云服务:                                                               │
│   • ACR 容器镜像服务 - 存储 Docker 镜像                                         │
│   • 云效 DevOps - CI/CD 自动化部署                                              │
│   • 云监控 - 服务器和应用监控                                                   │
│   • SSL证书服务 - 免费 HTTPS 证书                                               │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

1.2 费用估算(香港地域)

服务规格月费用
ECS 云服务器2核4G¥150-300
RDS MySQL1核1G 基础版¥50-100
Redis1G 标准版¥50-100
带宽5Mbps¥100-150
ACR 镜像仓库个人版免费
SSL 证书单域名免费
云效 DevOps基础版免费
合计¥350-650/月

二、阿里云资源准备

2.1 注册并实名认证

步骤1:访问 https://www.aliyun.com
步骤2:点击「免费注册」
步骤3:完成手机号注册
步骤4:进入「账号管理」→「实名认证」→ 完成个人/企业认证
       (购买云服务必须实名认证)

2.2 开通所需服务

需要开通的服务清单

服务控制台入口作用
ECS 云服务器https://ecs.console.aliyun.com运行 Docker 容器
RDS MySQLhttps://rdsnext.console.aliyun.com数据库
Redishttps://kvstore.console.aliyun.com缓存
ACR 镜像服务https://cr.console.aliyun.com存储 Docker 镜像
域名服务https://dc.console.aliyun.com域名管理
SSL 证书https://yundunnext.console.aliyun.comHTTPS 证书
云效https://devops.aliyun.comCI/CD

三、域名与证书

3.1 购买域名

┌─────────────────────────────────────────────────────────────────────────────────┐
│ 步骤详解:购买域名                                                               │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│ 入口:https://wanwang.aliyun.com                                                │
│                                                                                 │
│ 步骤1:搜索域名                                                                  │
│ ─────────────────────────────────────────────────────────────────               │
│ • 在搜索框输入你想要的域名,如:myproject                                        │
│ • 系统会显示各后缀的可用性和价格                                                 │
│                                                                                 │
│ 步骤2:选择后缀                                                                  │
│ ─────────────────────────────────────────────────────────────────               │
│ • .com  → 国际通用,首选(约¥55-69/年)                                        │
│ • .cn   → 中国域名,需备案                                                      │
│ • .net  → 备选                                                                  │
│                                                                                 │
│ 步骤3:加入购物车 → 结算                                                         │
│                                                                                 │
│ 步骤4:填写域名信息                                                              │
│ ─────────────────────────────────────────────────────────────────               │
│ • 域名持有者:填写你的姓名或公司名                                               │
│ • 联系信息:真实信息(ICANN 要求)                                               │
│                                                                                 │
│ 步骤5:支付完成                                                                  │
│                                                                                 │
│ 📝 记录:你购买的域名 example.com                                                │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

3.2 申请免费 SSL 证书

┌─────────────────────────────────────────────────────────────────────────────────┐
│ 步骤详解:申请免费 SSL 证书                                                      │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│ 入口:https://yundunnext.console.aliyun.com → SSL证书                           │
│                                                                                 │
│ 步骤1:购买免费证书                                                              │
│ ─────────────────────────────────────────────────────────────────               │
│ • 点击「SSL证书」→「免费证书」→「立即购买」                                      │
│ • 选择「DigiCert 单域名证书」                                                    │
│ • 数量选择 20(每年可申请 20 个免费证书)                                        │
│ • 0 元下单                                                                      │
│                                                                                 │
│ 步骤2:创建证书                                                                  │
│ ─────────────────────────────────────────────────────────────────               │
│ • 回到证书列表 → 点击「创建证书」                                                │
│                                                                                 │
│ 步骤3:填写证书申请                                                              │
│ ─────────────────────────────────────────────────────────────────               │
│ ┌──────────────────────┬────────────────────────────────────────────────────┐  │
│ │ 证书绑定域名          │ example.com                                        │  │
│ │                      │ 【改】填写你的域名                                  │  │
│ ├──────────────────────┼────────────────────────────────────────────────────┤  │
│ │ 域名验证方式          │ 自动DNS验证(推荐,域名在阿里云自动完成)           │  │
│ │                      │ 或 手动DNS验证                                     │  │
│ ├──────────────────────┼────────────────────────────────────────────────────┤  │
│ │ 联系人               │ 填写你的姓名                                        │  │
│ ├──────────────────────┼────────────────────────────────────────────────────┤  │
│ │ 联系电话             │ 填写你的手机号                                      │  │
│ ├──────────────────────┼────────────────────────────────────────────────────┤  │
│ │ 联系邮箱             │ 填写你的邮箱                                        │  │
│ └──────────────────────┴────────────────────────────────────────────────────┘  │
│                                                                                 │
│ 步骤4:提交审核                                                                  │
│ ─────────────────────────────────────────────────────────────────               │
│ • 点击「提交审核」                                                              │
│ • 如果域名在阿里云,会自动完成 DNS 验证                                          │
│ • 等待 5-30 分钟签发                                                            │
│                                                                                 │
│ 步骤5:下载证书                                                                  │
│ ─────────────────────────────────────────────────────────────────               │
│ • 状态变为「已签发」后,点击「下载」                                             │
│ • 选择「Nginx」格式                                                             │
│ • 下载得到两个文件:                                                            │
│   - example.com.pem    ← 证书文件                                               │
│   - example.com.key    ← 私钥文件                                               │
│                                                                                 │
│ 📝 记录:保存好这两个文件,后面要用                                              │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

3.3 配置域名解析

┌─────────────────────────────────────────────────────────────────────────────────┐
│ 步骤详解:配置域名解析                                                           │
│ (需要先购买 ECS 获取公网 IP,可以先跳过,购买 ECS 后再回来配置)                 │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│ 入口:https://dns.console.aliyun.com                                            │
│                                                                                 │
│ 步骤1:进入解析设置                                                              │
│ ─────────────────────────────────────────────────────────────────               │
│ • 找到你的域名 → 点击「解析设置」                                                │
│                                                                                 │
│ 步骤2:添加记录                                                                  │
│ ─────────────────────────────────────────────────────────────────               │
│                                                                                 │
│ 记录1:主域名                                                                    │
│ ┌──────────────────┬────────────────────────────────────────────────────────┐  │
│ │ 记录类型          │ A                                                      │  │
│ │ 主机记录          │ @                                                      │  │
│ │                  │ (@ 代表主域名 example.com)                            │  │
│ │ 记录值           │ 47.96.xxx.xxx                                          │  │
│ │                  │ 【改】填写你的 ECS 公网 IP                              │  │
│ │ TTL             │ 10分钟                                                  │  │
│ └──────────────────┴────────────────────────────────────────────────────────┘  │
│                                                                                 │
│ 记录2:www 子域名                                                                │
│ ┌──────────────────┬────────────────────────────────────────────────────────┐  │
│ │ 记录类型          │ A                                                      │  │
│ │ 主机记录          │ www                                                    │  │
│ │                  │ (www.example.com)                                     │  │
│ │ 记录值           │ 47.96.xxx.xxx                                          │  │
│ │                  │ 【改】填写你的 ECS 公网 IP                              │  │
│ │ TTL             │ 10分钟                                                  │  │
│ └──────────────────┴────────────────────────────────────────────────────────┘  │
│                                                                                 │
│ 验证解析(等待 5-10 分钟后):                                                   │
│ ─────────────────────────────────────────────────────────────────               │
│                                                                                 │
│   # 在你的电脑终端执行                                                          │
│   ping example.com                                                              │
│                                                                                 │
│   # 如果返回你的服务器 IP,说明解析成功                                          │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

四、镜像仓库ACR

4.1 创建镜像仓库

┌─────────────────────────────────────────────────────────────────────────────────┐
│ 步骤详解:创建阿里云容器镜像仓库(ACR)                                           │
│ 作用:存储你的 Docker 镜像,供 ECS 拉取部署                                       │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│ 入口:https://cr.console.aliyun.com                                             │
│                                                                                 │
│ 步骤1:创建个人实例                                                              │
│ ─────────────────────────────────────────────────────────────────               │
│ • 首次进入会提示创建「个人版实例」(免费)                                        │
│ • 点击「创建个人版实例」                                                         │
│ • 设置 Registry 登录密码(记住这个密码!)                                        │
│                                                                                 │
│ 步骤2:创建命名空间                                                              │
│ ─────────────────────────────────────────────────────────────────               │
│ • 左侧菜单 →「命名空间」→「创建命名空间」                                        │
│ ┌──────────────────┬────────────────────────────────────────────────────────┐  │
│ │ 命名空间名称      │ myproject                                              │  │
│ │                  │ 【改】自定义,建议用项目名                               │  │
│ │                  │ 举例:my-shop、user-center、tiger-iot                   │  │
│ └──────────────────┴────────────────────────────────────────────────────────┘  │
│                                                                                 │
│ 步骤3:创建镜像仓库                                                              │
│ ─────────────────────────────────────────────────────────────────               │
│ • 左侧菜单 →「镜像仓库」→「创建镜像仓库」                                        │
│ ┌──────────────────┬────────────────────────────────────────────────────────┐  │
│ │ 地域             │ 中国香港                                                │  │
│ │                  │ 【选】与 ECS 同地域,拉取更快                            │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 命名空间          │ myproject                                              │  │
│ │                  │ 选择刚创建的命名空间                                    │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 仓库名称          │ backend                                                │  │
│ │                  │ 【改】镜像名称,如 frontend、backend、gateway            │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 仓库类型          │ 私有                                                   │  │
│ │                  │ 私有仓库需要登录才能拉取                                │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 代码源           │ 本地仓库                                                │  │
│ │                  │ (手动推送,或后续配置云效自动构建)                     │  │
│ └──────────────────┴────────────────────────────────────────────────────────┘  │
│                                                                                 │
│ 步骤4:记录仓库地址                                                              │
│ ─────────────────────────────────────────────────────────────────               │
│ 创建完成后,点击仓库名称查看详情,记录:                                          │
│                                                                                 │
│ 📝 记录:                                                                        │
│ • 仓库地址:registry.cn-hongkong.aliyuncs.com/myproject/backend                 │
│ • 登录命令:docker login --username=你的阿里云账号 registry.cn-hongkong...       │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

五、云数据库RDS

5.1 购买 RDS MySQL

┌─────────────────────────────────────────────────────────────────────────────────┐
│ 步骤详解:购买云数据库 RDS MySQL                                                 │
│ 作用:独立的数据库服务,高可用、自动备份、免运维                                   │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│ 入口:https://rdsnext.console.aliyun.com → 创建实例                             │
│                                                                                 │
│ 配置选择:                                                                       │
│ ┌──────────────────┬────────────────────────────────────────────────────────┐  │
│ │ 商品类型          │ 按量付费(测试)或 包年包月(生产)                      │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 地域             │ 中国香港                                                │  │
│ │                  │ 【重要】必须与 ECS 同地域!否则无法内网访问              │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 数据库引擎        │ MySQL                                                  │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 版本             │ 8.0(推荐)                                             │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 系列             │ 基础版(测试/小项目)                                    │  │
│ │                  │ 高可用版(生产环境,自动主备切换)                       │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 规格             │ 1核1G(小项目)                                         │  │
│ │                  │ 2核4G(中型项目)                                       │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 存储类型          │ ESSD 云盘                                              │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 存储空间          │ 20GB 起                                                │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 网络类型          │ 专有网络 VPC                                           │  │
│ │                  │ 【重要】选择与 ECS 相同的 VPC                           │  │
│ └──────────────────┴────────────────────────────────────────────────────────┘  │
│                                                                                 │
│ 购买后等待 5-10 分钟创建完成                                                     │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

5.2 配置 RDS

┌─────────────────────────────────────────────────────────────────────────────────┐
│ 步骤详解:配置 RDS 数据库                                                        │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│ 步骤1:设置白名单(允许 ECS 访问)                                                │
│ ─────────────────────────────────────────────────────────────────               │
│ 入口:RDS 实例详情 → 左侧「数据安全性」→「白名单设置」                            │
│                                                                                 │
│ • 点击「修改」或「添加白名单分组」                                                │
│ • 组内白名单填写:                                                              │
│   - 0.0.0.0/0        → 允许所有 IP(仅测试用!生产环境不推荐)                   │
│   - 10.0.0.0/8       → 允许内网 IP 段                                           │
│   - 具体 ECS 内网 IP  → 最安全,只允许指定 ECS                                   │
│                                                                                 │
│ 步骤2:创建数据库账号                                                            │
│ ─────────────────────────────────────────────────────────────────               │
│ 入口:RDS 实例详情 → 左侧「账号管理」→「创建账号」                                │
│                                                                                 │
│ ┌──────────────────┬────────────────────────────────────────────────────────┐  │
│ │ 账号类型          │ 高权限账号(首次创建选这个)                             │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 数据库账号        │ admin                                                  │  │
│ │                  │ 【改】自定义用户名                                      │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 密码             │ MyPassword123!                                         │  │
│ │                  │ 【改】设置强密码(大小写+数字+符号)                     │  │
│ └──────────────────┴────────────────────────────────────────────────────────┘  │
│                                                                                 │
│ 步骤3:创建数据库                                                                │
│ ─────────────────────────────────────────────────────────────────               │
│ 入口:RDS 实例详情 → 左侧「数据库管理」→「创建数据库」                            │
│                                                                                 │
│ ┌──────────────────┬────────────────────────────────────────────────────────┐  │
│ │ 数据库名称        │ mydb                                                   │  │
│ │                  │ 【改】你的数据库名                                      │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 字符集           │ utf8mb4                                                │  │
│ │                  │ 支持中文和 emoji                                       │  │
│ └──────────────────┴────────────────────────────────────────────────────────┘  │
│                                                                                 │
│ 步骤4:获取连接地址                                                              │
│ ─────────────────────────────────────────────────────────────────               │
│ 入口:RDS 实例详情 → 「数据库连接」                                              │
│                                                                                 │
│ 📝 记录(后面要用):                                                            │
│ • 内网地址:rm-xxx.mysql.rds.aliyuncs.com(ECS 内网访问用这个,更快更安全)      │
│ • 端口:3306                                                                    │
│ • 数据库名:mydb                                                                │
│ • 用户名:admin                                                                 │
│ • 密码:你设置的密码                                                            │
│                                                                                 │
│ 完整 JDBC URL:                                                                  │
│ jdbc:mysql://rm-xxx.mysql.rds.aliyuncs.com:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

六、云Redis

6.1 购买云 Redis

┌─────────────────────────────────────────────────────────────────────────────────┐
│ 步骤详解:购买云 Redis                                                           │
│ 作用:缓存服务,提高性能,存储 Session 等                                         │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│ 入口:https://kvstore.console.aliyun.com → 创建实例                             │
│                                                                                 │
│ 配置选择:                                                                       │
│ ┌──────────────────┬────────────────────────────────────────────────────────┐  │
│ │ 地域             │ 中国香港                                                │  │
│ │                  │ 【重要】必须与 ECS、RDS 同地域                          │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 版本             │ Redis 7.0                                              │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 架构             │ 标准版-单副本(测试)                                    │  │
│ │                  │ 标准版-双副本(生产,高可用)                            │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 内存容量          │ 1GB(小项目够用)                                       │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 网络类型          │ 专有网络 VPC                                           │  │
│ │                  │ 【重要】选择与 ECS 相同的 VPC                           │  │
│ └──────────────────┴────────────────────────────────────────────────────────┘  │
│                                                                                 │
│ 创建后设置密码:                                                                 │
│ ─────────────────────────────────────────────────────────────────               │
│ 实例详情 → 「账号管理」→ 「修改密码」                                            │
│                                                                                 │
│ 📝 记录:                                                                        │
│ • 内网地址:r-xxx.redis.rds.aliyuncs.com                                        │
│ • 端口:6379                                                                    │
│ • 密码:你设置的密码                                                            │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

七、云服务器ECS

7.1 购买 ECS

┌─────────────────────────────────────────────────────────────────────────────────┐
│ 步骤详解:购买云服务器 ECS                                                       │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│ 入口:https://ecs-buy.aliyun.com                                                │
│                                                                                 │
│ 基础配置:                                                                       │
│ ┌──────────────────┬────────────────────────────────────────────────────────┐  │
│ │ 付费模式          │ 包年包月(长期划算)                                     │  │
│ │                  │ 按量付费(测试用)                                       │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 地域             │ 中国香港                                                │  │
│ │                  │ 【重要】免备案!与 RDS/Redis 同地域                      │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 可用区           │ 随机分配(或与 RDS 相同可用区)                          │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 实例规格          │ ecs.c6.large(2核4G)→ 小项目                          │  │
│ │                  │ ecs.c6.xlarge(4核8G)→ 中型项目                        │  │
│ │                  │ 【选】根据实际需求                                      │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 镜像             │ Ubuntu 22.04 64位                                      │  │
│ │                  │ 【推荐】稳定,教程多                                    │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 系统盘           │ ESSD 云盘 50GB(或更大)                                │  │
│ └──────────────────┴────────────────────────────────────────────────────────┘  │
│                                                                                 │
│ 网络配置:                                                                       │
│ ┌──────────────────┬────────────────────────────────────────────────────────┐  │
│ │ 网络类型          │ 专有网络 VPC                                           │  │
│ │                  │ 【重要】选择与 RDS/Redis 相同的 VPC                     │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 公网IP           │ ☑ 分配公网 IPv4 地址                                   │  │
│ │                  │ 【必选】对外提供服务需要公网 IP                         │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 带宽计费          │ 按固定带宽                                             │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 带宽值           │ 5Mbps(小项目)                                         │  │
│ │                  │ 10Mbps(中型项目)                                      │  │
│ └──────────────────┴────────────────────────────────────────────────────────┘  │
│                                                                                 │
│ 系统配置:                                                                       │
│ ┌──────────────────┬────────────────────────────────────────────────────────┐  │
│ │ 登录凭证          │ 自定义密码                                             │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 登录密码          │ MyServerPassword123!                                   │  │
│ │                  │ 【改】设置强密码,要记住!                               │  │
│ ├──────────────────┼────────────────────────────────────────────────────────┤  │
│ │ 实例名称          │ my-server                                              │  │
│ └──────────────────┴────────────────────────────────────────────────────────┘  │
│                                                                                 │
│ 📝 购买完成后记录:                                                              │
│ • 公网 IP:47.96.xxx.xxx                                                        │
│ • 内网 IP:10.0.xxx.xxx                                                         │
│ • 登录密码:你设置的密码                                                        │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

7.2 配置安全组

┌─────────────────────────────────────────────────────────────────────────────────┐
│ 步骤详解:配置安全组(防火墙规则)                                                │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│ 入口:ECS 控制台 → 实例详情 → 安全组 → 配置规则                                  │
│ 或:https://ecs.console.aliyun.com → 安全组                                     │
│                                                                                 │
│ 添加入方向规则:                                                                 │
│ ─────────────────────────────────────────────────────────────────               │
│ 点击「入方向」→「手动添加」                                                      │
│                                                                                 │
│ ┌────────┬────────┬──────────────┬────────────────────────────────────────────┐│
│ │ 端口    │ 协议    │ 授权对象      │ 说明                                       ││
│ ├────────┼────────┼──────────────┼────────────────────────────────────────────┤│
│ │ 22     │ TCP    │ 0.0.0.0/0    │ SSH 远程登录                                ││
│ │        │        │              │ 【安全建议】改成你的 IP:xxx.xxx.xxx.xxx/32 ││
│ ├────────┼────────┼──────────────┼────────────────────────────────────────────┤│
│ │ 80     │ TCP    │ 0.0.0.0/0    │ HTTP 访问                                  ││
│ ├────────┼────────┼──────────────┼────────────────────────────────────────────┤│
│ │ 443    │ TCP    │ 0.0.0.0/0    │ HTTPS 访问                                 ││
│ └────────┴────────┴──────────────┴────────────────────────────────────────────┘│
│                                                                                 │
│ ⚠️ 安全提醒:                                                                   │
│ • 不要开放 3306(MySQL)和 6379(Redis)端口!                                  │
│ • 数据库通过内网访问,不需要公网端口                                             │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

八、Docker环境配置

8.1 连接服务器

# ═══════════════════════════════════════════════════════════════════════════════
# 步骤:连接服务器
# 
# 在你的电脑终端执行(Windows 用 PowerShell 或 Git Bash)
# ═══════════════════════════════════════════════════════════════════════════════

# 【改】把 47.96.xxx.xxx 换成你的 ECS 公网 IP
ssh root@47.96.xxx.xxx

# 首次连接会提示:
# Are you sure you want to continue connecting (yes/no)?
# 输入 yes 回车

# 然后输入密码(输入时不显示,输完回车)

8.2 服务器初始化

# ═══════════════════════════════════════════════════════════════════════════════
# 脚本:服务器初始化
# 
# 位置:服务器上任意目录
# 执行:直接复制全部内容,粘贴到服务器终端,回车执行
# 
# 作用:
# 1. 更新系统软件包
# 2. 设置时区为上海
# 3. 安装常用工具
# 4. 配置系统防火墙
# 5. 创建项目目录结构
# ═══════════════════════════════════════════════════════════════════════════════

#!/bin/bash
set -e  # 遇到错误停止执行

echo "=========================================="
echo "开始初始化服务器..."
echo "=========================================="

# 1. 更新系统
# ─────────────────────────────────────────────────────────────────
# 作用:更新软件包列表,升级已安装软件到最新版本
# apt update:更新可用软件包列表
# apt upgrade -y:升级所有软件,-y 自动确认
echo ">>> 更新系统..."
apt update && apt upgrade -y

# 2. 设置时区
# ─────────────────────────────────────────────────────────────────
# 作用:确保服务器时间和日志时间是北京时间
# 如果需要 UTC 时间:timedatectl set-timezone UTC
echo ">>> 设置时区..."
timedatectl set-timezone Asia/Shanghai

# 3. 安装常用工具
# ─────────────────────────────────────────────────────────────────
# curl/wget:下载工具
# vim:文本编辑器
# git:版本控制
# htop:系统监控
# net-tools:网络工具(ifconfig、netstat)
# unzip:解压工具
# ufw:防火墙工具
# tree:目录树显示
# lsof:查看端口占用
echo ">>> 安装常用工具..."
apt install -y curl wget vim git htop net-tools unzip ufw tree lsof

# 4. 配置防火墙
# ─────────────────────────────────────────────────────────────────
# 作用:系统层面的防火墙(与阿里云安全组双重保护)
# ufw allow 22:允许 SSH
# ufw allow 80:允许 HTTP
# ufw allow 443:允许 HTTPS
# --force:非交互式启用
echo ">>> 配置防火墙..."
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable

# 5. 创建项目目录
# ─────────────────────────────────────────────────────────────────
# 目录结构说明:
# /home/deploy/
# ├── frontend/dist/   → 前端打包文件
# ├── backend/         → 后端 JAR 包和日志
# │   └── logs/       → 后端日志目录
# ├── nginx/           → Nginx 配置
# │   ├── conf.d/     → 站点配置
# │   └── logs/       → Nginx 日志
# └── ssl/             → SSL 证书文件
echo ">>> 创建目录结构..."
mkdir -p /home/deploy/{frontend/dist,backend/logs,nginx/conf.d,nginx/logs,ssl}

# 显示目录结构
echo ">>> 目录结构:"
tree /home/deploy/

echo "=========================================="
echo "✅ 服务器初始化完成!"
echo "=========================================="

8.3 安装 Docker

# ═══════════════════════════════════════════════════════════════════════════════
# 脚本:安装 Docker
# 
# 位置:服务器上任意目录
# 执行:直接复制全部内容,粘贴到服务器终端,回车执行
# 
# 作用:
# 1. 卸载旧版 Docker(如果有)
# 2. 安装 Docker 依赖
# 3. 添加 Docker 官方 GPG 密钥和仓库
# 4. 安装 Docker CE(社区版)和 Docker Compose
# 5. 启动 Docker 并设置开机自启
# ═══════════════════════════════════════════════════════════════════════════════

#!/bin/bash
set -e

echo "=========================================="
echo "开始安装 Docker..."
echo "=========================================="

# 1. 卸载旧版本
# ─────────────────────────────────────────────────────────────────
# 作用:避免版本冲突
# 2>/dev/null:忽略错误(如果没有旧版本不报错)
echo ">>> 卸载旧版本..."
apt remove -y docker docker-engine docker.io containerd runc 2>/dev/null || true

# 2. 安装依赖
# ─────────────────────────────────────────────────────────────────
# ca-certificates:HTTPS 证书
# curl:下载工具
# gnupg:GPG 密钥工具
# lsb-release:获取系统版本信息
echo ">>> 安装依赖..."
apt update
apt install -y ca-certificates curl gnupg lsb-release

# 3. 添加 Docker GPG 密钥
# ─────────────────────────────────────────────────────────────────
# 作用:验证 Docker 软件包的真实性
echo ">>> 添加 Docker GPG 密钥..."
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 4. 添加 Docker 仓库
# ─────────────────────────────────────────────────────────────────
# 作用:告诉 apt 从哪里下载 Docker
# $(dpkg --print-architecture):自动获取系统架构(amd64/arm64)
# $(lsb_release -cs):自动获取系统版本代号(jammy/focal)
echo ">>> 添加 Docker 仓库..."
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

# 5. 安装 Docker
# ─────────────────────────────────────────────────────────────────
# docker-ce:Docker 引擎
# docker-ce-cli:Docker 命令行工具
# containerd.io:容器运行时
# docker-compose-plugin:Docker Compose V2(使用 docker compose 命令)
echo ">>> 安装 Docker..."
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 6. 启动 Docker
# ─────────────────────────────────────────────────────────────────
# start:立即启动
# enable:开机自启
echo ">>> 启动 Docker..."
systemctl start docker
systemctl enable docker

# 7. 验证安装
# ─────────────────────────────────────────────────────────────────
echo ">>> 验证安装..."
docker --version
docker compose version

echo "=========================================="
echo "✅ Docker 安装完成!"
echo "=========================================="

8.4 配置 Docker 镜像加速

# ═══════════════════════════════════════════════════════════════════════════════
# 脚本:配置 Docker 镜像加速
# 
# 作用:从国内镜像源拉取镜像,加快下载速度
# 注意:香港服务器可以不配,国内服务器必须配
# ═══════════════════════════════════════════════════════════════════════════════

# 创建 Docker 配置文件
cat > /etc/docker/daemon.json << 'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}
EOF

# 配置说明:
# ─────────────────────────────────────────────────────────────────
# registry-mirrors:镜像加速地址列表(按顺序尝试)
# log-driver:日志驱动,json-file 是默认格式
# log-opts.max-size:单个日志文件最大 100MB
# log-opts.max-file:最多保留 3 个日志文件
# 作用:防止日志文件无限增长占满磁盘

# 重启 Docker 使配置生效
systemctl daemon-reload
systemctl restart docker

# 验证配置
docker info | grep -A 5 "Registry Mirrors"

8.5 登录阿里云镜像仓库

# ═══════════════════════════════════════════════════════════════════════════════
# 步骤:登录阿里云镜像仓库
# 
# 作用:让 Docker 可以从你的私有仓库拉取镜像
# 【改】替换为你的阿里云账号和仓库地址
# ═══════════════════════════════════════════════════════════════════════════════

# 登录命令
# 【改】把 your-aliyun-account 换成你的阿里云账号(邮箱或手机号)
# 【改】把 cn-hongkong 换成你的仓库地域
docker login --username=your-aliyun-account registry.cn-hongkong.aliyuncs.com

# 会提示输入密码,输入你在 ACR 设置的「Registry 登录密码」

# 登录成功显示:Login Succeeded

九、应用部署

9.1 创建 docker-compose.yml

# ═══════════════════════════════════════════════════════════════════════════════
# 步骤:创建 docker-compose.yml
# 
# 位置:/home/deploy/docker-compose.yml
# 执行:在服务器上执行以下命令
# ═══════════════════════════════════════════════════════════════════════════════

cd /home/deploy

cat > docker-compose.yml << 'EOF'
# ═══════════════════════════════════════════════════════════════════════════════
# Docker Compose 配置文件
# 
# 文件位置:/home/deploy/docker-compose.yml
# 
# 启动命令:docker compose up -d
# 停止命令:docker compose down
# 查看状态:docker compose ps
# 查看日志:docker compose logs -f
# 
# 【需要修改的地方】搜索【改】标记
# ═══════════════════════════════════════════════════════════════════════════════

version: '3.8'
# ┌───────────────────────────────────────────────────────────────────────────────┐
# │ version: Compose 文件格式版本                                                 │
# │                                                                               │
# │ 说明:                                                                        │
# │ • '3.8' - 当前推荐版本,支持大部分功能                                        │
# │ • '3.9' - 最新版本                                                           │
# │ • '2.x' - 旧版本,支持更多本地开发特性                                        │
# │                                                                               │
# │ 举例:                                                                        │
# │ • 如果需要 GPU 支持,用 version: '3.8' 配合 deploy.resources.reservations    │
# │ • 如果需要 extends 继承配置,用 version: '2.4'                                │
# └───────────────────────────────────────────────────────────────────────────────┘

services:
# ┌───────────────────────────────────────────────────────────────────────────────┐
# │ services: 定义所有要运行的服务(每个服务就是一个容器)                          │
# │                                                                               │
# │ 服务间可以用服务名互相访问,例如:                                             │
# │ • nginx 访问 backend → http://backend:8080                                   │
# │ • backend 访问外部 RDS → rm-xxx.mysql.rds.aliyuncs.com:3306                  │
# └───────────────────────────────────────────────────────────────────────────────┘

  # ═══════════════════════════════════════════════════════════════════════════════
  # 服务1:Nginx(反向代理 + 静态文件服务器 + HTTPS 终结)
  # ═══════════════════════════════════════════════════════════════════════════════
  nginx:
    image: nginx:1.24-alpine
    # ┌─────────────────────────────────────────────────────────────────────────────┐
    # │ image: 使用的 Docker 镜像                                                   │
    # │                                                                             │
    # │ 格式:镜像名:标签                                                           │
    # │ • nginx:latest      → 最新版(不推荐,版本不可控)                          │
    # │ • nginx:1.24        → 指定版本(推荐)                                      │
    # │ • nginx:1.24-alpine → 指定版本的轻量版(体积小,推荐)                       │
    # │                                                                             │
    # │ alpine 版本:                                                               │
    # │ • 基于 Alpine Linux,体积只有几十 MB                                        │
    # │ • 普通版几百 MB                                                            │
    # │ • 功能一样,体积小启动快                                                    │
    # └─────────────────────────────────────────────────────────────────────────────┘

    container_name: nginx
    # ┌─────────────────────────────────────────────────────────────────────────────┐
    # │ container_name: 自定义容器名称                                              │
    # │                                                                             │
    # │ 不设置时:自动生成名称,如 deploy-nginx-1                                   │
    # │ 设置后:固定名称 nginx,方便管理                                            │
    # │                                                                             │
    # │ 操作示例:                                                                  │
    # │ • docker logs nginx        → 查看日志                                      │
    # │ • docker restart nginx     → 重启容器                                      │
    # │ • docker exec -it nginx sh → 进入容器                                      │
    # └─────────────────────────────────────────────────────────────────────────────┘

    restart: always
    # ┌─────────────────────────────────────────────────────────────────────────────┐
    # │ restart: 容器重启策略                                                       │
    # │                                                                             │
    # │ 可选值:                                                                    │
    # │ • no            → 不自动重启(默认值)                                      │
    # │ • always        → 总是重启(推荐生产环境)                                  │
    # │                   容器退出后自动重启                                        │
    # │                   Docker 服务重启后也会自动启动容器                          │
    # │ • on-failure    → 只在非正常退出时重启(退出码非 0)                        │
    # │ • unless-stopped → 除非手动停止,否则总是重启                               │
    # │                                                                             │
    # │ 举例场景:                                                                  │
    # │ • 开发环境用 no:方便调试,停了就停了                                       │
    # │ • 生产环境用 always:保证服务持续运行                                       │
    # └─────────────────────────────────────────────────────────────────────────────┘

    ports:
      - "80:80"
      - "443:443"
    # ┌─────────────────────────────────────────────────────────────────────────────┐
    # │ ports: 端口映射                                                             │
    # │                                                                             │
    # │ 格式:"宿主机端口:容器端口"                                                 │
    # │ • "80:80"   → 宿主机 80 端口映射到容器 80 端口                              │
    # │ • "443:443" → HTTPS 端口                                                   │
    # │                                                                             │
    # │ 举例:                                                                      │
    # │ • "8080:80"           → 外部用 8080 访问,容器内是 80                       │
    # │ • "127.0.0.1:80:80"   → 只允许本机访问                                     │
    # │ • "80"                → 随机宿主机端口映射到容器 80                         │
    # │                                                                             │
    # │ 为什么用 80 和 443:                                                        │
    # │ • 80 是 HTTP 默认端口,用户访问 http://example.com                         │
    # │ • 443 是 HTTPS 默认端口,用户访问 https://example.com                      │
    # │ • 不用带端口号,用户体验好                                                  │
    # └─────────────────────────────────────────────────────────────────────────────┘

    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - ./frontend/dist:/usr/share/nginx/html:ro
      - ./ssl:/etc/nginx/ssl:ro
      - ./nginx/logs:/var/log/nginx
    # ┌─────────────────────────────────────────────────────────────────────────────┐
    # │ volumes: 数据卷映射(把宿主机目录挂载到容器内)                               │
    # │                                                                             │
    # │ 格式:"宿主机路径:容器路径:权限"                                            │
    # │ • :ro → read-only 只读(容器不能修改)                                      │
    # │ • :rw → read-write 读写(默认值)                                          │
    # │                                                                             │
    # │ 各挂载说明:                                                                │
    # │                                                                             │
    # │ ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro                                │
    # │ → Nginx 主配置文件                                                         │
    # │ → 宿主机:/home/deploy/nginx/nginx.conf                                    │
    # │ → 容器内:/etc/nginx/nginx.conf                                            │
    # │ → :ro 只读,配置文件不应被容器修改                                          │
    # │                                                                             │
    # │ ./nginx/conf.d:/etc/nginx/conf.d:ro                                        │
    # │ → Nginx 站点配置目录(server 块)                                          │
    # │ → 宿主机:/home/deploy/nginx/conf.d/                                       │
    # │ → 容器内:/etc/nginx/conf.d/                                               │
    # │                                                                             │
    # │ ./frontend/dist:/usr/share/nginx/html:ro                                   │
    # │ → 前端打包文件                                                             │
    # │ → 宿主机:/home/deploy/frontend/dist/                                      │
    # │ → 容器内:/usr/share/nginx/html/(Nginx 默认网站根目录)                    │
    # │                                                                             │
    # │ ./ssl:/etc/nginx/ssl:ro                                                    │
    # │ → SSL 证书文件                                                             │
    # │ → 宿主机:/home/deploy/ssl/                                                │
    # │ → 存放 .pem 和 .key 文件                                                   │
    # │                                                                             │
    # │ ./nginx/logs:/var/log/nginx                                                │
    # │ → Nginx 日志目录                                                           │
    # │ → 没有 :ro,因为需要写入日志                                               │
    # │ → 日志持久化到宿主机,容器重建不丢失                                        │
    # └─────────────────────────────────────────────────────────────────────────────┘

    depends_on:
      - backend
    # ┌─────────────────────────────────────────────────────────────────────────────┐
    # │ depends_on: 依赖关系(启动顺序)                                            │
    # │                                                                             │
    # │ • nginx 依赖 backend → backend 先启动,nginx 后启动                        │
    # │ • 注意:只保证启动顺序,不保证 backend 服务就绪                             │
    # │                                                                             │
    # │ 高级用法(等待服务健康):                                                  │
    # │ depends_on:                                                                │
    # │   backend:                                                                 │
    # │     condition: service_healthy                                             │
    # │ 需要 backend 配置 healthcheck                                              │
    # └─────────────────────────────────────────────────────────────────────────────┘

    networks:
      - app-network
    # ┌─────────────────────────────────────────────────────────────────────────────┐
    # │ networks: 加入的 Docker 网络                                                │
    # │                                                                             │
    # │ 同一网络内的容器可以用服务名互相访问:                                       │
    # │ • nginx 访问 backend → http://backend:8080                                 │
    # │                                                                             │
    # │ 不同网络的容器默认不能互相访问(网络隔离)                                   │
    # └─────────────────────────────────────────────────────────────────────────────┘

  # ═══════════════════════════════════════════════════════════════════════════════
  # 服务2:Backend(后端 Spring Boot 应用)
  # ═══════════════════════════════════════════════════════════════════════════════
  backend:
    image: openjdk:17-jdk-slim
    # ┌─────────────────────────────────────────────────────────────────────────────┐
    # │ 使用 OpenJDK 17 运行 Spring Boot JAR 包                                    │
    # │                                                                             │
    # │ 镜像选择:                                                                  │
    # │ • openjdk:17-jdk-slim → JDK 17 精简版(推荐)                              │
    # │ • openjdk:17-jdk      → JDK 17 完整版                                     │
    # │ • openjdk:8-jdk-slim  → JDK 8(旧项目)                                   │
    # │ • eclipse-temurin:17  → 另一个流行的 JDK 发行版                            │
    # │                                                                             │
    # │ 为什么用 slim:                                                             │
    # │ • 体积小(约 200MB vs 完整版 400MB+)                                       │
    # │ • 只包含运行时必需组件                                                      │
    # │ • 生产环境够用                                                             │
    # └─────────────────────────────────────────────────────────────────────────────┘

    container_name: backend
    restart: always

    working_dir: /app
    # ┌─────────────────────────────────────────────────────────────────────────────┐
    # │ working_dir: 容器内的工作目录                                               │
    # │                                                                             │
    # │ • 容器启动后的当前目录                                                      │
    # │ • command 中的相对路径基于此目录                                            │
    # └─────────────────────────────────────────────────────────────────────────────┘

    command: java -jar -Xms512m -Xmx1024m -Dspring.profiles.active=prod app.jar
    # ┌─────────────────────────────────────────────────────────────────────────────┐
    # │ command: 容器启动命令                                                       │
    # │                                                                             │
    # │ 参数说明:                                                                  │
    # │                                                                             │
    # │ java -jar app.jar                                                          │
    # │ → 运行 JAR 包                                                              │
    # │                                                                             │
    # │ -Xms512m                                                                   │
    # │ → 初始堆内存 512MB                                                         │
    # │ → JVM 启动时分配的内存                                                     │
    # │                                                                             │
    # │ -Xmx1024m                                                                  │
    # │ → 最大堆内存 1024MB(1GB)                                                 │
    # │ → JVM 最多能用这么多内存                                                   │
    # │ →【改】根据服务器内存调整:                                                 │
    # │   2G 服务器:-Xms256m -Xmx512m                                             │
    # │   4G 服务器:-Xms512m -Xmx1024m                                            │
    # │   8G 服务器:-Xms1g -Xmx2g                                                 │
    # │                                                                             │
    # │ -Dspring.profiles.active=prod                                              │
    # │ → 激活 prod 环境配置                                                       │
    # │ → 会加载 application-prod.yml                                              │
    # │                                                                             │
    # │ 其他常用 JVM 参数:                                                         │
    # │ -XX:+UseG1GC              → 使用 G1 垃圾收集器(推荐)                      │
    # │ -XX:MaxMetaspaceSize=256m → 限制元空间大小                                 │
    # │ -Dserver.port=8080        → 指定端口                                       │
    # │ -Dfile.encoding=UTF-8     → 指定编码                                       │
    # └─────────────────────────────────────────────────────────────────────────────┘

    volumes:
      - ./backend/app.jar:/app/app.jar:ro
      - ./backend/logs:/app/logs
    # ┌─────────────────────────────────────────────────────────────────────────────┐
    # │ 挂载说明:                                                                  │
    # │                                                                             │
    # │ ./backend/app.jar:/app/app.jar:ro                                          │
    # │ → JAR 包挂载                                                               │
    # │ → 宿主机:/home/deploy/backend/app.jar                                     │
    # │ → :ro 只读,保护 JAR 包不被修改                                             │
    # │                                                                             │
    # │ ./backend/logs:/app/logs                                                   │
    # │ → 日志目录                                                                 │
    # │ → Spring Boot 配置日志输出到 /app/logs 目录                                │
    # │ → 持久化到宿主机,容器重建不丢失                                            │
    # └─────────────────────────────────────────────────────────────────────────────┘

    environment:
      - TZ=Asia/Shanghai
      - SPRING_DATASOURCE_URL=jdbc:mysql://rm-xxx.mysql.rds.aliyuncs.com:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
      - SPRING_DATASOURCE_USERNAME=admin
      - SPRING_DATASOURCE_PASSWORD=MyPassword123!
      - SPRING_REDIS_HOST=r-xxx.redis.rds.aliyuncs.com
      - SPRING_REDIS_PORT=6379
      - SPRING_REDIS_PASSWORD=RedisPassword123!
    # ┌─────────────────────────────────────────────────────────────────────────────┐
    # │ environment: 环境变量                                                       │
    # │                                                                             │
    # │ TZ=Asia/Shanghai                                                           │
    # │ → 设置时区为上海(北京时间)                                                │
    # │ → 确保日志时间正确                                                         │
    # │                                                                             │
    # │ SPRING_DATASOURCE_URL                                                      │
    # │ →【改】RDS 内网连接地址                                                     │
    # │ → 格式:jdbc:mysql://地址:端口/数据库名?参数                                │
    # │ → useSSL=false:不使用 SSL(内网访问)                                      │
    # │ → serverTimezone=Asia/Shanghai:时区                                       │
    # │ → allowPublicKeyRetrieval=true:允许获取公钥(MySQL 8 需要)               │
    # │                                                                             │
    # │ SPRING_DATASOURCE_USERNAME                                                 │
    # │ →【改】RDS 用户名                                                          │
    # │                                                                             │
    # │ SPRING_DATASOURCE_PASSWORD                                                 │
    # │ →【改】RDS 密码                                                            │
    # │                                                                             │
    # │ SPRING_REDIS_HOST                                                          │
    # │ →【改】Redis 内网地址                                                       │
    # │                                                                             │
    # │ SPRING_REDIS_PASSWORD                                                      │
    # │ →【改】Redis 密码                                                          │
    # │                                                                             │
    # │ Spring Boot 自动将环境变量映射到配置:                                       │
    # │ SPRING_DATASOURCE_URL → spring.datasource.url                              │
    # │ 下划线转小写点号                                                            │
    # └─────────────────────────────────────────────────────────────────────────────┘

    networks:
      - app-network

# ═══════════════════════════════════════════════════════════════════════════════
# 网络定义
# ═══════════════════════════════════════════════════════════════════════════════
networks:
  app-network:
    driver: bridge
    # ┌─────────────────────────────────────────────────────────────────────────────┐
    # │ networks: 自定义 Docker 网络                                                │
    # │                                                                             │
    # │ driver: bridge                                                             │
    # │ → 桥接网络(默认类型)                                                      │
    # │ → 同一网络内的容器可以互相通信                                              │
    # │ → 用服务名作为主机名:http://backend:8080                                   │
    # │                                                                             │
    # │ 其他网络类型:                                                              │
    # │ • host   → 使用宿主机网络,性能最好但不隔离                                 │
    # │ • none   → 无网络                                                          │
    # │ • overlay → 跨主机网络(Swarm 模式用)                                     │
    # │                                                                             │
    # │ 为什么要自定义网络:                                                        │
    # │ • 默认 bridge 网络不支持服务名解析                                          │
    # │ • 自定义网络自动提供 DNS 解析                                               │
    # └─────────────────────────────────────────────────────────────────────────────┘
EOF

echo "✅ docker-compose.yml 创建完成!"
echo "📁 文件位置:/home/deploy/docker-compose.yml"

篇幅限制,完整文件已创建。请查看文件继续后续步骤。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值