系统环境:Ubuntu 18.04.1 LTS

Python使用的是虚拟环境:virutalenv

Python的版本:Python 3.6.9

【简说Python WEB】Web应用部署

我们现在的演示都是Python WEB自带的工具,来验证我们的程序。但是生产环境下,不可能这样跑着。

一般简单的Python WEB应用,会应用到的服务中间件如下:

  • Nginx : WEB服务,作为WEB最前端的服务,可以作为反向代理和均衡负载使用。
  • Gunicorn : Python应用服务器
  • uWSGI :Python应用服务器,C语言编写,遵守uwsgi协议。
  • MySQL : 后端的数据存储服务

我们这里部署应用的是:Nginx,Gunicorn ,MySQL

肯定还有朋友说,那么高负载,高并发,高性能,高可用呢?

这里就会有一个扩展。

应用层

Nginx的高可用,可能会有到Keepalived,Heartbeat。用于心跳线检测和故障转移使用。

负载均衡,可能会用到LVS,HAProxy

Nginx下可能挂载多个 Python应用服务器(Gunicorn ), 常见的java web应用就是挂载多个tomcat服务

本质还是一样的,万变不离其宗。

缓存层

可能需要RedisMemcached做缓存,而不是直接从数据库取,减少数据库的负载。

数据层

关系型数据库(MySQL,PG,Oracle)。NoSQL数据库(MongoDB)等。

数据库再延伸的话,可能还需要主从同步,分库分表。再把一部分读业务放到从库中,把一部分分析BI的业务放到

Greenplum。还有把一些事务性弱的业务,放到MongoDB中存储。

所以,任何一种架构,都是为需求服务的。不同的业务需求,延伸出来的架构就会不同。

跑火车了,言归正传。我们这里就是简单的WEB架构。Nginx+Gunicorn +MySQL。不用那么复杂的架构。

Gunicorn 的应用

1.安装Gunicorn

pip install gunicorn

2.Gunicorn的启动

(zsdpy1) $ gunicorn --workers=3 zsdblog:app -b 0.0.0.0:8000
[2020-03-26 13:52:19 +0800] [8682] [INFO] Starting gunicorn 20.0.4
[2020-03-26 13:52:19 +0800] [8682] [INFO] Listening at: http://0.0.0.0:8000 (8682)
[2020-03-26 13:52:19 +0800] [8682] [INFO] Using worker: sync
[2020-03-26 13:52:19 +0800] [8685] [INFO] Booting worker with pid: 8685
[2020-03-26 13:52:19 +0800] [8686] [INFO] Booting worker with pid: 8686
[2020-03-26 13:52:19 +0800] [8687] [INFO] Booting worker with pid: 8687

其中:

  • --workers代表启动的work进程,一般根据逻辑CPU的个数*2启动,

  • zsdblog:app 这里说明我是zsdblog.py的文件中,启动了名为app的application。所以这样启动python web服务。

  • -b 0.0.0.0:8000 代表绑定的IP和端口。

  • -D, --daemon 可选,可以以守护进程,放到后台执行

  • --access-logfile FILE 正常的输入访问日志设定

  • --error-logfile FILE, --log-file FILE 错误日志和标准日志文件输出地方

  • --log-level LEVEL 日志的级别,任何一个WEB服务器都有日志级别输出,方便调试程序。一般有debug,info

​ ,warning,error,critical日志级别。

以deamon的方式启动

gunicorn --workers=3 zsdblog:app -b 0.0.0.0:8000  -D

Nginx 的应用

Nginx作为一个高性能,高稳定性的web服务,被广泛应用。由于其C语言编写。配置简单,这次热部署。还有强大的反向代理和负载均衡功能。可以说在互联网领域,叱咤风云。

1.docker方式部署安装Nginx

1.1 拉去最新的docker nginx镜像

docker pull nginx:latest

1.2 查看本地镜像

root@zsd-virtual-machine:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 6678c7c2e56c 3 weeks ago 127MB
mysql latest 9b51d9275906 3 weeks ago 547MB

可以看到,我们有MySQLNginx镜像

1.3 运行Nginx容器

docker run --name nginx-zsd -p 80:80 -d nginx

其中:

--name nginx-zsd nginx-zsd代表我取的名字

-p 80:80 把容器内的80端口和虚拟机的80端口对应上。

-d nginx nginx服务在后台运行

1.4 .查看目前运行的容器

root@zsd-virtual-machine:~# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3c8f99c8df6 nginx "nginx -g 'daemon of…" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp nginx-zsd

1.5关闭和启动容器,如下:

root@zsd-virtual-machine:~# docker stop nginx-zsd

root@zsd-virtual-machine:~# docker start nginx-zsd

1.6删除容器

root@zsd-virtual-machine:/usr/local# docker stop nginx-zsd
nginx-zsd
root@zsd-virtual-machine:/usr/local# docker container rm nginx-zsd
nginx-zsd

1.7 拷贝容器中的配置文件

root@zsd-virtual-machine:/usr/local# docker cp nginx-zsd:/etc/nginx/nginx.conf /root/

1.8映射nginx的配置文件,可以本地目录配置

