centos7+nginx+python3+django+uwsgi配置

Posted xqskzs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos7+nginx+python3+django+uwsgi配置相关的知识,希望对你有一定的参考价值。

学了一下python3,于是租了阿里云服务器,玩一玩。后来我才发现玩一玩装个VirtualBox就够了:https://ninghao.net/blog/1566,关键虚拟机可以任意装玩。

现在开始讲讲centos7+nginx+python3+django配置,我用的是mac,新手可以先用VirtualBox练手,不行就删了重新生成一个虚拟机,把各种步骤都理解熟悉了,再到服务器上实战。一次性操作完难免有问题,一步一步来。

1.租的服务器(选择centos)的话,需要在阿里云后台控制台开放几个端口,克隆一下已开放的端口,tcp自定义就行,mysql(3306),nginx(8000以上都行)。(都切换到root用户操作)

2.安装python3:http://www.mamicode.com/info-detail-2019356.html。

3.安装nginx: https://www.cnblogs.com/tangjiansheng/p/6928722.html。

4.安装mysql: https://www.cnblogs.com/bigbrotherer/p/7241845.html。(这一步如果暂时用不上数据库也可以不操作)

为了区分开发python版本环境,你可以用pip3装一下virtualenv以及virtualenv的管理工具virtualenvwrapper(这步我没做,显得麻烦)

5.确定2,3两步安装成功了,接下来就用pip3 安装django 和uwsgi,如果django 和uwsgi的命令不能用,就这样操作一下:(不熟悉linux命令可以先去了解一下,还有vim编辑器的使用)

ln -s /usr/local/python3/bin/django-admin /usr/bin/django-admin  和 ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi(或者uwsgi3(区分版本))

在进行下一步之前建议你看一下这篇博客:http://blog.csdn.net/c465869935/article/details/53242126

还有官方文档:https://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html(直接搜uwsgi官方文档(找到Setting up Django and your web server with uWSGI and nginx)).

6.测试uwsgi能否正常运行:

  随便找个干净的目录下vim  test.py,新建一个py文件,在里面写上:

  def application(env, start_response):

       start_response(‘200 OK‘, [(‘Content-Type‘,‘text/html‘)])

      return "Hello World".encode()

  并保存。然后在当前目录下执行:uwsgi --http :8000 --wsgi-file test.py。

  接着在你电脑的浏览器上输入你虚拟机或者服务器的ip:8000,或者ctrl+n新建一个终端,进入你的虚拟机(或者服务器)

  执行:curl http://127.0.0.1:8000,能显示Hello World说明uwsgi没问题。

7.随便找个干净的目录(/py36_projects/) django-admin startproject pyDemo 新建一个django项目

  cd pyDemo/pyDemo 进入项目里面 编辑settings.py : vim settings.py ,在里面加上:

ALLOWED_HOSTS = [‘test.xq.com‘,‘localhost‘, ‘127.0.0.1‘,‘虚拟机自己的ip‘]

#test.xq.com为你自己买的域名,暂时可以不用,用虚拟机自己的ip或者服务器的ip就行

同时加上:

STATIC_ROOT = os.path.join(BASE_DIR, ‘static‘)

并保存 执行 cd ..切换到pyDemo项目的根目录,能看到manage.py即可,然后执行:python3 manage.py collectstatic.

在同一目录下新建uwsgi的配置文件: vim uwsgi.ini ,在里面写上:

[uwsgi]

socket = 127.0.0.1:8001

chdir=/py36_projects/pyDemo

module=pyDemo.wsgi

master = true

processes=2

threads=2

max-requests=2000

chmod-socket=664

vacuum=true

daemonize = /py36_projects/pyDemo/uwsgi.log

并保存

8.剩下的只有配置nginx的配置文件,

