欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

SLAM+语音机器人DIY系列:(八)高阶拓展——2.centos7下部署Django(nginx+uwsgi+django+python3)

程序员文章站 2022-05-17 16:50:13
0.安装步骤预览(1)系统默认自带python2.x,所以需要先安装python3.x(2)python2对应pip,python3对应pip3,用源码安装python3后pip3也自动安装了(3)用pip3安装virtualenv(4)用virtualenv创建python3的虚拟环境(5)在创建 ......

0.安装步骤预览
(1)系统默认自带python2.x,所以需要先安装python3.x
(2)python2对应pip,python3对应pip3,用源码安装python3后pip3也自动安装了
(3)用pip3安装virtualenv
(4)用virtualenv创建python3的虚拟环境
(5)在创建的虚拟环境中,用pip3安装django和uwsgi
(6)安装nginx

(7)创建django项目

(8)关联nginx、uwsgi、django


#################使用root身份登录系统执行#####################

1.编译安装python3

(1)依赖安装

#为centos系统增加编译功能:
yum -y install gcc gcc-c++

#防止编译安装python3出现各种异常:
yum install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel

(2)编译安装

#下载python3安装包:
cd /home/<username>/downloads/ #<username>用自己的用户名代替
wget https://www.python.org/ftp/python/3.6.3/python-3.6.3.tgz

#解压:
tar -zxvf python-3.6.3.tgz

#配置,将python3安装到/usr/local/python3/路径下:
cd python-3.6.3
./configure --prefix=/usr/local/python3

#编译安装:
make -j2
make install -j2

#建立软链接,方便在终端中直接使用python3和pip3命令:
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

#安装成功性测试,显示相应版本就表示成功了:
python3 -v
pip3 -v

2.用pip3安装virtualenv

#更新pip3至最新版本
pip3 install --upgrade pip

#安装virtualenv
pip3 install virtualenv

#赋予可执行权限
chmod 777 /usr/local/python3/lib/python3.6/site-packages/virtualenv.py
#建立软链接,方便在终端中直接使用virtualenv
ln -s /usr/local/python3/lib/python3.6/site-packages/virtualenv.py /usr/bin/virtualenv

3.用virtualenv创建python3的虚拟环境

#切换到用户家目录下
cd /home/<username>/

#新建文件夹
mkdir www_space_venv
cd www_space_venv

#创建名称为venv的虚拟环境
virtualenv -p /usr/bin/python3 venv

4.在创建的虚拟环境中,用pip3安装django和uwsgi

cd /home/<username>/www_space_venv/

#激活虚拟环境
source venv/bin/activate

#安装django与uwsgi 
pip3 install django
pip3 install uwsgi

#查看django安装成功与否
pip3 show django 
#查看uwsgi安装成功与否
pip3 show uwsgi 

#退出虚拟环境
deactivate

5.安装nginx

#添加nginx存储库
yum install epel-release

#安装nginx
yum install nginx

#使用nginx的几个好处:
安全:不管什么请求都要经过代理服务器,这样就避免了外部程序直接攻击web服务器
负载均衡:根据请求情况和服务器负载情况,将请求分配给不同的web服务器,保证服务器性能
提高web服务器的io性能:这个我也没看懂,总结来说就是请求从客户端传到web服务器是需要时间的,传递多长时间就会让这个进程阻塞多长时间,而通过反向代理,就可以在反向代理这完整接受请求,然后再传给web服务器,从而保证服务器性能,而且有的一些简单的事情(比如静态文件)可以直接由反向代理处理,不经过web服务器

6.创建一个django的项目

(1)新建项目

#切换到工作目录
cd /home/<username>/www_space_venv/

#激活虚拟环境
source venv/bin/activate

#创建自己的django项目,项目取名为mysite_django
django-admin.py startproject mysite_django

#修改settings.py,允许所有host的访问,不然浏览器访问会报错disallowedhost at / invalid http_host header
allowed_hosts = [ ] #修改前
allowed_hosts = ['*'] #修改后

#启动django自带web服务器
cd mysite_django
python3 manage.py runserver <自己主机地址ip>:8080 #<自己主机地址ip>填自己主机地址,后面需要指定一个可用的端口(如8080)

#用浏览器访问django,<自己主机地址ip>:8080,得到如下消息说明成功
the install worked successfully! congratulations!

(2)新建应用

#切换到工作目录
cd /home/<username>/www_space_venv/

#激活虚拟环境
source venv/bin/activate

#新建应用
cd mysite_django
python3 manage.py startapp hello_app

#新定义的应用加到settings.py中的install_apps中
installed_apps = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hello_app',
]

编辑应用中的views.py文件:

from django.http.response import httpresponse

