162 lines
2.4 KiB
Markdown
162 lines
2.4 KiB
Markdown
# Docker 部署
|
|
|
|
Docker 是推荐的部署方式,可以快速启动服务并确保环境一致性。
|
|
|
|
## 前提条件
|
|
|
|
- Docker 20.10+
|
|
- Docker Compose 2.0+(可选)
|
|
|
|
## 构建镜像
|
|
|
|
### Web 前端
|
|
|
|
```bash
|
|
docker build -t ai-video-assistant-web ./web
|
|
```
|
|
|
|
### API 服务
|
|
|
|
```bash
|
|
docker build -t ai-video-assistant-api ./api
|
|
```
|
|
|
|
### Engine 服务
|
|
|
|
```bash
|
|
docker build -t ai-video-assistant-engine ./engine
|
|
```
|
|
|
|
## 运行容器
|
|
|
|
### 单独运行
|
|
|
|
```bash
|
|
# Web 前端
|
|
docker run -d \
|
|
--name ai-assistant-web \
|
|
-p 3000:80 \
|
|
ai-video-assistant-web
|
|
|
|
# API 服务
|
|
docker run -d \
|
|
--name ai-assistant-api \
|
|
-p 8080:8080 \
|
|
ai-video-assistant-api
|
|
|
|
# Engine 服务
|
|
docker run -d \
|
|
--name ai-assistant-engine \
|
|
-p 8000:8000 \
|
|
ai-video-assistant-engine
|
|
```
|
|
|
|
## Docker Compose
|
|
|
|
推荐使用 Docker Compose 管理多个服务:
|
|
|
|
```yaml
|
|
version: '3.8'
|
|
|
|
services:
|
|
web:
|
|
build: ./web
|
|
ports:
|
|
- "3000:80"
|
|
environment:
|
|
- VITE_API_URL=http://api:8080
|
|
depends_on:
|
|
- api
|
|
|
|
api:
|
|
build: ./api
|
|
ports:
|
|
- "8080:8080"
|
|
environment:
|
|
- DATABASE_URL=postgresql://postgres:password@db:5432/ai_assistant
|
|
depends_on:
|
|
- db
|
|
|
|
engine:
|
|
build: ./engine
|
|
ports:
|
|
- "8000:8000"
|
|
environment:
|
|
- BACKEND_URL=http://api:8080
|
|
|
|
db:
|
|
image: postgres:15
|
|
environment:
|
|
- POSTGRES_DB=ai_assistant
|
|
- POSTGRES_PASSWORD=password
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
|
|
volumes:
|
|
postgres_data:
|
|
```
|
|
|
|
### 启动服务
|
|
|
|
```bash
|
|
# 启动所有服务
|
|
docker-compose up -d
|
|
|
|
# 查看日志
|
|
docker-compose logs -f
|
|
|
|
# 停止服务
|
|
docker-compose down
|
|
```
|
|
|
|
## 镜像优化
|
|
|
|
### 多阶段构建
|
|
|
|
Web 前端 Dockerfile 示例:
|
|
|
|
```dockerfile
|
|
# 构建阶段
|
|
FROM node:18-alpine AS builder
|
|
WORKDIR /app
|
|
COPY package*.json ./
|
|
RUN npm ci
|
|
COPY . .
|
|
RUN npm run build
|
|
|
|
# 运行阶段
|
|
FROM nginx:alpine
|
|
COPY --from=builder /app/dist /usr/share/nginx/html
|
|
COPY nginx.conf /etc/nginx/nginx.conf
|
|
EXPOSE 80
|
|
CMD ["nginx", "-g", "daemon off;"]
|
|
```
|
|
|
|
## 健康检查
|
|
|
|
```yaml
|
|
services:
|
|
api:
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
```
|
|
|
|
## 常见问题
|
|
|
|
### 容器启动失败
|
|
|
|
```bash
|
|
# 查看容器日志
|
|
docker logs ai-assistant-web
|
|
|
|
# 进入容器调试
|
|
docker exec -it ai-assistant-web sh
|
|
```
|
|
|
|
### 端口冲突
|
|
|
|
修改 `docker-compose.yml` 中的端口映射,例如 `3001:80`。
|