Django+uwsgi+nginx+mysql的linux生产环境配置

本文采用linux的ubuntu,由于linux基本上自带python环境,因此进入terminal,分别输入python,python3从而测试基本环境

由于ubuntu默认采用国外的安装源,所有我们为了下载速度,优先切换国内的。

1.备份已有的$ cp /etc/apt/sources.list /etc/apt/sources.list.bak

2. 编辑并替换,最好采用阿里,中科大等科技教育机构的(具体的自己网上搜)   vim /etc/apt/sources.list

安装mysql

分别在终端下输入以下命令

1. sudo apt-get install mysql-server
2. apt-get isntall mysql-client
3.  sudo apt-get install libmysqlclient-dev
等到安装完成之后输入:service mysql start启动mysql服务端,然后输入mysql -u root -p,回车输入刚才安装时输入的密码从而进入客户端。显示mysql>字样则代表安装完成。
测试可在mysql>下输入如:"show databases;"从而显示已有的数据库,"create database database_name;"创建一个名为database_name的数据库,"use database_name;"从而使用已有的数据库,"show tables;" 从而显示已有的表名。由于我们会使用Django的models.py去通过面向对象的方式去创建表名,因此这里暂时不使用令人不爽的create table table_name()方式。最后使用'exit'命令退出。再使用service mysql stop推出服务端。
 

安装virtualenv

首先为什么要安装virtualenv???

在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.6.3。所有第三方的包都会被pip安装到Python3的site-packages目录下。如果我们要同时开发多个应用程序,那这些应用程序都会共用一个Python,就是安装在系统的Python 3。如果应用A需要python 2.7,而应用B需要python 2.6怎么办?这种情况下,每个应用可能需要各自拥有一套“独立”的Python运行环境。virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。

怎样安装呢?

可以使用"pip3 install virtualenv"当然也可以使用"sudo apt-get install virtualenv"的方式,安装结束之后再次输入该命令,代表安装完成

如果提示没有pip3,那么使用sudo apt-get install python3-pip和sudo apt-get install python-pip分别安装python2.7和python3.6下的pip,然后可以使用"pip -V"和"pip3 -V"测试是否正常。 

基本使用规则

uwsgi的官方文档给出了如下的代码:

1.virtualenv uwsgi-tutorial(比如我的python3版本是3.6.3,我可以使用‘virtualenv env36’)
2.cd uwsgi-tutorial
3.source bin/activate

 

可以看到在相应的env36/bin下有一个activate,使用"source env36/bin/activate"激活这个环境

测试python.python3基本上正常。

 安装Django

依然官方文档:

1.pip install Django

2.django-admin.py startproject mysite

3.cd mysite

安装uwsgi

pip3 install uwsgi

等待安装完成

注册一个叫app01的应用

并使用vim miniweibo/settings.py修改以下部分如下:

再使用touch test.py或者vim test.py建立一个内容如下的内容

1 # test.py
2 def application(env, start_response):
3     start_response('200 OK', [('Content-Type','text/html')])
4     return [b"Hello World"] # python3
5     #return ["Hello World"] # python2
使用并运行:uwsgi --http :8000 --wsgi-file test.py




得到以上内容,基本上宣布uwsgi成功
然后测试Django project
#python manage.py runserver 127.0.0.1:8000
如果成功则执行下面的,事实上两个都会得到同样的页面
#uwsgi --http :8000 --module miniweibo.wsgi

安装nginx

安装并使用

sudo apt-get install nginx
sudo /etc/init.d/nginx start    # start nginx

得到上面的页面则宣告正确;

接下来配置nginx

需要三个文件,文件的格式基本固定,需要修改的部分不多,分别为uwsgi_params,uwsgi.ini,nginx.conf

下载:点击此处

可以将其移动到该目录/var/pythonfile下,如下

使用sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/链接,比如我的就是:
sudo ln -s /var/pythonfile/nginx.conf /etc/nginx/sites-enabled

再次编辑miniweibo/settings.py

在最后加上    STATIC_ROOT = os.path.join(BASE_DIR, "static/")

然后使用  python manage.py collectstatic,得到类似于如下的东西。

重启nginx:  sudo /etc/init.d/nginx restart

cd miniweibo
uwsgi --socket :8001 --wsgi-file test.py

再次访问127.0.0.1:8000得到hello,world!

修改nginx.conf如下

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)
使用uwsgi --socket mysite.sock --wsgi-file test.py运行,发现127.0.0.1:8000无法访问
访问错误日志,发现是不被许可

则使用
uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=666 # (more sensible)
重新访问127.0.0.1:8000得到

再次使用

uwsgi --socket mysite.sock --module mysite.wsgi --chmod-socket=666
这代表django被uwsgi和nginx同时支持

 配置uwsgi.ini

运行 uwsgi --ini uwsgi.ini

即可进行访问。

如果出现encoding模块错误,则安装 pip install pypl进行解决。

最后

deactivate退出虚拟环境
sudo pip install uwsgi再次安装
uwsgi --ini mysite_uwsgi.ini再次尝试启动
 
 








原文地址:https://www.cnblogs.com/suxiaoman/p/8401435.html