如何在Centos7下基于nginx+uwsgi部署Django项目

目录
文章目录隐藏
  1. 一:基础环境介绍:
  2. 二:部署环境安装配置
  3. 三:部署 django 项目
  4. 四:备注
  5. 五、部署报错

Django 相信大家并不陌生,它是一个开源的 Web 应用框架,用 Python 语言编写,主要是用于搭建 Web 项目,本教程也是带大家一起来实现如何在 centos7 下基于 nginx+uwsgi 部署 Django 项目,具有一定参看价值,感兴趣的可以收藏一下。

一:基础环境介绍:

  • Centos:7.8(cat /etc/redhat-release 查看版本号)
  • Python:3.9.5(python -V 查看版本号)
  • Django:4.2(django-admin –version 查看版本号)
  • Uwsgi:2.0.21(uwsgi –version 查看版本号)
  • Nginx:1.20.1 (nginx -v 查看版本号)
  • mysql-community-common-8.0(可自行安装)

二:部署环境安装配置

1.基础依赖环境安装

yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel 
ncurses-devel sqlite-devel readline-devel tk-devel
 gcc make gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel

2.安装 wegt,vim,unzip 等必须命令

yum -y install wget vim unzip

3.安装 python 与 pip(或者 python 多版本管理工具 pyenv 等)

#1.下载需要版本的 python 版本包

wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz

#2.新建 python3 目录

mkdir /usr/local/python3

#3.安装 Python3 压缩包

进入解压目录,指定安装目录,安装 Python3

tar -xvf  Python-3.9.5.tar.xz
cd Python-3.9.5
./configure --prefix=/usr/local/python3
make && make install

#4.手动安装 pip

安装 Python3 时,会自动安装 pip,如果没有就手动安装

yum -y install python-pip

#5.pip 配置(更换 pip 的源)

5.1 编辑 pip.conf

[root@localhost ~]# cd ~ 
[root@localhost ~]# mkdir .pip 
[root@localhost ~]# vim pip.conf
  
[global] 
index-url = https://mirrors.aliyun.com/pypi/simple/
[install] 
trusted-host=mirrors.aliyun.com

5.2 安装依赖安装好 pip

[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# yum install python-pip
[root@localhost ~]# pip install --upgrade pip

#6.升级下 pip

pip install --upgrade pip

#7.创建软链接

ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

#8.输入 python3 测试是否安装成功

python -V

4.安装 nginx

#1.yum 方式安装 nginx

yum -y install nginx

#2.查看 nginx 版本

nginx -v

#3.启动 nginx

systemctl status nginx  ## 查看 nginx 状态
systemctl start nginx   ## 开启 nginx 服务
systemctl stop nginx     ## 关闭 nginx 服务

5.安装 uwsgi

#1.安装 uwsgi

pip3 install uwsgi

#2.建立软链接

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

#3.查看 uwsgi 版本

uwsgi --version

三:部署 django 项目

1.上传项目并安装项目模块并启动测试

#1.pip 导出项目依赖包

pip freeze > requirements.txt

#2.上传文件到服务器

#3.解压项目

unzaip tman.zip

#4.pip 安装项目依赖模块

pip3 install -r requirements.txt

# 5.通过 python3 manage.py runserver 运行一下项目,如果能正常启动则进行下一步,不能正常运行往上检查。

注意:使用 python3 来执行 manage.py,否则会出现报错情况!

2.在项目里配置 uwsgi.ini 配置文件

(1)在 settings.py 所在目录 vim 新文件项目名称.ini

在项目里配置 uwsgi.ini 配置文件

(2)配置项目名称.ini 文件

[uwsgi]
master=true
chdir=/var/tman
module=tman.wsgi
py-autoreload=1
lazy-apps=true  
socket=127.0.0.1:8000
processes=4
# pid 文件,用于脚本启动,停止
pidfile=uwsgi.pid
buffer-size=32768
daemonize=uwsgi.log
log-maxsize = 5000000
vacuum = true
disable-logging = true

(3)检查 settings.py 配置并收集项目静态文件

一般都是这个配置,我的是基于 vue 的前后端分离项目:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'dist/static'),
]

STATIC_URL = 'static/'

url.py 配置:

from django.contrib import admin
from django.urls import path, include
from django.views.generic.base import TemplateView
urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/v1/', include('tadmin.urls')),
    path('', TemplateView.as_view(template_name='index.html'))
]

非前后端分离项目可以使用如下命令收集静态文件:

python manage.py collectstatic

基于 vue 使用如下命令进行前端打包:

npm run build

(4)启动测试,并查看日志

## 在当前目录启动
uwsgi -i tman.ini
 
## 启动之后查看进程
ps -ef | grep uwsgi

启动测试,并查看日志

查看进程:

查看进程

查看日志:

查看日志

3.配置 nginx

vim /etc/nginx/nginx.conf

nginx.conf 配置:

 server {
        listen       80;
        listen       [::]:80;
        server_name 59.110.168.178;
        charset utf-8;

        location /static/ {
          alias /var/tman/dist/static/;
          index index.html index.htm;
        }
  
        location / {
          include uwsgi_params;
          uwsgi_pass 127.0.0.1:8000;
        }
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

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

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

启动 nginx:

[root@localhost tman]# nginx -t 
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost tman]# nginx -s reload

访问项目http://59.110.168.178/#/

访问项目

四:备注

之后项目重启只需要重启 uwsgi 之后再重启 nginx 即可,切记正式环境要关掉 django 的 debug 模式,防止报错源码被看到。

## 项目重启
killall -9  uwsgi
uwsgi -i tman.ini
nginx -s reload

uwsgi 操作

uwsgi --ini uwsgi.ini
# 重启 uswgi
uwsgi --reload uwsgi.pid
# 停止 uwsgi
uwsgi --stop uwsgi.pid

五、部署报错

(1)pip3 安装 mysqlclient==2.1.1 报错

/bin/sh: mysql_config: command not found
/bin/sh: mariadb_config: command not found
/bin/sh: mysql_config: command not found

解决办法:

yum -y  install mysql-devel
Error: MariaDB-compat conflicts with 1:mariadb-libs-5.5.68-1.el7.x86_64
Error: Package: 1:mariadb-devel-5.5.68-1.el7.x86_64 (base)
           Requires: mariadb-libs(x86-64) = 1:5.5.68-1.el7
           Installed: MariaDB-compat-10.4.25-1.el7.centos.x86_64 (@mariadb)
               mariadb-libs(x86-64) = 1:10.1.48-1.el7.centos
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

解决办法:

yum remove MariaDB-common

 

(2)open() "/root/tman/dist/static/js/vendor.652814051b5133caa1e9.js" failed (13: Permission denied)

原因,nginx 目录权限问题,我将项目放在 root 下,导致 nginx 权限不足,解决办法,将项目移到其他目录,如/var 等

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » 如何在Centos7下基于nginx+uwsgi部署Django项目

发表回复