首页 > 技术文章 > Django-使用nginx部署

ag-chen 2020-09-06 19:59 原文

本地部署

uWSGI

在部署之前,我们得先了解几个概念

  • wsgi
    web应用程序之间的接口。它的作用就像是桥梁,连接在web服务器和web应用框架之间。
  • uwsgi
    是一种传输协议,用于定义传输信息的类型。
  • uWSGI
    是实现了uwsgi协议WSGI的web服务器。

环境安装

需要安装Nginx和Mysql[可选]

sudo apt install mysql-server
sudo apt install nginx

安装虚拟环境

sudo pip3 install virtualenv
sudo pip3 install virtualenvwrapper

编辑配置文件
~/.bashrc

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/python3/bin/virtualenvwrapper.sh

# export WORKON_HOME=~/Envs   #设置virtualenv的统一管理目录
# export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'   #添加virtualenvwrapper的参数,生成干净隔绝的环境
# export VIRTUALENVWRAPPER_PYTHON=/opt/python347/bin/python3     #指定python解释器
# source /opt/python34/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本
source .bashrc

虚拟环境的使用

# 创建虚拟环境 env_name
mkvirtualenv env_name

# 启动虚拟环境 env_name
workon env_name

# 停止虚拟环境
deactivate

# 删除虚拟环境,需要先退出虚拟环境
rmvirtualenv env_name

项目相关文件夹

项目名称为 ES_dj

配置Settings文件

DEBUG = False # 关闭debug调试
ALLOWED_HOSTS = ['*'] # 允许任何域方法

收集静态文件

# 静态文件
STATIC_URL = '/static/'

# 注释掉
#STATICFILES_DIRS = [
#    os.path.join(BASE_DIR, 'static')
#]

STATIC_ROOT = os.path.join(BASE_DIR,'static_all/')
python manage.py collectstatic --noinput

新建uwsgi.ini文件

放在script文件夹内 uwsgi.ini

[uwsgi]
# 项目目录
chdir=/opt/ESys/ES_dj
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 指定项目的application
module=ES_dj.wsgi:application
# 指定sock的文件路径
socket=/opt/ESys/script/uwsgi.sock
# 启用主进程
master=true
# 进程个数
workers=5
pidfile=/opt/ESys/script/uwsgi.pid
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=1024
# 设置日志目录
daemonize=/opt/ESys/script/uwsgi.log

配置nginx

/etc/nginx/conf.d/
加入文件 ES_dj.conf

server {
        listen 443;
        server_name ****.*** ; # ***.**.*.* , ifconfig 
        access_log  /var/log/nginx/access.log  main;
        charset  utf-8;
        gzip on;
        gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;
        
        # 用于https协议
        ssl on;
        ssl_certificate /etc/nginx/conf.d/www.crt;
        ssl_certificate_key /etc/nginx/conf.d/www.key;
        ssl_session_timeout 5m;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;


        error_page  404 /404.html;
        error_page  500 502 503 504 /50x.html;
        # 指定项目路径uwsgi
        location / {
            include uwsgi_params;
            uwsgi_connect_timeout 30;
            uwsgi_pass unix:/opt/ESys/script/uwsgi.sock;
        }
        # 指定静态文件路径
        location /static/ {
            alias  /opt/ESys/ES_dj/static_all/;
            index  index.html index.htm;
        }
}

启动uwsgi

uwsgi --ini uwsgi.ini

重启uwsgi

uwsgi --reload uwsgi.pid

关闭uwsgi

uwsgi --stop uwsgi.pid

检测uwsgi是否启动

ps -ef | grep -i uwsgi

如果找不到uwsgi命令

pip3 install uwsgi
# 建立软链接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

启动nginx

/etc/init.d/nginx start

重启nginx

/etc/init.d/nginx restart

关闭nginx

/etc/init.d/nginx stop

推荐阅读