Compare commits

..

17 Commits

Author SHA1 Message Date
carry
c0810e4352 Merge commit 'e6f36da1841d7e793b2c412f52bb12cd7767727f' 2025-02-20 17:51:10 +08:00
carry
53668b12e9 增加了前端密码校验 2025-02-20 17:49:43 +08:00
carry
e6f36da184 添加了密码符合要求校验 2025-02-20 17:49:09 +08:00
carry
22ed9ab4d7 Merge commit '20283e17b94864887dd5d9bda506a19ab0f12b70' 2025-02-20 13:27:46 +08:00
carry
37b43ef8f5 Merge branch 'master' of https://gitea.carry.fit/carry/simple-rbac 2025-02-20 02:52:13 +08:00
carry
5421b81828 将前后端分离的代理独立出来,并解决了一系列nginx代理问题 2025-02-20 02:51:40 +08:00
carry
1021a2d6be 将前后端分离的代理独立出来,并解决了一系列nginx代理问题 2025-02-20 02:49:35 +08:00
carry
20283e17b9 将nginx配置文件正确放入容器 2025-02-20 02:48:45 +08:00
carry
1abc63a603 修正了前端镜像的spa路由问题 2025-02-20 01:22:19 +08:00
carry
539c9c7453 修正了nginx镜像的spa路由问题 2025-02-20 01:19:55 +08:00
carry
b40bc183d0 Merge commit '5ab7ebbe5a89dfd4ee103b3478ae8247512805fa' 2025-02-19 14:42:25 +08:00
carry
e8b4f6d6a7 Merge commit '2f8e547e0338ee1c329bf42dc56b511e0125aaa2' 2025-02-19 14:41:54 +08:00
carry
d78af84c66 修正了若干问题 2025-02-19 14:41:49 +08:00
carry
5ab7ebbe5a 添加了依赖安装的代理 2025-02-19 14:41:06 +08:00
carry
2f8e547e03 添加了依赖安装的代理 2025-02-19 14:41:05 +08:00
carry
69a3032102 修改了pydantic的版本问题和python依赖问题 2025-02-19 14:39:36 +08:00
carry
001bc4e52b 修正了nginx代理错误 2025-02-19 14:39:04 +08:00
9 changed files with 49 additions and 9 deletions

View File

@@ -1,5 +1,5 @@
# 使用Python官方镜像 # 使用Python官方镜像
FROM python:3.9-slim FROM python:3.11-slim
# 设置工作目录 # 设置工作目录
WORKDIR /app WORKDIR /app
@@ -8,7 +8,7 @@ WORKDIR /app
COPY requirements.txt . COPY requirements.txt .
# 安装依赖 # 安装依赖
RUN pip install --no-cache-dir -r requirements.txt RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 复制项目文件 # 复制项目文件
COPY . . COPY . .

View File

@@ -1,3 +1,5 @@
pydantic<2.0
asyncmy>=0.2.10
fastapi>=0.95.2 fastapi>=0.95.2
python-dotenv>=1.0.0 python-dotenv>=1.0.0
sqlalchemy>=2.0.15 sqlalchemy>=2.0.15
@@ -6,4 +8,5 @@ bcrypt>=4.0.1
pyjwt>=2.6.0 pyjwt>=2.6.0
pytest>=7.3.1 pytest>=7.3.1
requests>=2.28.2 requests>=2.28.2
cryptography>=42.0.2
uvicorn[standard]>=0.21.1 uvicorn[standard]>=0.21.1

View File

@@ -1,6 +1,6 @@
from datetime import datetime from datetime import datetime
from enum import Enum from enum import Enum
from pydantic import BaseModel, Field, model_validator from pydantic import BaseModel, Field, root_validator
from typing import Optional from typing import Optional
# 用户角色枚举 # 用户角色枚举
@@ -27,7 +27,7 @@ class UserUpdate(BaseModel):
description: Optional[str] = Field(None, max_length=255, description="用户描述") description: Optional[str] = Field(None, max_length=255, description="用户描述")
# 可选:确保至少更新一个字段 # 可选:确保至少更新一个字段
@model_validator(mode='before') @root_validator
def validate_at_least_one_field(cls, values): def validate_at_least_one_field(cls, values):
if not any(values.values()): if not any(values.values()):
raise ValueError("至少需要更新一个字段") raise ValueError("至少需要更新一个字段")

View File

@@ -25,11 +25,9 @@ services:
- app-network - app-network
nginx: nginx:
image: nginx:stable-alpine build: ./nginx
ports: ports:
- "80:80" - "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on: depends_on:
- frontend - frontend
- backend - backend

View File

@@ -8,7 +8,8 @@ WORKDIR /app
COPY package*.json ./ COPY package*.json ./
# 安装依赖 # 安装依赖
RUN npm install RUN npm config set registry https://registry.npmmirror.com && \
npm install
# 复制项目文件 # 复制项目文件
COPY . . COPY . .
@@ -22,6 +23,9 @@ FROM nginx:stable-alpine as production-stage
# 复制构建好的文件到Nginx目录 # 复制构建好的文件到Nginx目录
COPY --from=build-stage /app/dist /usr/share/nginx/html COPY --from=build-stage /app/dist /usr/share/nginx/html
# 复制Nginx配置文件
COPY nginx.conf /etc/nginx/nginx.conf
# 暴露80端口 # 暴露80端口
EXPOSE 80 EXPOSE 80

21
frontend/nginx.conf Normal file
View File

@@ -0,0 +1,21 @@
# 用户连接数
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 80;
# 设置根目录
root /usr/share/nginx/html;
index index.html;
# 处理SPA路由
location / {
try_files $uri $uri/ /index.html;
}
}
}

View File

@@ -82,6 +82,9 @@ const handleConfirm = async () => {
if (!createData.password) { if (!createData.password) {
throw new Error('密码不能为空') throw new Error('密码不能为空')
} }
if (!/^\d{6,}$/.test(createData.password)) {
throw new Error('密码必须为6位或以上的数字')
}
await userService.createUser({ await userService.createUser({
username: createData.username, username: createData.username,
password: createData.password, password: createData.password,

11
nginx/Dockerfile Normal file
View File

@@ -0,0 +1,11 @@
# 使用Nginx作为基础镜像
FROM nginx:stable-alpine
# 复制Nginx配置文件
COPY nginx.conf /etc/nginx/nginx.conf
# 暴露80端口
EXPOSE 80
# 启动Nginx
CMD ["nginx", "-g", "daemon off;"]

View File

@@ -9,7 +9,7 @@ http {
listen 80; listen 80;
location /api/ { location /api/ {
proxy_pass http://backend:8000/; proxy_pass http://backend:8000;
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;