如何在Centos7下基于nginx+uwsgi部署Django项目
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
(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 等
码云笔记 » 如何在Centos7下基于nginx+uwsgi部署Django项目