数据工厂系列(32)数据工厂部署文档

大家好~我是小方,欢迎大家关注笋货测试笔记 体完记得俾个like

回顾

之前的介绍和使用文档已经完结了,今天我们来讲讲如何部署数据工厂

一、本地启动

1.安装MySQL并启动

如果MySQL已经安装过的,请记住MySQL的用户名、密码、ip和端口号,并把MySQL启动起来

  • 创建datafactory库

由于sqlalchemy会自动建表,所以数据库需要我们先执行建立起来,建库很简单,打开Navicat,执行以下语句即可

shell 复制代码
CREATE DATABASE IF NOT EXISTS datafactory DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

这个命令是指,当datafactory数据库不存在时,建立utf8mb4编码的数据库。

2.拉取Python后端代码

  1. 新建server目录
shell 复制代码
mkdir /server
cd /server
  1. 克隆MhDataFactory(本地需安装git)
shell 复制代码
git clone https://github.com/JokerChat/FunDataFactory.git 
# 进入FunDataFactory文件夹
cd FunDataFactory

3.虚拟环境创建

  1. 安装virtualenv
shell 复制代码
pip3 install virtualenv
  1. 创建虚拟环境
shell 复制代码
virtualenv venv
  1. 激活运行环境
shell 复制代码
# linux
source venv/bin/activate
# windows
> cd venv
> .\Scripts\activate.bat
  1. 安装依赖
shell 复制代码
pip3 install -r requirements.txt
  1. 创建公钥私钥(如果脚本项目不需要配置ssh key可略过)
shell 复制代码
python3 create_key.py
  1. 退出虚拟环境
shell 复制代码
# linux
deactivate
# windows
.\Scripts\deactivate.bat

4.安装apidoc

核心,需先安装nodejs和npm!!!

shell 复制代码
# 全局安装,记得版本是0.22.1
npm install apidoc@0.22.1 -g

5.修改数据库配置文件

修改app/commons/settings/config.py,将数据库连接信息修改为你自己的

python 复制代码
#fastapi 启动配置文件
class Config(object):
    """配置类"""
    #数据库连接信息
    HOST = "127.0.0.1"
    PORT = "3306"
    PWD = "root"
    USER = "root"
    DBNAME = "datafactory"
    PRO = True

    # 数据库配置
    SQLALCHEMY_DATABASE_URI: str = f"mysql+pymysql://{USER}:{PWD}@{HOST}:{PORT}/{DBNAME}"

6.启动后端服务

  1. 低情商启动

相当于右键运行

python 复制代码
python3 runserver.py
  1. 高情商启动

直接gunicorn启动

shell 复制代码
/server/FunDataFactory/venv/bin/gunicorn -c gunicorn.py -k RestarUvicorn.RestartableUvicornWorker main:fun

7.拉取前端代码

shell 复制代码
cd /server
git clone https://github.com/JokerChat/FunDataFactoryWeb.git
# 进入FunDataFactoryWeb文件夹
cd FunDataFactoryWeb

8.执行安装包

部署前端需先下载nodejs,nodejs最好在v14.6.1以上

shell 复制代码
npm install

9.启动前端

先修改.env.development配置文件

shell 复制代码
npm run dev

等几分钟即可打包完毕,在浏览器打开http://localhost:9528/#/login即可访问FunLine数据工厂

docker镜像制作

这一步可略过,因为我已经把前后端的dockerfile文件和base镜像制作好了,大家可看下面的服务器部署···

上面只是本地启动而已,既然是平台我们肯定得部署到服务器上···服务部署我这边采用的是docker制作镜像,通过docker run新建并运行容器···

1.后端镜像制作

  1. python-node base镜像dockerfile编写
dockerfile 复制代码
FROM python:3.9-slim
WORKDIR /fun
RUN apt update -y \
    && apt upgrade -y \
    && apt install -y git \
    && apt install -y nodejs \
    && apt install -y npm \
    && mv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && npm install apidoc@0.22 -g
  1. dockerfile build镜像
shell 复制代码
# M1机器通过dockerfile build 镜像时,需要指定平台架构!!!
docker buildx build --platform=linux/amd64 . -t python:3.9-node
# x86直接正常build即可
docker build -t python:3.9-node .
  1. 上传dockerhub
shell 复制代码
docker tag IMAGE ID fangchat/python:tagname
docker push fangchat/python:tagname
  1. 数据工厂后端dockerfile编写

这里引用了上面制作的base镜像,大大节省了构建时间

dockerfile 复制代码
FROM fangchat/python:3.9-node
WORKDIR /fun
COPY . .
RUN mkdir /fun/logs \
    && pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
CMD gunicorn -c gunicorn.py -k RestarUvicorn.RestartableUvicornWorker main:fun

2.前端镜像制作

  1. nodejs base镜像dockerfile编写
dockerfile 复制代码
FROM node:14.16.1-alpine
RUN apk add --no-cache python3 py3-pip make g++
  1. dockerfile build镜像
shell 复制代码
# M1机器通过dockerfile build 镜像时,需要指定平台架构!!!
docker buildx build --platform=linux/amd64 . -t node:14.16.1
# x86直接正常build即可
docker build -t node:14.16.1 .
  1. 上传dockerhub
