Linux--部署Django项目

简介: Linux--部署Django项目

简单部署


1.安装虚拟环境virtualenvwrapper,创建虚拟环境目录,进入虚拟环境,我的虚拟环境目录叫venv2

[root@HH ~]# workon venv2
(venv2) [root@HH ~]# ls

2.cd进入到项目目录里面,安装项目必须的模块,例如django,djangorestframework,pymysql等等。

3.修改settings.py的配置文件

修改数据库配置

DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'NAME': 'mydjango', #数据库名
                'HOST': '127.0.0.1',  #这里服务器的ip地址
                'PORT': 3306,    #端口
                'USER': 'root',    #用户名 
                'PASSWORD': 'zou123456',   #用户密码
            }
        }

更改允许主机

ALLOWED_HOSTS = ['*']

关闭debug

debug=True

4.进入数据库创建mydjango数据库

5.启动项目

python manage.py runserver 0.0.0.0:8008

注意点:检查mysql数据库是否启动,启动时加0.0.0.0,关闭防火墙,如果时云服务器,检查安全组


什么是wsgi


WSGI是web服务器网关接口,它是一个规范,描述了web服务器如何与web应用程序通信。以及web应用服务器如何链接在一起处理一个请求。

django的主要部署平台是WSGI,这是用于web服务器和应用程序的python标准。django的startproject管理命令设置一个简单的WSGI配置,可以根据需要为你的项目进行调整。使用WSGI部署的关键概念是应用服务器用于与代码通信的application可调用。它通常在服务器可访问的python模块中作为名为application的对象提供。

startproject命令创建包含这样的application可调用的文件<project_name>/wsgi.py,它被django的开发服务器和生产WSGI部署使用。WSGI服务器从配置中获取application可调用的路径,django的内置服务器,既runservre命令,从WSGI_APPLICATION设置读取它。


为什么要用nginx+uwsgi


nginx是对外的服务接口,外部浏览器通过url访问nginx,nginx接收到浏览器发送来的http请求,将包进行解析,分析url,如果是静态文件请求就直接访问用户给nginx配置的静态文件目录,直接返回用户请求的静态文件资源。

如果不是静态文件,而是一个动态的请求。那么nginx就将请求转发给uwsgi,uwsgi 接收到请求之后将包进行处理,处理成wsgi可以接受的格式。并发给wsgi,wsgi根据请求调用 应用程序的某个文件的某个函数。处理完将返回值在交给wsgi,wsgi将返回值进行打包,打包成uwsgi能够接受的格式,uwsgi接收wsgi发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器。

nginx并不是必须的,uwsgi完全可以完成整个和浏览器交互的流程,但要考虑到某些情况

1.安全问题:程序不能直接被浏览器访问到。而是通过nginx,nginx只开放某个接口。uwsgi本身是内网接口,在nginx上加上安全性的限制,可以达到保护程序的作用。

2.负载均衡:一个uwsgi很可能不够用, 即使开了多个work也不行,毕竟一台机器的cpu和内存是有限的,有了nginx做代理,一个nginx可以代理多台uwsgi完成uwsgi的负载均衡。

3.静态文件:用django或者uwsgi这种东西来负责静态文件的处理是很浪费的行为,而且他们本身对文件的处理也不如nginx好,所以整个 静态文件的处理都由nginx完成,静态文件的访问完全不经过uswgi以及后面的东西。

uwsgi    # 和wsgi一样是通信协议,是uWSGI服务器的单独协议,用于定义传输信息的类型
uWSGI    # 是一个web服务器,实现了WSGI协议,uwsgi协议。a
nginx    # web服务器,更加安全,更好的处理处理静态资源,缓存功能,负载均衡,因此nginx的强劲性能,配合uWSGI服务器会更加安全,性能有保障。
django # 高级的python web框架,用于快速开发,解决web开发的大部分麻烦,程序员可以更专注业务逻辑,无须重新造轮子

如果将一次通信转化为“对话”的过程

Nginx:hello wsgi,我刚收到一个请求,你准备下然后让django来处理吧

WSGI:好的nginx,我马上设置环境变量,然后把请求交给django

