update
This commit is contained in:
21
.env
Normal file
21
.env
Normal file
@@ -0,0 +1,21 @@
|
||||
# 数据库配置
|
||||
DB_HOST=pc-3nsh5mzbet7w5l890.rwlb.rds.aliyuncs.com
|
||||
DB_PORT=3306
|
||||
DB_USER=u1admin
|
||||
DB_PASSWORD=6y6K!aFg
|
||||
DB_NAME=employee_performance
|
||||
|
||||
# JWT 配置
|
||||
JWT_SECRET=dev_jwt_secret_please_change_in_production
|
||||
|
||||
# FastGPT API 配置
|
||||
FASTGPT_API_KEY=fastgpt-oEipxYa5BfVaeGDj74iAXi8YSkWyye07lTNYuj7yydsEKAc4Hp2Z2RDbxsxc4TuZ
|
||||
FASTGPT_API_URL=https://cloud.fastgpt.cn/api/v1/chat/completions
|
||||
FASTGPT_MODEL=gpt-4
|
||||
|
||||
# 代理配置(Node.js 不自动读取系统代理,需手动配置)
|
||||
#HTTPS_PROXY=http://127.0.0.1:7890
|
||||
|
||||
# 服务器配置
|
||||
PORT=3001
|
||||
NODE_ENV=development
|
||||
42
backend/.dockerignore
Normal file
42
backend/.dockerignore
Normal file
@@ -0,0 +1,42 @@
|
||||
# 依赖目录
|
||||
node_modules
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# 构建输出
|
||||
dist
|
||||
build
|
||||
|
||||
# 环境文件(在运行时通过环境变量或挂载提供)
|
||||
.env
|
||||
.env.local
|
||||
.env.development
|
||||
.env.production
|
||||
|
||||
# 测试相关
|
||||
coverage
|
||||
.nyc_output
|
||||
|
||||
# 编辑器文件
|
||||
.vscode
|
||||
.idea
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
# 系统文件
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Git
|
||||
.git
|
||||
.gitignore
|
||||
|
||||
# Docker相关
|
||||
.dockerignore
|
||||
Dockerfile
|
||||
docker-compose.yml
|
||||
|
||||
# 日志文件
|
||||
logs
|
||||
*.log
|
||||
84
backend/DOCKER-README.md
Normal file
84
backend/DOCKER-README.md
Normal file
@@ -0,0 +1,84 @@
|
||||
# Docker 部署说明
|
||||
|
||||
## 1. 仅构建后端镜像
|
||||
|
||||
```bash
|
||||
# 在 backend 目录中
|
||||
cd backend
|
||||
|
||||
# 构建 Docker 镜像
|
||||
docker build -t employee-performance-backend:latest .
|
||||
|
||||
# 运行容器
|
||||
docker run -d \
|
||||
-p 3001:3001 \
|
||||
-e DB_HOST=localhost \
|
||||
-e DB_PORT=3306 \
|
||||
-e DB_USER=performance_user \
|
||||
-e DB_PASSWORD=userpassword123 \
|
||||
-e DB_NAME=employee_performance \
|
||||
-e JWT_SECRET=your_jwt_secret_here_change_in_production \
|
||||
-e FASTGPT_API_KEY=your_fastgpt_api_key_here \
|
||||
--name employee-performance-backend \
|
||||
employee-performance-backend:latest
|
||||
```
|
||||
|
||||
## 2. 使用 Docker Compose(推荐)
|
||||
|
||||
```bash
|
||||
# 在项目根目录(包含 docker-compose.yml)
|
||||
cd ..
|
||||
|
||||
# 启动所有服务(MySQL + 后端)
|
||||
docker-compose up -d
|
||||
|
||||
# 查看日志
|
||||
docker-compose logs -f
|
||||
|
||||
# 停止服务
|
||||
docker-compose down
|
||||
|
||||
# 停止并删除数据卷
|
||||
docker-compose down -v
|
||||
```
|
||||
|
||||
## 3. 环境变量配置
|
||||
|
||||
复制 `.env.example` 为 `.env` 并根据需要修改:
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
或者通过 Docker Compose 的环境变量直接配置(见 docker-compose.yml)。
|
||||
|
||||
## 4. 数据库初始化
|
||||
|
||||
Docker Compose 会自动:
|
||||
1. 创建 MySQL 8.0 容器
|
||||
2. 初始化数据库结构(使用 `src/db/init.sql`)
|
||||
3. 插入测试数据(使用 `src/db/seed.sql`)
|
||||
|
||||
## 5. 健康检查
|
||||
|
||||
后端服务提供健康检查端点:
|
||||
```
|
||||
GET http://localhost:3001/health
|
||||
```
|
||||
|
||||
Docker 容器已配置健康检查,确保服务正常运行。
|
||||
|
||||
## 6. 构建优化
|
||||
|
||||
Dockerfile 使用多阶段构建:
|
||||
- 第一阶段:安装依赖并构建 TypeScript
|
||||
- 第二阶段:仅复制运行所需文件,减小镜像大小
|
||||
|
||||
## 7. 生产环境注意事项
|
||||
|
||||
1. **修改默认密码**:在 docker-compose.yml 中修改 MySQL 密码
|
||||
2. **设置强 JWT_SECRET**:使用强密钥替换默认值
|
||||
3. **配置 FastGPT API**:提供有效的 API 密钥
|
||||
4. **数据持久化**:MySQL 数据存储在 `mysql_data` 卷中
|
||||
5. **网络安全**:生产环境应考虑使用 Docker 网络隔离
|
||||
53
backend/Dockerfile
Normal file
53
backend/Dockerfile
Normal file
@@ -0,0 +1,53 @@
|
||||
# 构建阶段
|
||||
FROM node:20-alpine AS builder
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /app
|
||||
|
||||
# 复制package.json和package-lock.json
|
||||
COPY package*.json ./
|
||||
|
||||
# 安装依赖(包括devDependencies,因为需要typescript等构建工具)
|
||||
RUN npm ci --only=production --ignore-scripts && \
|
||||
npm ci --only=development --ignore-scripts
|
||||
|
||||
# 复制源代码
|
||||
COPY . .
|
||||
|
||||
# 构建TypeScript
|
||||
RUN npm run build
|
||||
|
||||
# 运行时阶段
|
||||
FROM node:20-alpine AS runtime
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /app
|
||||
|
||||
# 创建非root用户
|
||||
RUN addgroup -g 1001 -S nodejs && \
|
||||
adduser -S nodejs -u 1001 -G nodejs
|
||||
|
||||
# 复制package.json
|
||||
COPY --from=builder --chown=nodejs:nodejs /app/package*.json ./
|
||||
|
||||
# 安装仅生产依赖
|
||||
RUN npm ci --only=production --ignore-scripts
|
||||
|
||||
# 复制构建产物
|
||||
COPY --from=builder --chown=nodejs:nodejs /app/dist ./dist
|
||||
|
||||
# 复制可能需要的其他文件(如数据库初始化脚本)
|
||||
COPY --from=builder --chown=nodejs:nodejs /app/src/db ./src/db
|
||||
|
||||
# 切换用户
|
||||
USER nodejs
|
||||
|
||||
# 暴露端口(默认3001,可通过环境变量覆盖)
|
||||
EXPOSE 3001
|
||||
|
||||
# 健康检查
|
||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||
CMD node -e "require('http').get('http://localhost:3001/health', (r) => {if(r.statusCode===200)process.exit(0);process.exit(1)}).on('error',()=>process.exit(1))"
|
||||
|
||||
# 启动命令
|
||||
CMD ["npm", "start"]
|
||||
1
backend/tmpclaude-14d8-cwd
Normal file
1
backend/tmpclaude-14d8-cwd
Normal file
@@ -0,0 +1 @@
|
||||
/c/Users/99095/Desktop/优一科技/performance-evaluation-system/backend
|
||||
1
backend/tmpclaude-3607-cwd
Normal file
1
backend/tmpclaude-3607-cwd
Normal file
@@ -0,0 +1 @@
|
||||
/c/Users/99095/Desktop/优一科技/performance-evaluation-system/backend
|
||||
1
backend/tmpclaude-7c27-cwd
Normal file
1
backend/tmpclaude-7c27-cwd
Normal file
@@ -0,0 +1 @@
|
||||
/c/Users/99095/Desktop/优一科技/performance-evaluation-system/backend
|
||||
14
create-db-user.sql
Normal file
14
create-db-user.sql
Normal file
@@ -0,0 +1,14 @@
|
||||
-- 创建新的数据库用户(如果你能以 root 身份登录 MySQL)
|
||||
-- 在 MySQL 命令行中执行此脚本
|
||||
|
||||
-- 创建用户(密码设置为 123456)
|
||||
CREATE USER IF NOT EXISTS 'emp_user'@'localhost' IDENTIFIED BY '123456';
|
||||
|
||||
-- 授予权限
|
||||
GRANT ALL PRIVILEGES ON employee_performance.* TO 'emp_user'@'localhost';
|
||||
|
||||
-- 刷新权限
|
||||
FLUSH PRIVILEGES;
|
||||
|
||||
-- 显示用户
|
||||
SELECT User, Host FROM mysql.user WHERE User = 'emp_user';
|
||||
64
docker-compose.yml
Normal file
64
docker-compose.yml
Normal file
@@ -0,0 +1,64 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# MySQL数据库
|
||||
mysql:
|
||||
image: mysql:8.0
|
||||
container_name: employee-performance-mysql
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword123
|
||||
MYSQL_DATABASE: employee_performance
|
||||
MYSQL_USER: performance_user
|
||||
MYSQL_PASSWORD: userpassword123
|
||||
ports:
|
||||
- "3306:3306"
|
||||
volumes:
|
||||
- mysql_data:/var/lib/mysql
|
||||
- ./backend/src/db/init.sql:/docker-entrypoint-initdb.d/init.sql
|
||||
- ./backend/src/db/seed.sql:/docker-entrypoint-initdb.d/seed.sql
|
||||
healthcheck:
|
||||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-prootpassword123"]
|
||||
timeout: 20s
|
||||
retries: 10
|
||||
start_period: 30s
|
||||
networks:
|
||||
- performance-network
|
||||
|
||||
# 后端应用
|
||||
backend:
|
||||
build:
|
||||
context: ./backend
|
||||
dockerfile: Dockerfile
|
||||
container_name: employee-performance-backend
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
DB_HOST: mysql
|
||||
DB_PORT: 3306
|
||||
DB_USER: performance_user
|
||||
DB_PASSWORD: userpassword123
|
||||
DB_NAME: employee_performance
|
||||
JWT_SECRET: your_jwt_secret_here_change_in_production
|
||||
FASTGPT_API_KEY: your_fastgpt_api_key_here
|
||||
FASTGPT_API_URL: https://api.fastgpt.in/api/v1/chat/completions
|
||||
FASTGPT_MODEL: gpt-4
|
||||
PORT: 3001
|
||||
NODE_ENV: production
|
||||
ports:
|
||||
- "3001:3001"
|
||||
depends_on:
|
||||
mysql:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- performance-network
|
||||
# 如果需要在容器内运行数据库初始化脚本,可以取消下面的注释
|
||||
# volumes:
|
||||
# - ./backend/src/db:/app/src/db:ro
|
||||
|
||||
networks:
|
||||
performance-network:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
mysql_data:
|
||||
driver: local
|
||||
1
tmpclaude-1560-cwd
Normal file
1
tmpclaude-1560-cwd
Normal file
@@ -0,0 +1 @@
|
||||
/c/Users/99095/Desktop/优一科技/performance-evaluation-system
|
||||
1
tmpclaude-5530-cwd
Normal file
1
tmpclaude-5530-cwd
Normal file
@@ -0,0 +1 @@
|
||||
/c/Users/99095/Desktop/优一科技/performance-evaluation-system
|
||||
1
tmpclaude-709e-cwd
Normal file
1
tmpclaude-709e-cwd
Normal file
@@ -0,0 +1 @@
|
||||
/c/Users/99095/Desktop/优一科技/performance-evaluation-system
|
||||
1
tmpclaude-7f74-cwd
Normal file
1
tmpclaude-7f74-cwd
Normal file
@@ -0,0 +1 @@
|
||||
/c/Users/99095/Desktop/优一科技/performance-evaluation-system
|
||||
1
tmpclaude-8f6e-cwd
Normal file
1
tmpclaude-8f6e-cwd
Normal file
@@ -0,0 +1 @@
|
||||
/c/Users/99095/Desktop/优一科技/performance-evaluation-system
|
||||
1
tmpclaude-9841-cwd
Normal file
1
tmpclaude-9841-cwd
Normal file
@@ -0,0 +1 @@
|
||||
/c/Users/99095/Desktop/优一科技/performance-evaluation-system
|
||||
1
tmpclaude-9b0e-cwd
Normal file
1
tmpclaude-9b0e-cwd
Normal file
@@ -0,0 +1 @@
|
||||
/c/Users/99095/Desktop/优一科技/performance-evaluation-system
|
||||
1
tmpclaude-a768-cwd
Normal file
1
tmpclaude-a768-cwd
Normal file
@@ -0,0 +1 @@
|
||||
/c/Users/99095/Desktop/优一科技/performance-evaluation-system
|
||||
1
tmpclaude-aa47-cwd
Normal file
1
tmpclaude-aa47-cwd
Normal file
@@ -0,0 +1 @@
|
||||
/c/Users/99095/Desktop/优一科技/performance-evaluation-system
|
||||
1
tmpclaude-e0aa-cwd
Normal file
1
tmpclaude-e0aa-cwd
Normal file
@@ -0,0 +1 @@
|
||||
/c/Users/99095/Desktop/优一科技/performance-evaluation-system
|
||||
Reference in New Issue
Block a user