一、项目介绍
为了学习Python3在web上的应用, 需要部署一个Django项目, 具体环境如下:
- 服务器: Ubuntu 18.04.6
- 代理服务器: Nginx 1.14.0
- WEB服务器: uwsgi 2.0.23
- 项目框架: Django 3.2.23
- 项目运行环境: Python 3.6.9
二、安装环境
1、对系统源文件进行升级更新
sudo apt-get update #更新源文件
sudo apt-get upgrade #升级所有已安装的包
2、安装Python3和pip
#(1)安装python(已安装的会重新安装最新版本),并验证版本
sudo apt-get install python3 #安装Python3
python3 --version #查看Python3安装版本
#(2)安装pip
sudo apt-get install python3-pip #安装pip
pip3 --version #查看pip安装版本
#(3)安装Pillow包,否则启动Django项目会报错,项目没有图片的不用管
sudo apt-get install libjpeg-dev zlib1g-dev #在安装Pillow包前需要先安装zlib
python3 -m pip install Pillow #图像处理库
3、安装Django
#(1)安装Django
python3 -m pip install Django
#(2)创建项目
django-admin startproject HelloWorld #在当前目录下创建项目, 可以新建个目录, 然后再到该目录下创建
python3 manage.py runserver 0.0.0.0:8000 #启动服务器, 要在项目目录下执行
#(3) 项目settings.py中修改以下两个配置
DEBUG = False #代表非开发模式
ALLOWED_HOSTS = ["*"] #允许所有的请求来访问Django项目
#(4) 收集静态文件到项目/static文件夹
############在setting.py最后添加##############
STATIC_URL = '/static/'
STATIC_ROOT = path(BASE_DIR,'static')
###########################################
python3 manage.py collectstatic #执行后系统的css、图片视频等文件会收录到项目/static文件夹
三、安装uwsgi并配置
#(1)安装uwsgi
python3 -m pip install uwsgi #安装,python3 -m pip uninstall uwsgi可以卸载
uwsgi --version #查看uwsgi版本
#(2)配置uwsgi。在项目根目录增加uwsgi.ini文件(比如目录/var/www/HelloWorld/,直接在HelloWorld中建)
#######################文件内容##########################
[uwsgi]
# 转发给nginx的端口号,nginx和uwsgi就是通过这个端口号传递信息的
socket= 127.0.0.1:8080
# 是否使用主线程
master=true
# 项目的绝对路径,根据你的项目来
chdir=/var/www/HelloWorld/
# Django项目wsgi.py文件的相对路径
wsgi-file = HelloWorld/wsgi.py
# 进程数
processes=4
# 每个进程的线程数
threads = 2
# 监听端口
stats = 127.0.0.1:9191
# 每次退出时是否清理环境配置
vacuum=true
# 目录中一旦有文件被改动就自动重启
touch-reload = /var/www/HelloWorld
# 存放日志**************重要,排查uwsgi问题的核心文件***************
daemonize = /var/www/HelloWorld/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启动的脚本
sudo nginx -v #查看nginx版本
#(2)配置文件进入/etc/nginx文件夹修改nginx.conf文件
###############**nginx.conf**文件内容#################
user root; #否则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; #设置为本地IP地址, 就可以远程访问了
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 /var/www/HelloWorld/static;
}
#路径为/media 的请求直接从根目录的media文件夹中获取静态文件(指django媒体文件-media)
location /media {
alias /var/www/HelloWorld/media;
}
}
}
################文件内容################
五、最后一步
在部署完了之后,需要把nginx、uwsgi、Django服务器重新启动一下,否则无法访问
#Nginx
sudo systemctl restart nginx
#Django
python3 manage.py runserver 0.0.0.0:8000
#uwsgi
pkill -f uwsgi -9
uwsgi --ini uwsgi.ini
现在就可以正常访问了