Django:谢谢WSGI,我处理完请求马上给你响应结果

WSGI:好的,我在等着

Django:搞定啦,麻烦wsgi吧响应结果传递给nginx

WSGI:太棒了,nginx,响应结果请收好,已经按照要求传递给你了

nginx:好滴。我把响应交给用户。合作愉快


Django+Nginx+uwsgi 安装配置


在前面我们使用python manage.py runserver 0.0.0.0:8008来运行服务器,这只适用于测试环境中使用。正式发布的服务,需要一个可以稳定而持续的服务器。

在使用Django+Nginx+uwsgi部署时,请确保简单部署没问题。还是在虚拟环境venv2里部署。

1.进入虚拟环境venv2,安装uwsgi,Apitest为我的django项目名,表明我现在在项目的根目录下。

(venv2) [root@HH Apitest]# pip3 install -i https://pypi.douban.com/simple uwsgi

检查uwsgi的版本

(venv2) [root@HH Apitest]# uwsgi --version
2.0.18

2.通过uwsgi启动django项目(uwsgi不处理static静态文件的配置)

确保当前的路径为项目根目录下,也就是和manage.py文件同级,注意--http后面有空格

(venv2) [root@HH Apitest]# uwsgi --http :9001 --module Apitest.wsgi
*** Starting uWSGI 2.0.18 (64bit) on [Sun Oct  6 14:33:07 2019] ***
compiled with version: 4.8.5 20150623 (Red Hat 4.8.5-39) on 06 October 2019 05:24:14
os: Linux-3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019
nodename: HH
machine: x86_64
clock source: unix
  • --http   指明是http协议
  • :9001  指定端口号
  • --module Apitest.wsgi 加载指定的wsgi模块,根据自己的项目名称自己指定

访问我们的django自带的后台,静态文件不加载

启动后查看进程

[root@HH ~]# ps -ef | grep uwsgi

补充:大家都知道pycharm会自动检测django项目,如果代码有变动,会自动重启,uswgi也可以,加上一个参数就可以了

(venv2) [root@HH Apitest]# uwsgi --http :9001 --module Apitest.wsgi --py-autoreload=1

--py-autoreload是告诉uwsgi自动重启加载django项目,1表示为True

我们可以把上面的配置也在文件里,通过配置文件启动,uwsgi支持ini、xml等多种配置方式,本文以 ini 为例, 在项目的根目录下(和manage.py)创建一个uwsgi.ini文件,写入下面内容

[uwsgi]
# 项目的绝对路径,定位到项目的第一层,我的项目是放在tmp下
chdir           = /tmp/Apitest# 指明项目的wsgi文件路径
module          =Apitest.wsgi
# 指明你的虚拟解释器的第一层路径
home            = /root/Envs/venv2
#指明通过uwsgi,启动多少个进程
processes       = 5
#如果你已经配置了nginx(启动了nginx服务,配置了uwsgi_pass),请用这个socket连接
#socket          = 0.0.0.0:8000
#如果你没用nginx,想通过uwsgi直接启动web服务,指明http协议
http = 0.0.0.0:9999
#在退出uwsgi环境后,清空环境变量
vacuum          = true

然后就可以通过下面命令启动了

(venv2) [root@HH Apitest]# uwsgi --ini uwsgi.ini

注意uwsgi不会处理静态文件,如果有,也是浏览器的缓存

3.配置django的settings.py,收集所有Apitest项目所需的静态文件

在settings.py配置文件加下面一行

STATIC_ROOT='/tmp/static/'    #  路径自己指定

执行命令

python manage.py collectstatic

此时Apitest的所有静态文件,都跑到/tmp/static/底下了

4.配置nginx

配置一个网站入口,当用户访问192.168.88.67:80 这个web应用时,自动将请求转发给uwsgi,uwsgi处理后,返回给nginx,返回给用户

当请求是192.168.88.67:80的时候,其实访问的是192.168.88.67:9999  这是动态请求,因为我是找到的uwsgi

确保nginx启动的

配置文件

nginx.conf配置如下

