栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

centos7.6 搭建nginx+uwsgi+django

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

centos7.6 搭建nginx+uwsgi+django

nginx+uwsgi+Django 系统: Linux ecs-282f 3.10.0-1160.53.1.el7.x86_64 #1 SMP Fri Jan 14 13:59:45 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux 版本:CentOS Linux release 7.6.1810 (Core) 1.安装python3
  • 官网连接:https://www.python.org/downloads/ 选择你需要的版本
# 下载python源码包
wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz

# 下载后,先解压到tmp,并进入目录
tar xf Python-3.9.9.tgz -C /tmp/
cd /tmp/Python-3.9.9


########################################
# 总结:先确认依赖包是否安装
# 1.yum install zlib-devel
# 2.openssl
# 3.yum install libffi-devel
# 目前发现的这三个,后面会讲什么时候发现的
########################################


# 这里在configure一定要先查看一下是否安装了openssl,如果没有安装,需要先安装openssl否则,后面pip无法下载一些通过ssl加密协议的包如Django,flask等
openssl
OpenSSL>verison
OpenSSL 1.0.2k-fips  26 Jan 2017 # 这里由于我安装了,如果没安装的话,一定要先先安装openssl,结果不能用,擦,重新安装

# 下载openssl(已安装跳过)
# 安装openssl(已安装跳过)
# 这里边换了好几个版本都不成功,最后1.1.1n成功了,建议下次选择openssl的时候,看下python官方文档,会提示需要openssl版本信息
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1n.tar.gz
./config --prefix=/tmp/my_openssl
make
make install

# 执行configgure将二进制安装到到指定/tmp/my_python3下(这里我建议单独放在一个目录下,安装后会产生四个目录bin  include  lib  share,卸载时候,直接删除/tmp/my_python3目录即可,不然所有的都放到/usr/local/下,会很乱,需要单独删除文件,非常麻烦)
# --enable-shared LDFLAGS="-Wl,-rpath=/tmp/my_python/lib"启用共享库,指定lib路径,这个lib是你自定义安装位置的lib,不指定的话。ldd python3 找不到.so
# 使用--with-ssl参数,很多网络安装源是https协议的
# --with-openssl-rpath=auto 一定不要漏掉,血泪教训(这是看网友的评论,暂未验证)
./configure --prefix=/tmp/my_python --enable-shared LDFLAGS="-Wl,-rpath=/tmp/my_python/lib" --with-openssl=/tmp/my_openssl --with-openssl-rpath=auto
# make
make
# make install 在这一步的时候,根据不同的系统,会出现不同的环境问题,我这里出现了zipimport.ZipImportError: can't decompress data; zlib not available
# 说明缺少zlib库,我们进行安装即可 # yum install zlib-devel -y 然后在进行make install(如果遇到其他环境问题,同理)
make install
# 将旧版本python3修改后缀 (如果存在的话)
mv /usr/bin/python3 /usr/bin/python3.old > /dev/null
mv /usr/bin/pip3 /usr/bin/pip3.old > /dev/null
# 将进版本python3链接到/user/bin/python3 (这样就可以全局使用python3了)
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
2.安装Django
  • 由于安装了python3,我们可以直接使用python包管理工具pip进行Django的安装
pip3 install django==3.2.13  # 这里直接搞起3.2.13版本

# 添加链接,后面要使用django-admin工具
ln -s /tmp/test_python/bin/django-admin /usr/bin/django-admin
好的现在开始,我们迅速创建一个django项目
  • 参考菜鸟教程: https://www.runoob.com/django/django-first-app.html
# 创建django项目,名为DjangoProject
django-admin startproject DjangoProject

# 进入DjangoProject,并查看目录结构, 启动django的runserver,让我见证奇迹的时刻到了
python3 manage.py runserver 0.0.0.0:8000

#(报错了ModuleNotFoundError: No module named '_sqlite3')
#(这是因为我们的settings.py的DATABASE配置默认是sqlite3,这里我们不适用这个数据库,后面会配置其他数据库,所以可以暂时注掉)
netstat -anp|grep 8000
# tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      9987/python3
# 没问题服务已经启动

