当前位置: 代码迷 >> 综合 >> centos7部署Django3项目(uwsgi+nginx)
  详细解决方案

centos7部署Django3项目(uwsgi+nginx)

热度:81   发布时间:2023-12-15 00:00:29.0

部署流程

  • 阿里云(centos7)部署Django步骤
    • 一、配置Centos服务器
    • 二、服务器中安装Nginx
    • 三、配置虚拟环境
    • 四、在服务器中安装uwsgi
    • 五、配置uwsgi和nginx文件

本文为作者在部署Django时记录下的步骤,参考了其他文章的一些内容,如侵删

阿里云(centos7)部署Django步骤

在阿里云上部署Django项目,如图中所示的几个包是必须安装的,图示只为了方便大家了解安装流程:
部署流程图
大体上可分为五个步骤进行部署。

一、配置Centos服务器

由于我使用的是阿里云服务器,直接在推荐的系统上安装centos7,安装完成后在安全组策略中开启80、8000、3306端口,使用远程工具连接服务器(推荐使用xshell和xftp官网)。
连接成功后,执行以下几个操作:

  1. 更新资源包
yum update -y
  1. 安装可能需要用到的包(不安装你会绝望的)
yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel
  1. 安装Python3
# 3.1 下载Python3.7.6(速度比较慢),建议在下载在/usr/local/目录下(cd /usr/local/)
wget https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tgz
# 3.2 解压Python-3.7.6.tgz
tar -zxvf Python-3.7.6.tgz
# 3.3 进入Python3.7.6包
cd /Python3.7.6
# 3.4 编译安装到指定路径
./configure --prefix=/usr/local/python3
# 3.5 安装python3
make
make install
  1. 给python3和pip3建立软连接
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
  1. 安装虚拟环境库(virtualenv)
pip3 install virtualenv
  1. 更新sqlite3(centos自带的sqlite3版本已经不支持django3,不更新在后面django中使用会报错)
#6.1 进入~目录并下载sqlite3更新包
cd ~
wget https://www.sqlite.org/2019/sqlite-autoconf-3270200.tar.gz
#6.2 解压sqltie3
tar -zxvf sqlite-autoconf-3270200.tar.gz
#6.3 进入sqlite-autoconf-3270200
cd sqlite-autoconf-3270200
#6.4 编译安装到指定路径
./configure --prefix=/usr/local
#6.5 安装
make && make install
#6.6 移除旧版本
mv /usr/bin/sqlite3  /usr/bin/sqlite3_old
#6.7 给新版本建立软连接
ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3
  1. 把sqlite3添加到bashrc中
cd ~
vim ~/.bashrc
# 然后在文件最后添加(export LD_LIBRARY_PATH="/usr/local/lib")
# 保存并退出,然后执行下面这条语句
source ~/.bashrc
# 到此sqlite3就算更新完成了,可以启动python3引入查看版本,操作如下:
python3
import sqlite3
sqlite3.sqlite_version

sqlite3
到此,对Centos服务器的配置就算完成了。

二、服务器中安装Nginx

这步其实也可以归为第一步,不过因为Nginx是本来就是我们的目标之一,所以就单独分为第二步了。

  1. 安装Nginx
yum install nginx
  1. 找到Nginx程序
cd /usr/sbin/
  1. 检查Nginx是否能够正常运行
./nginx -t
# 显示下面两行则代表可正常运行
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful
  1. 运行Nginx
./nginx
  1. 检查Nginx是否启动成功
    在浏览器输入服务器公网的ip地址,显示有一个欢迎使用Centos的页面为启动成功。

三、配置虚拟环境

  1. 创建虚拟环境
# 在/下创建一个data文件夹
mkdir /data
# 进入文件夹创建虚拟环境
cd /data/
virtualenv --python=/usr/bin/python3 env37
# 此时在/data/下会多了一个env37,这就是创建的python3的虚拟环境
  1. 激活虚拟环境与退出虚拟环境(这里暂时不需要退出,列出方便记忆)
# 激活虚拟环境
source /data/env37/bin/activate
# 退出虚拟环境(这里不要执行,列出方便记忆)
deactivate

启动虚拟环境后命令行头部有标识,如下图,就是成功进入虚拟环境:
env37

  1. 虚拟环境里安装Django和uwsgi
