vue-fastapi-admin 部署心得

news/2025/2/24 20:23:08

fastapiadmin__0">vue-fastapi-admin 部署心得


这两天需要搭建一个后台管理系统,找来找去 vue-fastapi-admin 这个开源后台管理框架刚好和我的技术栈所契合。于是就浅浅的研究了一下。

主要是记录如何基于原项目提供的Dockerfile进行调整,那项目文件放在容器外部,便于Diy代码。

经常接触开源项目的小伙伴都知道,通常开源项目给的 镜像 以及 Dockerfile 都是把 项目包含在内的,也就是说你可以直接跑起来体验,但是改代码之后如何反应进去就是个问题。OK,就说这么多,开始我的记录~

一、项目信息

项目名:vue-fastapi-admin
技术栈:vite + vue3 + fastapi+ Naive UI + Nginx + sqlite3
搭建环境:ubuntu22.04
项目地址:
gitee: https://gitee.com/mizhexiaoxiao/vue-fastapi-admin
github: https://github.com/mizhexiaoxiao/vue-fastapi-admin

二、拉取项目

这部分就不细说了,安装 git 工具之后,使用 git clone + 上面的项目地址即可拉取到本地。

三、修改相关文件

这部分有一个技巧,我是通过 豆包 AI去做的,整体思路就是让它去帮你把Dockerfile,后续想通过文件映射的方式启动。

中间遇到了很多问题,也学习到了很多~
这里直接给出最终的相关文件~

Dockerfile(修改)

主要是剔除了前端构建、以及删减了除 pyproject.toml 以外的项目文件。纯纯的只保留python环境构筑的部分。

FROM python:3.11-slim-bullseye

WORKDIR /opt/vue-fastapi-admin

COPY pyproject.toml .

RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=core-apt \
    --mount=type=cache,target=/var/lib/apt,sharing=locked,id=core-apt \
    sed -i "s@http://.*.debian.org@http://mirrors.ustc.edu.cn@g" /etc/apt/sources.list \
    && rm -f /etc/apt/apt.conf.d/docker-clean \
    && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone \
    && apt-get update \
    && apt-get install -y --no-install-recommends gcc python3-dev bash nginx vim curl procps net-tools

RUN pip install poetry -i https://pypi.tuna.tsinghua.edu.cn/simple \
    && poetry config virtualenvs.create false \
    && poetry install --no-root \
    && rm pyproject.toml

ENV LANG=zh_CN.UTF-8
EXPOSE 80
compose.yaml(新增)

我习惯性使用 docker compose 去操作容器,所以额外做了一个compose文件,主要是做端口映射以及项目文件的映射。这是一个前后端分离的项目,使用 nginx 做静态资源部署以及 反向代理 /api/ 请求到 fastapi 的服务。
当前配置启动后,访问宿主机的 8080 端口即可访问到前端的主页,9999 端口主要是暴露后台服务,方便我直接访问 9999/docs 接口查看接口文档的,实际上也可以不用。

version: '3'

services:
  vue-fastapi-admin:
    image: vue-fastapi-admin:1.0
    ports:
      - "9999:9999"
      - "8080:80"
    volumes:
      - ./web:/opt/vue-fastapi-admin/web
      - ./deploy/web.conf:/etc/nginx/sites-available/web.conf
      - .:/opt/vue-fastapi-admin
      - ./deploy/entrypoint.sh:/opt/vue-fastapi-admin/entrypoint.sh
    command: sh entrypoint.sh
    environment:
      - LANG=zh_CN.UTF-8
compose-frontend.yaml (新增文件)

这个文件主要是为了方便编译前端代码使用的。

services:
  frontend:
    image: node:18
    container_name: frontend
    volumes:
      - ./web:/app/web
    command: "sh -c 'npm config set registry https://registry.npmmirror.com && cd /app/web && npm install && npm run build'"
build.sh (新增)