shell 复制代码
docker tag IMAGE ID fangchat/node:tagname
docker push fangchat/node:tagname
  1. 数据工厂前端dockerfile编写

这里引用了上面制作的base镜像,大大节省了构建时间

dockerfile 复制代码
# 使用fangchat/node:14.16.1基础镜像
FROM fangchat/node:14.16.1 AS builder
#切换到app工作目录下
WORKDIR /app
# 复制包文件到app目录下
COPY package.json ./
# 执行安装模块命令
RUN npm config set registry https://registry.npm.taobao.org/ && \
    npm install
# 复制当前目录下的所有文件
COPY . ./
# 执行打包命令
RUN npm run build:prod

# 使用nginx镜像为基础镜像
FROM nginx:alpine
# 声明端口80
EXPOSE 80
# 从builder处复制打包好的文件到/usr/share/nginx/html/
COPY --from=builder /app/dist /usr/share/nginx/html/
# 删除原本的默认配置
RUN rm /etc/nginx/conf.d/default.conf
# 从builder处复制nginx配置文件到/etc/nginx/conf.d/
COPY --from=builder /app/nginx.conf /etc/nginx/conf.d/

服务器部署

前面讲了这么多,都是为了服务器部署做铺垫,万事俱备只欠东风~现在我们只需要在服务器上git clone,下载项目并以项目中的dockerfile文件构建镜像

  1. 新建server目录
shell 复制代码
mkdir /server
cd /server
# 用来目录挂载
mkdir logs
# 用来目录挂载
mkdir keys

备注 keys目录上传刚才本地创建的公钥和私钥,这里我用的是FinalShell软件进行上传,如果不需要ssh拉取git项目,可以忽略创建keys目录

  1. 在server目录git clone项目
shell 复制代码
cd /server
git clone https://github.com/JokerChat/FunDataFactory.git 
git clone git clone https://github.com/JokerChat/FunDataFactory.git
  1. 分别执行构建镜像
shell 复制代码
cd /server/FunDataFactory
docker build -t fun:v1 .
cd /server/FunDataFactoryWeb
docker build -t fun_web:v1 .
  1. 创建并启动容器
shell 复制代码
# 后端服务启动
# 如果不需要ssh拉取git项目,可以忽略挂载keys目录
docker run -itd -p 8080:8080 -v /server/logs:/fun/logs -v /server/keys:/fun/app/commons/settings/keys fun:v1

# 前端服务启动
docker run -itd -p 80:80 fun_web:v1

备注 记得开放相关的端口,前端的.env.production目录记得更换对应的后端api端口 启动成功后,浏览器访问http://119.91.144.214119.91.144.214为服务器的ip地址

  1. Nginx转发代理(非必须)

如果已经申请了域名,可以给机器配上个域名,这样子就不用每次直接ip+端口访问,方便很多,如果没有申请域名,可忽略第5步···

ini 复制代码
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  fangfun.xyz;
        location / {
          proxy_set_header   X-Real-IP $remote_addr;
        	proxy_set_header   Host      $http_host;
        	proxy_pass         http://0.0.0.0:81;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
	server {  
    		listen 80;
    		server_name api.fangfun.xyz;
    		location / {
        		proxy_set_header   X-Real-IP $remote_addr;
        		proxy_set_header   Host      $http_host;
        		proxy_pass         http://0.0.0.0:8080;
    }
}
}

这里的fangfun.xyz直接映射到了本地的81端口即为前端服务, api.fangfun.xyz为二级域名,直接映射到了本地的8080端口即为后端服务

备注 前端镜像启动时,映射宿主机的端口为81

shell 复制代码
# 前端服务启动
docker run -itd -p 81:80 fun_web:v1
  1. 配置rancher流水线(非必须)

可自己搭建个rancher玩玩,配合rancher流水线进行自动化部署项目···有兴趣的小伙伴可找我交流交流,互相学习一波

总结

以上步骤完成后,我们直接浏览器访问http://www.fangfun.xyz/即可访问FunLine数据工厂

相关推荐
前端工作日常1 小时前
我的 Weex 测试 入门之旅
前端·测试
前端工作日常1 小时前
我的 端到端(E2E)测试 入门之旅
前端·测试
前端工作日常2 小时前
我的 代码覆盖率 入门之旅
前端·测试
前端工作日常2 小时前
我的 单元测试 入门之旅
前端·测试
一尘之中2 小时前
在Python 2.7中安装SQLAlchemy的完整指南
开发语言·python·ai写作
电商数据girl2 小时前
Python 爬虫获得淘宝商品详情 数据【淘宝商品API】
大数据·开发语言·人工智能·爬虫·python·json·php
钢铁男儿2 小时前
Python 网络编程进阶:使用 SocketServer 模块构建 TCP 服务器与客户端
网络·python·tcp/ip
大模型真好玩3 小时前
深入浅出LangChain AI Agent智能体开发教程(十)—LangChain搭建数据分析智能助手
人工智能·python·mcp
七夜zippoe4 小时前
Python性能优化实战(三):给内存“减负“的实用指南
python·内存·优化
WSSWWWSSW9 小时前
Seaborn数据可视化实战:Seaborn数据可视化基础-从内置数据集到外部数据集的应用
python·信息可视化·数据分析·matplotlib·seaborn