Centos7.6下Nginx+Uwsgi+Django部署
Posted yinbohang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos7.6下Nginx+Uwsgi+Django部署相关的知识,希望对你有一定的参考价值。
本人服务器是使用腾讯云Centos7.6.以下配置均在Root权限下操作。
1. python3
1.1 安装依赖包
sudo yum -y groupinstall "Development tools"
sudo yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
1.2 下载Python3安装包
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0a1.tar.xz
1.3 解压
tar -xvJf Python-3.7.0a1.tar.xz
1.4 配置编辑参数
cd Python-3.7.0a1
./configure --prefix=/usr/local/bin/python3
1.5 编译和安装
make
make install
2. 安装虚拟环境
2.1 安装虚拟环境
pip3 install virtualenv
pip3 install virtualenvwrapper
2.2 创建存放虚拟环境的文件夹
mkdir /root/.virtualenvs
2.3 更改.bashrc配置文件
vim ~/.bashrc
find / -name virtualenvwrapper.sh # 查看路径
VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python # 指定virtualenvwrapper执行的python版本
export WORKON_HOME=/root/.virtualenvs # 虚拟环境存放目录
source /usr/local/bin/virtualenvwrapper.sh # virtualenvwrapper.sh所在目录
2.4 激活更新配置
source ~/.bashrc
2.5 虚拟环境基本命令
mkvirtualenv 创建虚拟环境
deactivate 退出虚拟环境
workon 查看虚拟环境
workon 虚拟环境名 进入虚拟环境
3. 安装PCRE库
3.1 进入local文件夹
cd /usr/local/
3.2 下载安装包
wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz
3.3 解压安装包
tar -zxvf pcre-8.33.tar.gz
3.4 配置编辑参数
cd pcre-8.33
./configure
3.5 编译安装
make && make install
3.6 如果报错:configure: error: You need a C++ compiler for C++ support
解决办法:
yum install -y gcc gcc-c++
4. 安装SSL库
4.1 进入到local文件夹
cd /usr/local/
4.2 下载安装包
wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz
4.3 解压安装包
tar -zxvf openssl-1.0.1j.tar.gz
4.4 配置编辑参数
cd openssl-1.0.1j
./config
4.5 编译安装
make && make install
5. 安装Zlib库
5.1 进入local文件夹
cd /usr/local/
5.2 下载安装包
wget http://zlib.net/zlib-1.2.11.tar.gz
5.3 解压安装包
tar -zxvf zlib-1.2.11.tar.gz
5.4 配置编辑参数
cd zlib-1.2.11
./configure
5.5 编译安装
make && make install
6. 安装nginx
6.1 进入local文件夹
cd /usr/local/
6.2 下载安装包
wget http://nginx.org/download/nginx-1.8.0.tar.gz
6.3 解压安装包
tar -zxvf nginx-1.8.0.tar.gz
6.4 配置编辑参数
cd nginx-1.8.0
./configure --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_ssl_module
6.5 编译安装
make && make install
6.6 启动测试
/usr/local/nginx/sbin/nginx
6.7 设置开机自启
vi /etc/rc.local
/usr/local/nginx/sbin/nginx # 增加到最后一行
6.8 可能遇到的错误
错误1:
./configure: error: SSL modules require the OpenSSL library.
解决办法:
yum -y install openssl openssl-devel
错误2:
./configure: error: the HTTP gzip module requires the zlib library
解决办法:
在–prefix后面接以下命令:
--with-pcre=/usr/local/pcre-8.36 指的是pcre-8.36 的源码路径。--with-zlib=/usr/local/zlib-1.2.8 指的是zlib-1.2.8 的源码路径。
错误3:
nginx: [emerg] still could not bind()
解决办法:
cd /usr/local/nginx/sbin/
./nginx -s reload
7. 安装Uwsgi
7.1 安装
pip3 install uwsgi
8. 安装Django(在虚拟环境下)
8.1 安装
pip3 install django==1.11.11
9. 创建Django项目(在虚拟环境下)
9.1 创建项目
django-admin startproject 工程名称
9.2 创建子应用
首先cd到工程目录下
python manage.py startapp 子应用名称
9.3 创建视图函数
cd到子应用下
vim views.py
添加到py文件中
from django.http import HttpResponse
def index(request):
"""
index视图
:param request: 包含了请求信息的请求对象
:return: 响应对象
"""
return HttpResponse("hello the world!")
9.4 创建路由
vim meiduo/users/urls # 子路由
from django.conf.urls import url
from . import views
# urlpatterns是被django自动识别的路由列表变量
urlpatterns = [
# 每个路由信息都需要使用url函数来构造
# url(路径, 视图)
url(r‘^index/$‘, views.index),
]
vim meiduo/urls # 主路由
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r‘^admin/‘, admin.site.urls),
url(r‘^‘, include(‘users.urls‘)),
]
9.5 配置settings文件
cd 项目目录/项目名/
1. 注册子应用 我的子应用名是users INSTALLED_APPS = [ ‘users.apps.UsersConfig‘, ] 2. 设置HOST ALLOWED_HOSTS = [‘*‘]
9.6 配置Nginx文件
vim /use/local/nginx/conf/nginx.conf
user root;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
# 设置log日志文件
error_log /var/log/nginx/nginx_error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
‘$status $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for"‘;
access_log /var/log/nginx/nginx_access.log;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name 127.0.0.1;
root /home/python/Desktop/kaiyuan/static;
#charset koi8-r;
#access_log logs/host.access.log main;
# 设置首页访问路径
location =/ {
root /home/python/Desktop/kaiyuan/static/;
index index.html index.htm;
}
location =/index.html{
index index.html;
}
# 设置静态页面访问路径
location /static{
alias /home/python/Desktop/kaiyuan/static;
autoindex on;
}
#设置Django项目访问路径和uwsgi
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090; # 这里要和Uwsgi写的一致
uwsgi_param UWSGI_SCRIPT kaiyuan.wsgi;
uwsgi_param UWSGI_CHDIR /home/python/Desktop/kaiyuan;
}
}
9.7 配置Uwsgi文件
[uwsgi]
# 用于和Nginx通讯
socket = 127.0.0.1:9090
# Django项目根目录
chdir = /home/python/Desktop/kaiyuan
# Django项目wsgi文件
module = meiduo.wsgi
# 启动主进程来管理其他进程,其他的uwsgi进程都是master的子进程
master = true
# 当服务器退出的时候自动删除unix socket文件和pid文件。
vacuum = true
# 指定pid文件
pidfile = /home/python/Desktop/kaiyuan/uwsgi.pid
# 日志
daemonize = /home/python/Desktop/kaiyuan/uwsgi.log
# 自动加载
py-autoreload = 1
9.8 重启Nginx和Uwsgi
重启Nginx
cd /usr/local/nginx/sbin/
./nginx -s reload # 重启
重启Uwsgi
cd /home/python/Desktop/kaiyuan/ # cd到自己的配置文件目录
uwsgi --ini uwsgi.ini
以上是关于Centos7.6下Nginx+Uwsgi+Django部署的主要内容,如果未能解决你的问题,请参考以下文章