You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
232 lines
5.0 KiB
232 lines
5.0 KiB
|
4 weeks ago
|
# HTTPS 部署指南
|
||
|
|
|
||
|
|
本文档说明如何使用 Docker Compose 进行 HTTPS 部署。
|
||
|
|
|
||
|
|
## 目录结构
|
||
|
|
|
||
|
|
```
|
||
|
|
site/
|
||
|
|
├── docker-compose.yml # Docker Compose HTTP 配置文件(直接访问 3000 端口)
|
||
|
|
├── docker-compose.https.yml # Docker Compose HTTPS 配置文件(通过 Nginx 反向代理)
|
||
|
|
├── nginx/
|
||
|
|
│ └── nginx.conf # Nginx 反向代理配置
|
||
|
|
├── ssl/
|
||
|
|
│ ├── cert.pem # SSL 证书文件(需要自行添加)
|
||
|
|
│ ├── key.pem # SSL 私钥文件(需要自行添加)
|
||
|
|
│ └── README.md # SSL 证书说明
|
||
|
|
└── Dockerfile # 应用镜像构建文件
|
||
|
|
```
|
||
|
|
|
||
|
|
## 配置文件说明
|
||
|
|
|
||
|
|
- **docker-compose.yml** - HTTP 配置(默认)
|
||
|
|
- 直接暴露 3000 端口
|
||
|
|
- 适用于开发环境或不需要 HTTPS 的场景
|
||
|
|
|
||
|
|
- **docker-compose.https.yml** - HTTPS 配置
|
||
|
|
- 使用 Nginx 反向代理
|
||
|
|
- 支持 HTTP 自动重定向到 HTTPS
|
||
|
|
- 适用于生产环境
|
||
|
|
|
||
|
|
## 前置要求
|
||
|
|
|
||
|
|
1. Docker 和 Docker Compose 已安装
|
||
|
|
2. SSL 证书文件已准备好(见 `ssl/README.md`)
|
||
|
|
|
||
|
|
## 快速开始
|
||
|
|
|
||
|
|
### 1. 准备 SSL 证书
|
||
|
|
|
||
|
|
将 SSL 证书文件放置到 `ssl/` 目录:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 证书文件
|
||
|
|
ssl/cert.pem
|
||
|
|
|
||
|
|
# 私钥文件
|
||
|
|
ssl/key.pem
|
||
|
|
```
|
||
|
|
|
||
|
|
详细说明请参考 `ssl/README.md`。
|
||
|
|
|
||
|
|
### 2. 启动服务
|
||
|
|
|
||
|
|
使用 HTTPS 配置文件启动:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd site
|
||
|
|
docker-compose -f docker-compose.https.yml up -d
|
||
|
|
```
|
||
|
|
|
||
|
|
**注意**:使用 `-f` 参数指定 HTTPS 配置文件。如果不指定,默认使用 `docker-compose.yml`(HTTP 模式)。
|
||
|
|
|
||
|
|
### 3. 访问服务
|
||
|
|
|
||
|
|
- HTTP: http://localhost (自动重定向到 HTTPS)
|
||
|
|
- HTTPS: https://localhost
|
||
|
|
|
||
|
|
## 服务说明
|
||
|
|
|
||
|
|
### marketing-site
|
||
|
|
|
||
|
|
- 应用服务,运行在容器内部端口 3000
|
||
|
|
- 不直接暴露端口,通过 nginx 反向代理访问
|
||
|
|
|
||
|
|
### nginx
|
||
|
|
|
||
|
|
- 反向代理服务
|
||
|
|
- 监听端口 80 (HTTP) 和 443 (HTTPS)
|
||
|
|
- 自动将 HTTP 请求重定向到 HTTPS
|
||
|
|
- 提供 SSL/TLS 终止
|
||
|
|
|
||
|
|
## 常用命令
|
||
|
|
|
||
|
|
### 启动服务
|
||
|
|
```bash
|
||
|
|
# HTTPS 模式
|
||
|
|
docker-compose -f docker-compose.https.yml up -d
|
||
|
|
|
||
|
|
# HTTP 模式(默认)
|
||
|
|
docker-compose up -d
|
||
|
|
```
|
||
|
|
|
||
|
|
### 停止服务
|
||
|
|
```bash
|
||
|
|
# HTTPS 模式
|
||
|
|
docker-compose -f docker-compose.https.yml down
|
||
|
|
|
||
|
|
# HTTP 模式
|
||
|
|
docker-compose down
|
||
|
|
```
|
||
|
|
|
||
|
|
### 查看日志
|
||
|
|
```bash
|
||
|
|
# HTTPS 模式 - 查看所有服务日志
|
||
|
|
docker-compose -f docker-compose.https.yml logs -f
|
||
|
|
|
||
|
|
# HTTPS 模式 - 查看特定服务日志
|
||
|
|
docker-compose -f docker-compose.https.yml logs -f nginx
|
||
|
|
docker-compose -f docker-compose.https.yml logs -f marketing-site
|
||
|
|
|
||
|
|
# HTTP 模式
|
||
|
|
docker-compose logs -f
|
||
|
|
```
|
||
|
|
|
||
|
|
### 重启服务
|
||
|
|
```bash
|
||
|
|
# HTTPS 模式
|
||
|
|
docker-compose -f docker-compose.https.yml restart
|
||
|
|
|
||
|
|
# HTTP 模式
|
||
|
|
docker-compose restart
|
||
|
|
```
|
||
|
|
|
||
|
|
### 重新构建应用
|
||
|
|
```bash
|
||
|
|
# HTTPS 模式
|
||
|
|
docker-compose -f docker-compose.https.yml build marketing-site
|
||
|
|
docker-compose -f docker-compose.https.yml up -d
|
||
|
|
|
||
|
|
# HTTP 模式
|
||
|
|
docker-compose build marketing-site
|
||
|
|
docker-compose up -d
|
||
|
|
```
|
||
|
|
|
||
|
|
## 配置说明
|
||
|
|
|
||
|
|
### 修改端口
|
||
|
|
|
||
|
|
如需修改 HTTPS 端口,编辑 `docker-compose.https.yml`:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
nginx:
|
||
|
|
ports:
|
||
|
|
- "80:80"
|
||
|
|
- "8443:443" # 修改为 8443
|
||
|
|
```
|
||
|
|
|
||
|
|
### 修改域名
|
||
|
|
|
||
|
|
编辑 `nginx/nginx.conf`,将 `server_name _;` 替换为您的域名:
|
||
|
|
|
||
|
|
```nginx
|
||
|
|
server_name your-domain.com www.your-domain.com;
|
||
|
|
```
|
||
|
|
|
||
|
|
### 更新 SSL 证书
|
||
|
|
|
||
|
|
1. 将新证书文件放置到 `ssl/` 目录
|
||
|
|
2. 重启 nginx 服务:
|
||
|
|
```bash
|
||
|
|
# HTTPS 模式
|
||
|
|
docker-compose -f docker-compose.https.yml restart nginx
|
||
|
|
|
||
|
|
# HTTP 模式不需要此操作
|
||
|
|
```
|
||
|
|
|
||
|
|
## 故障排查
|
||
|
|
|
||
|
|
### 检查容器状态
|
||
|
|
```bash
|
||
|
|
# HTTPS 模式
|
||
|
|
docker-compose -f docker-compose.https.yml ps
|
||
|
|
|
||
|
|
# HTTP 模式
|
||
|
|
docker-compose ps
|
||
|
|
```
|
||
|
|
|
||
|
|
### 检查 SSL 证书
|
||
|
|
```bash
|
||
|
|
# 验证证书文件是否存在
|
||
|
|
ls -la ssl/
|
||
|
|
|
||
|
|
# 验证证书内容
|
||
|
|
openssl x509 -in ssl/cert.pem -text -noout
|
||
|
|
```
|
||
|
|
|
||
|
|
### 检查 Nginx 配置
|
||
|
|
```bash
|
||
|
|
# 进入 nginx 容器
|
||
|
|
docker exec -it nginx-https sh
|
||
|
|
|
||
|
|
# 测试配置
|
||
|
|
nginx -t
|
||
|
|
```
|
||
|
|
|
||
|
|
### 查看错误日志
|
||
|
|
```bash
|
||
|
|
# HTTPS 模式
|
||
|
|
docker-compose -f docker-compose.https.yml logs nginx
|
||
|
|
|
||
|
|
# HTTP 模式(无 nginx 服务)
|
||
|
|
docker-compose logs marketing-site
|
||
|
|
```
|
||
|
|
|
||
|
|
## 安全建议
|
||
|
|
|
||
|
|
1. ✅ 使用有效的 SSL 证书(生产环境)
|
||
|
|
2. ✅ 定期更新 SSL 证书
|
||
|
|
3. ✅ 使用强密码保护私钥文件
|
||
|
|
4. ✅ 不要将私钥文件提交到版本控制系统
|
||
|
|
5. ✅ 定期更新 Docker 镜像和依赖
|
||
|
|
|
||
|
|
## HTTP vs HTTPS 模式对比
|
||
|
|
|
||
|
|
| 特性 | HTTP 模式 | HTTPS 模式 |
|
||
|
|
|------|-----------|------------|
|
||
|
|
| 配置文件 | `docker-compose.yml` | `docker-compose.https.yml` |
|
||
|
|
| 访问端口 | 3000 | 80 (HTTP), 443 (HTTPS) |
|
||
|
|
| 访问地址 | http://localhost:3000 | http://localhost, https://localhost |
|
||
|
|
| 反向代理 | 无 | Nginx |
|
||
|
|
| SSL 证书 | 不需要 | 需要 |
|
||
|
|
| 适用场景 | 开发环境 | 生产环境 |
|
||
|
|
|
||
|
|
## 注意事项
|
||
|
|
|
||
|
|
- 首次启动 HTTPS 模式前必须准备好 SSL 证书文件
|
||
|
|
- 如果证书文件不存在,nginx 容器将无法启动
|
||
|
|
- 自签名证书仅用于开发测试,生产环境请使用有效证书
|
||
|
|
- 确保防火墙允许 80 和 443 端口访问(HTTPS 模式)
|
||
|
|
- HTTP 模式和 HTTPS 模式可以同时运行,但需要确保端口不冲突
|
||
|
|
|