你好,我是悦创。

很早之前在公众号和博客上面分享了一篇:一文搞定 Django 入门,很多人问我如何部署。那实际当中我也遇到了很多坑,这回带给你一个全教程给你。包含我部署的项目。这里也是非常感谢 icbug 的帮助!

这篇文章主要感谢:icbug 的帮忙,他的博客:https://linuxdevblog.cn/

 

Powered By icbug & AI悦创

本项目 github 地址:https://github.com/AndersonHJB/Python_Online_Programming

项目难点
  1. 解决 Django 项目中 static 文件夹静态资源无法加载问题
  2. 创建 python3 的 Venv 虚拟环境
  3. 使用 Nginx 反向代理,代理网站
  4. uwsgi 部分报错问题

提示:本教程仅用于  Ubuntu18.04 ,其它系统版本可能不成功

1.0 环境搭建

1.1 搭建环境介绍

Ubuntu18.04 系统( root 权限)+Nginx+uwsgi+Python3.6+Django 本项目使用 VENV 虚拟环境进行部署。

1.2 环境搭建

1.2.1 更新 APT 索引

apt update

 

apt upgrade

1.2.2 安装并创建虚拟环境

安装 virtualenv 和 virtualenvwrapper

apt install virtualenv
apt install virtualenvwrapper

1.2.3 配置 ENV 程序环境

编辑 ~/.bashrc

vim  ~/.bashrc

在 ~/.bashrc 文件中添加,配置环境变量。

export WORKON_HOME=$HOME/.virtualenvs
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

之后重载一下 .bashrc 即可:

source ~/.bashrc

没有报错即可继续,有的话可以自行百度一下,CSDN上面一般会有很多解决方案!我们来检测一下是否安装成功:

mkvirtualenv

有如下显示即为成功:Ubuntu系统部署Python3 Django项目「零失败」_Python但是这个配置的版本为 Python2:Ubuntu系统部署Python3 Django项目「零失败」_Ubuntu_02这个先不用管,创建文件时指定 Python3.6 程序即可。

1.2.4 创建虚拟环境

因为,在 Linux 下,不会有自动查找环境变量这一功能,所以我们就需要进入 python3 路径或者指定 python3 路径。

方法一:

这里是很容易出错的一步,这一步骤必须在 /usr/bin 目录下进行创建,否则会找不到Python程序!!!因为 ubuntu 自带的 python3 存在路径 :

root@iZ8vb8h5pbkzfj43uzuuc9Z:~# which python3
/usr/bin/python3

所以要进入该路径下。

cd /usr/bin/
mkvirtualenv -p python3.6 p5py

出现如下类似的结果即可:Ubuntu系统部署Python3 Django项目「零失败」_Python_03

方法二:

mkvirtualenv -p /usr/bin/python3.6 Tester

Ubuntu系统部署Python3 Django项目「零失败」_Ubuntu_04上图即为成功。成功之后会自动进入虚拟环境。

PS:这里我使用的是 p5py 虚拟环境。

简单介绍一下虚拟环境的进入和退出的方式 退出环境命令:

deactivate

进入虚拟环境:

workon p5py  # p5py为虚拟环境名称

1.3 安装 Django 环境

接下来的一系列步骤都要在我们创建虚拟环境 p5py 进行完成,安装 Python3 Django 模块。

pip3 install django
Ubuntu系统部署Python3 Django项目「零失败」_Python_05image.png

1.4 上传项目

这里需要特别注意一下,建议打包为 zip 文件进行上传,如果你用的是 xshell 可以安装  lrzsz 程序。

apt install lrzsz

在命令行中输入 rz 即可上传单个文件压缩包, 上传后进行解压,如果你的系统没有 unzip 程序请使用

apt install unzip

自行安装。我放在根目录下进行解压,解压完成后删掉 zip 压缩包即可 如下图:Ubuntu系统部署Python3 Django项目「零失败」_Ubuntu_06Ubuntu系统部署Python3 Django项目「零失败」_Python_07

1.5 试运行 Django 项目