# 安装Django (版本指定自己所需的)
pip3 install django==3.0.8
# 安装uwsgi
pip3 install uwsgi
  1. 创建django项目
# 在/data/下创建一个wwwroot目录
mkdir /data/wwwroot
cd /data/wwwroot
# 创建django项目(这里也是在虚拟环境中)
django-admin.py startproject mysite
# 进入项目创建一个app
cd mysite
python3 manage.py startapp blog
  1. 配置Django项目
# 编辑/data/wwwroot/mysite/mysite下的setting.py文件
cd /data/wwwroot/mysite/mysite/
vim setting.py

在INSTALLED_APPS中添加“blog”,后面记得加上逗号“,”
添加app
修改ALLOWED_HOSTS,[’*’],可以让所有ip访问
设置所有人可访问
TEMPLATES的DIRS中添加模板路径

os.path.join(BASE_DIR, 'templates')

添加模板路径
最后在尾部添加静态文件地址

STATICFILES_DIRS = (os.path.join(BASE_DIR,'static'),)

static
保存并退出!

进入项目目录

cd /data/wwwroot/mysite/

创建文件夹并进入templates文件

# 创建templates文件夹,用于存放html页面
mkdir templates
# 创建static文件夹,用于存放静态文件(如:css....)
mkdir static
# 进入templates文件夹
cd /data/wwwroot/mysite/templates/

创建html页面

vim index.html
#页面内容(复制到index.html中)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>我的网站</title>
</head>
<body>
<h1>欢迎光临我的网站!</h1>
</body>
</html>

保存退出!!
index

编辑view.py文件

vim /data/wwwroot/mysite/blog/view.py
#  添加以下内容
def index(request):return render(request, 'index.html')

views

设置路由

vim /data/wwwroot/mysite/mysite/urls.py
# 按照下图位置添加这两行
from blog import viewspath('', views.index),

urls
进行项目目录中启动django服务

cd /data/wwwroot/mysite/python3 manage.py runserver

此时在自己的浏览器中输入服务器公网的ip地址+8000(IP:8000)端口就可以看到index页面了

四、在服务器中安装uwsgi

  1. 退出虚拟环境
deactivate
  1. 安装uwsgi
pip3 install uwsgi

五、配置uwsgi和nginx文件

先进入虚拟环境

source /data/env37/bin/activate
  1. 配置uwsgi文件
# 在/data/wwwroot/mysite/创建uwsgi.ini文件
vim /data/wwwroot/mysite/uwsgi.ini
# 把下面这些内容复制进去
#添加配置选择
[uwsgi]
#配置和nginx连接的socket连接
socket=127.0.0.1:8997
#配置项目路径,项目的所在目录
chdir=/data/wwwroot/mysite/
#配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名
wsgi-file=mysite/wsgi.py
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录
daemonize=uwsgi.log

启动uwsgi服务

uwsgi --ini uwsgi.ini

查看是否启动

ps -ef|grep uwsgi

停止uwsgi(这步不要执行,写在这方便记忆)

uwsgi --stop uwsgi.ini

重启uwsgi(这步不要执行,写在这方便记忆)

uwsgi --reload uwsgi.ini
  1. 配置nginx文件
# 进入uwsgi配置文件路径
cd /etc/nginx/
# 编辑uwsgi.conf文件
vim uwsgi.conf
# 把所有的内容都删掉,替换成下面这些
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;server {listen 80;server_name  www.django.cn; #改为自己的域名,没域名修改为127.0.0.1:80charset utf-8;location / {include uwsgi_params;uwsgi_pass 127.0.0.1:8997;  #端口要和uwsgi里配置的一样uwsgi_param UWSGI_SCRIPT mysite.wsgi;  #wsgi.py所在的目录名+.wsgiuwsgi_param UWSGI_CHDIR /data/wwwroot/mysite/; #项目路径}location /static/ {alias /data/wwwroot/mysite/static/; #静态资源路径}}
}

关闭第二步启动的nginx服务

killall nginx

再重新启动(见第二步)
到此,整个Django项目就部署成功了!!!
可以在浏览器中输入服务器的IP地址就可以看到index页面啦!!!
有不明白的地方可以在评论区一起讨论哈

参考:
CentOS7下部署Django项目详细操作步骤
Django部署阿里云服务时候报错:SQLite 3.8.3 or later is required (found 3.7.17)
Nginx + uWsgi 部署 Django + Mezzanine 生产服务器