vim /etc/nginx/nginx.conf,进入nginx.conf配置文件看看有没有下面这句代码:

 

  include /etc/nginx/conf.d/*.conf;(意思是导入/etc/nginx/conf.d/下的所有配置文件)

于是我们只要在/etc/nginx/conf.d/目录下:

cd /etc/nginx/conf.d

新建一个conf就行:vim pyDemo.conf(名字随便取),里面写上:

upstream django {

    # server unix:///path/to/your/mysite/mysite.sock; # for a file socket

    server 127.0.0.1:8001; # for a web port socket (we‘ll use this first)

}

 

# configuration of the server

server {

    # the port your site will be served on

    listen      8000;

    # the domain name it will serve for

    server_name localhost; # substitute your machine‘s IP address or FQDN

    charset     utf-8;

 

    # max upload size

    client_max_body_size 75M;   # adjust to taste

 

    location /static {

        alias /py36_projects/pyDemo/static; # your Django project‘s static files - amend as required

    }

 

    # Finally, send all non-media requests to the Django server.

    location / {

        uwsgi_pass  django;

        include     /etc/nginx/uwsgi_params; # the uwsgi_params file you installed

    }

}

并保存

一些说明:

listen      8000; 阿里云服务器的话为上面提到的阿里云后台控制台添加的端口(对外的端口)

server_name localhost; localhost可以替换你购买的域名(如前面django的配置文件里的test.xq.com)

/py36_projects/pyDemo/ 是我的项目路径

uwsgi_pass  django; 里面的 server 127.0.0.1:8001;和上面的uwsgi.ini配置文件的 socket = 127.0.0.1:8001 的端口一致,这个端口8000以上把(不要和nginx配置的端口相同就行)

 

include     /etc/nginx/uwsgi_params;引入/etc/nginx/目录下的uwsgi_params文件,首先你要到该路径下看有没有这个文件,默认是有的,没有就新建一个并写上:

uwsgi_param  QUERY_STRING       $query_string;

uwsgi_param  REQUEST_METHOD     $request_method;

uwsgi_param  CONTENT_TYPE       $content_type;

uwsgi_param  CONTENT_LENGTH     $content_length;

 

uwsgi_param  REQUEST_URI        $request_uri;

uwsgi_param  PATH_INFO          $document_uri;

uwsgi_param  DOCUMENT_ROOT      $document_root;

uwsgi_param  SERVER_PROTOCOL    $server_protocol;

uwsgi_param  REQUEST_SCHEME     $scheme;

uwsgi_param  HTTPS              $https if_not_empty;

 

uwsgi_param  REMOTE_ADDR        $remote_addr;

uwsgi_param  REMOTE_PORT        $remote_port;

uwsgi_param  SERVER_PORT        $server_port;

uwsgi_param  SERVER_NAME        $server_name;

并保存

你也可以在server里面加上access_log和error_log配置参数,定义nginx访问日志和错误日志的存放路径。 (暂时可不做)

9.以上基本配置好了,验证的准备:

先执行(一步一步来):

pkill -9 uwsgi

pkill -9 nginx

然后切换到项目根目录:

cd /py36_projects/pyDemo 执行:

uwsgi --ini uwsgi.ini

最后执行:

systemctl start nginx 或者 nginx -c /etc/nginx/nginx.conf(都是启动nginx的)

10.开始验证:

打开浏览器:输入你虚拟机或者服务器的 ip:8000,像我的就是:120.79.14.122:8008 或者 120.79.14.122:8008/admin,

显示的页面分别是:

技术分享图片

 

 

 技术分享图片

 

这样就配置成功了,切记 

http://blog.csdn.net/c465869935/article/details/53242126

还有官方文档:https://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html(直接搜uwsgi官方文档(找到Setting up Django and your web server with uWSGI and nginx)).

浏览这两篇文章很重要,对你的理解有帮助

 

 


以上是关于centos7+nginx+python3+django+uwsgi配置的主要内容,如果未能解决你的问题,请参考以下文章

centos7下部署Django(nginx+uWSGI+Python3+Django)

centos7.2下pip3 + python3.5 + django + nginx + uwsgi

Django 部署 CentOS7+Python3+Django+uWSGI+Nginx(含Nginx返回400问题处理防火墙管理)

centos7下部署Django(nginx+uwsgi+django+python3)

CentOS7下部署Python3+Django+uwsgi+Nginx

Centos7 django+uwsgi+nginx+python3.6.8部署