学习笔记,仅供参考



文章目录





项目部署



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



项目部署的几个步骤



  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 root@12.34.56.78/root/mydjango/



ssh远程登录云主机
ssh root@darkgoat.cn



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)--项目部署_linux

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

Django(part52)--项目部署_nginx_02



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)--项目部署_项目文件_03



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)下无效,这时,我们需要再次进行配置。



在/etc/nginx/sites-available/default文件中,我们进行如下配置:

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

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

记得修改完该文件,重启nginx