Django部署nginx+uwsgi+ubuntu(Linux服务器)

一、项目介绍

2023年9月我成功在阿里云部署了一个Django项目,具体环境如下:

  • 服务器:Ubuntu Server 22.04 LTS 64bit(Linux)
  • 反向代理服务器:Nginx
  • WEB服务器:uwsgi
  • 项目框架:Django (4.2版本)
  • 项目运行环境:Python3

二、nginx、uwsgi、ubuntu的关系

1、首先用户向服务器发起的请求被nginx获取到。

2、此时nginx进行判断,如果请求的是静态文件则直接到nginx中配置的静态文件目录中去获取静态文件;如果是动态请求则需要将请求转发给uwsgi,uwsgi再调用应用程序(就是要部署的项目代码)获取结果返回给nginx。

3、最后nginx将请求返回给用户。

三、安装python、pip、python-Pillow和Django

请先购买服务器并登录,我用的是腾讯云自带的Orca Term,只要能连接服务器并执行命令就好

1、进入系统先更新源文件并升级已有的安装包(非必须,但建议操作)

sudo apt-get update          #更新源文件,并不会做任何安装升级操作
sudo apt-get upgrade         #升级所有已安装的包

2、安装python和pip

#(1)安装python(已安装的会重新安装最新版本),并验证版本
sudo apt-get install python3
python3 -V    #输入此命令行后如果展示了对应的python版本代表安装成功
 
#(2)安装pip
sudo apt-get install python3-pip
pip3 -V    #输入此命令行后如果展示了对应的pip版本代表安装成功
 
#(3)安装Pillow包,否则启动Django项目会报错,项目没有图片的不用管
python3 -m pip install Pillow     #图像处理库
 
报错信息:
erpnav.Product.logo: (fields.E210) Cannot use ImageField because Pillow is not installed.
        HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "python -m pip install Pillow".

3、安装并测试Django

#(1)安装Django
python3 -m pip install Django
 
#(2)安装Django后将项目文件部署到服务器上并运行,可以ftp上传也可以git。关于git见末尾参考信息
python3 manage.py runserver        #访问127.0.0.1:8000端口如果可以访问成功则代表Django项目可以正常运行,建议使用W3M浏览器进行访问
 
#(3) 项目settings.py中修改以下两个配置
DEBUG = False      #代表非开发模式 
ALLOWED_HOSTS = ["*"]    #允许所有的请求来访问Django项目
 
#(4) 收集静态文件到项目/static文件夹
python3 manage.py collectstatic     #执行后系统的css、图片视频等文件会收录到项目/static文件夹

四、安装uwsgi并配置

#(1)安装uwsgi
python3 -m pip install uwsgi  #安装,python3 -m pip uninstall uwsgi可以卸载
 
#(2)配置uwsgi。在项目根目录增加uwsgi.ini文件(比如目录/home/ubuntu/saas-time/,直接在saas-time中建)
#######################文件内容##########################
[uwsgi]
# 直接访问uwsgi的端口号,绕过nginx,可以忽略我配置了也没啥用
http = 127.0.0.1:8010
 
# 转发给nginx的端口号,nginx和uwsgi就是通过这个端口号传递信息的
socket= 127.0.0.1:8080
 
# 是否使用主线程
master=true
 
# 项目的绝对路径,根据你的项目来
chdir=/home/ubuntu/saas-time/
 
# Django项目wsgi.py文件的相对路径
wsgi-file = SaasTime/wsgi.py
 
# 进程数
processes=4
 
# 每个进程的线程数
threads = 2
 
# 监听端口
stats = 127.0.0.1:9191
 
# 每次退出时是否清理环境配置
vacuum=true
 
# 目录中一旦有文件被改动就自动重启
touch-reload = /home/ubuntu/saas-time
 
# 存放日志**************重要,排查uwsgi问题的核心文件***************
daemonize = /home/ubuntu/saas-time/uWSGI.log
 
buffer-size = 655365
########################文件内容##########################
 
#(3)uwsgi操作,此时你只需要运行uwsgi就好
uwsgi --ini uwsgi.ini             #运行uwsgi,此时是可以ctrl+c退出运行(有时候不能,搞不懂暂时没搞懂)
uwsgi --ini uwsgi.ini &            #后台运行uwsgi
 
###下方命令修改了uwsgi配置文件需要重启时使用###
ps ax|grep uwsgi        #查看uwsgi的所有进程
pkill -f uwsgi -9     #杀死uwsgi的所有进程

五、安装Nginx并配置

#(1)安装并启动nginx
sudo apt-get install nginx      #安装nginx
sudo /etc/init.d/nginx start    #启动nginx,/etc/init.d/是文件路径,里面存放了nginx启动的脚本
 
#(2)配置文件进入/etc/nginx文件夹修改nginx.conf文件为(该文件问nginx的配置文件,可以使用vim编辑器去修改,使用方法见末尾参考信息)
###############**nginx.conf**文件内容#################
user root;         #user www-data; 否则nginx没有权限访问静态资源文件
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
 
events {
	worker_connections 768;
	# multi_accept on;
}
 
http {
 
	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;
 
 
	include /etc/nginx/mime.types;
	default_type application/octet-stream;
 
 
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;
 
 
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
 
 
	gzip on;
 
 
 
	include /etc/nginx/conf.d/*.conf;
	#include /etc/nginx/sites-enabled/*; #######################此文件为nginx默认的监听80端口的文件,给注释掉 ,否则访问网站时不会把消息转发给下方配置的uwsgi端口
	#######################以下为增加的内容##############
	server {
		listen        80 default_server;    #监听80端口
		listen         [::]:80 default_server;
		server_name        127.0.0.1;
		charset      utf-8;
 
		client_max_body_size 75M;
 
		location / {
			include   uwsgi_params;
			uwsgi_pass     127.0.0.1:8080;  #将信息转发给8080端口的uwsgi,和uwsgi.ini配置文件中的端口需要保持一致
			uwsgi_read_timeout    600;
   		uwsgi_send_timeout    600;
    	uwsgi_connect_timeout 600;
		}
		#路径为/static的请求,直接从根目录的static文件夹中获取静态文件
		location /static {
       alias /home/ubuntu/saas-time/static;     
    }
		#路径为/media 的请求直接从根目录的media文件夹中获取静态文件(指django媒体文件-media)
    location /media {
        alias /home/ubuntu/saas-time/media;   
    }
	}
}
################文件内容################

#(2)nginx扩展命令
sudo nginx -s reload   #不终止服务器的情况下重载配置,修改配置文件后建议采用此命令重载
sudo systemctl restart nginx  #重启
sudo nginx -s quit
nginx {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade}

六、开启防火墙并访问系统

在云服务厂商购买的服务器都有防火墙配置,记得打开80端口的访问权限,开启后使用ip地址访问即可,如果正常展示项目内容代表配置成功,否则需要排查问题。

保证nginx和uwsgi运行中以及防火墙开启的前提下,请找到nginx和uwsgi的日志文件,每次访问网站时nginx一定会产生日志,uwsgi看情况,请根据日志信息去排查问题。

  • uwsgi日志:uwsgi.ini文件中daemonize 配置项指定
  • nginx日志:nginx.conf文件中access_log和error_log配置项指定
发布时间:2023年11月18日 00:34
分类:技术博客
标签: Django nginx uwsgi Linux Ubuntu
作者:五行缺土
微信扫码接收最新分享: