likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 21

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

回顾

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

一、本地启动

1.安装MySQL并启动

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

  • 创建datafactory库

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

CREATE DATABASE IF NOT EXISTS datafactory DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

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

2.拉取Python后端代码

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

3.虚拟环境创建

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

4.安装apidoc

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

# 全局安装,记得版本是0.22.1
npm install apidoc@0.22.1 -g

5.修改数据库配置文件

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

#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. 低情商启动

相当于右键运行

python3 runserver.py

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

  1. 高情商启动

直接gunicorn启动

/server/FunDataFactory/venv/bin/gunicorn -c gunicorn.py -k RestarUvicorn.RestartableUvicornWorker main:fun

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

7.拉取前端代码

cd /server
git clone https://github.com/JokerChat/FunDataFactoryWeb.git
# 进入FunDataFactoryWeb文件夹
cd FunDataFactoryWeb

8.执行安装包

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

npm install

9.启动前端

先修改.env.development配置文件 数据工厂系列(32)数据工厂部署文档

npm run dev

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

docker镜像制作

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

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

1.后端镜像制作

  1. python-node base镜像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镜像
# 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
docker tag IMAGE ID fangchat/python:tagname
docker push fangchat/python:tagname
  1. 数据工厂后端dockerfile编写

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

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编写
FROM node:14.16.1-alpine
RUN apk add --no-cache python3 py3-pip make g++
  1. dockerfile build镜像
# 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
docker tag IMAGE ID fangchat/node:tagname
docker push fangchat/node:tagname
  1. 数据工厂前端dockerfile编写

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

# 使用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目录
mkdir /server
cd /server
# 用来目录挂载
mkdir logs
# 用来目录挂载
mkdir keys

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

  1. 在server目录git clone项目
cd /server
git clone https://github.com/JokerChat/FunDataFactory.git 
git clone git clone https://github.com/JokerChat/FunDataFactory.git
  1. 分别执行构建镜像
cd /server/FunDataFactory
docker build -t fun:v1 .
cd /server/FunDataFactoryWeb
docker build -t fun_web:v1 .
  1. 创建并启动容器
# 后端服务启动
# 如果不需要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端口 数据工厂系列(32)数据工厂部署文档 启动成功后,浏览器访问http://119.91.144.214119.91.144.214为服务器的ip地址

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

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

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

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

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

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

总结

以上步骤完成后,我们直接浏览器访问http://www.fangfun.xyz/即可访问FunLine数据工厂 数据工厂系列(32)数据工厂部署文档

转载自:https://juejin.cn/post/7295624857432571940
评论
请登录