美文网首页
阿里云服务器部署python项目

阿里云服务器部署python项目

作者: 午觉不眠Orz | 来源:发表于2017-10-21 12:00 被阅读0次

    一. 部署python项目的方式

    python web项目的部署方式,根据网上资料有9种,请参考资料,本文不做详细描述。仅根据网上找到的资料进行部署测试。

    其他参考资料:

    区分wsgi、uWSGI、uwsgi、php-fpm、CGI、FastCGI的概念

    阿里云部署django网站教程(Ngnix +Uwsgi + virtualenv)

    使用 Nginx 和 Gunicorn 部署 Django 博客

    请先建立如下常见概念:

    web服务器:nginx,apache,uWSGI,tornado,flup

    协议:wsgi(用于web服务器和python的web程序间通讯)

    uwsgi(专用于uWSGI这种python web服务器)

    cgi(一种通用的web标准,规定web服务器传送数据的标准格式,为了实现cgi协议,而启动的进程就是cgi进程了)

    fastcgi(对cgi协议的性能优化协议,实现cgi的进程会反复启动进程,php解释器反复初始化,浪费资源,对此fastcgi规定一个master进程负责调度,后续的php-cgi,php-fpm都是这一协议的产物)

    php-fpm(可以视为php-cgi的升级优化,之所以还有php-cgi,因为windows不支持php-fpm啊,绝望的windows,一种实现fastcgi协议的进程管理器)

    模块:mod_wsgi(可视为apache服务器的扩展模块,支持wsgi协议,小白的说,你当他是apache服务器的翻译器,将Apache送出的数据,按照wsgi协议标准化后发送给python web程序处理)

    关于cgi,fastcgi,php-cgi,php-fpm的关系,可参考讨论资料

    二. 以下为本人尝试的部署方式:

    1. nginx+uWSGI部署Django网站

    首先:原理理解

    nginx,uWSGI,virtualenv,django四者之间的是怎样进行工作的?

    首先,Nginx负责接受外部客户端请求并对其htpp请求进行解包,若请求是静态文件则根据设置好的静态文件路径返回对应内容。若请求是动态内容则将请求交给uWSGI服务器(nginx和uWSGI使用socket通信)。

    然后,uWSGI服务器根据wsgi协议解析并回调virtualenv中的django应用。

    接着,django则根据请求进行数据库查找和模版渲染等工作(总之就是返回一个响应内容)然后再逆方向返回到Nginx

    最后,Nginx将响应交给客户端。

    具体部署的操作步骤:

    第一步,创建一个简单的Django web程序DeployTest,设置与静态文件static_url,static_root;媒体文件media_url,media_root;一串secure相关的settings文件设置,

    第二步,检查web项目deploy,参数是否设置完毕。

    manager.py check --deploy

    第三步,生成requirements.txt文件,描述项目的依赖包

    pip freeze>requirements.txt

    第四步,scp命令将本地文件上传给阿里云服务器,本人这里使用了/website/DeployTest作为项目目录

    scp  -r   /Users/yujin/PycharmProjects/DeployTest    root@目标IP:/website/DeployTest

    第五步,/website/DeployTest,linux生成项目依赖

    pyenv local virtualenv  创建虚拟环境

    pip install -r requirements.txt  解决环境和项目依赖问题

    ls -al /root/.pyenv/versions/VirtualenvForDeployTest/lib/python3.6/site-packages/ 查看下你的虚拟环境安装的第三方包情况,是否满足邀请

    第六步,安装nginx服务器

    yum install nginx

    第七步,安装uWSGI服务器

    pip install uWSGI

    第八步,增加配置,将uWSGI和django web程序集成

    写配置文件,随意命名为uwsgi.ini文件

    注意大坑,#号不是注释,直接复制粘贴,导致uwgsi启动失败。另外错误信息中缺乏的文件,可以locate 文件名,或者直接新建的方式解决。

    [uwsgi] #配置

    socket=127.0.0.1:8080  #uWSGI服务器启动占用的地址和端口

    static-map=/static=/website/DeployTest/collected_static    #设置django静态文件夹的路径

    chdir=/website/DeployTest  #设置django的路径

    module=DeployTest.wsgi:application

    ;virtualenv = /home/aihunter  #设置虚拟环境路径,不设置的话在会找不到django

    master=true  #设置是否允许主进程存在

    process=5  #设置进程数量

    harakiri=30  #客户端请求超过设置

    vacuum=true  #设置服务器退出时自动清理环境

    pidfile=/tmp/project-master.pid

    max-requests=5000

    daemonize=/var/log/uwsgi/yourproject.log

    第九步:启动nginx服务

    server {

    listen 80;  #设置nginx服务器开启的端口号

    server_name www.aihunter.cc;  #这里填写你自己的域名

    charset utf-8;

    client_max_body_size 75M;

    location /static {

    alias home/virtuweb/testproject/testmodel/static;  #设置django静态文件路径

    }

    location / {

    uwsgi_pass 127.0.0.1:8080; #设置为uwsgi服务器开启的端口

    include /etc/nginx/uwsgi_params;  #设置uwsgi_params文件路径

    }

    }

    启动nginx

    nginx 或者nginx目录下 ./nginx

    nginx -s reload 重启

    第十步:启动uwsgi服务:

    uwsgi  --ini testproject_uwsgi.ini

    第十一步:自行访问网址验证了。

    2. nginx+Gunicorn部署Django网站

    第一步,安装nginx,不再描述

    第二步,修改配置文件

    server {

    listen 80;

    server_name  #这里写你的域名;

    location / {

    proxy_pass http://127.0.0.1:8000;

    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

    nginx 或者nginx目录下 ./nginx

    nginx -s reload 重启

    第四步,安装gunicorn,在项目目录下执行,保证所使用的python虚拟环境

    pip install Gunicorn

    在settings文件中,INSTALLED_APPS选项,增加'gunicorn'

    第五步,启动gunicorn

    命令行中执行

    gunicorn YourProject.wsgi

    第六步,检查结果

    相关文章

      网友评论

          本文标题:阿里云服务器部署python项目

          本文链接:https://www.haomeiwen.com/subject/rotmuxtx.html