docker run --name nginx-zsd -p 80:80 -v /root/nginx.conf:/etc/nginx/nginx.conf -d nginx

1.9进入nginx容器

docker exec -it nginx-zsd bash

2.Nginx的文件配置

上述,可以看到我们把配置文件映射到了/root/nginx.conf。通过修改配置文件,达到定制化的效果:

添加upstream和server段

    upstream Zfrontends {
server 127.0.0.1:8000;
} server {
listen 80;
server_name localhost; location / {
proxy_pass http://Zfrontends;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} }

重启nginx容器

docker restart nginx-zsd

【简说Python WEB】Web应用部署的更多相关文章

  1. 全面解读Python Web开发框架Django,利用Django构建web应用及其部署

    全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django ...

  2. 【简说Python WEB】数据库

    目录 [简说Python WEB]数据库 数据库表 docker安装MySQL Flask-SQLAlchemy操纵MySQL数据库 初始化 定义模型 定义关系 数据库的CRUD操作 创建表 inse ...

  3. 【简说Python WEB】Flask-Moment

    目录 [简说Python WEB]Flask-Moment 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:virutalenv Python的版本:Python 3.6 ...

  4. 【简说Python WEB】视图函数操作数据库

    目录 [简说Python WEB]视图函数操作数据库 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:virutalenv Python的版本:Python 3.6.9 ...

  5. 【简说Python WEB】Flask应用的文件结构

    目录 [简说Python WEB]Flask应用的文件结构 1.文件结构的目录 2.配置程序--config.py 3.app应用包 4.剥离出来的email.py 5.蓝本(BLueprint)的应 ...

  6. 【问题记录】uwsgi部署并启动俩个几乎一样的python flask web app,发现有一个app响应时间非常长

    uwsgi在同一台linux上启动python flask web app(俩个), 发现第一个和第二个的简单性能测试差距非常大,差了将近一倍: 第一个结果: Concurrency Level: 1 ...

  7. Python Django(WEB电商项目构建)

    (坚持每一天,就是成功) Python Django Web框架,Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式,即模型M,模板T和视图V组成. 安装Pyth ...

  8. 如何用Python做Web开发?——Django环境配置

    用Python做Web开发,Django框架是个非常好的起点.如何从零开始,配置好Django开发环境呢?本文带你一步步无痛上手.     概念 最近有个词儿很流行,叫做“全栈”(full stack ...

  9. 学习参考《Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码

    在学习python Web开发时,我们会选择使用Django.flask等框架. 在学习flask时,推荐学习看看<Flask Web开发:基于Python的Web应用开发实战(第2版)> ...

随机推荐

  1. Python拾遗(2)

    包括Python中的常用数据类型. int 在64位平台上,int类型是64位整数: 从堆上按需申请名为PyIntBlcok的缓存区域存储整数对象 使用固定数组缓存[-5, 257]之间的小数字,只需 ...

  2. loadrunner通过web的post请求方法测接口 2

    模拟APP发送请求给Cloud, 一般都是用户登录后.cloud会返回登录成功的消息并且返回一个cookie给app, app下次要做一些例如设置名称之类的工作,在请求消息里面会携带返回的cookie ...

  3. 烧钱时代终结!O2O还能玩啥花样?

    最终的最终,饱受亏损.烧钱玩补贴等争议的美团还是追随滴滴/快的.赶集/58的步伐,与大众点评愉快的在一起了!美团和大众点评作为O2O行业的领军企业,都因为不堪忍受持续地投入却不见回报的模式而不得不放低 ...

  4. GCD学习 —— 三

    ​ 学习学习dispatch_block,在向队列中添加任务时,可以直接在对应的函数中添加 block.但是如果想对任务进行操作,比如监听任务.取消任务,就需要获取对应的 block. 1 创建Blo ...

  5. HBase源码系列之HFile

    本文讨论0.98版本的hbase里v2版本.其实对于HFile能有一个大体的较深入理解是在我去查看"到底是不是一条记录不能垮block"的时候突然意识到的. 首先说一个对HFile ...

  6. 3——PHP 简单运算符的使用

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  7. golang 统计系统测试覆盖率

    golang 统计系统测试覆盖率 参考资料 https://www.elastic.co/blog/code-coverage-for-your-golang-system-tests https:/ ...

  8. java反序列化-ysoserial-调试分析总结篇(6)

    前言: 这篇记录CommonsCollections6的调试,外层也是新的类,换成了hashset,即从hashset触发其readObject(),yso给的调用链如下图所示 利用链分析: 首先在h ...

  9. MySQL的字符集和乱码问题

    1.字符集知识 #概述 .字符集是一套文字符号及其编码.比较规则的集合,第一个计算机字符串ASC2 .mysql数据库字符集包括字符集(character)和 校对规则,其中字符集使用来定义mysql ...

  10. RocketMQ - 基础知识

    RocketMQ简介 RocketMQ是阿里开源的消息中间件,它是纯java开发,具有低延迟.高吞吐量.高可用性和适合大规模分布式系统应用的特点.从名字可以看出Rocket火箭,代表RocketMQ主 ...