博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django-nginx-uwsgi 生产环境配置
阅读量:5092 次
发布时间:2019-06-13

本文共 4705 字,大约阅读时间需要 15 分钟。

要注意alias和root的区别

root /path相当于访问static的时候是访问/path/static
alias /path相当于访问static时是访问/path/

1.确认环境 python2.7 django1.8 centos6.8

A.安装django

pip install django==1.8
B.安装uwsgi
pip install uwsgi
报错(-bash: pip: command not found)解决方案
一、pip下载安装
1 安装依赖软件
yum install zlib zlib-devel openssl openssl-devel libcurl-devel gcc gcc-c++ -y
2 pip下载
wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate

3 pip安装

tar -xzvf pip-1.5.4.tar.gz
cd pip-1.5.4
python setup.py install

python错误:ImportError: No module named setuptools

这句错误提示的表面意思是:没有setuptools的模块,说明python缺少这个模块,那我们只要安装这个模块即可解决此问题,下面我们来安装一下:
在命令行下:
下载setuptools包
wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
解压setuptools包
tar zxvf setuptools-0.6c11.tar.gz
cd setuptools-0.6c11
编译setuptools
python setup.py build
开始执行setuptools安装
python setup.py install

C.测试uwsgi是否安装成功

创建测试文件 vim check.py
#!/usr/bin/python
# coding:utf8
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World"

启动uwsgi

uwsgi --http :8001 --wsgi-file check.py

用url访问测试,看到hello world 说明uwsgi可以使用

http://ip:8001
D.安装nginx
切换安装源
rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
安装nginx
yum install nginx -y

E.部署项目代码

安装git命令
yum install git -y
创建代码根目录
mkdir /myweb
获取代码
cd /myweb
git clone https://github.com/xianxiaoyin/Monitoring

修改setting.py

添加 STATIC_ROOT = os.path.join(BASE_DIR, 'static') #指定静态资源存放位置
收集静态资源
cd /myweb/Monitoring
python manage.py collectstatic
报错:
django.core.exceptions.ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named _sqlite3

解决方法:

需要安装sqlite-devel之后,重新编译安装Python即可。
yum install sqlite-devel
重新编译安装Python:
./configure
make
make install

报错:

django.core.exceptions.ImproperlyConfigured: The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
解决方法:
把STATIC_ROOT = os.path.join(BASE_DIR, 'static')改为
STATIC_ROOT = os.path.join(BASE_DIR, 'static1')

F.配置uwsgi

在/myweb目录下创建wsgi_conf.ini文件
[uwsgi]
socket = 0.0.0.0:3031
chdir = /myweb/Monitoring/
wsgi-file = Monitoring/wsgi.py
processes = 4
threads = 2

G.配置nginx
添加配置文件 vim test.conf
server {
listen 80;
server_name localhost;
charset utf-8;
access_log /var/log/nginx/test.access.log main;
index index.html;
location / {
root /myweb/Monitoring;
uwsgi_pass 127.0.0.1:3031;
include uwsgi_params;
}
location /static {
alias /myweb/Monitoring/static;
}

}

H.分别启动nginx,uwsgi
service nginx restart #重启nginx
uwsgi wsgi_conf.ini #启动uwsgi

访问

http://ip

访问报502错误

日志显示(权限不够)
2017/02/16 15:56:25 [crit] 2652#2652: *4 connect() to 127.0.0.1:3031 failed (13: Permission denied) while connecting to upstream, client: 192.168.136.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://127.0.0.1:3031", host: "192.168.136.131", referrer: "http://192.168.136.131/"

解决方案:

关闭seliunx
1.临时关闭
setenforce 0
2.永久关闭
vim /etc/sysconfig/selinux
把SELINUX=enforcing改为
SELINUX=disabled

自动搭建脚本

#!/usr/bin/env python # coding:utf-8 ''' install django in the production django==1.8 python==2.7 uwsgi==2.0.14 ''' import os import sys def getVersion(command=''):# get python version     version = os.popen(command)     return version.read() if __name__ == '__main__':     print(getVersion('python --version'))     print('{} {}'.format('uwsgi', getVersion('uwsgi --version')))     #更新     os.system('yum update -y')     #安装依赖包     a = os.system('yum install zlib zlib-devel openssl openssl-devel libcurl-devel gcc gcc-c++ -y')     if a != 0:         sys.exit()     os.system('wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz')     if os.path.exists('setuptools-0.6c11.tar.gz'):         os.system('tar zxvf setuptools-0.6c11.tar.gz && cd setuptools-0.6c11 && python setup.py build && python setup.py install')         os.system('rm -rf ./setuptools*')     else:         sys.exit('setuptools install error')     os.system('wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate')     if os.path.exists('pip-1.5.4.tar.gz'):         os.system('tar -xzvf pip-1.5.4.tar.gz && cd pip-1.5.4 && python setup.py install')         os.system('rm -rf ./pip*')     else:         sys.exit('pip install error')     #安装uwsgi     os.system('pip install uwsgi ')     #安装django     os.system('pip install django==1.8')     #安装nginx     os.system('rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm')     os.system('yum install nginx -y && yum install git -y')

 

转载于:https://www.cnblogs.com/xianyin/p/6483776.html

你可能感兴趣的文章
LeetCode 82. 删除排序链表中的重复元素 II
查看>>
.第一天.net 学习理论
查看>>
架构心得
查看>>
98.TCP通信传输文件
查看>>
python学习笔记第四节
查看>>
信息反馈—冲刺06
查看>>
VGG
查看>>
IDEA的Database表的基本操作
查看>>
CSS 内边距 和尺寸(收藏)
查看>>
Collection的另外一个子类LinkedList&Set集合
查看>>
链表反转
查看>>
关于typedef的用法总结
查看>>
如何使用JSTL及JSTL标签库
查看>>
vue 内存溢出问题解决
查看>>
董洁经纪人挑拨离间,潘粤明称董洁经纪人插手婚姻
查看>>
我的第一个字典-Dictionary
查看>>
Windows 2016 安装单机版本Oracle ASM 的简单说明
查看>>
【转贴】我对测试工作的一些认识
查看>>
input submit标签的高度和宽度与input text的差异
查看>>
C#设计模式--外观模式
查看>>