zoukankan      html  css  js  c++  java
  • python部署到服务器(2) 一一 nginx+uwsgi+Django

    参考菜鸟教程,https://blog.csdn.net/qq_42314550/article/details/81805328,https://www.cnblogs.com/chenice/p/6921727.html

    前置条件

    • 1、我们假设你已经安装了Nginx、Mysql、Django、python3、pip3等必须的软件

    • 2、有一个能用runserver正常启动的Django项目

    • 3、该项目已经上传到linux(可通过gitlab+jenkins自动部署到服务器,详见其它博客)

    • 4、通过pip安装好项目所需的其他模块。

    安装Uwsgi

    • uwsgi是python的一个模块,通过pip命令安装uwsgi
        pip3 install uwsgi
    
    • 测试 uwsgi 是否正常
    在你的项目目录中写一个test.py 
    执行:vim test.py 
    
    python3写法:(我用的是这个)
    # test.py 文件内容如下
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"]
    
    • 然后在终端运行启动命令:
    uwsgi --http :8001 --wsgi-file test.py
    
    • 访问该地址,我的服务器是在虚拟机上, 通过 172.168.10.221:8001 访问,看在网页上是否有Hello World ,有则成功
    • 注意IP地址写你自己的主机地址,如在本地请写127.0.0.1

    测试Django

    • 如果还未安装Django,请使用以下命令安装:
    pip3 install django
    
    • 启动你的 Django 项目:
    python3 manage.py runserver    默认在8000端口, 通过IP+端口号访问,检查是否正常
    
    • 配置django,请保证你的django程序已经关闭

    • 编写django_wsgi.py文件,将其放在与文件manage.py同一个目录下

    a、进入项目文件夹中:cd mysite 
    b、编写django_wsgi.py文件:vim django_wsgi.py 
    
    • 写入如下内容(python3), 其实跟自带的wsgi.py文件内容差不多
    import os
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
    
    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()
    

    连接Django 和 uwsgi

    • 现在你的Django和uwsgi都能正常访问,接下来我们进入项目根目录 ,并启动服务器
    cd /www/api_python
    
    uwsgi --http :8000 --chdir /www/api_python --module django_wsgi
    
    
    • 现在可以通过IP+端口号访问你的项目了,我这里直接访问项目中具体的接口
    http://172.168.10.221:8000/weather/v1/weather/today  
    
    {"code": 200, "msg": "u67e5u8be2u6210u529f", "data": {"calendar": "u4e94u6708u521du4e8c", "rainfall": "224.33000000000007 mm", "weather_msg": "25u5206u949fu540eu6709u96e8,u4f1au4e0bu4e00u4e2au591au5c0fu65f6uff0cu51fau95e8u8bb0u5f97u5e26u4f1e", "wind_direction": "u4e1cu5317", "wind_level": "1u7ea7", "t": "23.8u2103", "t_min": "19.4u2103", "t_max": "26.4u2103", "air_press": "1006.0hpa", "wet": "67.0%", "wind_speed": 1.1, "evp": "u672au76d1u6d4b", "staCode": "54512", "staName": "u56fau5b89", "weather": "u591au4e91", "back_pic": "/images/index/cloudy.jpg"}}
    
    • 所有的请求都是经过uwsgi传递给Django程序的界面展示与django自启的时候一样

    实现Nginx和uWSGI的连接

    • 为了实现Nginx与uWSGI的连接,两者之间将采用soket来通讯方式。

    • 在本文中,我们将使用uWSGI配置文件的方式来改进uWSGI的启动方式

    • 在项目根目录下新建djangochina_socket.xml ,写入下面内容:(我将两段配置都写入了)

    
    <!-- 若以socket方式访问 -->
    <uwsgi>
        <socket>:8077</socket>
        <chdir>/www/api_python</chdir>
        <module>django_wsgi</module>
        <processes>4</processes> <!-- 进程数 -->
        <daemonize>uwsgi.log</daemonize>
    </uwsgi>
    
    <!-- 若以http方式访问 -->
    <uwsgi>
        <http>:8077</http>
        <chdir>/www/api_python</chdir>
        <module>django_wsgi</module>
        <processes>4</processes> <!-- 进程数 -->
        <daemonize>uwsgi.log</daemonize>
    </uwsgi>
    
    • 在上面的配置中,我们使用 项目根目录中的 uwsgi.log 来记录日志,开启4个进程来处理请求。 这样,我们就配置好uWSGI了。

    配置Nginx

    • 我们假设你将会把Nginx程序日志放到你的目录 /usr/local/nginx/logs/下,请确保该目录存在,当然你也可以写成别的目录
    • 我们假设你的Django的static目录是 /www/api_python/static
    • media目录是 /home/api_python/media
    我们假设你的域名是 python.test.com (在调试时你可以设置成你的机器IP) 
    我们假设你的域名端口是 80(在调试时你可以设置一些特殊端口如 8070) 
    基于上面的假设,我们为 /usr/local/nginx/conf/nginx.conf 添加以下配置: 
    在http{…}中的最后一行添加:
    
    
    • 内容如下:
    server {
    
            listen   80;
            server_name python.test.com;
            access_log /usr/local/nginx/logs/access.log;
            error_log /usr/local/nginx/logs/error.log;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
             include             /usr/local/nginx/conf/uwsgi_params;
             uwsgi_pass     127.0.0.1:8077;     # 当访问python.test.com 时, 会转到本服务器的8077端口,也就是uwsgi
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # 以下三个location 如果没有相关目录,可以不写
            location /static/ {
                alias  /www/api_python/static/;
                index  index.html index.htm;
            }
    
            location /media/ {
                alias  /www/api_python/media/;
            }
    
        location /templates/ {
                alias  /www/api_python/templates/;
            }
    
        }
    
    
    • 在上面的设置后,可以让Nginx来处理静态文件(/static/ 和 /media/ )。非静态文件请求Nginx会发给 socket 8077,然后让uWSGI来进行处理。
    Nginx+uWSGI+Django的实现方式 
    在完成上面配置后,需要按以下步骤来做: 
    1、重启Nginx服务器,以使Nginx的配置生效。 
    systemctl restart nginx 
    重启后检查Nginx日志是否有异常。 
    vim /usr/local/nginx/logs/error.log 
    查看 error.log 文件内容是否有异常信息
    
    2、启动uWSGI服务器 
    cd /www/api_python
    uwsgi -x djangochina_socket.xml 
    检查日志 uwsgi.log 是否有异常发现。 
    uwsgi.log 日志文件生成在项目目录下,所以进入项目目录执行 vim uwsgi.log 查看
    
    3、访问服务 
    基于上面的假设你的域名是python.test.com
    因此,我们访问 python.test.com
    我访问是具体的接口,查询实时天气:http://python.test.com/weather/v1/weather/today
    如果发现程序与 单独使用Django启动的程序一模一样时,就说明成功啦! 
    
  • 相关阅读:
    C# 多线程 弹出模态MessageBox的一种方法
    CentOS 7安装Docker
    CentOS 6 安装Docker
    docker三要素
    openstack_dashboard无法获取nova
    cinder安装与配置
    Dashboard安装与配置
    openstack-neutron安装与配置
    openstack在controller节点使用openstack network agent list不显示计算节点
    nova安装与配置
  • 原文地址:https://www.cnblogs.com/lz0925/p/10980515.html
Copyright © 2011-2022 走看看