大家好~我是小方,欢迎大家关注笋货测试笔记体完记得俾个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后端代码
- 新建server目录
mkdir /server
cd /server
- 克隆MhDataFactory(本地需安装git)
git clone https://github.com/JokerChat/FunDataFactory.git
# 进入FunDataFactory文件夹
cd FunDataFactory
3.虚拟环境创建
- 安装virtualenv
pip3 install virtualenv
- 创建虚拟环境
virtualenv venv
- 激活运行环境
# linux
source venv/bin/activate
# windows
> cd venv
> .\Scripts\activate.bat
- 安装依赖
pip3 install -r requirements.txt
- 创建公钥私钥(如果脚本项目不需要配置ssh key可略过)
python3 create_key.py
- 退出虚拟环境
# 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.启动后端服务
- 低情商启动
相当于右键运行
python3 runserver.py
- 高情商启动
直接gunicorn启动
/server/FunDataFactory/venv/bin/gunicorn -c gunicorn.py -k RestarUvicorn.RestartableUvicornWorker main:fun
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
配置文件
npm run dev
等几分钟即可打包完毕,在浏览器打开http://localhost:9528/#/login即可访问FunLine数据工厂
docker镜像制作
这一步可略过,因为我已经把前后端的dockerfile文件和base镜像制作好了,大家可看下面的服务器部署···
上面只是本地启动而已,既然是平台我们肯定得部署到服务器上···服务部署我这边采用的是docker制作镜像,通过docker run
新建并运行容器···
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
- 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 .
- 上传dockerhub
docker tag IMAGE ID fangchat/python:tagname
docker push fangchat/python:tagname
- 数据工厂后端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.前端镜像制作
- nodejs base镜像dockerfile编写
FROM node:14.16.1-alpine
RUN apk add --no-cache python3 py3-pip make g++
- 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 .
- 上传dockerhub
docker tag IMAGE ID fangchat/node:tagname
docker push fangchat/node:tagname
- 数据工厂前端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文件构建镜像
- 新建server目录
mkdir /server
cd /server
# 用来目录挂载
mkdir logs
# 用来目录挂载
mkdir keys
备注 keys目录上传刚才本地创建的公钥和私钥,这里我用的是FinalShell
软件进行上传,如果不需要ssh拉取git项目,可以忽略创建keys目录
- 在server目录git clone项目
cd /server
git clone https://github.com/JokerChat/FunDataFactory.git
git clone git clone https://github.com/JokerChat/FunDataFactory.git
- 分别执行构建镜像
cd /server/FunDataFactory
docker build -t fun:v1 .
cd /server/FunDataFactoryWeb
docker build -t fun_web:v1 .
- 创建并启动容器
# 后端服务启动
# 如果不需要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.214
,119.91.144.214
为服务器的ip地址
- 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
- 配置rancher流水线(非必须)
可自己搭建个rancher玩玩,配合rancher流水线进行自动化部署项目···有兴趣的小伙伴可找我交流交流,互相学习一波
总结
以上步骤完成后,我们直接浏览器访问http://www.fangfun.xyz/
即可访问FunLine数据工厂