最近在用 Monorepo => (Flask + React) + (Python + TypeScript) 写一些自己东西,记于此,温故而知新
Python 项目不同于其他服务例如 javax.servlet.Servlet \ Go \ PHP 等 ,Python 是 WSGI 即 (Python Web Server Gateway Interface) Python Web服务器网关接口
Gunicorn 给 WSGI 组件提供服务器功能,Gunicorn 默认使用同步阻塞的网络模型(-k sync),对于大并发的访问可能表现不够好,Gevent来增加并发量,这就组成一个 “高性能” 服务器
我们利用 Gunicorn \ Gevent 来组件我们生产环境下的应用 Server
这个没什么好说的 —— 容器服务 来提供 Server 的环境运行时
简单复习下 docker:
格式:FROM:
第一条指令必须为 FROM 指令,Dockerfile 中创建多个镜像;定义容器运行时
格式:
RUN
或RUN [“”, “”, “”]
当前镜像的执行指令
格式:
CMD [“”,””,””]
当前容器 shell
ENV
环境变量,会被 RUN 指令使用,并在容器运行时保存
格式:
COPY
复制本地主机的 ( 为 Dockerfile 所在目录的相对路径)到容器中的 (当使用本地目录为源目录时,推荐使用 COPY)
格式:
WORKDIR /path/to/workdir
为后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录。(可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径, 则会基于之前命令指定的路径)
…
Docker Doc info
pip3 install gunicorn gevent
Root 下新建文件 /gunicorn.conf.py
文件
touch gunicorn.conf.py
vim gunicorn.conf.py
workers = 5 # 定义同时开启的处理请求的进程数量,根据网站流量适当调整
worker_class = "gevent" # 采用gevent库,支持异步处理请求,提高吞吐量
bind = "0.0.0.0:5000"
这时候我们可以测试一下
gunicorn app:app -c gunicorn.conf.py
正常启动的话我们可以看到 启动了一个 服务员我们可以正常 访问它 http://localhost:5000/
如若报错,则根据错误提示修复即可。
下面我们用 Docker 制作 Flask 的镜像和容器从而在服务器上面部署它们
首先我们需要为该应用创建一个 requirements.txt 文件,以便容器里面 python 环境的安装:
/requirements.txt
pip3 install -r requirements.txt
or pipreqs 来生成,pipreqs 可以只生成当前项目使用的依赖 推荐使用这种方式
pip3 install pipreqs
pipreqs ./ --encoding=utf-8
FROM python:3.9
WORKDIR ~/docker-project/
COPY requirements.txt ./
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY . .
CMD ["gunicorn", "app:app", "-c", "./gunicorn.conf.py"]
sudo docker build -t testflask:0.1 .
期间要等待一段时间
sudo docker images
这时候在列表里面我们就可以看到我们刚刚构建的镜像
testflask
在本地临时启动它试一试
sudo docker run -it --rm -p 5000:5000 testflask:0.1
容器正常运行,我们现在要做的就是上传镜像然后再服务器上安装启动容器
登录Docker-Hub
创建 Project
格式:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker tag testflask:0.1 youName/testflask:0.1
注意在上传镜像的时候要求 tag 前缀是你的用户名,在创建project的时候上面会有说明
格式:docker push [OPTIONS] NAME[:TAG]
docker push youName/testflask:0.1
前提是服务器上面安装了 Docker
sudo apt-get install docker.io
其他操作系统自行按照教程安装
Docker install
docker pull youName/testflask:0.1
docker run -d -p 80:5000 youName/testflask:0.1
把操作系统的 80 端口 映射到了容器 5000 端口 上面,这时候去开发安全组就可以正常访问了
原文取自 【转载请注明出处】