天天看点

Django(part52)--项目部署

学习笔记,仅供参考

文章目录

  • ​​项目部署​​
  • ​​项目部署的几个步骤​​
  • ​​安装同版本的数据库(略)​​
  • ​​django项目迁移​​
  • ​​安装python​​
  • ​​安装相同版本的包​​
  • ​​将当前项目源代码复制到运程主机上(scp 命令)​​
  • ​​ssh远程登录云主机​​
  • ​​uWSGI 网关接口配置​​
  • ​​WSGI规范​​
  • ​​uWSGI网关接口配置​​
  • ​​安装uWSGI​​
  • ​​配置uWSGI(这里我用Windows演示)​​
  • ​​uWSGI的运行管理(Linux)​​
  • ​​nginx 反射代理配置​​
  • ​​nginx安装​​
  • ​​nginx配置(Linux)​​
  • ​​修改uWSGI配置​​
  • ​​重启uWSGI服务(Linux)​​
  • ​​nginx的操作(Linux)​​
  • ​​nginx 配置静态文件路径(Linux)​​

项目部署

我们在软件开发完毕后,会把开发版的软件安装到服务器上长期运行.

项目部署的几个步骤

  1. 在服务器上安装和配置与开发阶段同版本的数据库;
  2. django项目迁移(在服务器上配置与开发环境相同的python版本及依赖的包);
  3. 用​

    ​uwsgi​

    ​​ 替代​

    ​python manage.py runserver​

    ​ 方法启动服务器;
  4. 配置​

    ​nginx​

    ​ 反射代理服务器;
  5. 用​

    ​nginx​

    ​ 配置静态文件路径,解决静态路径问题。

安装同版本的数据库(略)

django项目迁移

安装python
  • Linux
sudo apt install python3      
安装相同版本的包
  • windows

导出当前模块数据包的信息:

pip freeze > requirements.txt      

导入到另一台新主机:

pip install -r requirements.txt      
  • Linux

导出当前模块数据包的信息:

pip3 freeze > package_list.txt      

导入到另一台新主机:

pip3 install -r package_list.txt      
将当前项目源代码复制到运程主机上(scp 命令)
  • Linux
sudo scp -a 当前项目路径 远程主机地址和文件夹路径
#比如
sudo scp -a /home/goatbishop/mywebsite [email protected]/root/mydjango/      
ssh远程登录云主机
ssh [email protected]      

uWSGI 网关接口配置

WSGI规范
  • WSGI (Web Server Gateway Interface)是Python应用程序或框架和Web服务器之间的一种接口规范(接口就是函数或对象);
  • WSGI 实现了WSGI协议、http等协议。
uWSGI网关接口配置

​python manage.py runserver​

​ 通常只在开发和测试环境中使用,当开发结束后,完善的项目代码需要在一个高效稳定的环境中运行,这时可以使用uWSGI.

uWSGI是WSGI规范的一种实现方式,它可以让Django、Flask等开发的web站点运行在其中。

安装uWSGI
  • Linux
sudo pip3 install uwsgi      
  • Windows
pip install uwsgi      

在Windows下pip会报出​

​AttributeError: module 'os' has no attribute 'uname​

​​’错误,这里是解决办法​​Windows系统安装uWSGI报错​​

配置uWSGI(这里我用Windows演示)

在我们的项目文件夹下创建一个​

​uwsgi.ini​

​ 文件,在这个文件中敲入如下代码:

[uwsgi]
#套接字方式的 IP地址:端口号
socket=127.0.0.1:8000

#Http通信方式的 IP地址:端口号
http=127.0.0.1:8000

#当前项目工作目录(绝对路径)
chdir=F:/MyStudio/PythonStudio/goatbishop.project01/Django/mywebsite_bookstore

#项目中wsgi.py文件的目录,相对路径,相对于当前工作目录
wsgi-file=mywebsite_bookstore/wsgi.py

#进程个数
process=4

#每个进程的线程个数
threads=2

#服务的pid记录文件
pidfile=uwsgi.pid

