194 lines
5.8 KiB
Markdown
194 lines
5.8 KiB
Markdown
# 服务器部署配置
|
||
|
||
此目录包含生产环境的 Docker 部署配置,使用**外部 MySQL 和 Redis** 服务。
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
server/
|
||
├── docker-compose.yml # Docker Compose 配置
|
||
├── deploy.sh # 自动部署脚本
|
||
├── .env.example # 环境变量模板
|
||
├── .env # 实际环境变量(需手动创建)
|
||
├── nginx/ # Nginx 配置
|
||
│ ├── nginx.conf
|
||
│ └── conf.d/
|
||
│ └── default.conf
|
||
├── data/ # 数据目录(本地挂载,方便迁移)
|
||
│ ├── uploads/ # 用户上传的文件
|
||
│ └── logs/
|
||
│ ├── api/ # API 服务日志
|
||
│ └── nginx/ # Nginx 访问日志
|
||
├── admin-dist/ # Admin 打包后的静态文件(需手动放置)
|
||
└── README.md
|
||
```
|
||
|
||
## 架构说明
|
||
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ 外部代理 (SSL) │
|
||
└──────────────┬──────────────────────┘
|
||
│
|
||
▼
|
||
┌──────────────────────────────────────────────────────────────────┐
|
||
│ Docker Compose (单一端口 2701) │
|
||
│ ┌────────────────────────────────────────────────────────────┐ │
|
||
│ │ Nginx │ │
|
||
│ │ /admin/* → 静态文件 (Admin 后台) │ │
|
||
│ │ /api/* → API 服务 │ │
|
||
│ │ /uploads → API 服务 │ │
|
||
│ └────────────────────────┬───────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌────────────────────────────────────────────────────────────┐ │
|
||
│ │ API 服务 (:3000) │ │
|
||
│ └────────────────────────────────────────────────────────────┘ │
|
||
└──────────────────────────────────────────────────────────────────┘
|
||
│ │
|
||
▼ ▼
|
||
┌─────────────┐ ┌─────────────┐
|
||
│ MySQL │ │ Redis │
|
||
│ (外部服务) │ │ (外部服务) │
|
||
└─────────────┘ └─────────────┘
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
### 1. 配置环境变量
|
||
|
||
```bash
|
||
cd server
|
||
cp .env.example .env
|
||
vim .env # 编辑配置
|
||
```
|
||
|
||
### 2. 构建 Admin 前端
|
||
|
||
```bash
|
||
cd ../admin
|
||
npm install
|
||
npm run build
|
||
|
||
# 将打包产物复制到 server 目录
|
||
cp -r dist ../server/admin-dist
|
||
```
|
||
|
||
### 3. 启动服务
|
||
|
||
```bash
|
||
cd server
|
||
docker-compose up -d --build
|
||
```
|
||
|
||
### 4. 验证服务
|
||
|
||
```bash
|
||
# 检查服务状态
|
||
docker-compose ps
|
||
|
||
# 访问 Admin 后台
|
||
curl http://localhost:2701/admin
|
||
|
||
# 检查 API
|
||
curl http://localhost:2701/health
|
||
curl http://localhost:2701/api/v1/services
|
||
```
|
||
|
||
## 访问地址
|
||
|
||
| 路径 | 说明 |
|
||
|------|------|
|
||
| `/admin` | Admin 管理后台 |
|
||
| `/api/*` | 后端 API 接口 |
|
||
| `/api-docs` | API 文档 |
|
||
| `/health` | 健康检查 |
|
||
| `/uploads/*` | 上传文件 |
|
||
|
||
## 常用命令
|
||
|
||
```bash
|
||
# 启动
|
||
docker-compose up -d
|
||
|
||
# 停止
|
||
docker-compose down
|
||
|
||
# 重新构建并启动
|
||
docker-compose up -d --build
|
||
|
||
# 查看日志
|
||
docker-compose logs -f
|
||
docker-compose logs -f api
|
||
docker-compose logs -f nginx
|
||
|
||
# 重启服务
|
||
docker-compose restart api
|
||
|
||
# 进入容器
|
||
docker exec -it overseas-appointment-api sh
|
||
docker exec -it overseas-appointment-nginx sh
|
||
```
|
||
|
||
## 更新 Admin 前端
|
||
|
||
```bash
|
||
# 1. 重新构建 admin
|
||
cd ../admin
|
||
npm run build
|
||
|
||
# 2. 更新静态文件
|
||
rm -rf ../server/admin-dist
|
||
cp -r dist ../server/admin-dist
|
||
|
||
# 3. 重启 nginx
|
||
cd ../server
|
||
docker-compose restart nginx
|
||
```
|
||
|
||
## 外部代理配置示例
|
||
|
||
### Nginx (外部)
|
||
|
||
```nginx
|
||
server {
|
||
listen 443 ssl http2;
|
||
server_name your-domain.com;
|
||
|
||
ssl_certificate /path/to/fullchain.pem;
|
||
ssl_certificate_key /path/to/privkey.pem;
|
||
|
||
location / {
|
||
proxy_pass http://127.0.0.1:2701;
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
}
|
||
}
|
||
```
|
||
|
||
## 故障排查
|
||
|
||
### Admin 页面 404
|
||
|
||
确认 `admin-dist` 目录存在且包含 `index.html`:
|
||
|
||
```bash
|
||
ls -la server/admin-dist/
|
||
```
|
||
|
||
### API 连接数据库失败
|
||
|
||
```bash
|
||
# 检查数据库连通性
|
||
docker exec -it overseas-appointment-api sh
|
||
node -e "require('./src/models').sequelize.authenticate().then(() => console.log('OK')).catch(console.error)"
|
||
```
|
||
|
||
### 查看实时日志
|
||
|
||
```bash
|
||
docker-compose logs -f --tail=100
|
||
```
|