def hello(request):
    user = request.get.get('user')
    if not user: user = 'world'
    return httpresponse('hello %s' % user)

编辑项目中的urls.py文件:

from django.contrib import admin
from django.urls import path

from hello_app import views as hello_views

urlpatterns = [
path('admin/', admin.site.urls),
path('hello',hello_views.hello),
]

(3)测试

#启动django自带web服务器
cd mysite_django
python3 manage.py runserver <自己主机地址ip>:8080 #<自己主机地址ip>填自己主机地址,后面需要指定一个可用的端口(如8080)

#用浏览器访问django,访问方式为
<自己主机地址ip>:8080/hello
<自己主机地址ip>:8080/hello?user=123

#浏览器可以看到对应返回信息,说明django项目新建成功

7.关联nginx、uwsgi、django

(1)防火墙中相应端口开放,允许外网访问

默认开放给外网http访问的端口是80,所以需要在服务器的防火墙中允许80端口,不然外网的请求进不了服务器;

如果想开放给外网http访问的端口是其他端口(如8080),依照下面的例子,在服务器的防火墙中允许该端口(8080),同时用步骤(2)方法开放允许http访问的端口(8080)。

#以80端口为例

#查询tcp/udp的80端口占用情况
firewall-cmd --query-port=80/tcp
firewall-cmd --query-port=80/udp
#如果返回结果为“no”,则表示该端口尚未开放

#永久开放tcp/udp的80端口
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=80/udp

#重启防火墙
firewall-cmd --reload

(2)开放允许http访问的端口

确保外网访问nginx服务器的http端口、nginx与uwsgi通信的socket的端口都在http访问端口的列表中。

#查看http允许访问的端口
semanage port -l | grep http_port_t
#输出结果
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000

#将需要开放的端口加入到如上端口列表中,例如开放7878端口作为nginx与uwsgi通信的socket通道
semanage port -a -t http_port_t  -p tcp 7878

(3)关联nginx与uwsgi

#为django站点创建一个nginx服务的配置文件

cd /etc/nginx/conf.d/
touch mysite_django.conf
vim mysite_django.conf

#在文件mysite_django.conf中填入如下内容

server {
    server_name 192.168.2.141; #暴露给外部访问的ip地址,根据实际情况改写成自己主机ip
    listen 80; #暴露给外部访问的端口,确保端口在http访问和防火墙访问的允许列表中
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:7878; #nginx与uwsgi通信用的socket接口,确保端口在http访问端口的列表中
    }
}

#如遇到nginx服务启动失败,请检查mysite_django.conf中指定的端口是否被占用

(4)关联uwsgi与django

#创建uwsgi配置文件

cd /home/<username>/www_space_venv
touch mysite_django_uwsgi.ini
vim mysite_django_uwsgi.ini

#在mysite_django_uwsgi.ini文件中填入如下内容

#mysite_django_uwsgi.ini
[uwsgi]

#与nginx通信
socket = 127.0.0.1:7878
#让uwsgi作为单独的web-server,这里注释掉
#http = 127.0.0.1:7878

#django项目根目录
chdir = /home/chatbot/www_space_venv/mysite_django #根据实际情况改写成自己django项目的路径

#本项指示uwsgi.py文件的位置,其位于django工程目录下有个与工程名同名的子文件夹内(设置方式为:文件夹名.wsgi)
#module = mysite_django
wsgi-file = mysite_django/wsgi.py

processes = 4
threads = 2
master = true
pidfile = uwsgi.pid
daemonize = uwsgi.log

# 虚拟环境地址
#virtualenv = /home/chatbot/www_space_venv/venv

(5)nginx+uwsgi+django联调测试

#先关闭nginx与uwsgi服务
pkill -9 nginx
pkill -9 uwsgi

#启动nginx服务
service nginx start

#启动uwsgi服务
cd /home/chatbot/www_space_venv
source venv/bin/activate #激活虚拟环境
uwsgi --ini mysite_django_uwsgi.ini

#用浏览器访问django,访问方式为
<自己主机地址ip>:80/hello
<自己主机地址ip>:80/hello?user=123

#浏览器可以看到对应返回信息,说明部署成功,后面只需专注于django项目的开发了

联调架构如下图所示

SLAM+语音机器人DIY系列:(八)高阶拓展——2.centos7下部署Django(nginx+uwsgi+django+python3)

 

后记                                                      

如果大家对博文的相关类容感兴趣,或有什么技术疑问,欢迎加入下面的《slam+语音机器人diy》qq技术交流群,一起讨论学习^_^

SLAM+语音机器人DIY系列:(八)高阶拓展——2.centos7下部署Django(nginx+uwsgi+django+python3)