Nginx实现Django线上部署
实验环境:
所需工具 | 版本 |
---|---|
Python | 3.6.3 |
CentOS | 7.5 |
Django | 2.2.3 |
提前编写好Python Django项目并可以运行
导入
将项目上传至CentOS7.5中
配置项目
修改项目主目录下的settings.py配置项,关闭调试功能和配置日志
日志级别记录描述:
级别 | 值 | 描述 |
---|---|---|
CRITICAL | 50 | 关键错误/消息 |
ERROR | 40 | 错误 |
WARNING | 30 | 警告消息 |
INFO | 20 | 通知消息 |
DEBUG | 10 | 调试 |
NOTSET | 0 | 无级别 |
DEBUG=False
ALLOWED_HOSTS = [‘*’]
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'default': { },#记录到日志文件
'level':'WARNING',
'class':'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR, "log",'debug.log'),#日志输出文件
'maxBytes':1024*1024*5,#文件大小
'backupCount': 5,#备份份数
}
关闭防火墙及SELinux
防火墙和SELinux不关闭外部浏览器是无法成功访问的
systemctl stop firewalld.service && systemctl disable firewalld.service
setenforce 0 && sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
升级Python
安装相关依赖包
#安装wget、GCC编译环境和依赖组件
yum -y install wget gcc openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite*-devel mysql-devel
#成功安装依赖包后下载Python3、解压并编译到CentOS7系统中
wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz
tar -zxvf Python-3.6.3.tgz
cd Python-3.6.3/
sudo ./configure
make && make install
验证
使用python3
查看是否成功升级
升级sqlite3
sqlite3的版本需要升级到3.8.3以上版本,否则后续执行命令会报错
#下载源码并解压,编译
wget https://www.sqlite.org/2019/sqlite-autoconf-3300100.tar.gz
tar zxvf sqlite-autoconf-3300100.tar.gz
cd sqlite-autoconf-3300100/
./configure --prefix=/usr/local
make && make install
# 替换系统低版本sqlite3
mv /usr/bin/sqlite3 /usr/bin/sqlite3_old
ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3
echo "/usr/local/lib" > /etc/ld.so.conf.d/sqlite3.conf
ldconfig
验证
使用sqlite3 --version
查看是否成功
安装Django
批量安装或直接使用以下命令安装
pip3 install Django==2.2.3 django-crispy-forms django-formtools django-import-export future httplib2 Pillow six
安装Uwsgi
uWSGI是遵循WSGI协议的Web服务器,在生产环境下可以通过uWSGI作为Web服务器进行使用;可使用以下命令一步到位安装。
pip3 install uwsgi
测试
创建并启动test.py测试uWSGI是否能正常使用,出现下图表明uWSGI服务器一切正常。
#test.py内容如下:
def application(env,start_response):
start_response('200 OK',[('Content-Type','text/html')])
return [b"Hello World"]
#启动命令
uwsgi --http :8001 --wsgi-file test.py
uWSGI启动项目
- 使用
uwsgi --http :8002 --chdir /home/kepro/ -w kepro.wsgi --static-map=/static=static
启动项目,访问浏览器即可出现相关内容。
- 或配置服务器配置文件
项目kepro根目录下创建linux.ini,内容如下:
[uwsgi]
# 指定IP端口
http=0.0.0.0:8002
# 项目目录
chdir=/home/kepro
# 指定项目的
module=kepro.wsgi:application
# 启用主进程
master=true
# 指定静态文件
static-map=/static=/home/kepro/static
启动命令:uwsgi --ini linux.ini
效果与上面是一样的。
安装Nginx
Nginx是一个 高性能的HTTP和反向代理web服务器,同时也提供IMAP/POP3/SMTP服务;其并发能力是同类型的网页服务器表现较好的。
#添加源并安装nginx
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install -y nginx
验证
启动Nginx服务查看是否成功
实现Django+Nginx+uWSGI上线部署
- 配置uWSGI的配置文件
在项目主目录下使用vim nginx.ini
创建nginx.ini并添加以下内容:
# 指定IP端口
socket=0.0.0.0:8080
# 项目目录
chdir=/home/kepro
# 指定项目的application
module=kepro.wsgi:application
# 启用主进程
master=true
# 指定静态文件
static-map=/static=/home/kepro/static
- 修改配置Nginx文件
#nginx.conf--/etc/nginx/nginx.conf;在nginx.conf中添加如下内容:
upstream django {
server 192.168.183.101:8080;#“django”名称随便取,但是IP要与Nginx.ini中socket一致
}
server {
listen 80;
server_name 192.168.183.101 ;#IP地址或域名
# 指定项目路径uwsgi
location / {# 这个location就和Django中的url(r'^admin/', admin.site.urls),
include /etc/nginx/uwsgi_params;# 导入一个Nginx模块他是用来和uWSGI进行通讯的
uwsgi_pass django;# 指定uwsgi的sock文件所有动态请求就会直接丢给它;名字就是上面upstream的名字
}
# 指定静态文件路径
location /static{
alias /home/kepro/static;
}
}
}
- 重新启动服务并验证
#先启动nginx服务然后启动uwsgi服务
nginx -s reload
uwsgi --ini nginx.ini
无论是在内部还是外部浏览器中输入IP即可访问;外部浏览器不能访问查看防火墙和SELinux是否关闭。
到此,使用Nginx实现Django线上部署已完成。