Linux部署 Django项目

By | 2021-01-31

Linux简单几步部署Django项目

创建虚拟环境
新建一个虚拟环境,用于运行demo
在项目同级目录下,生成虚拟环境,首先需要pip3安装virtualenv,然后使用如下命令创建虚拟环境:

pip3 install virtualenv
virtualenv --python=python venv_demo

立即解决demo运行所需的模块依赖
这里我们就要用到刚才顺便打包压缩的requirements.txt文件了,激活虚拟环境之后在venv_demo虚拟环境中使用命令安装依赖模块,

pip3 install -r requirements.txt

如果没有此模块依赖文件,那么就手动解决吧,可以运行:python3 manage.py runserver, 这个命令,根据报错逐个安装。

此时尝试启动demo项目

python3 manage.py runserver 0.0.0.0:9090

如果能启动则说明依赖已经装好,这个时候已经可以访问项目了,访问地址:服务器公网ip:9000。 但是现在由于项目使用的是wsgi,所以不支持多进程,多线程,协程。可以使用uwsgi来解决。

uwsgi启动Django
让你的Django在Linux上,支持并发形式启动,支持多进程,多线程,乃至于协程的一个C语言编写的高性能工具。

安装uwsgi工具

pip3 install -i https://pypi.douban.com/simple uwsgi

编写uwsgi.ini配置文件,以多进程形式启动demo
用touch uwsgi.ini手动在项目第一层目录下面创建此uwsgi的配置文件,写入如下的内容参数,去启动demo。 写入如下的功能性的参数配置,用于启动项目:

`注意:第一行空着!!!


[uwsgi]
# Django-related settings
# the base directory (full path)
#  填写demo项目的第一层绝对路径
chdir           = /root/smartchart
# Django's wsgi file
# 填写demo项目第二层的相对路径,找到第二层目录下的wsgi.py
# 这里填写的不是路径,是以上一个参数为相对,找到第二层项目目录下的wsgi.py文件
wsgi-file = /root/smartchart/django_smartchart/wsgi.py
# the virtualenv (full path)
# 填写虚拟环境解释器的第一层工作目录 
home            = /root/smartchart/venv_demo
# process-related settings
# master
master          = true
# maximum number of worker processes
# 代表定义uwsgi运行的多进程数量,官网给出的优化建议是 2*cpu核数+1
# 如果是单进程,十万个请求,都丢给一个进程去处理
# 3个工作进程,十万个请求,就分给了3个进程去分摊处理
processes       = 3
# the socket (use the full path to be safe
# 这里的socket参数,是用于和nginx结合部署的unix-socket参数,这里临时先暂停使用
# socket          = 0.0.0.0:8000
#  线上不会用http参数,因为对后端是不安全的,使用socket参数是安全的连接,用nginx反向代理去访问
# 后端程序是运行在防火墙内部,外网是无法直接访问的
# 临时使用http参数,便于我们用浏览器调试访问
http =  0.0.0.0:8000

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

此时可以用命令

uwsgi --ini ./uwsgi.ini

指定配置文件启动后端,基于uwsgi协议的一个高性能web后端启动了。

此时demo项目,已经用uwsgi支持了3个进程的启动了,但是由于uwsgi对静态文件的解析性能很弱,线上是丢给nginx去处理的,现在访问项目是没有任何样式的。

配置Nginx
使用vim编辑器打开Nginx的配置文件nginx.conf,加入以下server配置:

server {
    listen    80;
    server_name _;
    location / {
        include /opt/nginx安装目录/conf/uwsgi_params;
        uwsgi_pass 公网IP:8000;  # 这里的端口要和uwsgi中一致
    }
    location /static {
        alias /opt/pro/demo/static;  # 静态文件单独存放的位置
    }
}

复制代码
修改uwsgi配置:
将uwsgi.conf中http = 0.0.0.0:8000注释,解开socket选项,改为:socket = 0.0.0.0:8000

收集静态文件
修改Django的settings.py,加入STATIC_ROOT = ‘/opt/pro/demo/static’,这个路径要和nginx中的一致,然后执行命令:python3 manage.py collectstatic,程序会自动把项目中所有的静态文件收集到static文件中。 然后使用uwsgi启动项目:venv_demo/bin/uwsgi —ini demo/uwsgi.ini,静态文件也能加载出来了。