我的 Django 项目开源了:https://github.com/AndersonHJB/Python_Online_Programming,记得给整个项目 root 权限。「也可以不用加权限」

在测试的时候,先把 Django 中的 settings.py 中的 DEBUG=True,改成 DEBUG=False。也要把你的服务器 IP 添加到 ALLOWED_HOSTS 里面。Ubuntu系统部署Python3 Django项目「零失败」_Python_08在运行之前我可以使用如下命令导出项目依赖:

pip freeze > requirements.txt

注意:项目依赖需要在真实环境「也就是退出虚拟环境」和进入虚拟环境我们都要安装。** 接下来安装依赖:

pip3 install -r requirements.txt

接下来运行,在项目根目录下输入:

sudo python3 manage.py runserver 0.0.0.0:80

如果项目在对应端口成功加载即为 django 程序没有任何问题,如果有问题根据报错自行寻找解决方法进行处理或者留言。

Ubuntu系统部署Python3 Django项目「零失败」_Ubuntu_09也能运行代码、保存、分享。

1.6 安装 Nginx

Ubuntu系统部署Python3 Django项目「零失败」_Python_10不管是接下来的方法一,还是方法二,你用一种即可。最后访问公网 IP 都会出现上面的结果。

方法一:

本次安装 nginx 最新稳定版本 nginx(nginx 1.18),首先需要 ppa 镜像添加插件:

sudo apt-get install software-properties-common

添加 ppa 镜像:

sudo add-apt-repository ppa:nginx/stable

更新源:

apt update

安装 nginx:

apt install nginx

之后查看 nginx 版本号确定版本是否正确:

(p5py) root@iZ8vb8h5pbkzfj43uzuuc9Z:/p5py# nginx -v
nginx version: nginx/1.18.0 (Ubuntu)

方法二:

1)如果你之前安装过 Nginx,你可以输入:

sudo apt-get --purge remove nginx

将 Ngxin 的配置文件和程序全都卸载,然后按照下面的方式安装即可。

2)如果你不想卸载之前的,仍然可以按照下面的方式进行安装升级,但是 /etc/nginx 目录下可能会有你之前版本的一些配置文件,比如 sites-enabled 文件夹和 sites-available 文件夹等等,但1.18.0 稳定版本不需要这些文件夹了,所以最好是卸载了重新安装。

Nginx 版本介绍

Nginx 官网下载:https://nginx.org/en/download.htmlUbuntu系统部署Python3 Django项目「零失败」_Python_11

  • Mainline version:正在开发阶段的版本,可能会有漏洞。
  • Stable version:稳定版
  • Legacy versions:历史版本
  • 本次安装1.18.0的稳定版本
实际操作

安装或升级,需要添加源才能下载 Nginx 的稳定版本,首先输入以下两条命令:

 sudo wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key

在  /etc/apt/sources.list 文件中加入下面两行:

deb http://nginx.org/packages/ubuntu/ codename nginx
deb-src http://nginx.org/packages/ubuntu/ codename nginx

注意 codename 要根据系统来选择可以点击查看详细说明:http://nginx.org/en/linux_packages.html#stableUbuntu系统部署Python3 Django项目「零失败」_Python_12

sudo vim /etc/apt/sources.list

Ubuntu系统部署Python3 Django项目「零失败」_Ubuntu_13Ubuntu 其他版本和系统平台更换 codename 即可最后输入:

sudo apt-get update
sudo apt-get install nginx

输入完成之后,如果你看见这句话:Ubuntu系统部署Python3 Django项目「零失败」_Python_14

输入 nginx -v 查看安装版本:

root@iZ8vb1o9x5vmr6vy4go7tsZ:~# nginx -v
nginx version: nginx/1.18.0

此外,/etc/nginx/ 下的目录结构:Ubuntu系统部署Python3 Django项目「零失败」_Ubuntu_15


1.7 安装并测试 uwsgi

Ubuntu系统部署Python3 Django项目「零失败」_Python_16这里一定不要用 apt 进行安装,要用 pip3 的方式进行安装,apt 安装会导致很多报错!

