1, 废话
之前利用 Django 写了些测试工具, 一直是直接 python manage.py runserver 8081 这么来用的. 用户量不大, 倒也不影响什么. uWSGI+Nginx 的性能肯定要好, so 研究了一下
2, 环境:
- Python: 3.5
- Django: 1.8
- OS: CentOS 7 x86_64
- uwsgi: 2.0.17
3, 安装 Python3.5
不要删除自带的 python2.7, 否则会出问题, 因为 centos 许多软件需要依赖系统自带 python
安装依赖工具 yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
下载 wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
解压 tar -zxvf Python-3.5.1.tgz
移动至规范的放软件的目录下 mv Python-3.5.1 /usr/local
安装:
- cd /usr/local/Python-3.5.1/
- make & make install
更新 python 的软连接:
- rm -rf /usr/bin/python
- ln -s /usr/local/bin/python3.5 /usr/bin/python
验证
python -V
4, 安装 uWSGI
安装 pip install uwsgi
验证
- def application(env, start_response):
- start_response('200 OK', [('Content-Type','text/html')])
- return [b"Hello Django"]
- uwsgi --http :8001 --wsgi-file test.py
浏览器访问, 网页能显示 Hello Django 那么就没问题
5, 安装 Nginx
配置源
vi /etc/yum.repos.d/nginx.repo 添加下面内容
- [nginx]
- name=nginx repo
- baseurl=http://nginx.org/packages/mainline/centos/7/x86_64/
- gpgcheck=0
- enabled=1
- yum install nginx
启动 nginx:
systemctl start nginx
此处如果报错, 可以查看系统日志来分析, 本人遇到的问题如下:
nginx: [emerg] bind() to 0.0.0.0:8089 failed (13: Permission denied)
权限拒绝, 度娘, 发现是, 经检查发现是开启 selinux 导致的. 直接关闭:
方法一: 临时关闭 setenforce 0
方法二: 用户关闭
修改 / etc/selinux/config 文件
将 SELINUX=enforcing 改为 SELINUX=disabled
重启机器即可
修改默认端口号 (默认为 80)
- vim /etc/nginx/conf.d/default.conf
- server {
- listen 8089;
- listen [::]:8089;
- ...
- ...
- }
systemctl restart nginx 重启 nginx, 直接访问 http://ip:8089 能看到 nginx 的欢迎界面即可.
6, 配置
配置 uwsgi 启动 django 的参数
- vim django_uwsgi.ini
- [uwsgi]
- # 通过 uwsgi 访问 django 需要配置成 http
- # 通过 nginx 请求 uwsgi 来访问 django 需要配置成 socket
- # 9000 是 django 的端口号
- socket = :9000
- # web 项目根目录
- chdir = /home/root/pydj/django_one
- # module 指定项目自带的的 wsgi 配置文件位置
- module = django_one.wsgi
- # 允许存在主进程
- master = true
- # 开启进程数量
- processes = 3
- # 服务器退出时自动清理环境
- vacuum = true
7, 配置 nginx
- vi /etc/nginx/conf.d/default.conf
- # 在文件最后, 新加一个 server
- server {
- listen 8089;
- listen [::]:8089;
- server_name 127.0.0.1 192.168.10.114;
- location / {
- include /etc/nginx/uwsgi_params;
- uwsgi_pass 127.0.0.1:9000;
- }
- location /index/ {
- root /index/;
- }
- location /static{
- alias /home/root/pydj/django_one/sign/static;
- }
- }
- # 8089 是对外的端口号
- # server_name nginx 代理 uwsgi 对外的 ip
- # 绿色高亮的是核心, 127.0.0.1:9000 即当 nginx 收到 8089 端口的请求时, 直接将请求转发给 127.0.0.1:9000
8,uwsgi 启动 django
- # 进入项目根目录
- /home/root/pydj/django_one
- # 启动
- uwsgi --ini django_uwsgi.ini
9, 重启 Nginx
systemctl restart nginx
此时, 环境搭建完毕, 使用浏览器访问 http://ip:8089/index/ 即可显示出 django 的 index 路由对应的页面了
来源: http://www.bubuko.com/infodetail-2551505.html