#服务的目志文件位置(在代码中用print打印的信息)
daemonize=uwsgi.log      

配置完uwsgi.ini,我们再配置settings.py,将DEBUG改为False,并将ALLOWED_HOSTS列表中增加​

​'*'​

​:

DEBUG = False
ALLOWED_HOSTS = ['*']
#表示允许所有人访问网站
#若列表中只填入'192.168.1.*'则表示只有这个网段才能访问咱们的网站
#注意这个*有点正则的意思      

进行上面一系列配置之后,我们再用python manage.py runserver开启服务,并向网站发起请求(故意填一个无法访问的url),就看不到调试信息了:

Django(part52)--项目部署

如果我们没有对settings.py进行配置,也就是处于开发调试阶段,那么我们向http://127.0.0.1:8000/asdfg发出请求,我们是会看到如下页面的:

Django(part52)--项目部署
uWSGI的运行管理(Linux)
  • Linux

启动uwsgi:

cd 项目文件夹
sudo uwsgi --ini 项目文件夹/uwsgi.ini      

停止uwsgi:

cd 项目文件夹
sudo uwsgi --stop uwsgi.pid      
  • Windows

启动uwsgi:

cd 项目文件夹
uwsgi --ini 项目文件夹/uwsgi.ini      

停止uwsgi:

cd 项目文件夹
uwsgi --stop uwsgi.pid      
  • 注意事项

当uwsgi 启动后,当前django项目的程序就会变成后台守护进程,关闭当前终端时,此进程也不会停止。

nginx 反射代理配置

nginx是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理、负载均衡、缓存等一系列重要特性,在实践之中使用广泛,它是使用C语言编写,执行效率高

  • nginx作用
  • 负载均衡, 多台服务器轮流处理请求
  • 反射代理
  • 反射代理图示(nginx服务器可以通过区分路由类型,把路由指向不同的服务器进行处理)
Django(part52)--项目部署
nginx安装
  • Linux
sudo apt install nginx      
  • windows

安装配置教程:​​Nginx Windows详细安装部署教程​​

nginx配置(Linux)

现在,我们要修改nginx 的配置文件/etc/nginx/sites-available/default

打开配置文件:

sudo vim /etc/nginx/sites-available/default      

修改配置文件:

#在server节点下添加新的location项,指向uwsgi的ip与端口
server {
    ...
    location / {
        uwsgi_pass 127.0.0.1:8000;  
        # 将/路由,映射到uwsgi的127.0.0.1:8000
        include /etc/nginx/uwsgi_params; 
        #将所有的参数转到uwsgi下
    }
    ...
}      

每次修改完该文件后,我们都需要重启nginx

重启nginx:

sudo /etc/init.d/nginx restart      
修改uWSGI配置

修改​

​项目文件夹/uwsgi.ini​

​下的http通信方式改为socket通信方式:

[uwsgi]
# 去掉如下
# http=127.0.0.1:8000
# 改为
socket=127.0.0.1:8000      
重启uWSGI服务(Linux)
sudo uwsgi --stop uwsgi.pid
sudo uwsgi --ini 项目文件夹/uwsgi.ini      
nginx的操作(Linux)
  • 启动 nginx
  • ​sudo /etc/init.d/nginx start​

  • ​sudo service nginx restart​

  • 查看nginx进程
  • ​ps aux | grep nginx​

  • ​sudo /etc/init.d/nginx status​

  • ​sudo service nginx status​

  • 停止nginx
  • ​sudo /etc/init.d/nginx stop​

  • ​sudo service nginx stop​

  • 重启nginx
  • ​sudo /etc/init.d/nginx restart​

  • ​sudo service nginx restart​

nginx 配置静态文件路径(Linux)

对于settings.py中静态文件的路径STATICFILES_DIRS,只在调试阶段有效,在网站运行模式(DEBUF=False)下无效,这时,我们需要再次进行配置。

# file : /etc/nginx/sites-available/default

server {
    ...
    location /static {
        root 项目文件夹的绝对路径;
        # 将/static路由, 映射到本地主机的项目文件夹下(绝对路径)
    }
    ...
}