部署 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
    

执行成功后,数据库中会生成相应的表。
image

方法2:第三方客户端执行(Navicat)

  • MySQL 数据库
    从项目源码的 dash-fastapi-backend/sql/ 目录下找到 dash-fastapi.sql,复制到数据库服务器的 /root/ 目录。

  • PostgreSQL 数据库
    从相同目录下找到 dash-fastapi-pg.sql,复制到数据库服务器的 /root/ 目录。

连接数据库后新建查询,将找到的 SQL 文件内容复制进去执行。
image

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

image

4.2 前端窗口

# 需要先进入虚拟环境(cd到项目文件夹的根目录执行,例如:/root/dash-fastapi-admin,也就是`dash-fastapi-admin所在目录下`)
source venv/bin/activate

# 进入前端项目文件夹
cd dash-fastapi-frontend

# 启动前端(开发环境)
python3 app.py --env=dev

image

4.3 查看是否能正常启动进入后台

image
image

如图所示,启动测试成功!


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解析记录!

image

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项目问题及解决方案》

梦葉樱 all right reserved,powered by Gitbook该文件最后修改时间: 2025-07-25 12:50:02

results matching ""

    No results matching ""