django之项目部署上线

在开始配置之前,需要将整个项目文件拷贝一份,然后移入你想要的放置的目录中。

django之项目部署上线

 

 

一、Django配置

  1、settings.py配置

  复制全局settings.py配置文件,创建一个副本命名为/pro_settings.py,修改DEBUG为False。

DEBUG = False

# 填写你自己的ip和域名
ALLOWED_HOSTS = [“ 192.168.216.137", "localhost", "127.0.0.1"] 
           
# 此处设置可以访问服务器的IP地址,*为允许所以地址

django之项目部署上线

 

 第一次部署的时候,最好先不要修改,否则出错的时候不容易排错。

  2、wsgi.py配置

# 修改pro_mysite/wsgi.py文件

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'peo_mysite.pro_settings')

application = get_wsgi_application()

django之项目部署上线

 

   3、生成requirements.py文件(最好在根目录下单独建立一个目录,用于存放这些文件)

  项目部署文件肯定也是运行在python环境下的,那么势必需要依赖的包文件,所以也需要为部署的项目重新建立一个运行的虚拟环境,并安装项目运行时所依赖的包、模块,所以需要先进入开发时的虚拟环境,将安装的包、模块导出来,安装在项目部署的虚拟环境中(注意:有的包、模块不是我们通过pip install 从源地址安装的,所以在导出时,需要将其删除,通过源文件安装。

  通过>>> pip freeze > requirements.txt

  将安装的第三方包、模块导出到requirements.txt文件,放在项目中,供部署时安装。

django之项目部署上线

 

 上面的fdfs-client-py==1.2.6不是通过源地址安装的,而是直接通过源文件安装的,所以需要将这个模块删除。

django之项目部署上线

 

   通过>>> pip install requirements.txt

  安装从源地址安装的第三方包、模块(在此之前,需要创建项目运行虚拟环境),

  安装完成后,再安装通过源文件安装的第三方包、模块,比如我的fdfs-client-py==1.2.6模块

django之项目部署上线

 

   两类包、模块都安装完成后,接下来就是安装django项目运行的服务器模块了(注意:django项目部署时,与我们开发时运行的方式不太一样;开发时,直接使用命令python manage.py runserver 0:8000就可以了,但是部署时,是运行在一个WSGI服务器上的,此时只需要相关配置,再运行wsgi服务器,就可以起启动项目了。

  通过>>> pip install uwsgi

  安装WSGI服务器

django之项目部署上线

 

   可以写一个test.py文件测试uwsgi是否安装成功

django之项目部署上线

 

    通过>>> uwsgi --http :8000 --wsgi-file test.py

  这个命令表示WSGI服务器运行在8000端口,一旦接收到请求,就会将解析请求,并调用test.py文件里的application函数,返回一个响应,

django之项目部署上线

 

 django之项目部署上线

 

 django之项目部署上线

 

   uwsgi配置(创建uwsgi_conf_ini配置文件)

[uwsgi]
# 使用nginx连接时使用,Django程序所在服务器地址
# 选择内网IP和端口
socket=172.26.149.79:8000

# 项目根目录
chdir=/root/django-projects/dj32_pro/dj32_pro

#项目中wsgi.py文件的相对目录
wsgi-file=dj32_test/wsgi.py

# 进程数
processes=2

# 线程数
threads=2

# uwsgi服务器的角色
master=True

# 存放进程编号的文件
pidfile=uwsgi.pid

# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。以前的runserver是依赖终端的
daemonize=logs/uwsgi.log

# 指定虚拟环境所在目录,不能填相对目录
virtualenv=/root/python-venv/dj32

  要注意上述配置标红的地方,一定要严格遵照执行,

  socket:表示项目运行的IP地址和端口号,一定要是内网地址;

  chdir:表示项目的根目录(使用pwd命令获取);

  wsgi-file:表示项目中wsgi.py文件的位置,在主APP下;

  daemonize:记录项目运行的日志,是相对于这个配置文件的位置,不是相对于根目录,切记;

  virtualenv:表示项目运行的虚拟环境的绝对路径

  启动uwsgi(进入.ini配置文件所在的目录,启动uwsgi服务)

  启动uwsgi>>> uwsgi --ini uwsgi_conf.ini

  停止uwsgi>>> uwsgi --stop uwsgi.pid

二、nginx配置(想要了解更多,观看教程:https://www.bilibili.com/video/BV1zJ411w7SV?p=9

  1、安装nginx(根据自己的系统选择合适的nginx配置,以Centos为例)

  >>> yum -y install nginx

  2、启动nginx,查看启动状态,如果启动状态为active,则代表启动成功

  django之项目部署上线

 

   3、测试是否安装成功

 

  nginx默认运行在80端口,可以直接在浏览器中访问,如果有显示,表示在安装成功,

django之项目部署上线

 

 

  4、nginx常用命令(如果不是root用户,需要在前面加sudo)

  停止nginx服务器>>> systemctl stop nginx

  启动nginx服务器>>> systemctl start nginx

  重启nginx服务器>>> systemctl restart nginx

  重载配置而不关闭>>> systemctl reload nginx

  设为开机自启动>>>> systemctl enable nginx

  取消开机自启动>>>> systemctl disable nginx

  5、nginx配置(找到配置文件的位置,修改配置文件,配置文件的位置,上面已经标出来了)

  /etc/nginx/nginx.conf

upstream dj32_pro {
    # 此处为uwsgi运行的ip地址和端口号
    server 172.26.149.79:8000;
}

server {
    # 监听端口
    listen      80;

    # 服务器域名或者ip地址
    server_name www.blogcloud.info;

    # 编码
    charset     utf-8;

    # 文件最大上传大小
    client_max_body_size 75M;

    # 媒体文件
    location /media  {
        alias /home/pyvip/pro_mysite/media;
    }

    # 静态文件
    location /static {
        alias /home/pyvip/pro_mysite/static;
    }

    # 主目录
    location / {
        uwsgi_pass  pro_mysite;
        include    /etc/nginx/uwsgi_params;
    }
}
# 修改sudo vim /etc/nginx/nginx.conf
# 第一行开头修改用户,将www-data改为你当前的用户 创建 Nginx 运行使用的用户 www:

user root;

  user后面跟你自己主机的用户名

django之项目部署上线

 

   具体看一下nginx配置的全部内容

django之项目部署上线

 

   具体看一下我们配置好的配置文件

django之项目部署上线

 

   测试nginx配置文件是否正确>>> nginx -t -c /etc/nginx/nginx.conf

      如果打印如下内容,就表示成功了:

django之项目部署上线

 

   重新加载配置>>> nginx -s reload -c /etc/nginx/nginx.conf

  详细了解nginx配置正向代理、反向代理、负载均衡、动静分离相关内容请看(https://www.bilibili.com/video/BV1zJ411w7SV?p=9),个人觉得讲得不错。

  补充:如果遇到启动uwsgi和nginx时,启动失败,多半是端口占用的问题,那就解除占用

  查看指定端口>>> netstat -ap | grep 8000

  查看端口>>>>>>netstat -a

  杀死进程>>>>>>pkill -9 PID

  查看某个程序的进程>>> ps -aux | grep nginx

  

  

上一篇:nginx与uwsgi介绍


下一篇:Python 中的 HTTP 服务器