ubuntu配置Python Django+Nginx+uwsgi 安装配置

安装Nginx

sudo apt-get install nginx

如果不能使用apt-get  

sudo apt-get update(更新源)

ubantu安装完Nginx后,文件结构大致为:
  所有的配置文件都在 /etc/nginx下;
  启动程序文件在 /usr/sbin/nginx下;
  日志文件在 /var/log/nginx/下,分别是access.log和error.log;
  并且在 /etc/init.d下创建了启动脚本nginx。

sudo /etc/init.d/nginx start    # 启动
sudo /etc/init.d/nginx stop     # 停止
sudo /etc/init.d/nginx restart  # 重启

使用浏览器访问  localhost  出现界面    (局域网通过地址输入ip地址,如:http://192.168.1.90/ )

sudo apt-get install python3-dev
sudo pip3 install uwsgi

注意:

如果未安装python3 ,

使用:sudo apt-get install python3.6

如果pip3 提示:

wuchao@ubuntu:~$ pip3 install uwsig

Command 'pip3' not found, but can be installed with:

sudo apt install python3-pip
解决方案使用: sudo apt install python3-pip

至于为什么要使用uwsgi,可以参见这边博客:快速部署Python应用:Nginx+uWSGI配置详解(1)
这样大体的流程是:nginx作为服务器最前端,负责接收client的所有请求,统一管理。静态请求由Nginx自己处理。非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。
通信原理是:
the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django

测试uwsgi

在Django项目下新建test.py文件,

# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    #return ["Hello World"] # python2
    return [b"Hello World"] # python3

然后执行shell命令:

uwsgi --http-socket :8001 --plugin python --wsgi-file test.py

注意:如果uwsgi提示无命令 ,使用pip3 uninstall uwsgi 卸载 ,再使用 pip3 install uwsgi 重新安装

加上--plugin python3是告诉uWSGI在使用python插件,不然很有可能会出现类似这样的错误:

uwsgi: unrecognized option '--wsgi-file'
getopt_long() error

执行成功在浏览器中打开:http://localhost:8001显示Hello World说明uwsgi正常运行。

测试Django

首先得保证Django项目没有问题

sudo apt install python-django #安装django
django-admin startproject blog #创建blog项目
cd blog #进入项目
python3 manage.py runserver 0.0.0.0:8001 #运行django项目

如果不能使用django-admin startproject blog 时,创建软连接:sudo ln -s /usr/python3/bin/django-admin.py /usr/bin/django-admin

浏览器访问:localhost:8001

然后链接Django和uwsgi,实现简单的web服务器,到Django项目目录下执行shell:

uwsgi --http localhost:8001 --plugin python3 --module blog(项目名).wsgi

blog为你的项目名。访问http://localhost:8001,项目正常。注意这时项目的静态文件是不会被加载的,需要用nginx做静态文件代理。

配置uwsgi

uwsgi支持通过配置文件的方式启动,可以接受更多的参数,高度可定制。我们在Django项目目录下新建uwsgi.ini

在django项目project目录下(manage.py下)创建配置文件分两种 ini
# myweb_uwsgi.ini file
    [uwsgi]
    # 指定IP端口
    socket = :8080
    # 项目目录
    chdir = /home/ubuntu/xiangmu
    # 指定项目的 wsgi 文件
    module = xiangmu.wsgi
    # process-related settings
    # 启用主进程
    master = true
    # maximum number of worker processes
    processes = 4
    # ... with appropriate permissions - may be needed
    chmod-socket    = 664
    # clear environment on exit
    vacuum          = true
    # pidfile for record run pid
    pidfile =pid.uwsgi
    # 设置日志目录
    daemonize = UWSGI.log

 

在shell中执行:

sudo uwsgi --ini uwsgi.ini 

ps:如果实在不想配置nginx的话,单uwsgi就已经能完成部署了(把socket换成http),你可以把Django中的静态文件放到云平台中如七牛等等,这样你的Web也能被正常访问。

配置nginx

nginx默认会读取/etc/nginx/sites-enabled/default文件中的配置,修改其配置如下:追加内容如下

注意:如果文件为只读 使用chmod修改权限: sudo chmod 777  /etc/nginx/sites-enabled/default

server {
        # 你的网站将会监听的端口号,如果监听80端口,部署后访问localhost自动跳转到nginx默认的欢迎界面
        listen      80;
        # 绑定的域名
        server_name 10.32.170.124; # substitute your machine's IP address or FQDN
        charset     utf-8;

        # 最大上传速率
        client_max_body_size 75M;   # adjust to taste

        # Django media(设置成自己的路径)
        location /media  {
            alias /home/ubuntu/xiangmu/media;  # 您的Django项目的媒体文件——根据需要进行修改
        }
        #Django 静态文件路径(设置成自己的路径)
        location /static {
            alias /home/ubuntu/xiangmu/static; # 您的Django项目的静态文件——根据需要进行修改
        }

        # 最后,将所有非媒体请求发送到Django服务器
        location / {
            include     /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
            uwsgi_pass 127.0.0.1:8080;
        }
    }

 

重启nginx

sudo /etc/init.d/nginx restart

注意:重启失败则配置文件修改错误

修改项目中setting.py 配置文件28行:

ALLOWED_HOSTS = ['*']

通过本地ip地址访问。如:10.32.170.124/index 

posted @ 2018-07-12 19:07  音量  阅读(273)  评论(0编辑  收藏  举报