发布python web项目

发布一个python项目

如果你想要发布项目在公网上,首先你要有一台能在公网上访问的服务器,我推荐阿里。我这里说的 是django开发的web项目

1、最简单的方式
直接使用runserver服务器,把代码发到服务器上,或者推到github上,再在服务器上clone下来,然后创建一个虚拟环境安装依赖包,直接python manage.py runserver 0.0.0.0:8000,但是一定要记得让debug=True,这个选项你改为False的话,你跑起来但凡有点错,只有个server error 500,错在哪你都不知道。等你确保无误你在把这个改为False,然后下面有个列表直接放’*'就可以了,真正想攻击你你防不了,别听那些人说的要放好几个ip。

2、真正的上线部署是这样的
nginx + uwsgi + django,用了这套体系后
用户一个请求进来,请求是发向nginx的,nginx拿到请求,进行判断,如果你是请求静态资源,nginx这边直接返回给你,如果你是请求后端逻辑(动态资源),马上转发到uwsgi,uwsgi拿到这个动态请求,按照wsgi协议找到django框架,django框架找到请求的接口,执行并返回应答传到用户。
注意:python写的web,因为要用到wsgi协议,所以跟django打交道的服务器必须支持wsgi协议,比如uwsgi,gunicorn等,无非是并发的支持上,多进线还是协程,推荐uwsgi。

3、web服务器是什么,web框架是什么?
web服务器通俗的理解就是:只管静态请求,有就返回,没有就404。
web框架:HTTP的动态请求是专交给框架的,框架处理返回。

4、为什么要用nginx?
因为uwsgi对静态文件的处理很差,然而nginx就是为处理静态资源而生,你的照片,录像,往主站点目录一放,直接输入名称就能拿到。

5、uwsgi服务器的使用:
先在虚拟环境中安装uwsgi;直接用uswgi跑项目,先切换到项目目录,比如我项目名叫AnswerSystem在这里插入图片描述
你可以试试,连特么django的后台都不能正常显示,美观感还没有runserver强,看起来就跟个钓鱼网站一样。
uwsgi有个热加载,只需在上图后面加个**–py-autoreload=1**,不加这个参数的话,每次修改代码都要重新执行上图的命令,所以一定要加上这个,何为热加载,就像pycharm跑起来之后,你改一下代码会自动重启,热加载就是代码有变化会自动重启

这段命令可以启动,但是基本上会使用uwsgi的配置文件启动项目,方便监控项目。(uwsgi --ini uwsgi.ini),我跑在8008在这里插入图片描述
那两个ip直接写0.0.0.0,直接做web服务器就不谈了,上线不会用。只说socket,到时交给nginx,如果nginx和uwsgi在一台机上,下下张图nginx转发到127.0.0.1可以,本服务器ip也可以,0.0.0.0也可以,通吃。

6、你要加上nginx处理静态文件,那你项目的静态文件在哪你不告诉nginx?
a、设置django的静态文件目录。在这里插入图片描述
b、使用命令收集django的静态文件
python manage.py collectstatic,这样他就会根据配置把静态文件收集到上图目录。
c、收集了文件,下面就让nginx知道静态文件的位置,但是还要把这个静态目录cp到nginx容器,因为容器也有自己的文件系统,nginx在容器中,它肯定在自己的容器找static目录,不会管宿主机。把nginx的转发一起配置。在这里插入图片描述
上图中我是让nginx转交到本服务器ip:8008,从uwsgi的配置文件,我是用0.0.0.0:8008跑的django的web项目,因为我是用docker跑的nginx容器,如果我前面不用0.0.0.0跑,用127.0.0.1,这里就要转交到127.0.0.1,而nginx是个隔离的容器,nginx会在本容器中找127.0.0.1的服务,不会去管宿主机。因为我是服务器端口8007映射到这个nginx容器的80,而我服务器上项目跑的0.0.0.0:8008
所以达到的效果是我访问本服务器:8007就会到达nginx,nginx再location到我uwsgi跑的项目。alias访问不到静态文件换root试试。

另外,如果还要多个uwsgi服务器跑同一个项目做负载均衡的话,代理池一样的设置,包括算法,直接在uwsgi_pass 后跟代理池名称即可。

好累,这就是只会用docker跑服务来用,而不会用docker一键部署呀,下篇文章见

发布了3 篇原创文章 · 获赞 0 · 访问量 136

猜你喜欢

转载自blog.csdn.net/qq_37623764/article/details/104951850