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

安装Nginx

sudo apt-get install nginx

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项目

浏览器访问:localhost:8001

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

uwsgi --httlocalhost: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 = :8081
# 项目目录
chdir           = /home/wuchao/blog
# 指定项目的 wsgi 文件
module          = blog.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      8002;
    # 绑定的域名
    server_name 127.0.0.1; # 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/wuchao/blog/media;  # 您的Django项目的媒体文件——根据需要进行修改
    }
    #Django 静态文件路径(设置成自己的路径)
    location /static {
        alias /home/wuchao/blog/static; # 您的Django项目的静态文件——根据需要进行修改
    }

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

重启nginx

sudo /etc/init.d/nginx restart

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

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

ALLOWED_HOSTS = ['*']

通过本地ip地址:8002访问。如:localhost:8002  或者ip:8002

 

 

 

 

 





 

 

posted @ 2018-05-31 00:01  武老师  阅读(1121)  评论(0编辑  收藏  举报