一、项目介绍
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
<aside> 💡 请先购买服务器并登录,我用的是腾讯云自带的Orca Term,只要能连接服务器并执行命令就好
</aside>
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配置项指定