diff --git a/.gitignore b/.gitignore index b6ef54a3..ba5b8f02 100755 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,6 @@ backend/.pytest_cache backend/logs backend/alembic/versions/* backend/*.db - backend/.ruff_cache backend/.ruff.toml @@ -26,7 +25,6 @@ frontend/.DS_Store frontend/node_modules frontend/dist frontend/.husky - frontend/src/types/auto-imports.d.ts frontend/src/types/components.d.ts @@ -34,4 +32,8 @@ devops/nginx/fastapp/dist devops/nginx/fastdocs/dist devops/nginx/frontend/dist devops/nginx/ssl -docker-compose.yaml + +# 本地配置覆盖文件(不提交到版本控制) +docker-compose.override.yaml +frontend/.env.local +backend/env/.env.local diff --git a/backend/env/.env.dev b/backend/env/.env.dev index 8b97af1b..0721a665 100644 --- a/backend/env/.env.dev +++ b/backend/env/.env.dev @@ -22,13 +22,13 @@ DESCRIPTION = "该项目是一个基于python的web服务框架,基于fastapi DEMO_ENABLE = False # 数据库配置 -DATABASE_TYPE = "mysql" # mysql、postgres、[qlite、dm这俩种不支持代码生成] +DATABASE_TYPE = "mysql" # mysql、postgres、sqlite、dm(sqlite、dm不支持代码生成) # 数据库配置 DATABASE_HOST = "localhost" DATABASE_PORT = 3306 # MySQL:3306 PostgreSQL:5432 DATABASE_USER = "root" -DATABASE_PASSWORD = "你的数据库密码" +DATABASE_PASSWORD = "your_database_password" DATABASE_NAME = "fastapiadmin" # Redis配置 @@ -36,13 +36,13 @@ REDIS_ENABLE = True REDIS_HOST = "localhost" REDIS_PORT = 6379 REDIS_USER = "" -REDIS_PASSWORD = "你的Redis密码" +REDIS_PASSWORD = "your_redis_password" REDIS_DB_NAME = 1 # 日志配置 LOGGER_LEVEL = "DEBUG" # 日志级别 # 大模型配置 -OPENAI_BASE_URL = "你的大模型接口地址" -OPENAI_API_KEY = "sk-你的大模型密钥" -OPENAI_MODEL = "你的大模型模型" +OPENAI_BASE_URL = "https://api.deepseek.com" +OPENAI_API_KEY = "your_api_key" +OPENAI_MODEL = "deepseek-chat" diff --git a/backend/env/.env.dev.example b/backend/env/.env.dev.example new file mode 100644 index 00000000..0e4cda23 --- /dev/null +++ b/backend/env/.env.dev.example @@ -0,0 +1,49 @@ +# ================================== +# 开发环境配置文件模版 +# 复制此文件为 .env.dev 并修改配置 +# ================================== + +ENVIRONMENT = "dev" + +# 服务器配置 +SERVER_HOST = "0.0.0.0" # 允许访问的IP地址 +SERVER_PORT = 8001 # 服务端口 + +# 文档配置 +DEBUG = True # 调试模式 +TITLE = "🎉 FastapiAdmin 🎉 -dev" # 文档标题 +VERSION = "0.1.0" # 版本号 +SUMMARY = "接口汇总" # 文档概述 +DOCS_URL = "/docs" # Swagger UI路径 +REDOC_URL = "/redoc" # ReDoc路径 +ROOT_PATH = "/api/v1" # API路由前缀 +DESCRIPTION = "该项目是一个基于python的web服务框架,基于fastapi和sqlalchemy实现。" # 文档描述 + +# 是否启用演示模式 +DEMO_ENABLE = False + +# 数据库配置 +DATABASE_TYPE = "mysql" # mysql、postgres、sqlite、dm(sqlite、dm不支持代码生成) + +# 数据库配置 +DATABASE_HOST = "localhost" +DATABASE_PORT = 3306 # MySQL:3306 PostgreSQL:5432 +DATABASE_USER = "root" +DATABASE_PASSWORD = "your_database_password" +DATABASE_NAME = "fastapiadmin" + +# Redis配置 +REDIS_ENABLE = True +REDIS_HOST = "localhost" +REDIS_PORT = 6379 +REDIS_USER = "" +REDIS_PASSWORD = "your_redis_password" +REDIS_DB_NAME = 1 + +# 日志配置 +LOGGER_LEVEL = "DEBUG" # 日志级别 + +# 大模型配置 +OPENAI_BASE_URL = "https://api.deepseek.com" +OPENAI_API_KEY = "your_api_key" +OPENAI_MODEL = "deepseek-chat" diff --git a/backend/env/.env.prod b/backend/env/.env.prod index c682f4b5..fe26dcd5 100644 --- a/backend/env/.env.prod +++ b/backend/env/.env.prod @@ -1,17 +1,17 @@ # ================================== -# 开发环境配置文件 +# 生产环境配置文件 # ================================== ENVIRONMENT = "prod" # 服务器配置 -SERVER_HOST = "0.0.0.0" # 允许访问的IP地址 +SERVER_HOST = '0.0.0.0' # 允许访问的IP地址 SERVER_PORT = 8001 # 服务端口 # 文档配置 DEBUG = False # 调试模式 TITLE = "🎉 FastapiAdmin 🎉 -prod" # 文档标题 -VERSION = "0.1.0" # 版本号 +VERSION = '0.1.0' # 版本号 SUMMARY = "接口汇总" # 文档概述 DOCS_URL = "/docs" # Swagger UI路径 REDOC_URL = "/redoc" # ReDoc路径 @@ -19,30 +19,30 @@ ROOT_PATH = "/api/v1" # API路由前缀 DESCRIPTION = "该项目是一个基于python的web服务框架,基于fastapi和sqlalchemy实现。" # 文档描述 # 是否启用演示模式 -DEMO_ENABLE = True +DEMO_ENABLE = False # 数据库配置 -DATABASE_TYPE = "mysql" # mysql、postgres、[qlite、dm这俩种不支持代码生成] +DATABASE_TYPE = "mysql" # mysql、postgres、sqlite、dm(sqlite、dm不支持代码生成) # 数据库配置 -DATABASE_HOST = "localhost" -DATABASE_PORT = 3306 # MySQL默认端口3006 PostgreSQL默认端口5432 -DATABASE_USER = "root" -DATABASE_PASSWORD = "你的数据库密码" +DATABASE_HOST = "your_database_host" +DATABASE_PORT = 3306 # MySQL默认端口3306 PostgreSQL默认端口5432 +DATABASE_USER = "root" # PostgreSQL 用户是 postgres +DATABASE_PASSWORD = "your_database_password" DATABASE_NAME = "fastapiadmin" # Redis配置 REDIS_ENABLE = True -REDIS_HOST = "localhost" +REDIS_HOST = "your_redis_host" REDIS_PORT = 6379 -REDIS_USER = "" -REDIS_PASSWORD = "你的Redis密码" +REDIS_USER = '' +REDIS_PASSWORD = 'your_redis_password' REDIS_DB_NAME = 1 # 日志配置 -LOGGER_LEVEL = "INFO" +LOGGER_LEVEL = 'INFO' # 大模型配置 -OPENAI_BASE_URL = "你的大模型接口地址" -OPENAI_API_KEY = "sk-你的大模型密钥" -OPENAI_MODEL = "你的大模型模型" +OPENAI_BASE_URL = "https://api.deepseek.com" +OPENAI_API_KEY = "your_api_key" +OPENAI_MODEL = "deepseek-chat" diff --git a/backend/env/.env.prod.example b/backend/env/.env.prod.example new file mode 100644 index 00000000..9f533d7f --- /dev/null +++ b/backend/env/.env.prod.example @@ -0,0 +1,49 @@ +# ================================== +# 生产环境配置文件模版 +# 复制此文件为 .env.prod 并修改配置 +# ================================== + +ENVIRONMENT = "prod" + +# 服务器配置 +SERVER_HOST = '0.0.0.0' # 允许访问的IP地址 +SERVER_PORT = 8001 # 服务端口 + +# 文档配置 +DEBUG = False # 调试模式 +TITLE = "🎉 FastapiAdmin 🎉 -prod" # 文档标题 +VERSION = '0.1.0' # 版本号 +SUMMARY = "接口汇总" # 文档概述 +DOCS_URL = "/docs" # Swagger UI路径 +REDOC_URL = "/redoc" # ReDoc路径 +ROOT_PATH = "/api/v1" # API路由前缀 +DESCRIPTION = "该项目是一个基于python的web服务框架,基于fastapi和sqlalchemy实现。" # 文档描述 + +# 是否启用演示模式 +DEMO_ENABLE = False + +# 数据库配置 +DATABASE_TYPE = "mysql" # mysql、postgres、sqlite、dm(sqlite、dm不支持代码生成) + +# 数据库配置 +DATABASE_HOST = "your_database_host" +DATABASE_PORT = 3306 # MySQL默认端口3306 PostgreSQL默认端口5432 +DATABASE_USER = "root" # PostgreSQL 用户是 postgres +DATABASE_PASSWORD = "your_database_password" +DATABASE_NAME = "fastapiadmin" + +# Redis配置 +REDIS_ENABLE = True +REDIS_HOST = "your_redis_host" +REDIS_PORT = 6379 +REDIS_USER = '' +REDIS_PASSWORD = 'your_redis_password' +REDIS_DB_NAME = 1 + +# 日志配置 +LOGGER_LEVEL = 'INFO' + +# 大模型配置 +OPENAI_BASE_URL = "https://api.deepseek.com" +OPENAI_API_KEY = "your_api_key" +OPENAI_MODEL = "deepseek-chat" diff --git a/docker-compose.yaml b/docker-compose.yaml index cfc35ed3..30af8cb8 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -7,9 +7,9 @@ services: restart: always environment: TZ: "Asia/Shanghai" - MYSQL_ROOT_PASSWORD: "你的数据库密码" + MYSQL_ROOT_PASSWORD: "your_mysql_root_password" MYSQL_DATABASE: "fastapiadmin" - MYSQL_PASSWORD: "你的数据库密码" + MYSQL_PASSWORD: "your_mysql_password" MYSQL_USER: "fastapiadmin" MYSQL_TZINFO_TO_SYS_TABLES: 1 # 初始化MySQL时区表,解决时差问题 ports: @@ -24,7 +24,7 @@ services: - app_network # 健康检查:检测MySQL是否真正就绪,避免后端启动早于MySQL healthcheck: - test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p你的数据库密码"] + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pyour_mysql_root_password"] interval: 5s # 每5秒检测一次 timeout: 30s # 超时时间30秒 retries: 10 # 重试10次,失败则认为容器未就绪 @@ -42,7 +42,7 @@ services: volumes: # 挂载Redis配置文件,实现自定义配置 - ./devops/redis/data:/data - command: redis-server --requirepass 你的Redis密码 + command: redis-server --requirepass your_redis_password networks: - app_network @@ -57,9 +57,9 @@ services: environment: TZ: "Asia/Shanghai" DATABASE_HOST: "mysql" - DATABASE_PASSWORD: "你的数据库密码" + DATABASE_PASSWORD: "your_mysql_password" REDIS_HOST: "redis" - REDIS_PASSWORD: "你的Redis密码" + REDIS_PASSWORD: "your_redis_password" ports: - "8001:8001" volumes: diff --git a/docker-compose_example.yaml b/docker-compose_example.yaml new file mode 100644 index 00000000..30af8cb8 --- /dev/null +++ b/docker-compose_example.yaml @@ -0,0 +1,101 @@ +# 应用服务 +services: + # 数据库服务 + mysql: + container_name: mysql + image: mysql:8.0 + restart: always + environment: + TZ: "Asia/Shanghai" + MYSQL_ROOT_PASSWORD: "your_mysql_root_password" + MYSQL_DATABASE: "fastapiadmin" + MYSQL_PASSWORD: "your_mysql_password" + MYSQL_USER: "fastapiadmin" + MYSQL_TZINFO_TO_SYS_TABLES: 1 # 初始化MySQL时区表,解决时差问题 + ports: + - "3306:3306" + volumes: + # 挂载数据卷,持久化MySQL数据(docker-compose down不会删除数据) + - ./devops/mysql/data:/var/lib/mysql + # 挂载宿主机时区文件,双重保障时区同步(只读,避免容器修改) + - /etc/localtime:/etc/localtime:ro + - /etc/timezone:/etc/timezone:ro + networks: + - app_network + # 健康检查:检测MySQL是否真正就绪,避免后端启动早于MySQL + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pyour_mysql_root_password"] + interval: 5s # 每5秒检测一次 + timeout: 30s # 超时时间30秒 + retries: 10 # 重试10次,失败则认为容器未就绪 + start_period: 20s # 容器启动后,延迟20秒开始检测 + + # redis服务 + redis: + container_name: redis + image: redis:7.0 + restart: always + environment: + TZ: "Asia/Shanghai" + ports: + - "6379:6379" + volumes: + # 挂载Redis配置文件,实现自定义配置 + - ./devops/redis/data:/data + command: redis-server --requirepass your_redis_password + networks: + - app_network + + # 后端服务 + backend: + container_name: backend + build: + context: ./ + dockerfile: ./devops/backend/Dockerfile + image: backend:latest + restart: always + environment: + TZ: "Asia/Shanghai" + DATABASE_HOST: "mysql" + DATABASE_PASSWORD: "your_mysql_password" + REDIS_HOST: "redis" + REDIS_PASSWORD: "your_redis_password" + ports: + - "8001:8001" + volumes: + - ./backend:/home + depends_on: + - mysql + - redis + networks: + - app_network + + # 前端nginx服务 + nginx: + container_name: nginx + image: nginx:latest + restart: always + environment: + TZ: "Asia/Shanghai" + ports: + - "80:80" + - "443:443" + volumes: + - ./devops/nginx/nginx.conf:/etc/nginx/nginx.conf + # 挂载前端dist目录,实现动态加载前端资源 + - ./devops/nginx/frontend/dist:/usr/share/nginx/html/frontend + # 挂载H5dist目录,实现动态加载H5资源 + - ./devops/nginx/fastapp/dist/build/h5:/usr/share/nginx/html/fastapp + # 挂载官网dist目录,实现动态加载文档资源 + - ./devops/nginx/fastdocs/dist:/usr/share/nginx/html/fastdocs + # ssl 证书,如果无证书则注释这行,并在nginx.conf中注释ssl相关配置 + - ./devops/nginx/ssl:/etc/nginx/ssl:ro + depends_on: + - backend + networks: + - app_network + +# 网络 +networks: + app_network: + driver: bridge diff --git a/frontend/.env.development.example b/frontend/.env.development.example new file mode 100644 index 00000000..7759676e --- /dev/null +++ b/frontend/.env.development.example @@ -0,0 +1,20 @@ +# 环境 +VITE_APP_ENV=development + +# 项目名称 +VITE_APP_TITLE=fastapiadmin + +# 网络请求公用地址,根据实际部署情况修改 +VITE_API_BASE_URL=http://127.0.0.1:8001 + +# 代理前缀 +VITE_APP_BASE_API=/api/v1 + +# 应用端口 +VITE_APP_PORT=5180 + +# 超时时间 +VITE_TIMEOUT=10000 + +# WebSocket 端点(不配置则关闭),ai对话需要配置 +VITE_APP_WS_ENDPOINT=ws://127.0.0.1:8001 diff --git a/frontend/.env.production b/frontend/.env.production index 95b3f4c5..9b95f22a 100644 --- a/frontend/.env.production +++ b/frontend/.env.production @@ -4,8 +4,8 @@ VITE_APP_ENV=production # 项目名称 VITE_APP_TITLE=fastapiadmin -# 网络请求公用地址,根据实际部署情况修改 -VITE_API_BASE_URL=https://生成环境域名 +# 网络请求公用地址,如果没有认证可以使用http +VITE_API_BASE_URL=https://your-domain.com # 代理前缀 VITE_APP_BASE_API=/api/v1 @@ -16,5 +16,5 @@ VITE_APP_PORT=5180 # 超时时间 VITE_TIMEOUT=10000 -# WebSocket 端点(不配置则关闭),ai对话需要配置 -VITE_APP_WS_ENDPOINT=wss://生成环境域名 +# WebSocket 端点(不配置则关闭),ai对话需要配置,如果没有认证wss需要改为ws +VITE_APP_WS_ENDPOINT=wss://your-domain.com diff --git a/frontend/.env.production.example b/frontend/.env.production.example new file mode 100644 index 00000000..9b95f22a --- /dev/null +++ b/frontend/.env.production.example @@ -0,0 +1,20 @@ +# 环境 +VITE_APP_ENV=production + +# 项目名称 +VITE_APP_TITLE=fastapiadmin + +# 网络请求公用地址,如果没有认证可以使用http +VITE_API_BASE_URL=https://your-domain.com + +# 代理前缀 +VITE_APP_BASE_API=/api/v1 + +# 应用端口 +VITE_APP_PORT=5180 + +# 超时时间 +VITE_TIMEOUT=10000 + +# WebSocket 端点(不配置则关闭),ai对话需要配置,如果没有认证wss需要改为ws +VITE_APP_WS_ENDPOINT=wss://your-domain.com