【简说Python WEB】Web应用部署
系统环境: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服务
本质还是一样的,万变不离其宗。
缓存层
可能需要Redis
和Memcached
做缓存,而不是直接从数据库取,减少数据库的负载。
数据层
关系型数据库(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
可以看到,我们有MySQL
和Nginx
镜像
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应用部署的更多相关文章
- 全面解读Python Web开发框架Django,利用Django构建web应用及其部署
全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django ...
- 【简说Python WEB】数据库
目录 [简说Python WEB]数据库 数据库表 docker安装MySQL Flask-SQLAlchemy操纵MySQL数据库 初始化 定义模型 定义关系 数据库的CRUD操作 创建表 inse ...
- 【简说Python WEB】Flask-Moment
目录 [简说Python WEB]Flask-Moment 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:virutalenv Python的版本:Python 3.6 ...
- 【简说Python WEB】视图函数操作数据库
目录 [简说Python WEB]视图函数操作数据库 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:virutalenv Python的版本:Python 3.6.9 ...
- 【简说Python WEB】Flask应用的文件结构
目录 [简说Python WEB]Flask应用的文件结构 1.文件结构的目录 2.配置程序--config.py 3.app应用包 4.剥离出来的email.py 5.蓝本(BLueprint)的应 ...
- 【问题记录】uwsgi部署并启动俩个几乎一样的python flask web app,发现有一个app响应时间非常长
uwsgi在同一台linux上启动python flask web app(俩个), 发现第一个和第二个的简单性能测试差距非常大,差了将近一倍: 第一个结果: Concurrency Level: 1 ...
- Python Django(WEB电商项目构建)
(坚持每一天,就是成功) Python Django Web框架,Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式,即模型M,模板T和视图V组成. 安装Pyth ...
- 如何用Python做Web开发?——Django环境配置
用Python做Web开发,Django框架是个非常好的起点.如何从零开始,配置好Django开发环境呢?本文带你一步步无痛上手. 概念 最近有个词儿很流行,叫做“全栈”(full stack ...
- 学习参考《Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码
在学习python Web开发时,我们会选择使用Django.flask等框架. 在学习flask时,推荐学习看看<Flask Web开发:基于Python的Web应用开发实战(第2版)> ...
随机推荐
- python socketserver 实现 ftp功能
需求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp server上随意切换目录 允许用户查看当前目 ...
- scatter散点图
import matplotlib.pyplot as plt import numpy as np n = 1024 X = np.random.normal(0,1,n) Y = np.rando ...
- Promise 的含义
Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Pro ...
- Django 学习笔记1-- URLconf
今天好像巴黎有点乱,希望明天太阳还会照常升起. 简介 Django 是一个由 Python 编写.开源并采用经典的 MVC 设计模式的 Web Full Stack 应用框架. 在 Django 中, ...
- 使用mysql创建自己的物化视图
物化视图,它是用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,从而快速的得到结果.物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查 ...
- 神州优车挂牌新三板!专车B2C对决C2C将愈发狂暴?
近日,全国中小企业股份转让系统公告显示,神州优车已获准在新三板挂牌.神州优车作为神州专车的主营主体,此次挂牌新三板意味着神舟专车成功突围,成为"专车第一股".相比滴滴.Uber中国 ...
- GNS3(1)——OSPF多区域配置
GNS3(1)——OSPF多区域配置 RIP适用于中小网络,比较简单.没有系统内外.系统分区,边界等概念,用到不是分类的路由. OSPF适用于较大规模网络.它把自治系统分成若干个区域,通过系列内外路由 ...
- C++走向远洋——67(项目二、洗牌)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- 黑客必学之“网页木马webshell”
摘要: 这节课,我们来了解一下网页的木马,首先我们了解网页木马之前,先来了解一下什么是一句话木马.小马和大马.什么是webshell首先简单说一下webshell,webshell简单来说就是黑客植入 ...
- 带你封装自己的MVP+Retrofit+RxJava2框架(一)
前言 文本已经收录到我的Github个人博客,欢迎大佬们光临寒舍:我的GIthub博客 看完本篇文章的,可以看下带你封装自己的MVP+Retrofit+RxJava2框架(二),里面封装得到了改进 本 ...