pip3 install uwsgi

安装完成后如下画面:Ubuntu系统部署Python3 Django项目「零失败」_Ubuntu_17下面我们来测试一下我们的 uwsgi 网站服务****器,创建个 test.py,用 vim 编辑打开。

touch test.py # 创建文件
vim test.py # 编辑文件

写入如下内容:

def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])

使用 uwsgi 测试启动命令指定端口以及文件:

uwsgi --http :8000 --wsgi-file test.py

用 F12 Network 查看是否为 200 OK 状态码:Ubuntu系统部署Python3 Django项目「零失败」_Ubuntu_18

2.0 部署 Django

2.1 uwsgi_params 拷贝到项目根目录

复制 nginx 目录下的 uwsgi_params 文件到根目录:

cp /etc/nginx/uwsgi_params /p5py  # Tips:中间有空格,/p5py为根目录下的p5py文件夹,也是项目的根目录

2.2 创建 uwsgi 目录,编写 uwsgi 配置文件

在项目根目录下创建 uwsgi 文件夹:

(p5py) root@iZ8vb8h5pbkzfj43uzuuc9Z:/p5py# mkdir uwsgi && cd uwsgi

创建 uwsgi.ini 配置文件:

(p5py) root@iZ8vb8h5pbkzfj43uzuuc9Z:/p5py# touch uwsgi.ini

编辑 uwsgi.ini :

vim uwsgi.ini

# 写入内容如下:

[uwsgi]
socket=:8080
plugin=python3
wsgi-file=p5py/wsgi.py
master=true
processes=1
threads=1
stats = 127.0.0.1:8000
vhost = true

 

2.3 部署 Nginx 服务

进入 nginx 配置文件夹

cd /etc/nginx/conf.d/

创建 project 配置文件

vim project.conf

写入如下内容:

server {
listen 80;

server_name localhost;
charset utf-8;
client_max_body_size 75M;

location /static {
alias /p5py/static;
}

location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
#include /p5py/p5py/uwsgi_params;
}
}

重启:

/etc/init.d/nginx restart

输入之后的结果:

(p5py) root@iZ8vb8h5pbkzfj43uzuuc9Z:/etc/nginx/conf.d# /etc/init.d/nginx restart
[ ok ] Restarting nginx (via systemctl): nginx.service.

 

2.4 编辑 setting.py,收集静态文件

找到同名文件夹中的 p5py,编辑 setting.py

第一步,把 DEBUG 改为  False:Ubuntu系统部署Python3 Django项目「零失败」_Ubuntu_19第二步,确定 Allow Host 选项中有自己的域名,否则无法访问。Ubuntu系统部署Python3 Django项目「零失败」_Python_20第三部,重要的一步,配置 static_root 路径:

STATIC_ROOT = os.path.join(BASE_DIR, '/static/')

Ubuntu系统部署Python3 Django项目「零失败」_Ubuntu_21这些配置完成之后,返回项目根目录 运行收集静态程序命令:

 python3 manage.py collectstatic

我的输入:

(p5py) root@iZ8vb8h5pbkzfj43uzuuc9Z:/p5py#  python3 manage.py collectstatic

Ubuntu系统部署Python3 Django项目「零失败」_Ubuntu_22如上图即为成功。

2.5 安装 uwsgi-Python3 插件

sudo apt-get install uwsgi-plugin-python3

进入 uwsgi 文件夹:

cd uwsgi

启动命令:

uwsgi --ini uwsgi.ini
uwsgi -d --ini uwsgi.ini # 这个-d是后台运行

各大服务器厂商的云服务器请确保安全组的端口打开!使其在后台运行 确保 socket 端口为正常状态!一定在 ini 中再次确认是 socket 而不是 http_socket!

3.0 解析域名

把域名解析到对应的服务器,并在 Setting.py 中把解析的域名添加到 ALLOW_HOST 中


4.0 SSL部署

参考阿里云文档https://help.aliyun.com/document_detail/98728.html其中的 nginx.conf 替换为 conf.d 目录中的 project.conf 即可!