#定义负载均衡池,里面放入uwsgi的地址
    upstream Api{
        server 127.0.0.1:8000;
}
    server {
       listen 80;
       server_name  localhost;
       # 将nginx入口的请求,直接反向代理给uwsgi
       location / {
         uwsgi_pass  Api;
         include /opt/nginx1-16/conf/uwsgi_params;
}
    # 通过nginx处理nbcrm的静态文件
    location /static {
        alias /tmp/static/;
        }
    }

我的nginx的配置文件,仅供参考

检查配置文件,加载配置文件

(venv2) [root@HH sbin]# ./nginx -t
(venv2) [root@HH sbin]# ./nginx -s reload
(venv2) [root@HH sbin]# ./nginx

5.更改uwsgi.ini ,指明socket连接,结合uwsgi 和nginx

如果你已经配置了nginx,请用这个socket连接socket = 0.0.0.0:8000

[uwsgi]
#项目的绝对路径,定位到项目的第一层
chdir           = /tmp/LuffyBoy
#指明项目的wsgi文件路径
module          =LuffyBoy.wsgi
#指明你的虚拟解释器的第一层路径
home            = /root/Envs/venv2
#指明通过uwsgi,启动多少个进程
processes       = 5
#如果你已经配置了nginx(启动了nginx服务,配置了uwsgi_pass),请用这个socket连接
socket          = 0.0.0.0:8000    # 使用这个,将下面的http注释掉
#如果你没用nginx,想通过uwsgi直接启动web服务,指明http协议
#http = 0.0.0.0:9999
#在退出uwsgi环境后,清空环境变量
vacuum          = true

6.启动uwsgi.ini

(venv2) [root@HH Apitest]# uwsgi --ini uwsgi.ini

7.并且访问nginx的域名入口,查看是否能访问到uwsgi项目,并且静态文件是否正常

这样静态文件也加载上了


相关文章
|
5月前
|
NoSQL 关系型数据库 Linux
ERPNext 搭建教程:Linux 一键部署与维护
ERPNext 是一款开源免费的企业资源计划系统,适用于中小企业信息化管理。基于 Python 和 Frappe 框架开发,支持财务、销售、人力、库存等模块,具备高度可定制性。本文介绍如何通过 Websoft9 在 Linux 下快速部署 ERPNext,并提供环境配置、系统维护等实用建议,适合开发者和企业用户快速上手。
840 7
ERPNext 搭建教程:Linux 一键部署与维护
|
7月前
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
2445 57
|
5月前
|
存储 前端开发 应用服务中间件
Django 实战:静态文件与媒体文件从开发配置到生产部署
Django项目中,静态文件(Static Files)和媒体文件(Media Files)是两类不同用途的文件。本文详细介绍了它们的区别、配置方法以及在开发与生产环境中的处理方式,并结合用户头像上传功能进行实战演示,最后讲解了如何通过Nginx或OpenResty部署静态与媒体文件服务。
281 1
|
5月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
594 13
|
5月前
|
关系型数据库 Linux Nacos
Rocky Linux 部署 Docker 和 NACOS 实例
本文介绍在阿里云环境下基于 Rocky Linux 搭建 Docker 并部署 Nacos 的完整流程。涵盖 Docker 安装、镜像加速配置、网络设置及 MySQL 与 Nacos 容器的创建,适用于开发与生产环境。
808 1
|
7月前
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
422 41
|
7月前
|
开发框架 Java 关系型数据库
在Linux系统中安装JDK、Tomcat、MySQL以及部署J2EE后端接口
校验时,浏览器输入:http://[your_server_IP]:8080/myapp。如果你看到你的应用的欢迎页面,恭喜你,一切都已就绪。
537 17
|
7月前
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
170 18
|
7月前
|
开发框架 关系型数据库 Java
Linux操作系统中JDK、Tomcat、MySQL的完整安装流程以及J2EE后端接口的部署
然后Tomcat会自动将其解压成一个名为ROOT的文件夹。重启Tomcat,让新“植物”适应新环境。访问http://localhost:8080/yourproject看到你的项目页面,说明“植物”种植成功。
243 10

热门文章

最新文章