部署 Dash-FastAPI-Admin 项目
服务器分配
服务器 | 环境 | 功能 |
---|---|---|
服务器1 | Bind9 | 负责提供本地的DNS解析服务 |
服务器2 | MySQL,Redis | 负责给两个项目提供数据库服务 |
服务器3 | Java21,Nginx | 负责运行项目,提供网页服务 |
服务器4 | Python,Nginx,Supervisor,Git | 负责运行项目,提供网页服务 |
- 服务器1:(原服务器环境搭建的DNS服务器,包含Bind9) 192.168.0.111
- 服务器2:(原服务器环境搭建的数据库服务器,包含MySQL和Redis服务器) 192.168.0.113
- 服务器3:(Halo项目服务器) 192.168.0.114
- 服务器4:(Dash-FastAPI-Admin项目服务器) 192.168.0.115
1. 系统环境准备
1.1 基础软件安装
# Debian
apt install sudo
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3 python3-pip python3-venv nginx supervisor git
# 验证安装
python3 --version # 需 Python ≥ 3.8
nginx -v # 确保 Nginx ≥ 1.18
supervisorctl --version
1.2 MySQL数据库与Redis缓存
MySQL数据库与Redis缓存由服务器2(192.168.0.113)提供服务,需要安装本地运行提供服务的可以自行安装。
2. 项目部署(开发环境)
2.1 克隆项目
git clone https://gitee.com/insistence2022/dash-fastapi-admin.git
cd dash-fastapi-admin
2.2 虚拟环境与依赖安装
# 创建虚拟环境(在项目根目录)
python3 -m venv venv
source venv/bin/activate
# 安装依赖(二选一)
# 若用 MySQL:
pip install -r requirements.txt # MySQL 版本
# 若用 PostgreSQL:
pip install -r requirements-pg.txt
# 额外安装必要的依赖
pip install feffery-antd-components
3. 数据库配置
3.1 MySQL 初始化
-- 以root身份登录MySQL(需输入root密码)
sudo mysql -u root -p
-- 创建名为 `dash_fastapi` 的数据库,并设置字符集为完整的UTF-8(支持emoji和特殊字符)
CREATE DATABASE `dash_fastapi` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 关键说明:
-- 1. `utf8mb4` 是MySQL中真正的UTF-8编码(旧版`utf8`只支持3字节字符)
-- 2. `COLLATE utf8mb4_unicode_ci` 指定不区分大小写的排序规则
-- 创建专属管理用户,允许从任何主机(%)连接,密码为'12345678'
CREATE USER 'dashadmin'@'%' IDENTIFIED BY '12345678';
-- 安全警告:
-- 1. @'%' 允许所有IP连接→生产环境应限制为具体IP段(如 @'192.168.1.%')
-- 2. 这边只是测试使用简单的密码,发布到生产环境时建议把密码改为复杂组合(如:大小写+数字+特殊符号)
-- 授予dashadmin用户对dash_fastapi数据库的**所有权限**
GRANT ALL PRIVILEGES ON `dash_fastapi`.* TO 'dashadmin'@'%';
-- 精细化权限控制(生产环境推荐):
-- GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER ON `dash_fastapi`.* TO 'dashadmin'@'%';
-- 刷新权限表,使新授权立即生效(避免重启MySQL)
FLUSH PRIVILEGES;
3.2 导入数据
方法1:命令行执行
3.2.1 拷贝 SQL 文件到数据库服务器
MySQL 数据库
从项目源码的dash-fastapi-backend/sql/
目录下找到dash-fastapi.sql
,复制到数据库服务器的/root/
目录。PostgreSQL 数据库
从相同目录下找到dash-fastapi-pg.sql
,复制到数据库服务器的/root/
目录。
3.2.2 进入目标目录并确认文件
# 进入目标目录
cd /root
# 查看对应的 SQL 文件
ls
确保能看到对应的 SQL 文件(如 dash-fastapi.sql
)。
3.2.3 执行 SQL 文件
MySQL
运行以下命令并输入密码:mysql -u root -p dash_fastapi < dash-fastapi.sql
PostgreSQL
使用psql
执行:psql -U postgres -d dash_fastapi -f dash-fastapi-pg.sql
执行成功后,数据库中会生成相应的表。
方法2:第三方客户端执行(Navicat)
MySQL 数据库
从项目源码的dash-fastapi-backend/sql/
目录下找到dash-fastapi.sql
,复制到数据库服务器的/root/
目录。PostgreSQL 数据库
从相同目录下找到dash-fastapi-pg.sql
,复制到数据库服务器的/root/
目录。
连接数据库后新建查询,将找到的 SQL 文件内容复制进去执行。
3.3 编辑配置文件
前端配置文件除非有其他需求,一般不进行编辑。
文件位于:dash-fastapi-frontend/.env.dev
主要编辑后端配置文件(根据实际情况修改,MySQL和Redis的数据库主机,IP,端口,用户名,密码)。
文件位于:dash-fastapi-backend/.env.dev
# -------- 数据库配置 --------
# 数据库类型,可选的有'mysql'、'postgresql',默认为'mysql'
DB_TYPE = 'mysql'
# 数据库主机
DB_HOST = '192.168.0.113'
# 数据库端口
DB_PORT = 3306
# 数据库用户名
DB_USERNAME = 'dashadmin'
# 数据库密码
DB_PASSWORD = '12345678'
# 数据库名称
DB_DATABASE = 'dash_fastapi'
# 是否开启sqlalchemy日志
DB_ECHO = true
# 允许溢出连接池大小的最大连接数
DB_MAX_OVERFLOW = 10
# 连接池大小,0表示连接数无限制
DB_POOL_SIZE = 50
# 连接回收时间(单位:秒)
DB_POOL_RECYCLE = 3600
# 连接池中没有线程可用时,最多等待的时间(单位:秒)
DB_POOL_TIMEOUT = 30
# -------- Redis配置 --------
# Redis主机
REDIS_HOST = '192.168.0.113'
# Redis端口
REDIS_PORT = 6379
# Redis用户名
REDIS_USERNAME = 'default'
# Redis密码
REDIS_PASSWORD = '12345678'
# Redis数据库
REDIS_DATABASE = 2
注意:Redis 需开启远程访问
3.3.1 修改 Redis 配置文件
sudo nano /etc/redis/redis.conf
修改以下关键参数:
bind 0.0.0.0 # 允许所有 IP 连接(或指定特定 IP,如 bind 192.168.0.113)
protected-mode no # 关闭保护模式(需配合密码使用)
requirepass foobared # 设置强密码(这行默认是注释,记得取消注释,且将foobared改为自己想要的密码,默认用户名是default)
保存后重启 Redis:
sudo systemctl restart redis
3.3.2 测试远程连接
从其他服务器测试,使用 telnet
(记得改成自己数据库服务器的IP):
telnet 192.168.0.113 6379
AUTH 你设置的的密码 # 返回 OK 表示成功
PING # 应返回 PONG
输入 PING
,应返回 PONG
。
4. 启动测试
目前位于开发环境
先启动后端再启动前端,建议开启两个窗口,一个启动后端,一个启动前端。
4.1 后端窗口
# 需要先进入虚拟环境(cd到项目文件夹的根目录执行,例如:/root/dash-fastapi-admin,也就是`dash-fastapi-admin`所在目录下)
source venv/bin/activate
# 进入后端项目文件夹
cd dash-fastapi-backend
# 启动后端(开发环境)
python3 app.py --env=dev
4.2 前端窗口
# 需要先进入虚拟环境(cd到项目文件夹的根目录执行,例如:/root/dash-fastapi-admin,也就是`dash-fastapi-admin所在目录下`)
source venv/bin/activate
# 进入前端项目文件夹
cd dash-fastapi-frontend
# 启动前端(开发环境)
python3 app.py --env=dev
4.3 查看是否能正常启动进入后台
如图所示,启动测试成功!
5. 项目部署(生产环境)
非常重要!!!
如果对
dash-fastapi-frontend/.env.dev
有修改,将修改同步到dash-fastapi-frontend/.env.prod
(默认不需要修改)如果对
dash-fastapi-backend/.env.dev
有修改,将修改同步到dash-fastapi-backend/.env.prod
(一般只需要修改数据库部分,MySQL和Redis,其他别动)
这是为了将对开发环境配置文件的修改同步到生产环境配置文件!!!
5.1 服务进程配置
5.1.1 Supervisor 管理(生产环境必需)
vim /etc/supervisor/conf.d/dash_admin.conf
配置内容:
[program:dash_backend]
directory=/root/dash-fastapi-admin/dash-fastapi-backend
command=/root/dash-fastapi-admin/venv/bin/python wsgi.py --env=prod
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/dash_backend.err.log
stdout_logfile=/var/log/supervisor/dash_backend.out.log
environment=PYTHONPATH="/root/dash-fastapi-admin"
[program:dash_frontend]
directory=/root/dash-fastapi-admin/dash-fastapi-frontend
command=/root/dash-fastapi-admin/venv/bin/python app.py --env=prod
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/dash_frontend.err.log
stdout_logfile=/var/log/supervisor/dash_frontend.out.log
environment=PYTHONPATH="/root/dash-fastapi-admin"
启动服务:
# 重新加载配置文件,并立即应用变更
sudo supervisorctl reread
sudo supervisorctl update
# 启动服务
sudo supervisorctl start all
# 查看服务状态
sudo supervisorctl status
# 应显示:
# dash_backend RUNNING
# dash_frontend RUNNING
5.2 Nginx 反向代理
5.2.1 配置文件
vim /etc/nginx/conf.d/dfa.mxdx.com.conf
严格按官方端口配置:
建议只修改域名!
server {
listen 80;
server_name dfa.mxdx.com;
# 前端 Dash 服务(官方端口 8088)
location / {
proxy_pass http://127.0.0.1:8088/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
}
# 后端 API 服务(官方端口 9099,通过 /prod-api 转发)
location /prod-api {
proxy_pass http://127.0.0.1:9099/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
rewrite ^/prod-api/(.*)$ /$1 break;
}
}
记得在DNS服务器的Bind9添加dfa.mxdx.com
解析记录!
5.2.2 启用配置
sudo nginx -t
sudo systemctl restart nginx
6. 验证与访问
6.1 检查服务状态
# Supervisor 状态
sudo supervisorctl status
# 应显示:
# dash_backend RUNNING
# dash_frontend RUNNING
6.2 访问系统
- 前端地址:
http://dfa.mxdx.com
- 后端 API 文档:
http://dfa.mxdx.com/prod-api/docs
- 默认账号:
admin
/admin123
7.常见问题
访问前端网页发现无法显示验证码,以及请求错误。
详见《部署Dash-FastAPI-Admin项目问题及解决方案》