uwsgi(python的一个包)在访问过程中起到桥梁的作用,它可以连接nginx和django,而nginx可以直接处理所有的静态请求(如静态文件等),所有的非静态请求则通过uwsgi传递给django,django接收请求并进行逻辑处理以及和mysql数据库交互,将得到的网页文件或数据包通过uwsgi返回给nginx,nginx再返回给浏览器。
这里我的项目下载地址为:https://github.com/johnjgh/project/tree/ubuntu ,将项目放到/home目录下。
安装并配置nginx
首先,在Ubuntu系统下打开终端,输入sudo su进入root用户模式下(需要密码),然后输入apt-get -y update -y参数表示确认安装,不会提示是否确认,apt是Ubuntu系统的包管理器。然后,再次输入apt-get install -y nginx即可安装nginx。安装完成后打开/etc/nginx/nginx.conf文件(可以使用vim命令打开,需要命令行输入apt-get install -y vim安装,安装完成后直接在命令行输入vim /etc/nginx/nginx.conf即可打开文件,基本操作:打开后按键盘的i键可以进入编辑模式,按Esc键退出编辑模式,输入:wq保存并退出,:q!不应用更改退出),修改端口号。1
2
3
4
5
6
7
8
9
10
11
12server {
listen 8088; # 修改端口号
server_name localhost;
#charset UTF-8;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
nginx常用命令:
service nginx start 启动
service nginx stop 停止
service nginx restart 重启
默认端口号是80,但是80端口很容易被其它程序占用,这里我们将其更改为8088。修改完使用命令service nginx start启动nginx,再打开网址 http://127.0.0.1:8088/ 可以看到nginx的欢迎页面,此时说明nginx启动成功。
配置mysql数据库
1、创建数据库并导入数据
Ubuntu系统自带了mysql5.7版本的数据库,在命令行root用户模式下输入mysql -uroot -p,提示输入密码,如果没有设置密码就只需要再按一次回车键,就可以进入,进入mysql后,输入create database axf;创建一个数据库,然后输入use axf;使用数据库,导入数据库将project目录下的axf.sql导入即可,即输入命令source /home/project/axf.sql;完成数据导入。
2、给数据库设置密码
导入数据完成后,需要给数据库设置密码,输入命令use mysql;,然后再输入命令update user set authentication_string=PASSWORD("123456") where User='root';设置密码,接着再输入命令update user set plugin="mysql_native_password";,最后刷新一次即可完成密码的设置。(注意:这里的数据库名称axf和数据库用户以及数据库密码需要与django项目中settings文件内的相对应)。
安装uwsgi、django、pymysql
Ubuntu系统默认安装了python3和python2,所以在使用pip(python的包管理器)安装python包时需要指定为python3,即在命令行中输入pip3 install uwsgi就可以安装uwsgi,同理,输入pip3 install django和pip3 install pymysql即可安装django和pymysql,这里的pymysql是python用来连接mysql数据库的一个包。
创建uwsgi.ini配置文件(也可以是.xml等后缀)并启动项目
在项目目录下创建project_uwsgi.ini文件,其内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13[uwsgi]
# 指定项目执行的端口号(默认为8000)
socket = :8000
# 指定运行目录(即项目的目录)
chdir = /home/project
# 项目的wsgi文件相对于此文件的位置(在此文件所在目录下的project目录中的wsgi文件)
module = project.wsgi
# 允许主进程存在
master = true
# 开启的进程数量
processes = 4
# 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件。
vacuum = true
创建完配置文件后命令行输入命令cd /home/project进入project目录,然后输入uwsgi --ini project_uwsgi.ini启动项目。
修改nginx.conf配置文件,连接uwsgi
打开/etc/nginx/nginx.conf配置文件,添加如下内容:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25server {
# 指定的是nginx代理uwsgi对外的端口号。
listen 8099;
# 指定服务器地址,这里指定为本机ip。
server_name 127.0.0.1
charset UTF-8;
# 运行过程中出错时产生的日志文件的路径,
access_log /var/log/nginx/project_access.log;
error_log /var/log/nginx/project_error.log;
client_max_body_size 75M;
# 连接uwsgi,include必须为uwsgi_params,uwsgi_pass指定的端口号需要和project_uwsgi.ini中的保持一致。
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
uwsgi_read_timeout 2;
}
# 配置nginx访问静态文件,alias必须指定项目project中的static文件夹。
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /home/project/static/;
}
}
配置完成后输入service nginx restart重启nginx。
修改python3下的django包中mysql的部分文件
在上面的配置全部完成后,还需要修改两个文件,即路径/usr/local/lib/python3.6/dist-packages/django/db/backends/mysql下的base.py和operations.py两个文件,否则可能会报错。
1、打开base.py文件,将以下代码注释掉:1
2if version < (1, 3, 3):
raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
原因可能是数据库版本太低或缺少数据库的客户端。
2、打开operations.py文件,将其中的query = query.decode(errors=’replace’)中的decode
换成encode,原因是python3中把decode方法去掉了,只能使用encode方法。
在完成了以上步骤之后,在浏览器中输入网址 http://127.0.0.1:8099/home/ ,打开网址并更改浏览器为手机模式,即可看到项目成功被打开,此时整个项目的部署就大功告成了。