楼主是个在学 web 的大学生
已经做过一个网站,之前用的 uwsgi+nginx ,部署过两次,每次都被各种有些不对的教程搞的累得不行,然后 nginx 的各类参数和 wsgi 的关系也让我搞不懂关系
现在想用 gunicorn+gevent+nginx 部署楼主的另一个项目,现在服务器正在备案,马上就可以了,希望有老司机能给点建议
(大神勿喷)
大家一起讨论一下 python 部署问题,反观 php 和 apache 的结合之好我只能羡慕
1
recall704 2015-12-04 19:09:51 +08:00 1
|
2
binux 2015-12-04 19:23:32 +08:00
|
3
sunchen 2015-12-04 20:51:25 +08:00
官方文档写的不清楚吗?
|
4
neoblackcap 2015-12-05 10:53:47 +08:00
php 跟 apache 结合是一个请求一个进程, apache 负责启动
python 已经定义好了 wsgi ,前面的 web server 转发 http 请求给 wsgi server 就可以了,这个有什么问题? 就是个简单的进程管理, nginx 转发而已,每次都是 git push 触发钩子脚本就可以部署了,没什么大的问题。 |
5
aljun OP @neoblackcap 好吧,我渣,球详细教程
|
6
matthewgao 2015-12-05 14:31:10 +08:00
各种博客都瞎扯,直接看官方文档就都有了
|
7
neoblackcap 2015-12-05 17:37:24 +08:00
@aljun 这个不是渣不渣的问题,而是你要理解为什么 Python 这样跟 mod_php 的区别,你说若要学 php,Python 上古时期还有 mod_python 呢,就是用 Python 替代 php ,一样的执行模式。
至于部署,你真的需要 gevent 吗?你无端端增加中间件,那复杂度肯定上升啊,你直接单用一个 Gunicron 就好了。也就是 nginx+Gunicron ,过早的优化是万恶的源泉。你的网站先将日流量跑到上万的 PV 再说,若是一日才几百 PV ,然后就做高并发的时期,然后吐槽,这。。。。。。。 淘宝单重启就要几个小时。 |
8
neoblackcap 2015-12-05 17:38:57 +08:00
@aljun Gunicron 文档超级简单的,上面甚至还有 supervisor 的配置文件,你下载下来改改就能跑了。官方文档就是详细教程,为什么还要求?
|
9
aljun OP @neoblackcap 我直接上 gevent 不行么⋯⋯gunicorn 对 gevent 配置很简单⋯⋯早期这样做有什么坏处,求指点(我还在考虑要不要加 redis⋯⋯)
|
10
neoblackcap 2015-12-05 19:12:48 +08:00
@aljun 没有什么坏处,你配置多花点功夫而已,就好像你觉得 uwsgi 费时,我们生产还不是上 uwsgi 。
redis 之类的,你能用自然就用。反正玩而已,你去试试就知道。坏处我能想到就是你要付出时间精力去配置这些东西,不过现在这个学习阶段,这些都不是事,多试试就好。 多读文档,多读源码,多写代码。别人给你个 benchmark 结果真的就对你有用吗?一切都还是得自己去试,你试过就知道,大学里面这样的机会多。出去社会就不多了,赶紧试,试玩多总结就好了,不会的单词就查字典,不要吐槽英语,以后的文档都是英语的。不要期望那么多教程,以后很多时候甚至连文档都没有都有可能。 |
11
aljun OP @neoblackcap 我个人博客用 flask 开发的,每套 nginx (懒),直接 gunicorn➕gevent ,反应特别快,不过现在这个项目是面向整个京城的大学,所以我想保守点,又想做最好,用的阿里云最低配的服务器,怎么样的架构最适合我呢(不拍累,但也不要太麻烦)
|
12
neoblackcap 2015-12-05 19:24:33 +08:00
@aljun 什么架构?你最熟悉的架构就是最好的。说架构你上 InfoQ 一搜一大把,你一个人能用吗?选择你能维护,你最熟悉的就是最好的,性能不行的时候再加机器,升机器。
没有最好的,你现在在网上看到的所有架构都是 trade off 之后的结果。你说你的项目食面向整个京城的大学,我还见过很多面向全国的的项目呢?所以年轻人不要想太多,扎克伯格当你也没有想那么多,就很直接的撸个 the facebook 。你就先去撸吧,等你上了一定规模,你的性能真不行的时候,你自然就会了,没有一步到位的。 |
13
MrEggNoodle 2015-12-05 19:43:55 +08:00
|
14
yangzh 2015-12-06 19:11:28 +08:00 via iPhone
https://www.digitalocean.com/community/tutorials/how-to-deploy-python-wsgi-applications-using-uwsgi-web-server-with-nginx
基本思路:首先想办法在本地成功用 uwsgi 启动好 python 程序。然后在服务器上同样地配置 uwsgi ,接着修改端口变成 localhost:port 的模式或者 tcp 模式。最后,在 nginx 上的某个 server 字段里面“反向代理”在服务器本地运行的 uwsgi python 网站,使得用户可以在公网访问网站。架构是 user <-> nginx <-> uwsgi <-> webapp.py 。 使用 gunicorn 的话,思路完全一样。 |
15
yangzh 2015-12-06 19:13:36 +08:00 via iPhone
如果你配置过 nginx + php (不是 apache )的话,你会发现思路完全一样。只是 php 使用 php-fpm 驱动, python 使用 uwsgi 或 gunicorn 驱动,而已。
|
16
lfzyx 2017-06-27 13:11:02 +08:00
|