这个文件是为了记录构建容器命令创建的,执行后在后台构建,可通过 build.log 文件查看构建状态。

#! /bin/bash
nohup docker build -t vue-fastapi-admin:1.0 . > build.log 2>&1 &
deploy/entrypoint.sh (修改)

主要是加入nginx配置的软连接,web.conf 配置了 api 服务的反向代理。

#!/bin/sh
set -e
rm -f /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/web.conf /etc/nginx/sites-enabled/
nginx
python run.py

四、项目启动

执行顺序如下:

  1. sh build.sh 构建 vue-fastapi-admin:1.0 镜像
  2. docker compose -f compose-frontend.yaml up && docker compose -f compose-frontend.yaml down 编译前端代码,完成后删除容器
  3. docker compose -f compose up -d 启动项目

然后你可以访问 8080 端口查看你的项目:
在这之后,如果你改了前端代码,执行 2 就可以被反应上去,改了后端代码 执行 3 重启容器即可。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

写在最后

这是我第一次搭建三方的开源管理项目,感叹自己的渺小,学到了很多新的知识,也意识到自身的问题。感谢无私奉献的大佬们,也愿看到的小伙伴能够少走弯路~


http://www.niftyadmin.cn/n/5864788.html

相关文章

基于Spring Boot的公司资产网站设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

从零实现机器人自主避障

1. 编译工具安装 sudo apt update sudo apt install python3-catkin-pkg python3-rosdep python3-rosinstall-generator python3-wstool python3-rosinstall build-essential sudo rosdep init rosdep update2. 构建节点 mkdir -p ~/ros2_ws/src cd ~/ros2_ws ros2 pkg creat…

mysql之B+ 树索引 (InnoDB 存储引擎)机制

b树索引机制 B 树索引 (InnoDB 存储引擎)机制**引言:****1. 数据页结构与查找**2. 索引的引入**3. InnoDB 的 B 树索引****4. InnoDB B 树索引的注意事项****5. MyISAM 的索引方案 (选读,与 InnoDB 做对比)****6. MySQL 中创建和删除索引的语句** **B 树…

使用Socket编写超牛的http服务器和客户端(二)

客户端 动态扩展连接池、线程池优雅关闭、超时机制、健康检查等功能,并将代码模块化: 文件结构 HTTPClientProject/ ├── ConnectionPool.h ├── ConnectionPool.cpp ├── TaskQueue.h ├── ThreadPool.h ├── main.cpp 工程代码主要分为以下几个模块: Connectio…

go执行java -jar 完成DSA私钥解析并签名

起因,最近使用go对接百度联盟api需要使用到DSA私钥完成签名过程,在百度提供的代码示例里面没有go代码的支持,示例中仅有php、python2和3、java的代码,网上找了半天发现go中对DSA私钥解析支持不友好,然后决定使用在java…

微信小程序页面导航与路由:实现多页面跳转与数据传递

在上一篇中,我们学习了微信小程序的数据绑定和事件处理,实现了动态交互功能。然而,一个完整的小程序通常由多个页面组成,用户需要在不同页面之间进行跳转。本文将深入探讨微信小程序的页面导航与路由机制,帮助你实现多…

leetcode_位运算 2206. 将数组划分成相等数对

2206. 将数组划分成相等数对 给你一个整数数组 nums,它包含 2 * n 个整数。 你需要将 nums 划分成 n 个数对,满足: 每个元素 只属于一个数对。同一数对中的元素相等 。如果可以将 nums 划分成 n 个数对,请你返回 true &#xff0…

BOOST电路设计

目录 1电路模型 2器件选型 2.1设计需求 2.2参数计算 2.2.1电感L计算 2.2.2电容计算 2.2.3电阻计算 3仿真测试 4参数测试 4.1负载调整率 4.2电容测试 4.3电感测试 5实际应用 1电路模型 Boost升压电路,可以工作在电流断续工作模式(DCM)和电流连续工作模式(CCM)。CCM工…