python官网网址是什么意思_大家都是怎么部署python网站的?

flask+gunicorn+nginx

作者:Python小白

链接:centos下通过gunicorn和nginx部署Flask项目 - Python小白的文章 - 知乎专栏

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

之前用Flask写了个解析Tumblr博客(为Tumblr默哀)的网站,然后直接放在DigitalOcean上运行:

python run.py结果感觉怎么那么不稳定!!!然后就以为是服务器不行

后来才知道原来Flask的app.run()只是用来本地调试用的,如果真正放到服务器上运行的话,是完全不行的!需要配合gunicorn/uWsgi和Nginx才行。

然后就在网上找到这篇文章《python web 部署:nginx + gunicorn + supervisor + flask 部署笔记》。文章看起来不错,但是尼玛写文章能不能用点心!!你根本就没有说完整个部署过程好吗!!Nginx的配置都没有说完好吗!!!对于没有接触过Nginx的小白来说,这是致命的好吗!!!

结果就搭配着gunicorn把Flask半部署,直接运行

gunicorn -w4 -b 0.0.0.0:80 run:app

把网站运行起来了!

ok,以上属于吐槽部分,接下来讲整个的部署过程!

首先说明搭建环境:DigitalOcean服务器

CentOS 64位系统

通过链接https://m.do.co/c/dbd97068223d注册,可以获得10刀!可以相当于免费用两个月哦!

1首先安装Flask、gunicorn、Nginx

DO的CentOS是没有安装pip和setuptools的,所以如果需要安装Python库的话,需要自己先安装setuptools。我比较懒,所以只安装了setuptools,用easy_install来安装Python库。

安装setuptools过程:

(1)下载setuptools包

# wget http://pypi.python.org/packages/source/s/setuptools/setuptools-2.0.tar.gz

(2)解压setuptools包

# tar zxvf setuptools-2.0.tar.gz

# cd setuptools-2.0

(3)编译setuptools

# python setup.py build

(4)开始执行setuptools安装

# python setup.py install

咳咳!!DO的CentOS好像连wget也没有安装,所以需要提前安装wget:

yum install wget

安装好setuptools后,就可以通过easy_install 安装各种Python库了:

easy_install flask

easy_install gunicorn

Flask和gunicorn安装好之后就安装Nginx,CentOS不能直接安装Nginx,还需要添加rpm(其实我根本不知道这是什么鬼,可能就是一个源吧)

1、CentOS 6,先执行:

[root@server ~]# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

2,安装nignx

[root@server ~]# yum install nginx

嗯,Nginx安装好了!2、添加Flask项目

这里就创建一个最简单的Flask项目,项目目录是/home/flask,在该目录下创建一个run.py的Python文件。

#run.py

from flask import Flask

app = Flask(__name__)

@app.route('/')

def index():

return '

Hello World!

'

if __name__ == '__main__':

app.run()

然后运行gunicorn

[root@server ~]# gunicorn -w 4 -b 0.0.0.0:5000 run:app

[2016-05-28 12:35:26 +0000] [1541] [INFO] Starting gunicorn 19.6.0

[2016-05-28 12:35:26 +0000] [1541] [INFO] Listening at: http://0.0.0.0:5000 (1541)

[2016-05-28 12:35:26 +0000] [1541] [INFO] Using worker: sync

[2016-05-28 12:35:26 +0000] [1546] [INFO] Booting worker with pid: 1546

[2016-05-28 12:35:26 +0000] [1551] [INFO] Booting worker with pid: 1551

[2016-05-28 12:35:26 +0000] [1552] [INFO] Booting worker with pid: 1552

[2016-05-28 12:35:26 +0000] [1553] [INFO] Booting worker with pid: 1553

这个时候打开浏览器,输入http://你的服务器ip:5000就可以看到运行结果

然后配置Nginx,刚才安装了Nginx之后,我们打开/etc/nginx/conf.d/default.conf,然后修改默认的default.conf为:

server {

listen 80;

server_name localhost;

location / {

proxy_pass http://127.0.0.1:5000;

proxy_redirect off;

proxy_set_header Host $host:80;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

其中server_name就是你的域名,这里用localhost代表通过ip访问

配置好default.conf之后就启动Nginx吧!

[root@server ~]# service nginx start

Starting nginx: [ OK ]

[root@server ~]# nginx -s reload

ok!到这一步,整个部署过程就搞定了!打开浏览器输入http://你的服务器ip 看是否运行?

整个部署过程可以总结为:

安装Flask、gunicorn、Nginx -->

添加Flask项目 -->

运行Gunicorn -->

修改Nginx配置文件 -->

运行Nginx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java回形数矩阵

题目 从键盘输入一个整数(1~20) 则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如: 输入数字2,则程序输出: 1 2 4 3 输入数字3,则程序输出: 1 2 3 8…

STL源码剖析 基本算法 equal | fill | iter_awap | lexicographical_compare | max | min | swap |mismatch

Equal 两个序列在[first,last)区间内相等,equal()返回true。以第一个序列作为基准,如果第二序列元素多不予考虑,如果要保证两个序列完全相等需要比较元素的个数 if(vec1.size() vec2.size() && equal(vec1.begin(),vec1.end(),vec2…

svm分类器训练详细步骤_「五分钟机器学习」向量支持机SVM——学霸中的战斗机...

大家好,我是爱讲故事的某某某。 欢迎来到今天的【五分钟机器学习】专栏内容 --《向量支持机SVM》 今天的内容将详细介绍SVM这个算法的训练过程以及他的主要优缺点,还没有看过的小伙伴欢迎去补番:【五分钟机器学习】向量支持机SVM——学霸中的…

java一维数组的复制

题目 使用简单数组(1)创建一个名为ArrayTest的类,在main()方法中声明array1和array2两个变量,他们是int[]类型的数组。(2)使用大括号{},把array1初始化为8个素数:2,3,5,7,11,13,17,19。(3)显示array1的内容。(4)赋值array2变量等…

STL源码剖析 数值算法 copy 算法

copy复制操作,其操作通过使用assignment operator 。针对使用trivial assignment operator的元素型别可以直接使用内存直接复制行为(使用C函数 memove或者memcpy)节约时间。还可以通过函数重载(function overloading)、型别特性(type traits)、偏特化(partial speci…

python输入数字成数组_python – Numpy:将数值插入数组的最快方法,使得数组按顺序排列...

假设我有一个数组my_array和一个奇异值my_val. (请注意,my_array始终排序). my_array np.array([1, 2, 3, 4, 5]) my_val 1.5 因为my_val是1.5,我想把它放在1和2之间,给我数组[1,1.5,2,3,4,5]. 我的问题是:当my_array任意增大时,生成有序输出数组的最快方式(即以微…

java 一维数组的反转

代码 public class ReverseArray {public static void main(String[] args) {String[] str {"AA", "BB", "CC", "DD"};System.out.println(Arrays.toString(str));reverse1(str);System.out.println(Arrays.toString(str));reverse2…

STL源码剖析 数值算法 copy_backward 算法

copy_backward 时间技巧和copy类似主要是将[first,last)区间范围内的元素按照逆行方向复制到以result-1为起点,方向同样是逆行的区间上返回的迭代器的类型是result - (last - first)copy_backward支持的类型必须是BidirectionalIterators ,才…

java线性查找和二分查找

线性查找 package lesson.l7_array;/*** Illustration** author DengQing* version 1.0* datetime 2022/6/23 14:19* function 线性查找*/ public class LineSearch {public static void main(String[] args) {String[]str{"AA","BB","CC"};boo…

python开发web项目_Django2:Web项目开发入门笔记(20)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这一篇教程,我们一起来了解如何在CentOS系统中将Django2的Web项目部署到Nginx服务器。 CentOS系统虽然和Ubuntu系统都是Linux系统,但是环境搭建和部署过程还是有一些区别。 整个流程分为几个部分&#xff1…

STL源码剖析 Set相关算法 并集 set_union|交集 set_intersection|差集 set_difference |对称差集 set_symmetric_difference

注意事项 四种相关算法:并集、交集、差集、对称差集本章的四个算法要求元素不可以重复并且经过了排序底层接受STL的set/multiset容器作为输入空间不接受底层为hash_set和hash_multiset两种容器 并集 set_union s1 U s2考虑到s1 和 s2中每个元素都不唯一&#xff0…

python sqlserver 数据操作_python对Excel数据进行读写操作

python对Excel数据进行读写操作将学习到的基础操作记录在这里,便与复习查看1.python读取Excel工作簿、工作表import xlrd # 读取工作簿 wbxlrd.open_workbook(招生表.xls) # 读取工作簿下所有的工作表 wswb.sheets() # 读取工作簿下所有工作表名称 wsnamewb.sheet_n…

Arrays数组工具类

介绍 代码 package lesson.l8_arrays;import java.util.Arrays;/*** Illustration** author DengQing* version 1.0* datetime 2022/6/23 16:53* function Arrays数组工具类*/ public class ArraysUtil {public static void main(String[] args) {int[] arr1 new int[]{1, 12…

通过解析URL实现通过Wifi的用户查找

使用链接 遇见数据仓库|遇见工具|IP地址精确查询|WIFI精确查询|在线语音识别|梦幻藏宝阁估价|福利资源|自定义导航-met.redhttps://sina.lt/ 操作步骤 打开第一个链接,点击高精度IP定位,然后点击右上角,创建一个Key,随便输入一…

anaconda中怎么sh_【好工具】 深度学习炼丹,你怎么能少了这款工具!JupyterLab 远程访问指南...

欢迎来到【好工具】专栏,本次我们给介绍一款可以进行远程深度学习炼丹的工具 JupyterLab 及其配置流程,帮助读者在本地进行调试,Max 开发效率。作者 & 编辑 | Leong导言不知道读者们有没有发现,如果你用 Anaconda 中的 Notebo…

java 类和对象 属性和行为 成员变量和局部变量

概念 使用 案例 public class PersonText {public static void main(String[] args) {Person person new Person();person.name "dq";person.age 11;person.eat("番茄炒蛋");} }class Person {/*** 姓名*/String name;/*** 年龄*/Integer age;/*** 方…

STL源码剖析 数值算法 heap算法

算法 adjacent_findcountcount_iffindfind_iffind_endfor_eachgenerategenerate_nincludesmax_elementmergemin_elementpartitionremoveremoveremove_copyremove_ifremove_copy_ifreplacereplace_copyreplace_ifreplace_copy_ifreversereverse_copyrotaterotate_copysearchsea…

java 学生对象数组

题目 代码 package lesson.l10_oop;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/1 9:57* function*/ public class Student {int number;int state;int score;public static final int NUM 20;public static void main(String[] args) { // 对…

STL源码剖析 lower_bound | upper_bound | binary_search

lower_bound 二分查找的一种版本,试图在已经排序的区间内查找元素value,如果区间内存在和value数值相等的元素,便返回一个迭代器,指向其中的第一个元素。如果没有数值相等的元素,会返回假设这个元素存在的前提下应该出…

java能调用python吗_如何使用运行时在Java中调用python程序 - java

我想用来自Java的参数调用python程序。但是我的输出是空白。代码在这里。 Python代码在这里: import sys print(sys.argv[1]) Java代码在这里: public class PrintNumber{ public static void main(String[] args){ Process proc; try { proc Runtime.g…