# 浏览器访问http://ip:8000
# (这里报400,you need add ip ALLOWED_HOSTS,意思就是说,你需要将你服务的ip配置在ALLOWED_HOSTS里,才可以访问,这里如果是动态变化的可以输入'*')
3.安装uwsgi服务(uwsgi是一种标准服务不是固定语言实现得组件,每个语言都有自己的uwsgi实现,由于最早python实现了这个模块,故得来得命名,其他语言需要自行安装uwsgi)
  • uwsgi官方文档 https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/WSGIquickstart.html
# 由于uwsgi是支持pip安装,这里我们直接安装自适应版本
pip3 install uwsgi
# (这里又爆了一个大雷,ModuleNotFoundError: No module named '_ctypes' pip下载uwsgi失败,这个当时安装python的时候居然没有报错,这里需要重新安装一个libffi-devel的依赖包,然后重新编译python,唉)
yum install -y libffi-devel # 然后重新编译python,重新安装django

# 再次执行pip3 install uwsgi 成功!!!
[root@ecs-282f Python-3.9.9]# pip3 list
Package    Version
---------- -------
asgiref    3.5.2
Django     3.2.13
pip        21.2.4
pytz       2022.1
setuptools 58.1.0
sqlparse   0.4.2
uWSGI      2.0.20

# 同样,我们需要使用uwsgi工具来启动服务,我们继续链接
ln -s /tmp/test_python/bin/uwsgi /usr/bin/uwsgi

# 这里我们依然先测试一下uwsgi,使用uwsgi,启动我们的wsgi.py,启动4个进程,每个进程启动2个线程
uwsgi --http 0.0.0.0:9000 --chdir /home/nss/DjangoProject/ --wsgi-file DjangoProject/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9001

# 浏览器访问一下http://ip:9000 成功!!!

# 这里可以pip装个uwsgitop,对uwsgi进程进行监控,类似top,我这里就不做演示了

4.安装Nginx服务
# 这里我们直接使用yum安装nginx,先不考虑版本,如果不能用再找合适的版本[狗头]
yum install -y nginx # 这里默认安装在了/usr路径下,又是和其他软件混在了一起,这个下次还得源码自定义安装

# 查看nginx版本
nginx -V
# nginx version: nginx/1.20.1

# 启动nginx
nginx

# 查看进程
ps -ef|grep nginx
# root     23863     1  0 20:43 ?        00:00:00 nginx: master process nginx
# nginx    23864 23863  0 20:43 ?        00:00:00 nginx: worker process

# 查看nginx监听的端口
netstat -anp|grep nginx
# tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      23863/nginx: master 
# tcp6       0      0 :::80                   :::*                    LISTEN      23863/nginx: master 
# unix  3      [ ]         STREAM     CONNECTED     330935   23863/nginx: master  
# unix  3      [ ]         STREAM     CONNECTED     330934   23863/nginx: master

# 浏览器访问http://ip 成功!!!

# 正常停止
nginx -s quit

# 快速停止
nginx -s stop
5.配置nginx和uwsgi
  • 我们使用浏览器通过80端口,访问到nginx,然后让nginx帮我们转发到uwsgi监听(这里转发可以是http协议,也可以是wsgi协议),uwsgi接收到请求,触发django回调
# 我们直接拷贝一份默认配置到项目路径下
cp /etc/nginx/nginx.conf /home/nss/DjangoProject/

# 我们开始编辑
# 配置如下, 我们直接在此处加上转发的ip端口
    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;


# 此处添加
        location / {
        proxy_pass http://127.0.0.1:9000;
}
# 此处结束
        
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

# 查看配置文件是否正确
[root@ecs-282f DjangoProject]# nginx -t -c /home/nss/DjangoProject/nginx.conf 
nginx: the configuration file /home/nss/DjangoProject/nginx.conf syntax is ok
nginx: configuration file /home/nss/DjangoProject/nginx.conf test is successful

# 接下来我们启动看下效果
nginx -c /home/nss/DjangoProject/nginx.conf  

# 启动成功!!!但是访问,报错!!!原来我们还没有开启uwsgi
- 接下来我们开启uwsgi
uwsgi --http 0.0.0.0:9000 --chdir /home/nss/DjangoProject/ --wsgi-file DjangoProject/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9001


# 浏览器访问 http://ip  成功!!!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/950411.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号