mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-20 20:39:55 +00:00
feat: 重构前端项目结构并优化代码
refactor: 迁移前端资源文件至web目录 feat: 新增多种图标资源 style: 统一代码风格和格式化配置 docs: 更新README和文档说明 chore: 更新依赖和配置文件 fix: 修复部分类型定义和枚举 perf: 优化路由和组件加载逻辑
This commit is contained in:
+23
@@ -0,0 +1,23 @@
|
||||
# 数据库配置
|
||||
MYSQL_ROOT_PASSWORD=fastapiadmin_root
|
||||
MYSQL_DATABASE=fastapiadmin
|
||||
MYSQL_USER=fastapiadmin
|
||||
MYSQL_PASSWORD=fastapiadmin123
|
||||
MYSQL_PORT=3306
|
||||
|
||||
# Redis配置
|
||||
REDIS_PASSWORD=fastapiadmin_redis
|
||||
REDIS_PORT=6379
|
||||
|
||||
# 后端配置
|
||||
BACKEND_PORT=8001
|
||||
|
||||
# Nginx配置
|
||||
HTTP_PORT=80
|
||||
HTTPS_PORT=443
|
||||
|
||||
# 项目配置
|
||||
PROJECT_NAME=FastapiAdmin
|
||||
|
||||
# 部署环境
|
||||
DEPLOY_ENV=prod
|
||||
@@ -0,0 +1,23 @@
|
||||
# 数据库配置
|
||||
MYSQL_ROOT_PASSWORD=your_mysql_root_password
|
||||
MYSQL_DATABASE=fastapiadmin
|
||||
MYSQL_USER=fastapiadmin
|
||||
MYSQL_PASSWORD=your_mysql_password
|
||||
MYSQL_PORT=3306
|
||||
|
||||
# Redis配置
|
||||
REDIS_PASSWORD=your_redis_password
|
||||
REDIS_PORT=6379
|
||||
|
||||
# 后端配置
|
||||
BACKEND_PORT=8001
|
||||
|
||||
# Nginx配置
|
||||
HTTP_PORT=80
|
||||
HTTPS_PORT=443
|
||||
|
||||
# 项目配置
|
||||
PROJECT_NAME=FastapiAdmin
|
||||
|
||||
# 部署环境
|
||||
DEPLOY_ENV=prod
|
||||
@@ -0,0 +1,163 @@
|
||||
# FastapiAdmin 部署说明
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
docker/
|
||||
├── backend/ # 后端服务配置
|
||||
│ └── Dockerfile # 后端Dockerfile
|
||||
├── nginx/ # Nginx配置
|
||||
│ ├── nginx.conf # Nginx配置文件
|
||||
│ ├── ssl/ # SSL证书目录
|
||||
│ ├── web/ # 前端静态文件
|
||||
│ ├── app/ # 小程序静态文件
|
||||
│ └── docs/ # 文档静态文件
|
||||
├── mysql/ # MySQL数据目录
|
||||
│ └── data/ # MySQL数据持久化目录
|
||||
├── redis/ # Redis数据目录
|
||||
│ └── data/ # Redis数据持久化目录
|
||||
├── docker-compose.yaml # Docker Compose配置文件
|
||||
├── .env # 环境变量配置文件
|
||||
├── .env.example # 环境变量示例文件
|
||||
└── README.md # 部署说明文档
|
||||
```
|
||||
|
||||
## 部署准备
|
||||
|
||||
### 系统依赖
|
||||
|
||||
- Git
|
||||
- Docker
|
||||
- Docker Compose
|
||||
- Node.js (前端构建需要)
|
||||
- pnpm (前端构建需要)
|
||||
|
||||
### 环境配置
|
||||
|
||||
1. **配置环境变量**
|
||||
|
||||
复制 `.env.example` 文件为 `.env`,并根据实际情况修改配置:
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
主要配置项:
|
||||
|
||||
- `MYSQL_ROOT_PASSWORD`: MySQL根密码
|
||||
- `MYSQL_DATABASE`: 数据库名
|
||||
- `MYSQL_USER`: 数据库用户
|
||||
- `MYSQL_PASSWORD`: 数据库密码
|
||||
- `REDIS_PASSWORD`: Redis密码
|
||||
- `BACKEND_PORT`: 后端服务端口
|
||||
- `HTTP_PORT`: HTTP端口
|
||||
- `HTTPS_PORT`: HTTPS端口
|
||||
|
||||
2. **SSL证书配置** (可选)
|
||||
|
||||
如果需要HTTPS,将SSL证书文件放在 `nginx/ssl/` 目录下:
|
||||
- `server.key`: 私钥文件
|
||||
- `server.pem`: 证书文件
|
||||
|
||||
## 部署流程
|
||||
|
||||
### 1. 执行部署脚本
|
||||
|
||||
在项目根目录执行部署脚本:
|
||||
|
||||
```bash
|
||||
./deploy.sh
|
||||
```
|
||||
|
||||
部署脚本会自动执行以下步骤:
|
||||
|
||||
1. 加载环境变量
|
||||
2. 检查系统依赖
|
||||
3. 停止现有容器
|
||||
4. 更新代码
|
||||
5. 构建前端(可选)
|
||||
6. 构建镜像
|
||||
7. 启动容器
|
||||
8. 显示日志
|
||||
|
||||
### 2. 命令选项
|
||||
|
||||
部署脚本支持以下命令选项:
|
||||
|
||||
- `./deploy.sh start` - 启动所有容器
|
||||
- `./deploy.sh stop` - 停止所有容器
|
||||
- `./deploy.sh restart` - 重启所有容器
|
||||
- `./deploy.sh logs` - 查看所有容器日志
|
||||
- `./deploy.sh help` - 显示帮助信息
|
||||
|
||||
## 访问信息
|
||||
|
||||
部署完成后,可以通过以下地址访问:
|
||||
|
||||
- **官网**: https://域名(或ip:端口)
|
||||
- **前端**: https://域名(或ip:端口)/web
|
||||
- **小程序**: https://域名(或ip:端口)/app
|
||||
- **登录信息**: 账号 admin,密码 123456
|
||||
|
||||
## 日志管理
|
||||
|
||||
### 查看容器日志
|
||||
|
||||
```bash
|
||||
# 查看所有容器日志
|
||||
./deploy.sh logs
|
||||
|
||||
# 查看实时日志
|
||||
cd docker
|
||||
docker compose logs -f [服务名]
|
||||
|
||||
# 服务名:backend, nginx, mysql, redis
|
||||
```
|
||||
|
||||
### 清理旧镜像
|
||||
|
||||
部署脚本会自动清理72小时前的旧镜像,以节省磁盘空间。
|
||||
|
||||
## 常见问题
|
||||
|
||||
### 1. 环境变量文件不存在
|
||||
|
||||
如果 `.env` 文件不存在,部署脚本会自动从 `.env.example` 创建。
|
||||
|
||||
### 2. 前端构建失败
|
||||
|
||||
如果服务器资源不足,建议在本地构建前端,然后将 `dist` 目录上传到 `docker/nginx/` 对应目录。
|
||||
|
||||
### 3. 容器启动失败
|
||||
|
||||
检查容器日志,查看具体错误信息:
|
||||
|
||||
```bash
|
||||
cd docker
|
||||
docker compose logs [服务名]
|
||||
```
|
||||
|
||||
### 4. 数据库连接失败
|
||||
|
||||
确保 `.env` 文件中的数据库配置正确,并且MySQL容器正常运行。
|
||||
|
||||
### 5. 端口冲突
|
||||
|
||||
如果端口被占用,修改 `.env` 文件中的端口配置。
|
||||
|
||||
## 安全建议
|
||||
|
||||
1. **修改默认密码**:部署后请修改默认的数据库密码和Redis密码
|
||||
2. **更新SSL证书**:使用有效的SSL证书,定期更新
|
||||
3. **限制访问**:配置防火墙,限制不必要的端口访问
|
||||
4. **定期备份**:定期备份数据库和重要数据
|
||||
|
||||
## 版本更新
|
||||
|
||||
当项目有新版本时,执行部署脚本即可自动更新:
|
||||
|
||||
```bash
|
||||
./deploy.sh
|
||||
```
|
||||
|
||||
脚本会自动拉取最新代码,构建新镜像,重启容器。
|
||||
@@ -0,0 +1,56 @@
|
||||
# 第一阶段:构建依赖
|
||||
FROM python:3.10-slim as builder
|
||||
|
||||
# 设置时区
|
||||
ENV TZ Asia/Shanghai
|
||||
|
||||
# 设置容器内工作目录
|
||||
WORKDIR /build
|
||||
|
||||
# 安装系统依赖
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
build-essential \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# 复制依赖文件
|
||||
COPY ./backend/requirements.txt .
|
||||
|
||||
# 安装依赖到指定目录
|
||||
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple \
|
||||
--target=/home/deps
|
||||
|
||||
# 第二阶段:运行环境
|
||||
FROM python:3.10-slim
|
||||
|
||||
# 使用 LABEL 替代 MAINTAINER
|
||||
LABEL maintainer="948080782@qq.com"
|
||||
|
||||
# 设置时区
|
||||
ENV TZ Asia/Shanghai
|
||||
|
||||
# 创建非root用户
|
||||
RUN useradd -m -u 1001 fastapiadmin
|
||||
|
||||
# 设置容器内工作目录
|
||||
WORKDIR /home
|
||||
|
||||
# 从构建阶段复制依赖
|
||||
COPY --from=builder /home/deps /home/deps
|
||||
|
||||
# 设置PYTHONPATH
|
||||
ENV PYTHONPATH=/home/deps:$PYTHONPATH
|
||||
|
||||
# 复制应用代码
|
||||
COPY ./backend/ .
|
||||
|
||||
# 更改文件权限
|
||||
RUN chown -R fastapiadmin:fastapiadmin /home
|
||||
|
||||
# 切换到非root用户
|
||||
USER fastapiadmin
|
||||
|
||||
# 运行应用
|
||||
CMD ["python", "main.py", "run", "--env=prod"]
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE 8001
|
||||
@@ -0,0 +1,7 @@
|
||||
# 小程序静态文件目录
|
||||
|
||||
请将小程序 H5 构建产物放置于此目录。
|
||||
|
||||
构建后应包含:
|
||||
- index.html
|
||||
- static/ (或其他静态资源)
|
||||
@@ -0,0 +1,7 @@
|
||||
# 官网静态文件目录
|
||||
|
||||
请将官网构建产物放置于此目录。
|
||||
|
||||
构建后应包含:
|
||||
- index.html
|
||||
- static/ (或其他静态资源)
|
||||
@@ -0,0 +1,91 @@
|
||||
# For more information on configuration, see:
|
||||
# * Official English Documentation: http://nginx.org/en/docs/
|
||||
# * Official Russian Documentation: http://nginx.org/ru/docs/
|
||||
|
||||
########### 每个指令必须有分号结束。#################
|
||||
worker_processes 1; # 允许生成的进程数,默认为1:
|
||||
pid /var/run/nginx.pid; # 指定 Nginx 进程运行文件存放地址
|
||||
error_log /var/log/nginx/error.log;
|
||||
|
||||
events {
|
||||
accept_mutex on; # 设置网络连接序列化,防止惊群现象发生,默认为on
|
||||
multi_accept on; # 设置一个进程是否同时接受多个网络连接,默认为off
|
||||
use epoll; # 事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
|
||||
worker_connections 1024; # 最大连接数,默认为512
|
||||
}
|
||||
|
||||
http {
|
||||
include mime.types; # 文件扩展名与文件类型映射表
|
||||
default_type application/octet-stream; # 默认文件类型,默认为text/plain
|
||||
|
||||
# 访问服务日志
|
||||
access_log on;
|
||||
sendfile on;
|
||||
keepalive_timeout 75;
|
||||
|
||||
# HTTP server块 - 重定向到HTTPS
|
||||
server {
|
||||
listen 80;
|
||||
server_name service.fastapiadmin.com;
|
||||
return 301 https://$server_name$request_uri;
|
||||
}
|
||||
|
||||
# HTTPS server块
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name service.fastapiadmin.com;
|
||||
|
||||
# SSL证书配置
|
||||
ssl_certificate /etc/nginx/ssl/server.pem;
|
||||
ssl_certificate_key /etc/nginx/ssl/server.key;
|
||||
|
||||
# SSL优化配置
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384;
|
||||
ssl_prefer_server_ciphers on;
|
||||
ssl_session_cache shared:SSL:10m;
|
||||
ssl_session_timeout 10m;
|
||||
|
||||
# 官网 - 根路径访问官网
|
||||
location / {
|
||||
root /usr/share/nginx/html/docs/dist;
|
||||
index index.html index.htm;
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
# 前端 - /web访问前端
|
||||
location /web {
|
||||
alias /usr/share/nginx/html/web/dist;
|
||||
try_files $uri $uri/ /web/index.html;
|
||||
}
|
||||
|
||||
# 小程序 - /app访问小程序
|
||||
location /app {
|
||||
alias /usr/share/nginx/html/app/dist/build/h5;
|
||||
try_files $uri $uri/ /app/index.html;
|
||||
}
|
||||
|
||||
# 后端代理
|
||||
location /api/v1 {
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-NginX-Proxy true;
|
||||
proxy_connect_timeout 300s;
|
||||
proxy_send_timeout 300s;
|
||||
proxy_read_timeout 300s;
|
||||
proxy_pass http://backend:8001;
|
||||
|
||||
# WebSocket 支持
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
}
|
||||
|
||||
error_page 500 502 503 504 /50x.html;
|
||||
location = /50x.html {
|
||||
root /usr/share/nginx/html;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAzttQDKbMEkUh3KpmuwnpjvO7PP/x6OzI86kEaCL/LfHrNOu+
|
||||
leXFrxk7dBcfbLyqpmh7uBZeIUg8qnl4e6oFd7DXdX9bT1tiJJRtngIqUVL/lzoN
|
||||
5TMVVN6s3Kbuhe1siMkDu59MF1BIDfAQOgNQFRoO3edQtGiOHt2z41fX75npuo7Z
|
||||
2yXHFDPeBBK3mP0Y60hju2ACYhdI9ZRkbUu5bo/gZbrb4/CZhEZIbU2n1mexg6mc
|
||||
Vmz2DpIt0ABklT4vx1dcWMBXm8tK8KR3WM7KGYvavOR8dBGPTfcrzZ7DumHPvgZI
|
||||
XYEmLqf9/fOBNzGic+4x1XXtqrgexWqCRs97JQIDAQABAoIBAALTOWeZDSHj20Ml
|
||||
h/ZswrtVBH7K1aBYsjGr8KdpcLm/FD5VD+dW9md62a8vJeHjr02gn1hh5H0ap2c7
|
||||
ErDIyfDiCQV/np0EdFISkuDngzjGx5QRNoUJONhN1K6oyTVGteMl6XBq0wkMCCRW
|
||||
XdUIjf5iAcejgiq3Q4IUE2V62tCf00T/7CKHGIACDGsgvVIl3QXvFy//tchnOJi1
|
||||
z7WygRRXmKrvf2hFERwhp7h8qyFGS0RChtVY8W8rT3p0YjATQn75+T9K2LBZsPSW
|
||||
/cMPIBOsJCxbXQqqSLLKmmzoaeA1rduaSVDVRH15aRJ77kPHqnTAdrgmc7uO1gBi
|
||||
1vZKRkECgYEA7iFTC6uo02QfECi+Otded2w6OvSw5TjuRqlK8xeP/deQ1TNj2Gtz
|
||||
y+nywdFeymqNYMU1pBH3zJQFyDTd2N5ztR7XETUVqh2/i3gRcgj7l20fv52YNhsq
|
||||
p86OigS3lHMYSkzPx+VKkBJyc7JEp28aOFs6xozbX5WJgnu4pwvsQ+ECgYEA3mEy
|
||||
9sg/+ZXFEw3MY+e34N//fXV4DgRn8ssZAHepC/Te0QPc2a77HQ76B399hYT/Cm6m
|
||||
cNfZ+0FKig+NE+KdMFZ4khcqnI+nfcwzlOCY3AltHo4SJbOWSW/AH1/SiszPHnWi
|
||||
/RtEHIgxUO6Vg8odCRTMjI5Tn/SzHTesavanH8UCgYAaZNcvk/dCdvZ6dAmhu/1c
|
||||
f0J1BmoU/hpq+pi0GQh8ukfzWZ7XfhF3qJafpPU8ulKxRyqK5PLyWfXKGxH716w7
|
||||
hw+PeLLOCD4S11wXp6c7QX0jX/RfCuPPdbWW1q8CZT9r/NeK8H8zONg2uquhY08k
|
||||
r/fzyekGzyxOqiftXAT0AQKBgAqHcaFLo/POSpF3YskMLKGiGXe4OyH2xXEyepGS
|
||||
GNfvFSmyVB+ecFdU4TO/rpLG1EiLKqhHIBQMaFoXGGfrn+OtBHJuVF8rUhPbukl/
|
||||
RN2OOLNsqKFOWnxJpUAXCmH2Box7p2byhowPSr55PW0LAcrvSCwThRQawuxMOYaq
|
||||
/Qi9AoGBANuVlK6PGaE9C2F8aOdzV40/c1pugDMGy1UhiVTdf4tNXWUAyFXjpPKO
|
||||
9BW9iUC0BnYNflJwuejYwzMpu0SQTWpwNTgZ2kvXTq5k+3p+WB6PYuz6otfvZNbG
|
||||
0AaTXSlFK9XQ5cIoVbUKzZGLX/g38dPYIm5rRnP6O6NH/E4AiAo2
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -0,0 +1,62 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIGJjCCBQ6gAwIBAgIQD74yY155PWDBA/hoM+TguTANBgkqhkiG9w0BAQsFADBu
|
||||
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
||||
d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg
|
||||
RFYgVExTIENBIC0gRzIwHhcNMjUwODE4MDAwMDAwWhcNMjYwODE3MjM1OTU5WjAj
|
||||
MSEwHwYDVQQDExhzZXJ2aWNlLmZhc3RhcGlhZG1pbi5jb20wggEiMA0GCSqGSIb3
|
||||
DQEBAQUAA4IBDwAwggEKAoIBAQDO21AMpswSRSHcqma7CemO87s8//Ho7MjzqQRo
|
||||
Iv8t8es0676V5cWvGTt0Fx9svKqmaHu4Fl4hSDyqeXh7qgV3sNd1f1tPW2IklG2e
|
||||
AipRUv+XOg3lMxVU3qzcpu6F7WyIyQO7n0wXUEgN8BA6A1AVGg7d51C0aI4e3bPj
|
||||
V9fvmem6jtnbJccUM94EEreY/RjrSGO7YAJiF0j1lGRtS7luj+Blutvj8JmERkht
|
||||
TafWZ7GDqZxWbPYOki3QAGSVPi/HV1xYwFeby0rwpHdYzsoZi9q85Hx0EY9N9yvN
|
||||
nsO6Yc++BkhdgSYup/3984E3MaJz7jHVde2quB7FaoJGz3slAgMBAAGjggMJMIID
|
||||
BTAfBgNVHSMEGDAWgBR435GQX+7erPbFdevVTFVT7yRKtjAdBgNVHQ4EFgQUH6rO
|
||||
Uuzt5oaI+OKEH1/CTKptVDUwQQYDVR0RBDowOIIYc2VydmljZS5mYXN0YXBpYWRt
|
||||
aW4uY29tghx3d3cuc2VydmljZS5mYXN0YXBpYWRtaW4uY29tMD4GA1UdIAQ3MDUw
|
||||
MwYGZ4EMAQIBMCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuZGlnaWNlcnQuY29t
|
||||
L0NQUzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF
|
||||
BwMCMIGABggrBgEFBQcBAQR0MHIwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRp
|
||||
Z2ljZXJ0LmNvbTBKBggrBgEFBQcwAoY+aHR0cDovL2NhY2VydHMuZGlnaWNlcnQu
|
||||
Y29tL0VuY3J5cHRpb25FdmVyeXdoZXJlRFZUTFNDQS1HMi5jcnQwDAYDVR0TAQH/
|
||||
BAIwADCCAX4GCisGAQQB1nkCBAIEggFuBIIBagFoAHYA1219ENGn9XfCx+lf1wC/
|
||||
+YLJM1pl4dCzAXMXwMjFaXcAAAGYvZSjUAAABAMARzBFAiEA/PxBgTEUC5gfKL20
|
||||
ZqrgGdbcySamDtflh3JdxR4JQXUCIEt/ujuodbeG2nrxnfkt+L+h08maf3Qm0TiS
|
||||
c994RCM+AHYAwjF+V0UZo0XufzjespBB68fCIVoiv3/Vta12mtkOUs0AAAGYvZSj
|
||||
igAABAMARzBFAiAlz51wosOOTyuxzj6LrdIYuShO0FHTSpWJrF0B/bHHKQIhANkS
|
||||
QaufbcAKIChv8Jt7zBgPdhGkT+2MlZVERwanjHliAHYAlE5Dh/rswe+B8xkkJqgY
|
||||
ZQHH0184AgE/cmd9VTcuGdgAAAGYvZSjnQAABAMARzBFAiB+MXarEEExSmxyrTXV
|
||||
RLt4eDU/wXu2n3xaYQagt8WMHwIhAIneSXcWtQpBc/dyQL3TH/egJDjgMgl8l/F+
|
||||
F6VOA30RMA0GCSqGSIb3DQEBCwUAA4IBAQAv3uihVpCQL8LmE20ztwrkj2E4YjuG
|
||||
CCb2eQp0n3KrUTU5Glsi/8leDTSLFRB5yiPtsE3S1L8AJGgZYMqwXmg/9kGIJJrP
|
||||
hseJHjfjCntPhiWm9roN1NBeqBPiaJzjg/YqK1t5Uoz350Byyx2UZGkVSjRpy7tz
|
||||
iy3ZvDfTQhpZxjsWEO6NsKlzu96JgnscYvUkVTyf9guGuqVE4lrWk3/6rw4WhDSc
|
||||
IPUPFaw296ooa6aITyWzg2CqIuusrHYV2ATgSHzQZeY7vJbIivrXPPKtUYnm7wW4
|
||||
X7eI4thVlUaRpUEJI1L19LlE4CmFmI/Xiqdk/PeSnYEpF0TaeHLe/Gac
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEqjCCA5KgAwIBAgIQDeD/te5iy2EQn2CMnO1e0zANBgkqhkiG9w0BAQsFADBh
|
||||
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
||||
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
|
||||
MjAeFw0xNzExMjcxMjQ2NDBaFw0yNzExMjcxMjQ2NDBaMG4xCzAJBgNVBAYTAlVT
|
||||
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
|
||||
b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH
|
||||
MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO8Uf46i/nr7pkgTDqnE
|
||||
eSIfCFqvPnUq3aF1tMJ5hh9MnO6Lmt5UdHfBGwC9Si+XjK12cjZgxObsL6Rg1njv
|
||||
NhAMJ4JunN0JGGRJGSevbJsA3sc68nbPQzuKp5Jc8vpryp2mts38pSCXorPR+sch
|
||||
QisKA7OSQ1MjcFN0d7tbrceWFNbzgL2csJVQeogOBGSe/KZEIZw6gXLKeFe7mupn
|
||||
NYJROi2iC11+HuF79iAttMc32Cv6UOxixY/3ZV+LzpLnklFq98XORgwkIJL1HuvP
|
||||
ha8yvb+W6JislZJL+HLFtidoxmI7Qm3ZyIV66W533DsGFimFJkz3y0GeHWuSVMbI
|
||||
lfsCAwEAAaOCAU8wggFLMB0GA1UdDgQWBBR435GQX+7erPbFdevVTFVT7yRKtjAf
|
||||
BgNVHSMEGDAWgBROIlQgGJXm427mD/r6uRLtBhePOTAOBgNVHQ8BAf8EBAMCAYYw
|
||||
HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C
|
||||
AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
|
||||
Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu
|
||||
Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdEcyLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG
|
||||
/WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT
|
||||
MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAoBs1eCLKakLtVRPFRjBIJ9LJ
|
||||
L0s8ZWum8U8/1TMVkQMBn+CPb5xnCD0GSA6L/V0ZFrMNqBirrr5B241OesECvxIi
|
||||
98bZ90h9+q/X5eMyOD35f8YTaEMpdnQCnawIwiHx06/0BfiTj+b/XQih+mqt3ZXe
|
||||
xNCJqKexdiB2IWGSKcgahPacWkk/BAQFisKIFYEqHzV974S3FAz/8LIfD58xnsEN
|
||||
GfzyIDkH3JrwYZ8caPTf6ZX9M1GrISN8HnWTtdNCH2xEajRa/h9ZBXjUyFKQrGk2
|
||||
n2hcLrfZSbynEC/pSw/ET7H5nWwckjmAJ1l9fcnbqkU/pf6uMQmnfl0JQjJNSg==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,7 @@
|
||||
# 前端静态文件目录
|
||||
|
||||
请将前端构建产物放置于此目录。
|
||||
|
||||
构建后应包含:
|
||||
- index.html
|
||||
- static/ (或其他静态资源)
|
||||
Reference in New Issue
Block a user