终于算是把uwsgi+nginx+django+virtualenv配置好了

我能弄明白安装这个东西,真是奇迹阿。
主要是英文文档好像不是针对的Centos7,文档里面的那些命令,根本运行不了!
周日加班,弄粗来拉,好有成就感。

英文真的是非常有必要学精的

毕竟很多资料只有英文的,比如就说这个uWSGI的配置问题,可能有人翻译了一点,就拿来放到了自己的博客,但是那毕竟是别人的,相比于官方,他们没有那么全面和透彻。
极力推荐英文文档Setting up Django and your web server with uWSGI and nginx
在这里我就不翻译原文档了,只是列出我遇到的问题

我不知道安装uwsgi和nginx到底是在哪个环境

就是说,不知道是一定要virtualenv,还是要在正常的系统环境,反正我在两种环境都有安装。
总之安装这两个软件都没有问题,最终单个软件测试都可以使用。

nginx配置文件也是个坑

nginx的安装方法和安装目录,Centos和文档中的一点都不一样。
Centos 7安装到了/etc/nginx/目录。配置文件,系统默认的都不要动,可以自己在/etc/nginx/conf.d/目录下面新建一个mysite_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
25
26
27
28
29
30
31
32
33
34
35

# /etc/nginx/conf.d/mysite_nginx.conf
#按说这个文件放到任何目录都可以,不过放到这里,nginx会自动调用,放到其他地方,需要手动联系一下,下面我都是复制的,基本上都不用改
# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8001; # 这个端口,其实就是uWSGI设置的端口
}

# configuration of the server
server {
# the port your site will be served on
listen 80; #没特殊需要,就直接改成80吧
# the domain name it will serve for
server_name .example.com; # 这里需要改成自己的域名
charset utf-8;

# max upload size
client_max_body_size 75M; # adjust to taste

# Django media
location /media {
alias /path/to/your/mysite/media; # 网站目录media/
}

location /static {
alias /path/to/your/mysite/static; # 网站目录static/
}

# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /path/to/your/mysite/uwsgi_params; # 这个东西据说是在uWSGI的安装目录(我没找到),或者从github上下载,把这个文件复制到网站目录
}
}

uwsgi_params的下载地址是https://github.com/nginx/nginx/blob/master/conf/uwsgi_params

第4行的端口,就是运行uWSGI时配置的端口。因为测试uWSGI的时候,要运行`uwsgi –socket :8001 –wsgi-file test.py’,确保nginx设置的第4行中的端口和这里运行uWSGI时的端口一致。

运行这个测试语句后,如果不报错,而且浏览器输入域名,不带端口(因为配置nginx时端口写的是80),能打开test.py的内容(比如Hello World),就表示完成拉!

注意要保证nginx是运行状态。

下面就看看uWSGI配置。

不要以为uWSGI简单

谁叫我们是新手呢,有些坑真是要走一遍。
直接就说.ini配置文件吧,可以在任意位置创建一个uwsgi.ini文件,要找一个好记的位置,以后每次运行uwsgi都要使用这个文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# uwsgi.ini
[uwsgi]

# 这就是网站的目录(项目目录)
chdir = /path/to/your/project
# 项目名字.wsgi,这个是固定的格式
module = project.wsgi
# 虚拟环境的目录
home = /path/to/virtualenv

# process-related settings
# master
master = true
# maximum number of worker processes
processes = 10
# 这个.sock文件不一定在网站目录,我开始设置到网站目录时,并不成功;但是后来在nginx安装目录看到了这个.sock文件,就改成了/etc/nginx/mysite.sock
socket = /path/to/your/project/mysite.sock
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
# uwsgi日志
daemonize = /usr/local/httpServer.log
# 日志大小
log-maxsize = 50000000
#好像这个是限制日志级别,不是所有的日志都会记录,只是记录一些重要的,或者错误信息等。
disable-logging = true
#py-autoreload参数可以实现无需重启uwsgi,python修改即时生效
py-autoreload = 1

如果中文标出的部分,其他内容可以按需求添加。
这里遇到的坑就是这个虚拟环境目录!
我的天,我一直认为是virtualenv的安装目录,结果怎么试都不对!
其实是,在最开始要安装virtualenv时,紧接着创建的虚拟环境的目录,比如/root/virtual_env/。
或者,你总该知道虚拟环境怎么激活吧。进入虚拟环境的命令是source /path/to/virtual_env/bin/activate,那么,你的虚拟环境目录就是/path/to/virtual_env/
这个配置文件就是为了再次运行uWSGI时,不再仅仅是运行test.py,而是真实的项目。
不要忘记,nginx配置文件要改一下第4行,把第4行注释掉行首加一个#号,第3行改成server unix:///etc/nginx/mysite.sock;,这里的sock文件和uWSGI里的sock文件的目录是一样的。

终于配置完成,下面就开始试试吧。

  1. 打开nginx服务systemctl start nginx
  2. 运行uwsgi uwsgi --ini /your/ini/file/path/uwsgi.ini
  3. 打开浏览器输入你的域名。
  4. 能正常打开就完成。

另外,官方文档中其他内容我还在研究,等有了结果再回来补充。

以下是参考文档