mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-21 04:46:26 +00:00
@@ -11,13 +11,13 @@ ENV TZ Asia/Shanghai
|
|||||||
WORKDIR /home
|
WORKDIR /home
|
||||||
|
|
||||||
# 将当前主机目录全部文件复制至容器工作目录
|
# 将当前主机目录全部文件复制至容器工作目录
|
||||||
COPY ./backend .
|
COPY backend/requirements.txt .
|
||||||
|
|
||||||
# 安装依赖
|
# 安装依赖
|
||||||
RUN pip install --no-cache-dir -r ./requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||||
|
|
||||||
# 运行应用
|
# 运行应用
|
||||||
CMD ["python", "main.py", "run", "--env=prod"]
|
CMD ["python", "main.py", "run", "--env=prod"]
|
||||||
|
|
||||||
# 暴露端口
|
# 暴露端口
|
||||||
EXPOSE 8000
|
EXPOSE 8001
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
# 使用官方的 Python 3.10 镜像作为基础镜像
|
|
||||||
FROM nginx:latest
|
|
||||||
|
|
||||||
# 使用 LABEL 替代 MAINTAINER
|
|
||||||
LABEL maintainer="948080782@qq.com"
|
|
||||||
|
|
||||||
# 设置时区
|
|
||||||
ENV TZ Asia/Shanghai
|
|
||||||
|
|
||||||
# 设置容器内工作目录
|
|
||||||
WORKDIR /home
|
|
||||||
|
|
||||||
# 将当前主机目录全部文件复制至容器工作目录
|
|
||||||
COPY ./frontend/dist /usr/share/nginx/html
|
|
||||||
|
|
||||||
# 用本地的nginx配置文件覆盖镜像的Nginx配置
|
|
||||||
COPY ./nginx.conf /etc/nginx/nginx.conf
|
|
||||||
|
|
||||||
# 暴露端口
|
|
||||||
EXPOSE 80
|
|
||||||
@@ -225,6 +225,24 @@ git clone https://gitee.com/tao__tao/fastapi_vue3_admin.git
|
|||||||
- Username: `admin` Password: `123456`
|
- Username: `admin` Password: `123456`
|
||||||
- API URL: <http://127.0.0.1:8000/api/v1/docs>
|
- API URL: <http://127.0.0.1:8000/api/v1/docs>
|
||||||
|
|
||||||
|
### Docker Deployment
|
||||||
|
|
||||||
|
- cd fastapi_vue3_amdin/frontend
|
||||||
|
- npm run build (Ensure the dist directory exists; otherwise, errors will occur during execution)
|
||||||
|
- cd fastapi_vue3_amdin
|
||||||
|
- docker compose up -d
|
||||||
|
- Notes:
|
||||||
|
- In the frontend .env.production file, change VITE_API_BASE_URL to the public IP address.
|
||||||
|
- In the backend .env.prod file, set MYSQL_HOST and REDIS_HOST to private IP addresses.
|
||||||
|
- Common Issues:
|
||||||
|
- Backend fails to start: Usually because the initialization script was not executed. The script directory is backend/sql/mysql_xxx.sql. Another possibility is that the MySQL or Redis services are not running and need to be started manually.
|
||||||
|
- Deployment Order:
|
||||||
|
- 1. Start MySQL and Redis services
|
||||||
|
- 2. Execute database initialization scripts.
|
||||||
|
- 3. Start the backend service.
|
||||||
|
- 4. Start the frontend service.
|
||||||
|
- Access URL:Public IP address on port 80; login with username admin and password 123456.
|
||||||
|
|
||||||
## 🔧 Module Showcase
|
## 🔧 Module Showcase
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ fastapi_vue_admin
|
|||||||
git clone https://gitee.com/tao__tao/fastapi_vue3_admin.git
|
git clone https://gitee.com/tao__tao/fastapi_vue3_admin.git
|
||||||
```
|
```
|
||||||
|
|
||||||
### 后端
|
### 本地后端启动
|
||||||
|
|
||||||
1. 安装依赖
|
1. 安装依赖
|
||||||
|
|
||||||
@@ -177,7 +177,7 @@ git clone https://gitee.com/tao__tao/fastapi_vue3_admin.git
|
|||||||
# python main.py upgrade --env=dev(不加默认为dev)
|
# python main.py upgrade --env=dev(不加默认为dev)
|
||||||
```
|
```
|
||||||
|
|
||||||
### 前端
|
### 本地前端启动
|
||||||
|
|
||||||
1. 安装依赖
|
1. 安装依赖
|
||||||
|
|
||||||
@@ -198,7 +198,7 @@ git clone https://gitee.com/tao__tao/fastapi_vue3_admin.git
|
|||||||
npm run build
|
npm run build
|
||||||
```
|
```
|
||||||
|
|
||||||
### 小程序
|
### 本地小程序启动
|
||||||
|
|
||||||
1. 安装依赖
|
1. 安装依赖
|
||||||
|
|
||||||
@@ -219,12 +219,31 @@ git clone https://gitee.com/tao__tao/fastapi_vue3_admin.git
|
|||||||
npm run build
|
npm run build
|
||||||
```
|
```
|
||||||
|
|
||||||
### 访问项目
|
### 本地访问项目
|
||||||
|
|
||||||
- 前端地址:<http://127.0.0.1:5180>
|
- 前端地址:<http://127.0.0.1:5180>
|
||||||
- 账号:`admin` 密码:`123456`
|
- 账号:`admin` 密码:`123456`
|
||||||
- 接口地址:<http://127.0.0.1:8000/api/v1/docs>
|
- 接口地址:<http://127.0.0.1:8000/api/v1/docs>
|
||||||
|
|
||||||
|
### docker 部署
|
||||||
|
|
||||||
|
- cd fastapi_vue3_amdin/frontend
|
||||||
|
- npm run build (保证dist前端打包内容存在,否则运行会报错)
|
||||||
|
- cd fastapi_vue3_amdin
|
||||||
|
- docker compose up -d
|
||||||
|
- 注意事项:
|
||||||
|
- 前端.env.production 中 VITE_API_BASE_URL需要修改为公网地址
|
||||||
|
- 后端.env.prod 中 MYSQL_HOST、REDIS_HOST需要改为私网地址
|
||||||
|
- 遇到问题:
|
||||||
|
- 后端启动报错:一般是由于初始化脚本没有执行,脚本目录:backend/sql/mysql_xxx.sql
|
||||||
|
- 还有可能是因为mysql、redis中间件没有启动,需要手动启动
|
||||||
|
- 部署顺序:
|
||||||
|
- 1. 启动mysql、redis中间件
|
||||||
|
- 2. 执行初始化脚本
|
||||||
|
- 3. 启动后端服务
|
||||||
|
- 4. 启动前端服务
|
||||||
|
- 访问地址:公网地址,80端口;登录admin/123456
|
||||||
|
|
||||||
## 🔧 模块展示
|
## 🔧 模块展示
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
|||||||
Binary file not shown.
+4
-13
@@ -38,14 +38,12 @@ services:
|
|||||||
# 构建镜像
|
# 构建镜像
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile.backend
|
dockerfile: Dockerfile
|
||||||
# 端口映射
|
# 端口映射
|
||||||
ports:
|
ports:
|
||||||
- "8001:8001"
|
- "8001:8001"
|
||||||
volumes:
|
volumes:
|
||||||
- /home/backend/static:/home/backend/static
|
- ./backend:/home
|
||||||
- /home/backend/logs:/home/backend/logs
|
|
||||||
- /home/backend/env:/home/backend/env
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
networks:
|
networks:
|
||||||
- backend-network
|
- backend-network
|
||||||
@@ -59,14 +57,11 @@ services:
|
|||||||
container_name: nginx
|
container_name: nginx
|
||||||
image: "nginx:latest"
|
image: "nginx:latest"
|
||||||
restart: always
|
restart: always
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: Dockerfile.frontend
|
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:80"
|
||||||
volumes:
|
volumes:
|
||||||
- /home/frontend/nginx/conf:/etc/nginx/conf
|
- ./nginx.conf:/etc/nginx/nginx.conf
|
||||||
- /home/frontend/nginx/dist:/usr/share/nginx/html
|
- ./frontend/dist:/usr/share/nginx/html
|
||||||
networks:
|
networks:
|
||||||
- frontend_network
|
- frontend_network
|
||||||
depends_on:
|
depends_on:
|
||||||
@@ -76,16 +71,12 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
mysql_network:
|
mysql_network:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
name: mysql_network
|
|
||||||
redis_network:
|
redis_network:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
name: redis_network
|
|
||||||
frontend_network:
|
frontend_network:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
name: frontend_network
|
|
||||||
backend-network:
|
backend-network:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
name: backend-network
|
|
||||||
|
|
||||||
# 文件挂载
|
# 文件挂载
|
||||||
volumes:
|
volumes:
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ VITE_APP_TITLE=生产环境
|
|||||||
VITE_APP_BASE_API=/api/v1
|
VITE_APP_BASE_API=/api/v1
|
||||||
|
|
||||||
# 网络请求公用地址
|
# 网络请求公用地址
|
||||||
VITE_API_BASE_URL='https://fastapi-vue-admin.cn'
|
VITE_API_BASE_URL='http://8.137.99.5:8001'
|
||||||
|
|
||||||
# 请求超时时间
|
# 请求超时时间
|
||||||
VITE_TIMEOUT=10000
|
VITE_TIMEOUT=10000
|
||||||
@@ -214,24 +214,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-tabs__item">
|
|
||||||
<a href="/doc/build.html" class="md-tabs__link">
|
|
||||||
|
|
||||||
|
|
||||||
部署指南
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-tabs__item">
|
<li class="md-tabs__item">
|
||||||
<a href="/doc/mkdocs.html" class="md-tabs__link">
|
<a href="/doc/mkdocs.html" class="md-tabs__link">
|
||||||
|
|
||||||
@@ -430,7 +412,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
<span class="md-ellipsis">
|
||||||
部署指南
|
文档指南
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
@@ -440,74 +422,6 @@
|
|||||||
|
|
||||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
|
||||||
<label class="md-nav__title" for="__nav_3">
|
<label class="md-nav__title" for="__nav_3">
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
部署指南
|
|
||||||
</label>
|
|
||||||
<ul class="md-nav__list" data-md-scrollfix>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item">
|
|
||||||
<a href="/doc/build.html" class="md-nav__link">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
本地部署
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item md-nav__item--nested">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
|
|
||||||
|
|
||||||
|
|
||||||
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
文档指南
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
|
|
||||||
<label class="md-nav__title" for="__nav_4">
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
<span class="md-nav__icon md-icon"></span>
|
||||||
文档指南
|
文档指南
|
||||||
</label>
|
</label>
|
||||||
|
|||||||
@@ -227,24 +227,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-tabs__item">
|
|
||||||
<a href="build.html" class="md-tabs__link">
|
|
||||||
|
|
||||||
|
|
||||||
部署指南
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-tabs__item">
|
<li class="md-tabs__item">
|
||||||
<a href="mkdocs.html" class="md-tabs__link">
|
<a href="mkdocs.html" class="md-tabs__link">
|
||||||
|
|
||||||
@@ -498,7 +480,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
<span class="md-ellipsis">
|
||||||
部署指南
|
文档指南
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
@@ -508,74 +490,6 @@
|
|||||||
|
|
||||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
|
||||||
<label class="md-nav__title" for="__nav_3">
|
<label class="md-nav__title" for="__nav_3">
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
部署指南
|
|
||||||
</label>
|
|
||||||
<ul class="md-nav__list" data-md-scrollfix>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item">
|
|
||||||
<a href="build.html" class="md-nav__link">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
本地部署
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item md-nav__item--nested">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
|
|
||||||
|
|
||||||
|
|
||||||
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
文档指南
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
|
|
||||||
<label class="md-nav__title" for="__nav_4">
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
<span class="md-nav__icon md-icon"></span>
|
||||||
文档指南
|
文档指南
|
||||||
</label>
|
</label>
|
||||||
|
|||||||
@@ -1,998 +0,0 @@
|
|||||||
|
|
||||||
<!doctype html>
|
|
||||||
<html lang="zh" class="no-js">
|
|
||||||
<head>
|
|
||||||
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
||||||
|
|
||||||
<meta name="description" content="这里是网站描述">
|
|
||||||
|
|
||||||
|
|
||||||
<meta name="author" content="948080782x@qq.com">
|
|
||||||
|
|
||||||
|
|
||||||
<link rel="canonical" href="http://127.0.0.1:8888/doc/build.html">
|
|
||||||
|
|
||||||
|
|
||||||
<link rel="prev" href="frontend.html">
|
|
||||||
|
|
||||||
|
|
||||||
<link rel="next" href="mkdocs.html">
|
|
||||||
|
|
||||||
|
|
||||||
<link rel="icon" href="../assets/images/favicon.png">
|
|
||||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.7">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<title>本地部署 - Fastapi_Vue_Admin在线文档</title>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="../assets/stylesheets/main.8608ea7d.min.css">
|
|
||||||
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
|
||||||
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</head>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
|
|
||||||
|
|
||||||
|
|
||||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
|
||||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
|
||||||
<label class="md-overlay" for="__drawer"></label>
|
|
||||||
<div data-md-component="skip">
|
|
||||||
|
|
||||||
|
|
||||||
<a href="#_1" class="md-skip">
|
|
||||||
跳转至
|
|
||||||
</a>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div data-md-component="announce">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<header class="md-header md-header--shadow md-header--lifted" data-md-component="header">
|
|
||||||
<nav class="md-header__inner md-grid" aria-label="页眉">
|
|
||||||
<a href="../index.html" title="Fastapi_Vue_Admin在线文档" class="md-header__button md-logo" aria-label="Fastapi_Vue_Admin在线文档" data-md-component="logo">
|
|
||||||
|
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
<label class="md-header__button md-icon" for="__drawer">
|
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
|
||||||
</label>
|
|
||||||
<div class="md-header__title" data-md-component="header-title">
|
|
||||||
<div class="md-header__ellipsis">
|
|
||||||
<div class="md-header__topic">
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
Fastapi_Vue_Admin在线文档
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="md-header__topic" data-md-component="header-topic">
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
|
|
||||||
本地部署
|
|
||||||
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<label class="md-header__button md-icon" for="__search">
|
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
|
||||||
</label>
|
|
||||||
<div class="md-search" data-md-component="search" role="dialog">
|
|
||||||
<label class="md-search__overlay" for="__search"></label>
|
|
||||||
<div class="md-search__inner" role="search">
|
|
||||||
<form class="md-search__form" name="search">
|
|
||||||
<input type="text" class="md-search__input" name="query" aria-label="搜索" placeholder="搜索" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
|
||||||
<label class="md-search__icon md-icon" for="__search">
|
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
|
||||||
</label>
|
|
||||||
<nav class="md-search__options" aria-label="查找">
|
|
||||||
|
|
||||||
<button type="reset" class="md-search__icon md-icon" title="清空当前内容" aria-label="清空当前内容" tabindex="-1">
|
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
|
||||||
</button>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<div class="md-search__suggest" data-md-component="search-suggest"></div>
|
|
||||||
|
|
||||||
</form>
|
|
||||||
<div class="md-search__output">
|
|
||||||
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
|
||||||
<div class="md-search-result" data-md-component="search-result">
|
|
||||||
<div class="md-search-result__meta">
|
|
||||||
正在初始化搜索引擎
|
|
||||||
</div>
|
|
||||||
<ol class="md-search-result__list" role="presentation"></ol>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="md-header__source">
|
|
||||||
<a href="https://gitee.com/tao__tao/fastapi_vue3_admin.git" title="前往仓库" class="md-source" data-md-component="source">
|
|
||||||
<div class="md-source__icon md-icon">
|
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
|
|
||||||
</div>
|
|
||||||
<div class="md-source__repository">
|
|
||||||
fastapi_vue_admin
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<nav class="md-tabs" aria-label="标签" data-md-component="tabs">
|
|
||||||
<div class="md-grid">
|
|
||||||
<ul class="md-tabs__list">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-tabs__item">
|
|
||||||
<a href="../index.html" class="md-tabs__link">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
项目概述
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-tabs__item">
|
|
||||||
<a href="backend.html" class="md-tabs__link">
|
|
||||||
|
|
||||||
|
|
||||||
开发指南
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-tabs__item md-tabs__item--active">
|
|
||||||
<a href="build.html" class="md-tabs__link">
|
|
||||||
|
|
||||||
|
|
||||||
部署指南
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-tabs__item">
|
|
||||||
<a href="mkdocs.html" class="md-tabs__link">
|
|
||||||
|
|
||||||
|
|
||||||
文档指南
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="md-container" data-md-component="container">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<main class="md-main" data-md-component="main">
|
|
||||||
<div class="md-main__inner md-grid">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
|
||||||
<div class="md-sidebar__scrollwrap">
|
|
||||||
<div class="md-sidebar__inner">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="导航栏" data-md-level="0">
|
|
||||||
<label class="md-nav__title" for="__drawer">
|
|
||||||
<a href="../index.html" title="Fastapi_Vue_Admin在线文档" class="md-nav__button md-logo" aria-label="Fastapi_Vue_Admin在线文档" data-md-component="logo">
|
|
||||||
|
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
Fastapi_Vue_Admin在线文档
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<div class="md-nav__source">
|
|
||||||
<a href="https://gitee.com/tao__tao/fastapi_vue3_admin.git" title="前往仓库" class="md-source" data-md-component="source">
|
|
||||||
<div class="md-source__icon md-icon">
|
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
|
|
||||||
</div>
|
|
||||||
<div class="md-source__repository">
|
|
||||||
fastapi_vue_admin
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<ul class="md-nav__list" data-md-scrollfix>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item">
|
|
||||||
<a href="../index.html" class="md-nav__link">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
项目概述
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item md-nav__item--nested">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
|
|
||||||
|
|
||||||
|
|
||||||
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
开发指南
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
|
|
||||||
<label class="md-nav__title" for="__nav_2">
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
开发指南
|
|
||||||
</label>
|
|
||||||
<ul class="md-nav__list" data-md-scrollfix>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item">
|
|
||||||
<a href="backend.html" class="md-nav__link">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
后端开发
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item">
|
|
||||||
<a href="frontend.html" class="md-nav__link">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
前端开发
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
|
|
||||||
|
|
||||||
|
|
||||||
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
部署指南
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
|
|
||||||
<label class="md-nav__title" for="__nav_3">
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
部署指南
|
|
||||||
</label>
|
|
||||||
<ul class="md-nav__list" data-md-scrollfix>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item md-nav__item--active">
|
|
||||||
|
|
||||||
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<label class="md-nav__link md-nav__link--active" for="__toc">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
本地部署
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<a href="build.html" class="md-nav__link md-nav__link--active">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
本地部署
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<nav class="md-nav md-nav--secondary" aria-label="目录">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<label class="md-nav__title" for="__toc">
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
目录
|
|
||||||
</label>
|
|
||||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
||||||
|
|
||||||
<li class="md-nav__item">
|
|
||||||
<a href="#docker" class="md-nav__link">
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
docker
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li class="md-nav__item">
|
|
||||||
<a href="#docker-componse" class="md-nav__link">
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
docker-componse
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li class="md-nav__item">
|
|
||||||
<a href="#nginx" class="md-nav__link">
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
nginx
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item md-nav__item--nested">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
|
|
||||||
|
|
||||||
|
|
||||||
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
文档指南
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
|
|
||||||
<label class="md-nav__title" for="__nav_4">
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
文档指南
|
|
||||||
</label>
|
|
||||||
<ul class="md-nav__list" data-md-scrollfix>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item">
|
|
||||||
<a href="mkdocs.html" class="md-nav__link">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
文档开发
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
|
||||||
<div class="md-sidebar__scrollwrap">
|
|
||||||
<div class="md-sidebar__inner">
|
|
||||||
|
|
||||||
|
|
||||||
<nav class="md-nav md-nav--secondary" aria-label="目录">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<label class="md-nav__title" for="__toc">
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
目录
|
|
||||||
</label>
|
|
||||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
||||||
|
|
||||||
<li class="md-nav__item">
|
|
||||||
<a href="#docker" class="md-nav__link">
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
docker
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li class="md-nav__item">
|
|
||||||
<a href="#docker-componse" class="md-nav__link">
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
docker-componse
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li class="md-nav__item">
|
|
||||||
<a href="#nginx" class="md-nav__link">
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
nginx
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="md-content" data-md-component="content">
|
|
||||||
<article class="md-content__inner md-typeset">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h1 id="_1">部署介绍</h1>
|
|
||||||
<h2 id="docker">docker</h2>
|
|
||||||
<pre><code class="language-dockerfile"># 使用官方的 Python 3.10 镜像作为基础镜像
|
|
||||||
FROM python:3.10
|
|
||||||
# 使用 LABEL 替代 MAINTAINER
|
|
||||||
LABEL maintainer="管理员"
|
|
||||||
# 设置 python 环境变量
|
|
||||||
ENV PYTHONUNBUFFERED 1
|
|
||||||
ENV PYTHONDONTWRITEBYTECODE 1
|
|
||||||
# 设置时区
|
|
||||||
ENV TZ Asia/Shanghai
|
|
||||||
|
|
||||||
# 升级pip版本
|
|
||||||
# RUN python -m pip install --upgrade pip
|
|
||||||
|
|
||||||
# 创建容器工作目录
|
|
||||||
RUN mkdir -p /opt/fastapi_project
|
|
||||||
# 设置容器内工作目录
|
|
||||||
WORKDIR /opt/fastapi_project
|
|
||||||
# 将当前主机目录全部文件复制至容器工作目录
|
|
||||||
COPY ./requirements.txt /code/requirements.txt
|
|
||||||
# 安装依赖
|
|
||||||
RUN pip install --no-cache-dir --upgrade -r /opt/fastapiproject/backend/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
|
||||||
|
|
||||||
# 部署 nginx
|
|
||||||
RUN apt-get update && apt-get install -y nginx
|
|
||||||
RUN rm /etc/nginx/sites-enabled/default
|
|
||||||
COPY nginx.conf /etc/nginx/sites-available/
|
|
||||||
RUN ln -s /etc/nginx/sites-available/nginx.conf /etc/nginx/sites-enabled/
|
|
||||||
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
|
|
||||||
|
|
||||||
# # 部署mysql
|
|
||||||
# RUN apt-get install -y mysql-server
|
|
||||||
|
|
||||||
# # 部署redis
|
|
||||||
# RUN apt-get install -y redis-server
|
|
||||||
|
|
||||||
# # 部署mongo
|
|
||||||
# RUN apt-get install -y mongodb
|
|
||||||
|
|
||||||
|
|
||||||
#CMD 运行以下命令,daemon off后台运行,否则启动完就自动关闭
|
|
||||||
CMD ["nginx", "-g", "daemon off;"]
|
|
||||||
|
|
||||||
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
|
|
||||||
# 暴露端口
|
|
||||||
EXPOSE 8000
|
|
||||||
# python main.py run 或者 uvicorn main:create_app --host 0.0.0.0 --port 8000 --workers 4
|
|
||||||
ENTRYPOINT ["uvicorn", "backend.main:create_app", "--host", "0.0.0.0", "--port", "8000", "--workers", 4]
|
|
||||||
# ENTRYPOINT ["gunicorn", "-c", "gunicorn.py", "main:create_app"]
|
|
||||||
|
|
||||||
</code></pre>
|
|
||||||
<h2 id="docker-componse">docker-componse</h2>
|
|
||||||
<pre><code class="language-yaml">version: "3.10.11"
|
|
||||||
|
|
||||||
# 应用服务
|
|
||||||
services:
|
|
||||||
# 应用服务
|
|
||||||
fastapi_getway:
|
|
||||||
# 容器名称
|
|
||||||
container_name: fastapi
|
|
||||||
# 镜像名称
|
|
||||||
image: fastapi
|
|
||||||
env_file: .env
|
|
||||||
networks:
|
|
||||||
- db_network
|
|
||||||
- web_network
|
|
||||||
# 构建镜像
|
|
||||||
build:
|
|
||||||
context: ./
|
|
||||||
dockerfile: Dockerfile
|
|
||||||
#build: .
|
|
||||||
# 将容器运行在特权模式下,意味着容器内的进程将具
|
|
||||||
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
|
|
||||||
privileged: true
|
|
||||||
# 指定容器中运行的用户
|
|
||||||
user: root
|
|
||||||
# 启动策略为始终重启
|
|
||||||
restart: always
|
|
||||||
# 设置网络模式为host模式
|
|
||||||
network_mode: host
|
|
||||||
# 端口映射
|
|
||||||
ports:
|
|
||||||
- 8020:8020
|
|
||||||
# 文件挂载
|
|
||||||
volumes:
|
|
||||||
- ./:/data/apps
|
|
||||||
- ./uploads:/data/apps/uploads
|
|
||||||
# 执行命令
|
|
||||||
command: python app.py runserver 0.0.0.0:8020 --noreload
|
|
||||||
# 日志配置
|
|
||||||
logging:
|
|
||||||
driver: "json-file"
|
|
||||||
options:
|
|
||||||
max-size: "500m"
|
|
||||||
max-file: "10"
|
|
||||||
# nginx服务
|
|
||||||
nginx:
|
|
||||||
container_name: nginx
|
|
||||||
restart: always
|
|
||||||
image: "nginx:latest"
|
|
||||||
ports:
|
|
||||||
- "5000:5000"
|
|
||||||
volumes:
|
|
||||||
- ./nginx:/etc/nginx/conf.d
|
|
||||||
networks:
|
|
||||||
- web_network
|
|
||||||
depends_on:
|
|
||||||
- flask_api
|
|
||||||
|
|
||||||
# 中间件服务
|
|
||||||
mysql:
|
|
||||||
container_name: mysql
|
|
||||||
image: mysql:latest
|
|
||||||
restart: always
|
|
||||||
ports:
|
|
||||||
- "3306:3306"
|
|
||||||
# 数据卷挂载
|
|
||||||
|
|
||||||
networks:
|
|
||||||
db_network:
|
|
||||||
driver: bridge
|
|
||||||
web_network:
|
|
||||||
driver: bridge
|
|
||||||
|
|
||||||
</code></pre>
|
|
||||||
<h2 id="nginx">nginx</h2>
|
|
||||||
<pre><code class="language-nginx">########### 每个指令必须有分号结束。#################
|
|
||||||
user administrator administrators; # 配置用户或组,默认为nobody nobody
|
|
||||||
worker_processes 2; # 允许生成的进程数,默认为1
|
|
||||||
pid /nginx/pid/nginx.pid; # 指定 Nginx 进程运行文件存放地址
|
|
||||||
error_log log/error.log debug; # 制定日志路径,级别。这个设置可以放入全局块、http块、server块,级别依次为:debug|info|notice|warn|error|crit|alert|emerg
|
|
||||||
|
|
||||||
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 off;
|
|
||||||
|
|
||||||
# 自定义日志格式
|
|
||||||
log_format access '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for';
|
|
||||||
|
|
||||||
# 启用访问日志
|
|
||||||
access_log log/access.log access; # combined为日志格式的默认值
|
|
||||||
|
|
||||||
sendfile on; # 允许sendfile方式传输文件,默认为off,可以在http块、server块、location块
|
|
||||||
sendfile_max_chunk 100k; # 每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限
|
|
||||||
keepalive_timeout 65; # 连接超时时间,默认为75秒,可以在http、server、location块
|
|
||||||
|
|
||||||
# 定义上游服务器
|
|
||||||
upstream mysvr {
|
|
||||||
server 127.0.0.1:7878;
|
|
||||||
server 192.168.10.121:3333 backup; # 热备
|
|
||||||
}
|
|
||||||
|
|
||||||
# 错误页
|
|
||||||
error_page 404 https://www.baidu.com;
|
|
||||||
|
|
||||||
# 定义一个 server 块
|
|
||||||
server {
|
|
||||||
# 单连接请求上限次数
|
|
||||||
keepalive_requests 120;
|
|
||||||
|
|
||||||
# 监听端口
|
|
||||||
listen 4545;
|
|
||||||
|
|
||||||
# 监听地址
|
|
||||||
server_name 127.0.0.1;
|
|
||||||
|
|
||||||
# 前端代理
|
|
||||||
location / {
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
root /web/front/;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header REMOTE-HOST $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
try_files $uri $uri/ /index.html;
|
|
||||||
index /index.html;
|
|
||||||
}
|
|
||||||
|
|
||||||
# 后端代理
|
|
||||||
location /api/ {
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header REMOTE-HOST $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
add_header Access-Control-Allow-Methods *;
|
|
||||||
add_header Access-Control-Allow-Origin $http_origin;
|
|
||||||
proxy_pass http://127.0.0.1:8010/;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</code></pre>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</article>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<footer class="md-footer">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<nav class="md-footer__inner md-grid" aria-label="页脚" >
|
|
||||||
|
|
||||||
|
|
||||||
<a href="frontend.html" class="md-footer__link md-footer__link--prev" aria-label="上一页: 前端开发">
|
|
||||||
<div class="md-footer__button md-icon">
|
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
|
||||||
</div>
|
|
||||||
<div class="md-footer__title">
|
|
||||||
<span class="md-footer__direction">
|
|
||||||
上一页
|
|
||||||
</span>
|
|
||||||
<div class="md-ellipsis">
|
|
||||||
前端开发
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="mkdocs.html" class="md-footer__link md-footer__link--next" aria-label="下一页: 文档开发">
|
|
||||||
<div class="md-footer__title">
|
|
||||||
<span class="md-footer__direction">
|
|
||||||
下一页
|
|
||||||
</span>
|
|
||||||
<div class="md-ellipsis">
|
|
||||||
文档开发
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="md-footer__button md-icon">
|
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="md-footer-meta md-typeset">
|
|
||||||
<div class="md-footer-meta__inner md-grid">
|
|
||||||
<div class="md-copyright">
|
|
||||||
|
|
||||||
<div class="md-copyright__highlight">
|
|
||||||
Copyright © 2022 <a href="http://127.0.0.1:8888">Powered by xxxxx@qq.com 版权所有</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
Made with
|
|
||||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
|
||||||
Material for MkDocs
|
|
||||||
</a>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="md-dialog" data-md-component="dialog">
|
|
||||||
<div class="md-dialog__inner md-typeset"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.tabs.sticky", "navigation.instant", "search.highlight", "search.suggest", "navigation.footer"], "search": "../assets/javascripts/workers/search.f8cc74c7.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}}</script>
|
|
||||||
|
|
||||||
|
|
||||||
<script src="../assets/javascripts/bundle.c8b220af.min.js"></script>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
<link rel="prev" href="backend.html">
|
<link rel="prev" href="backend.html">
|
||||||
|
|
||||||
|
|
||||||
<link rel="next" href="build.html">
|
<link rel="next" href="mkdocs.html">
|
||||||
|
|
||||||
|
|
||||||
<link rel="icon" href="../assets/images/favicon.png">
|
<link rel="icon" href="../assets/images/favicon.png">
|
||||||
@@ -227,24 +227,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-tabs__item">
|
|
||||||
<a href="build.html" class="md-tabs__link">
|
|
||||||
|
|
||||||
|
|
||||||
部署指南
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-tabs__item">
|
<li class="md-tabs__item">
|
||||||
<a href="mkdocs.html" class="md-tabs__link">
|
<a href="mkdocs.html" class="md-tabs__link">
|
||||||
|
|
||||||
@@ -558,7 +540,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
<span class="md-ellipsis">
|
||||||
部署指南
|
文档指南
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
@@ -568,74 +550,6 @@
|
|||||||
|
|
||||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
|
||||||
<label class="md-nav__title" for="__nav_3">
|
<label class="md-nav__title" for="__nav_3">
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
部署指南
|
|
||||||
</label>
|
|
||||||
<ul class="md-nav__list" data-md-scrollfix>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item">
|
|
||||||
<a href="build.html" class="md-nav__link">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
本地部署
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item md-nav__item--nested">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
|
|
||||||
|
|
||||||
|
|
||||||
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
文档指南
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
|
|
||||||
<label class="md-nav__title" for="__nav_4">
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
<span class="md-nav__icon md-icon"></span>
|
||||||
文档指南
|
文档指南
|
||||||
</label>
|
</label>
|
||||||
@@ -852,13 +766,13 @@ npm run lint
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="build.html" class="md-footer__link md-footer__link--next" aria-label="下一页: 本地部署">
|
<a href="mkdocs.html" class="md-footer__link md-footer__link--next" aria-label="下一页: 文档开发">
|
||||||
<div class="md-footer__title">
|
<div class="md-footer__title">
|
||||||
<span class="md-footer__direction">
|
<span class="md-footer__direction">
|
||||||
下一页
|
下一页
|
||||||
</span>
|
</span>
|
||||||
<div class="md-ellipsis">
|
<div class="md-ellipsis">
|
||||||
本地部署
|
文档开发
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="md-footer__button md-icon">
|
<div class="md-footer__button md-icon">
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
<link rel="canonical" href="http://127.0.0.1:8888/doc/mkdocs.html">
|
<link rel="canonical" href="http://127.0.0.1:8888/doc/mkdocs.html">
|
||||||
|
|
||||||
|
|
||||||
<link rel="prev" href="build.html">
|
<link rel="prev" href="frontend.html">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -220,24 +220,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-tabs__item">
|
|
||||||
<a href="build.html" class="md-tabs__link">
|
|
||||||
|
|
||||||
|
|
||||||
部署指南
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -421,74 +403,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item md-nav__item--nested">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
|
|
||||||
|
|
||||||
|
|
||||||
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
部署指南
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
|
|
||||||
<label class="md-nav__title" for="__nav_3">
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
部署指南
|
|
||||||
</label>
|
|
||||||
<ul class="md-nav__list" data-md-scrollfix>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item">
|
|
||||||
<a href="build.html" class="md-nav__link">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
本地部署
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -507,10 +421,10 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" checked>
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
|
||||||
|
|
||||||
|
|
||||||
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="">
|
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
<span class="md-ellipsis">
|
||||||
@@ -522,8 +436,8 @@
|
|||||||
<span class="md-nav__icon md-icon"></span>
|
<span class="md-nav__icon md-icon"></span>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="true">
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
|
||||||
<label class="md-nav__title" for="__nav_4">
|
<label class="md-nav__title" for="__nav_3">
|
||||||
<span class="md-nav__icon md-icon"></span>
|
<span class="md-nav__icon md-icon"></span>
|
||||||
文档指南
|
文档指南
|
||||||
</label>
|
</label>
|
||||||
@@ -882,7 +796,7 @@ mkdocs-git-revision-date-localized-plugin
|
|||||||
<nav class="md-footer__inner md-grid" aria-label="页脚" >
|
<nav class="md-footer__inner md-grid" aria-label="页脚" >
|
||||||
|
|
||||||
|
|
||||||
<a href="build.html" class="md-footer__link md-footer__link--prev" aria-label="上一页: 本地部署">
|
<a href="frontend.html" class="md-footer__link md-footer__link--prev" aria-label="上一页: 前端开发">
|
||||||
<div class="md-footer__button md-icon">
|
<div class="md-footer__button md-icon">
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
||||||
@@ -892,7 +806,7 @@ mkdocs-git-revision-date-localized-plugin
|
|||||||
上一页
|
上一页
|
||||||
</span>
|
</span>
|
||||||
<div class="md-ellipsis">
|
<div class="md-ellipsis">
|
||||||
本地部署
|
前端开发
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -225,24 +225,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-tabs__item">
|
|
||||||
<a href="doc/build.html" class="md-tabs__link">
|
|
||||||
|
|
||||||
|
|
||||||
部署指南
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-tabs__item">
|
<li class="md-tabs__item">
|
||||||
<a href="doc/mkdocs.html" class="md-tabs__link">
|
<a href="doc/mkdocs.html" class="md-tabs__link">
|
||||||
|
|
||||||
@@ -445,6 +427,15 @@
|
|||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="md-nav__item">
|
||||||
|
<a href="#docker" class="md-nav__link">
|
||||||
|
<span class="md-ellipsis">
|
||||||
|
docker 部署
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
@@ -829,7 +820,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
<span class="md-ellipsis">
|
||||||
部署指南
|
文档指南
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
@@ -839,74 +830,6 @@
|
|||||||
|
|
||||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
|
||||||
<label class="md-nav__title" for="__nav_3">
|
<label class="md-nav__title" for="__nav_3">
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
部署指南
|
|
||||||
</label>
|
|
||||||
<ul class="md-nav__list" data-md-scrollfix>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item">
|
|
||||||
<a href="doc/build.html" class="md-nav__link">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
本地部署
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="md-nav__item md-nav__item--nested">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
|
|
||||||
|
|
||||||
|
|
||||||
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-ellipsis">
|
|
||||||
文档指南
|
|
||||||
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
|
|
||||||
<label class="md-nav__title" for="__nav_4">
|
|
||||||
<span class="md-nav__icon md-icon"></span>
|
<span class="md-nav__icon md-icon"></span>
|
||||||
文档指南
|
文档指南
|
||||||
</label>
|
</label>
|
||||||
@@ -1054,6 +977,15 @@
|
|||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="md-nav__item">
|
||||||
|
<a href="#docker" class="md-nav__link">
|
||||||
|
<span class="md-ellipsis">
|
||||||
|
docker 部署
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
@@ -1578,6 +1510,41 @@
|
|||||||
<li>账号:<code>admin</code> 密码:<code>123456</code></li>
|
<li>账号:<code>admin</code> 密码:<code>123456</code></li>
|
||||||
<li>接口地址:<a href="http://127.0.0.1:8000/api/v1/docs">http://127.0.0.1:8000/api/v1/docs</a></li>
|
<li>接口地址:<a href="http://127.0.0.1:8000/api/v1/docs">http://127.0.0.1:8000/api/v1/docs</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<h3 id="docker">docker 部署</h3>
|
||||||
|
<ul>
|
||||||
|
<li>cd fastapi_vue3_amdin/frontend</li>
|
||||||
|
<li>npm run build (保证dist前端打包内容存在,否则运行会报错)</li>
|
||||||
|
<li>cd fastapi_vue3_amdin</li>
|
||||||
|
<li>docker compose up -d</li>
|
||||||
|
<li>注意事项:</li>
|
||||||
|
<li>前端.env.production 中 VITE_API_BASE_URL需要修改为公网地址</li>
|
||||||
|
<li>后端.env.prod 中 MYSQL_HOST、REDIS_HOST需要改为私网地址</li>
|
||||||
|
<li>遇到问题:</li>
|
||||||
|
<li>后端启动报错:一般是由于初始化脚本没有执行,脚本目录:backend/sql/mysql_xxx.sql</li>
|
||||||
|
<li>还有可能是因为mysql、redis中间件没有启动,需要手动启动</li>
|
||||||
|
<li>部署顺序:</li>
|
||||||
|
<li>
|
||||||
|
<ol>
|
||||||
|
<li>启动mysql、redis中间件</li>
|
||||||
|
</ol>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<ol>
|
||||||
|
<li>执行初始化脚本</li>
|
||||||
|
</ol>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<ol>
|
||||||
|
<li>启动后端服务</li>
|
||||||
|
</ol>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<ol>
|
||||||
|
<li>启动前端服务</li>
|
||||||
|
</ol>
|
||||||
|
</li>
|
||||||
|
<li>访问地址:公网地址,80端口;登录admin/123456</li>
|
||||||
|
</ul>
|
||||||
<h2 id="_11">🔧 模块展示</h2>
|
<h2 id="_11">🔧 模块展示</h2>
|
||||||
<h3 id="_12">登陆</h3>
|
<h3 id="_12">登陆</h3>
|
||||||
<p><img alt="登陆" src="resources/images/login.png" /></p>
|
<p><img alt="登陆" src="resources/images/login.png" /></p>
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 205 KiB After Width: | Height: | Size: 207 KiB |
File diff suppressed because one or more lines are too long
@@ -2,22 +2,18 @@
|
|||||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
<url>
|
<url>
|
||||||
<loc>http://127.0.0.1:8888/index.html</loc>
|
<loc>http://127.0.0.1:8888/index.html</loc>
|
||||||
<lastmod>2025-04-16</lastmod>
|
<lastmod>2025-05-17</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>http://127.0.0.1:8888/doc/backend.html</loc>
|
<loc>http://127.0.0.1:8888/doc/backend.html</loc>
|
||||||
<lastmod>2025-04-16</lastmod>
|
<lastmod>2025-05-17</lastmod>
|
||||||
</url>
|
|
||||||
<url>
|
|
||||||
<loc>http://127.0.0.1:8888/doc/build.html</loc>
|
|
||||||
<lastmod>2025-04-16</lastmod>
|
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>http://127.0.0.1:8888/doc/frontend.html</loc>
|
<loc>http://127.0.0.1:8888/doc/frontend.html</loc>
|
||||||
<lastmod>2025-04-16</lastmod>
|
<lastmod>2025-05-17</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>http://127.0.0.1:8888/doc/mkdocs.html</loc>
|
<loc>http://127.0.0.1:8888/doc/mkdocs.html</loc>
|
||||||
<lastmod>2025-04-16</lastmod>
|
<lastmod>2025-05-17</lastmod>
|
||||||
</url>
|
</url>
|
||||||
</urlset>
|
</urlset>
|
||||||
Binary file not shown.
@@ -1,210 +0,0 @@
|
|||||||
# 部署介绍
|
|
||||||
|
|
||||||
## docker
|
|
||||||
|
|
||||||
``` dockerfile
|
|
||||||
# 使用官方的 Python 3.10 镜像作为基础镜像
|
|
||||||
FROM python:3.10
|
|
||||||
# 使用 LABEL 替代 MAINTAINER
|
|
||||||
LABEL maintainer="管理员"
|
|
||||||
# 设置 python 环境变量
|
|
||||||
ENV PYTHONUNBUFFERED 1
|
|
||||||
ENV PYTHONDONTWRITEBYTECODE 1
|
|
||||||
# 设置时区
|
|
||||||
ENV TZ Asia/Shanghai
|
|
||||||
|
|
||||||
# 升级pip版本
|
|
||||||
# RUN python -m pip install --upgrade pip
|
|
||||||
|
|
||||||
# 创建容器工作目录
|
|
||||||
RUN mkdir -p /opt/fastapi_project
|
|
||||||
# 设置容器内工作目录
|
|
||||||
WORKDIR /opt/fastapi_project
|
|
||||||
# 将当前主机目录全部文件复制至容器工作目录
|
|
||||||
COPY ./requirements.txt /code/requirements.txt
|
|
||||||
# 安装依赖
|
|
||||||
RUN pip install --no-cache-dir --upgrade -r /opt/fastapiproject/backend/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
|
||||||
|
|
||||||
# 部署 nginx
|
|
||||||
RUN apt-get update && apt-get install -y nginx
|
|
||||||
RUN rm /etc/nginx/sites-enabled/default
|
|
||||||
COPY nginx.conf /etc/nginx/sites-available/
|
|
||||||
RUN ln -s /etc/nginx/sites-available/nginx.conf /etc/nginx/sites-enabled/
|
|
||||||
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
|
|
||||||
|
|
||||||
# # 部署mysql
|
|
||||||
# RUN apt-get install -y mysql-server
|
|
||||||
|
|
||||||
# # 部署redis
|
|
||||||
# RUN apt-get install -y redis-server
|
|
||||||
|
|
||||||
# # 部署mongo
|
|
||||||
# RUN apt-get install -y mongodb
|
|
||||||
|
|
||||||
|
|
||||||
#CMD 运行以下命令,daemon off后台运行,否则启动完就自动关闭
|
|
||||||
CMD ["nginx", "-g", "daemon off;"]
|
|
||||||
|
|
||||||
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
|
|
||||||
# 暴露端口
|
|
||||||
EXPOSE 8000
|
|
||||||
# python main.py run 或者 uvicorn main:create_app --host 0.0.0.0 --port 8000 --workers 4
|
|
||||||
ENTRYPOINT ["uvicorn", "backend.main:create_app", "--host", "0.0.0.0", "--port", "8000", "--workers", 4]
|
|
||||||
# ENTRYPOINT ["gunicorn", "-c", "gunicorn.py", "main:create_app"]
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
## docker-componse
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
version: "3.10.11"
|
|
||||||
|
|
||||||
# 应用服务
|
|
||||||
services:
|
|
||||||
# 应用服务
|
|
||||||
fastapi_getway:
|
|
||||||
# 容器名称
|
|
||||||
container_name: fastapi
|
|
||||||
# 镜像名称
|
|
||||||
image: fastapi
|
|
||||||
env_file: .env
|
|
||||||
networks:
|
|
||||||
- db_network
|
|
||||||
- web_network
|
|
||||||
# 构建镜像
|
|
||||||
build:
|
|
||||||
context: ./
|
|
||||||
dockerfile: Dockerfile
|
|
||||||
#build: .
|
|
||||||
# 将容器运行在特权模式下,意味着容器内的进程将具
|
|
||||||
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
|
|
||||||
privileged: true
|
|
||||||
# 指定容器中运行的用户
|
|
||||||
user: root
|
|
||||||
# 启动策略为始终重启
|
|
||||||
restart: always
|
|
||||||
# 设置网络模式为host模式
|
|
||||||
network_mode: host
|
|
||||||
# 端口映射
|
|
||||||
ports:
|
|
||||||
- 8020:8020
|
|
||||||
# 文件挂载
|
|
||||||
volumes:
|
|
||||||
- ./:/data/apps
|
|
||||||
- ./uploads:/data/apps/uploads
|
|
||||||
# 执行命令
|
|
||||||
command: python app.py runserver 0.0.0.0:8020 --noreload
|
|
||||||
# 日志配置
|
|
||||||
logging:
|
|
||||||
driver: "json-file"
|
|
||||||
options:
|
|
||||||
max-size: "500m"
|
|
||||||
max-file: "10"
|
|
||||||
# nginx服务
|
|
||||||
nginx:
|
|
||||||
container_name: nginx
|
|
||||||
restart: always
|
|
||||||
image: "nginx:latest"
|
|
||||||
ports:
|
|
||||||
- "5000:5000"
|
|
||||||
volumes:
|
|
||||||
- ./nginx:/etc/nginx/conf.d
|
|
||||||
networks:
|
|
||||||
- web_network
|
|
||||||
depends_on:
|
|
||||||
- flask_api
|
|
||||||
|
|
||||||
# 中间件服务
|
|
||||||
mysql:
|
|
||||||
container_name: mysql
|
|
||||||
image: mysql:latest
|
|
||||||
restart: always
|
|
||||||
ports:
|
|
||||||
- "3306:3306"
|
|
||||||
# 数据卷挂载
|
|
||||||
|
|
||||||
networks:
|
|
||||||
db_network:
|
|
||||||
driver: bridge
|
|
||||||
web_network:
|
|
||||||
driver: bridge
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
## nginx
|
|
||||||
|
|
||||||
```nginx
|
|
||||||
########### 每个指令必须有分号结束。#################
|
|
||||||
user administrator administrators; # 配置用户或组,默认为nobody nobody
|
|
||||||
worker_processes 2; # 允许生成的进程数,默认为1
|
|
||||||
pid /nginx/pid/nginx.pid; # 指定 Nginx 进程运行文件存放地址
|
|
||||||
error_log log/error.log debug; # 制定日志路径,级别。这个设置可以放入全局块、http块、server块,级别依次为:debug|info|notice|warn|error|crit|alert|emerg
|
|
||||||
|
|
||||||
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 off;
|
|
||||||
|
|
||||||
# 自定义日志格式
|
|
||||||
log_format access '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for';
|
|
||||||
|
|
||||||
# 启用访问日志
|
|
||||||
access_log log/access.log access; # combined为日志格式的默认值
|
|
||||||
|
|
||||||
sendfile on; # 允许sendfile方式传输文件,默认为off,可以在http块、server块、location块
|
|
||||||
sendfile_max_chunk 100k; # 每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限
|
|
||||||
keepalive_timeout 65; # 连接超时时间,默认为75秒,可以在http、server、location块
|
|
||||||
|
|
||||||
# 定义上游服务器
|
|
||||||
upstream mysvr {
|
|
||||||
server 127.0.0.1:7878;
|
|
||||||
server 192.168.10.121:3333 backup; # 热备
|
|
||||||
}
|
|
||||||
|
|
||||||
# 错误页
|
|
||||||
error_page 404 https://www.baidu.com;
|
|
||||||
|
|
||||||
# 定义一个 server 块
|
|
||||||
server {
|
|
||||||
# 单连接请求上限次数
|
|
||||||
keepalive_requests 120;
|
|
||||||
|
|
||||||
# 监听端口
|
|
||||||
listen 4545;
|
|
||||||
|
|
||||||
# 监听地址
|
|
||||||
server_name 127.0.0.1;
|
|
||||||
|
|
||||||
# 前端代理
|
|
||||||
location / {
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
root /web/front/;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header REMOTE-HOST $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
try_files $uri $uri/ /index.html;
|
|
||||||
index /index.html;
|
|
||||||
}
|
|
||||||
|
|
||||||
# 后端代理
|
|
||||||
location /api/ {
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header REMOTE-HOST $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
add_header Access-Control-Allow-Methods *;
|
|
||||||
add_header Access-Control-Allow-Origin $http_origin;
|
|
||||||
proxy_pass http://127.0.0.1:8010/;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
@@ -183,6 +183,25 @@ git clone https://gitee.com/tao__tao/fastapi_vue3_admin.git
|
|||||||
- 账号:`admin` 密码:`123456`
|
- 账号:`admin` 密码:`123456`
|
||||||
- 接口地址:<http://127.0.0.1:8000/api/v1/docs>
|
- 接口地址:<http://127.0.0.1:8000/api/v1/docs>
|
||||||
|
|
||||||
|
### docker 部署
|
||||||
|
|
||||||
|
- cd fastapi_vue3_amdin/frontend
|
||||||
|
- npm run build (保证dist前端打包内容存在,否则运行会报错)
|
||||||
|
- cd fastapi_vue3_amdin
|
||||||
|
- docker compose up -d
|
||||||
|
- 注意事项:
|
||||||
|
- 前端.env.production 中 VITE_API_BASE_URL需要修改为公网地址
|
||||||
|
- 后端.env.prod 中 MYSQL_HOST、REDIS_HOST需要改为私网地址
|
||||||
|
- 遇到问题:
|
||||||
|
- 后端启动报错:一般是由于初始化脚本没有执行,脚本目录:backend/sql/mysql_xxx.sql
|
||||||
|
- 还有可能是因为mysql、redis中间件没有启动,需要手动启动
|
||||||
|
- 部署顺序:
|
||||||
|
- 1. 启动mysql、redis中间件
|
||||||
|
- 2. 执行初始化脚本
|
||||||
|
- 3. 启动后端服务
|
||||||
|
- 4. 启动前端服务
|
||||||
|
- 访问地址:公网地址,80端口;登录admin/123456
|
||||||
|
|
||||||
## 🔧 模块展示
|
## 🔧 模块展示
|
||||||
|
|
||||||
### 登陆
|
### 登陆
|
||||||
|
|||||||
@@ -33,8 +33,6 @@ nav:
|
|||||||
- 开发指南:
|
- 开发指南:
|
||||||
- 后端开发: doc/backend.md
|
- 后端开发: doc/backend.md
|
||||||
- 前端开发: doc/frontend.md
|
- 前端开发: doc/frontend.md
|
||||||
- 部署指南:
|
|
||||||
- 本地部署: doc/build.md
|
|
||||||
- 文档指南:
|
- 文档指南:
|
||||||
- 文档开发: doc/mkdocs.md
|
- 文档开发: doc/mkdocs.md
|
||||||
|
|
||||||
|
|||||||
+7
-2
@@ -17,7 +17,6 @@ http {
|
|||||||
|
|
||||||
# 访问服务日志
|
# 访问服务日志
|
||||||
access_log on;
|
access_log on;
|
||||||
access_log /var/log/nginx/host.access.log info;
|
|
||||||
|
|
||||||
sendfile on; # 允许sendfile方式传输文件,默认为off,可以在http块、server块、location块
|
sendfile on; # 允许sendfile方式传输文件,默认为off,可以在http块、server块、location块
|
||||||
|
|
||||||
@@ -35,10 +34,16 @@ http {
|
|||||||
location / {
|
location / {
|
||||||
root /usr/share/nginx/html; #nginx容器规定位置;
|
root /usr/share/nginx/html; #nginx容器规定位置;
|
||||||
index index.html index.htm;
|
index index.html index.htm;
|
||||||
|
try_files $uri $uri/ /index.html; #解决页面刷新404问题
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# 后端代理
|
# 后端代理
|
||||||
location /api/ {
|
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-NginX-Proxy true;
|
||||||
proxy_pass http://172.18.52.77:8001;
|
proxy_pass http://172.18.52.77:8001;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user