修复提示框的弹出位置移动的问题
This commit is contained in:
@@ -0,0 +1,272 @@
|
||||
# Docker 部署指南
|
||||
|
||||
## 环境变量工作原理
|
||||
|
||||
### 在 Remix 项目中如何工作
|
||||
|
||||
1. **构建时环境变量**: 在 Docker 构建时,环境变量会被嵌入到构建产物中
|
||||
2. **运行时环境变量**: 通过 `dotenv` 包在应用启动时加载环境变量
|
||||
3. **客户端环境变量**: 以 `NEXT_PUBLIC_` 开头的变量可以在客户端访问
|
||||
|
||||
### API 配置文件的识别机制
|
||||
|
||||
我们的 `app/config/api-config.ts` 配置文件通过以下方式识别环境变量:
|
||||
|
||||
```typescript
|
||||
// 从环境变量获取配置,如果环境变量不存在则使用默认配置
|
||||
const getConfigFromEnv = (defaultConfig: ApiConfig): ApiConfig => {
|
||||
return {
|
||||
baseUrl: process.env.NEXT_PUBLIC_API_BASE_URL || defaultConfig.baseUrl,
|
||||
documentUrl: process.env.NEXT_PUBLIC_DOCUMENT_URL || defaultConfig.documentUrl,
|
||||
uploadUrl: process.env.NEXT_PUBLIC_UPLOAD_URL || defaultConfig.uploadUrl,
|
||||
postgrestUrl: process.env.NEXT_PUBLIC_POSTGREST_URL || defaultConfig.postgrestUrl,
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
### 文件使用配置的映射关系
|
||||
|
||||
1. **app/api/axios-client.ts** 使用:
|
||||
- `API_BASE_URL` (来自 `NEXT_PUBLIC_API_BASE_URL`)
|
||||
- `DOCUMENT_URL` (来自 `NEXT_PUBLIC_DOCUMENT_URL`)
|
||||
|
||||
2. **app/api/files/files-upload.ts** 使用:
|
||||
- `UPLOAD_URL` (来自 `NEXT_PUBLIC_UPLOAD_URL`)
|
||||
|
||||
## Docker 部署方式
|
||||
|
||||
### 方式一:直接使用 docker run 命令
|
||||
|
||||
```bash
|
||||
# 构建镜像
|
||||
docker build -t docreview-app .
|
||||
|
||||
# 运行容器,通过 -e 参数传入环境变量
|
||||
docker run -d \
|
||||
--name docreview \
|
||||
-p 3000:3000 \
|
||||
-e NODE_ENV=production \
|
||||
-e NEXT_PUBLIC_API_BASE_URL=http://your-api-server.com:3000 \
|
||||
-e NEXT_PUBLIC_DOCUMENT_URL=http://your-docs-server.com:9000/docauditai/ \
|
||||
-e NEXT_PUBLIC_UPLOAD_URL=http://your-upload-server.com:8008/admin/documents/upload \
|
||||
docreview-app
|
||||
```
|
||||
|
||||
### 方式二:使用 docker-compose
|
||||
|
||||
1. **使用内联环境变量**:
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
version: '3.8'
|
||||
services:
|
||||
docreview-app:
|
||||
build: .
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- NEXT_PUBLIC_API_BASE_URL=http://api.company.com:3000
|
||||
- NEXT_PUBLIC_DOCUMENT_URL=http://docs.company.com:9000/docauditai/
|
||||
- NEXT_PUBLIC_UPLOAD_URL=http://upload.company.com:8008/admin/documents/upload
|
||||
```
|
||||
|
||||
2. **使用环境变量文件**:
|
||||
|
||||
创建 `.env.production` 文件:
|
||||
```bash
|
||||
NODE_ENV=production
|
||||
NEXT_PUBLIC_API_BASE_URL=http://api.company.com:3000
|
||||
NEXT_PUBLIC_DOCUMENT_URL=http://docs.company.com:9000/docauditai/
|
||||
NEXT_PUBLIC_UPLOAD_URL=http://upload.company.com:8008/admin/documents/upload
|
||||
```
|
||||
|
||||
然后在 docker-compose.yml 中引用:
|
||||
```yaml
|
||||
services:
|
||||
docreview-app:
|
||||
build: .
|
||||
ports:
|
||||
- "3000:3000"
|
||||
env_file:
|
||||
- .env.production
|
||||
```
|
||||
|
||||
### 方式三:Kubernetes 部署
|
||||
|
||||
```yaml
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: docreview-app
|
||||
spec:
|
||||
replicas: 2
|
||||
selector:
|
||||
matchLabels:
|
||||
app: docreview-app
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: docreview-app
|
||||
spec:
|
||||
containers:
|
||||
- name: docreview-app
|
||||
image: docreview-app:latest
|
||||
ports:
|
||||
- containerPort: 3000
|
||||
env:
|
||||
- name: NODE_ENV
|
||||
value: "production"
|
||||
- name: NEXT_PUBLIC_API_BASE_URL
|
||||
value: "http://api.company.com:3000"
|
||||
- name: NEXT_PUBLIC_DOCUMENT_URL
|
||||
value: "http://docs.company.com:9000/docauditai/"
|
||||
- name: NEXT_PUBLIC_UPLOAD_URL
|
||||
value: "http://upload.company.com:8008/admin/documents/upload"
|
||||
```
|
||||
|
||||
## 环境变量验证
|
||||
|
||||
### 在容器内检查环境变量
|
||||
|
||||
```bash
|
||||
# 进入运行中的容器
|
||||
docker exec -it docreview /bin/sh
|
||||
|
||||
# 查看环境变量
|
||||
env | grep NEXT_PUBLIC
|
||||
|
||||
# 或者查看具体变量
|
||||
echo $NEXT_PUBLIC_API_BASE_URL
|
||||
echo $NEXT_PUBLIC_DOCUMENT_URL
|
||||
echo $NEXT_PUBLIC_UPLOAD_URL
|
||||
```
|
||||
|
||||
### 应用内验证
|
||||
|
||||
在开发模式下,配置文件会输出当前使用的配置:
|
||||
```
|
||||
📦 API配置信息: {
|
||||
environment: "production",
|
||||
config: {
|
||||
baseUrl: "http://api.company.com:3000",
|
||||
documentUrl: "http://docs.company.com:9000/docauditai/",
|
||||
uploadUrl: "http://upload.company.com:8008/admin/documents/upload"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 构建时的环境变量注入
|
||||
|
||||
### 方式一:Docker 构建时传入
|
||||
|
||||
```bash
|
||||
docker build \
|
||||
--build-arg NEXT_PUBLIC_API_BASE_URL=http://api.company.com:3000 \
|
||||
--build-arg NEXT_PUBLIC_DOCUMENT_URL=http://docs.company.com:9000/docauditai/ \
|
||||
--build-arg NEXT_PUBLIC_UPLOAD_URL=http://upload.company.com:8008/admin/documents/upload \
|
||||
-t docreview-app .
|
||||
```
|
||||
|
||||
然后在 Dockerfile 中添加:
|
||||
```dockerfile
|
||||
# 在构建阶段添加
|
||||
ARG NEXT_PUBLIC_API_BASE_URL
|
||||
ARG NEXT_PUBLIC_DOCUMENT_URL
|
||||
ARG NEXT_PUBLIC_UPLOAD_URL
|
||||
|
||||
ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL
|
||||
ENV NEXT_PUBLIC_DOCUMENT_URL=$NEXT_PUBLIC_DOCUMENT_URL
|
||||
ENV NEXT_PUBLIC_UPLOAD_URL=$NEXT_PUBLIC_UPLOAD_URL
|
||||
```
|
||||
|
||||
## 多环境配置示例
|
||||
|
||||
### 开发环境
|
||||
```bash
|
||||
# .env.development
|
||||
NODE_ENV=development
|
||||
NEXT_PUBLIC_API_BASE_URL=http://localhost:8008
|
||||
NEXT_PUBLIC_DOCUMENT_URL=http://localhost:9000/docauditai/
|
||||
NEXT_PUBLIC_UPLOAD_URL=http://localhost:8008/admin/documents/upload
|
||||
```
|
||||
|
||||
### 测试环境
|
||||
```bash
|
||||
# .env.testing
|
||||
NODE_ENV=testing
|
||||
NEXT_PUBLIC_API_BASE_URL=http://test-api.company.com:3000
|
||||
NEXT_PUBLIC_DOCUMENT_URL=http://test-docs.company.com:9000/docauditai/
|
||||
NEXT_PUBLIC_UPLOAD_URL=http://test-upload.company.com:8008/admin/documents/upload
|
||||
```
|
||||
|
||||
### 生产环境
|
||||
```bash
|
||||
# .env.production
|
||||
NODE_ENV=production
|
||||
NEXT_PUBLIC_API_BASE_URL=http://api.company.com:3000
|
||||
NEXT_PUBLIC_DOCUMENT_URL=http://docs.company.com:9000/docauditai/
|
||||
NEXT_PUBLIC_UPLOAD_URL=http://upload.company.com:8008/admin/documents/upload
|
||||
```
|
||||
|
||||
## 部署脚本示例
|
||||
|
||||
创建 `deploy.sh` 脚本:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# 部署脚本
|
||||
ENV=${1:-production}
|
||||
|
||||
echo "部署环境: $ENV"
|
||||
|
||||
# 构建镜像
|
||||
docker build -t docreview-app:$ENV .
|
||||
|
||||
# 停止旧容器
|
||||
docker stop docreview-$ENV 2>/dev/null || true
|
||||
docker rm docreview-$ENV 2>/dev/null || true
|
||||
|
||||
# 根据环境启动容器
|
||||
case $ENV in
|
||||
"development")
|
||||
docker run -d \
|
||||
--name docreview-$ENV \
|
||||
-p 3001:3000 \
|
||||
--env-file .env.development \
|
||||
docreview-app:$ENV
|
||||
;;
|
||||
"testing")
|
||||
docker run -d \
|
||||
--name docreview-$ENV \
|
||||
-p 3002:3000 \
|
||||
--env-file .env.testing \
|
||||
docreview-app:$ENV
|
||||
;;
|
||||
"production")
|
||||
docker run -d \
|
||||
--name docreview-$ENV \
|
||||
-p 3000:3000 \
|
||||
--env-file .env.production \
|
||||
docreview-app:$ENV
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "部署完成,容器名: docreview-$ENV"
|
||||
```
|
||||
|
||||
使用方法:
|
||||
```bash
|
||||
chmod +x deploy.sh
|
||||
./deploy.sh production # 部署生产环境
|
||||
./deploy.sh testing # 部署测试环境
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **环境变量优先级**:Docker 环境变量 > 环境变量文件 > 默认配置
|
||||
2. **客户端变量**:必须以 `NEXT_PUBLIC_` 开头才能在客户端使用
|
||||
3. **构建时注入**:客户端环境变量在构建时被注入,运行时修改不会生效
|
||||
4. **安全性**:不要在环境变量中存储敏感信息,如API密钥等
|
||||
5. **网络访问**:确保容器能够访问配置的API地址
|
||||
Reference in New Issue
Block a user