前言
本文介绍的方法基于CentOS 7.2 + Python 2.7 + Django 1.9
的环境搭建,但实际上,该方法在CentOS 7.4 + Python 3.6 + Django 1.11
下依然可用,我的个人网站就是基于后者搭建的。
环境搭建
- Django 1.9
- Nginx 1.8(RPM包安装)
- uWSGI 2.0.12
Django
Django
的安装方式有许多种,无论是使用pip install django
或是从Django
官网上下载Django
源码后,在源码目录执行python setup.py install
的源码方式安装都可以。安装完毕后,进入Python
命令行,执行import django
,若无任何错误,则Django
安装完成。
uWSGI
uWSGI
同样可以采用上述两种方法进行安装,如果采用源码安装,安装过程中有可能会出现一些问题。
1)fatal error: Python.h: No such file or directory
这个错误是因为缺少Python-devel
环境,执行yum -y install python-devel
进行安装。
2)collect2: error: ld returned 1 exit status
这是因为缺少pcre
环境,同样使用yum
进行安装。
3)configure: error: You need a C++ compiler for C++ support
这是因为缺少gcc-c++
,依然使用yum
进行安装即可。
顺利安装完成后,在命令行执行uwsgi -version
查询版本,若无问题,则uWSGI
安装成功。
Nginx
Nginx
我这里采用RPM
包的方式进行安装,使用RPM
包可以减少一些配置的工作,如果对自己比较有信心或者有其他需求,则可以使用源码来进行安装。
执行wget http://nginx.org/packages/rhel/7/x86_64/RPMS/nginx-1.8.1-1.el7.ngx.x86_64.rpm
下载RPM
包,然后执行rpm -ivh nginx-1.8.1-1.el7.ngx.x86_64.rpm
来安装Nginx
。安装完成后,键入nginx -v
,出现nginx version:nginx/1.8.1
字样则安装成功。
配置项目
假设我们的项目为mysite
,并且将项目放到/www
目录下,即我们项目的根目录为/www/mysite
。
将/etc/nginx/uwsgi_params
文件复制到/www/mysite
下,并执行chmod +x /www/mysite/uwsgi_param
提高该文件的权限。在/var/log
目录下新建uwsgi
目录用于存放uWSGI
的日志,或者可以按照个人喜好随意创建日志目录,一会儿在uwsgi
的配置文件中指定即可。
在/etc
目录下新建uwsgiconfig.ini
文件作为uWSGI
的配置文件,并配置内容。
uWSGI
以及后面Nginx
的配置过程可以简单参考uWSGI
的官方文档:uWSGI官方文档。
下面我给出一个简单的配置:
# /etc/uwsgiconfig.ini
[uwsgi]
socket = /www/mysite/mysite.sock
master = true
process = 10
vacuum = true
max-requests = 5000
pidfile = /var/run/uwsgi.pid
daemonize = /var/log/uwsgi/uwsgi.log
chdir = /www/mysite
module = mysite.wsgi
chmod-socket = 666
配置完uwsgi
后,再配置Nginx
,同样的,Nginx
的配置也可以参考上面给出的uWSGI
官方文档。
我们编辑/etc/nginx/conf.d/default.conf
文件,键入以下内容:
# /etc/nginx/conf.d/default.conf
upstream django {
server unix:///www/mysite/mysite.sock;
}
server {
listen 80; # 监听的端口
server_name *; # 根据自己服务器的IP或域名来设置
charset utf-8;
client_max_body_size 10M;
fastcgi_buffers 16 512k;
fastcgi_send_timeout 120s;
fastcgi_read_timeout 120s;
location /static {
alias /www/mysite/static; # 用于放置项目静态文件
}
location / {
uwsgi_pass django; # 这个django对应上面upstream的django #
include /www/mysite/uwsgi_params;
}}
系统相关
Linux
系统别忘了关闭防火墙和selinux
。当然,如果为了安全考虑,我建议还是研究一下怎么设置这两个东西,但如果实在不会搞,或者没有这个需求(譬如在更外层的网络上做防火墙策略,如阿里云),那么就按照我下面说的方式把这俩东西关掉吧。
防火墙
- 执行
systemctl stop firewalld.service
关闭防火墙。 - 执行
systemctl disable firewalld.service
删除防火墙服务。
SELINUX
编辑文件/etc/selinux/config
,将SELINUX
改为disabled
,然后重启服务器完成配置。
验证
执行systemctl start nginx && uwsgi --ini /etc/uwsgiconfig.ini
启动服务器,如果终端下只出现[uWSGI] getting INI configuration from /etc/uwsgiconfig.ini字样,则服务器启动成功。其他任何Nginx
字样的报错,请查看/var/log/nginx/error.log
或者systemctl status nginx
定位并解决问题。
服务器启动成功后,在浏览器中输入地址和端口,没有错误信息,则网站搭建成功。
总结
环境搭建永远是开发过程中最头痛的阶段之一,第一次时搭建会有无数坑在前方等着你。
本文介绍的方法,最容易出问题的,是Nginx
和uWSGI
配置文件的问题,启动失败的多数原因都在配置文件上,或者权限问题。
这玩意儿也是熟能生巧的过程,搭建多了自然也就熟练了。