Linux - Django + Mysql + Nginx + uwsgi 部署项目 - 安装 nginx 服务器 - (1)

Django 项目生产环境配套教程链接

Linux - Django + Nginx + uWSGI 部署项目 - 安装 Python3.x -(2)

Linux - Django + Nginx + uwsgi 部署项目 - rpm 包安装 Mysql 5.x 服务器 - 删除 Mysql 服务器 - 解决创建新数据库的utf8编码问题(3)

Linux - Django + Nginx + uwsgi 部署项目 - 安装 uWSGI 服务器 -(4)

├── apps
│ ├── app1
│ └── app2
├── common
├── common_static
├── media
├── Myproject
├── simpleui
├── static
└── templates


序言

这里笔者先提个醒,如果是使用阿里云服务器,那么下面的防火墙端口配置,是否开放其实都没啥用,重点是阿里云服务器账号,即Web端那边是否配置了相应的端口开放,如果使用的是云服务器的话,实际在本机或远程 ssh 配置防火墙端口是没用的,当然这也是笔者的一个猜测,具体看你们的配置,笔者有过类似的情况。

项目思维逻辑

  1. nginx 服务器接收到浏览器发送过来的 http 请求,将包进行解析,分析 url 路由,转发请求(注意是转发,而不是处理请求);
  2. 静态文件请求:就直接访问用户给 nginx 服务器配置的静态文件目录,直接返回用户请求的静态文件 /static/
  3. 动态接口请求nginx 服务器就会将请求转发给 uWSGI 服务器,最后到达django处理请求

各模块作用:

nginx 服务器:是对外的服务器,外部浏览器通过url访问 nginxnginx 主要处理静态请求

uWSGI:是对内的服务器,主要用来处理动态请求

uwsgi:是一种对内的 web 协议,接收到请求之后将包进行处理,处理成 wsgi 可以接受的格式,并发给 wsgi

wsgi:是 python专用的 web 协议,根据请求调用应用程序(django)的某个文件,某个文件的某个函数

django 框架:是真正干活的,查询数据等资源,把处理的结果再次返回给wsgi 协议, WSGI 协议将返回值进行打包,打包成 uwsgi 协议能够接收的格式 (wsgi 协议大小写都可以
uWSGI 服务器接收 WSGI 发送的请求,并转发给nginx 服务器,nginx服务器最终将返回值返回给浏览器

这里的 uwsgi 看起来有点乱,不知道是 web 服务器,还是 web 协议,但在笔者看来,应该是 uWSGI 服务器,由这个中间件服务器,翻译相关的信息,再将其转发给相应的对象,而uwsgi 只是一个协议,是属于 uWSGI 服务器内的处理模块,用于解析两者(nginx 服务器 和 Django 应用)之间的信息,而 uWSGI 服务器充当一个转发机制,类似快递员。

总而言之,内部接收和转发的是 uWSGI 服务器,使用 uwsgi 协议进行处理,相当于物流公司一样,物流公司是 uWSGI 服务器,里面的员工相当于是 uwsgi 协议。

Django + uwsgi方案:

没有 nginx 服务器,而只有uWSGI的服务器,则会将 Internet请求直接交由 uWSGI 服务器处理,并反馈到 web 项目中。
nginx 服务器可以实现安全过滤防DDOS等保护安全的操作,并且如果配置了多台服务器,nginx 服务器可以保证服务器的负载相对均衡。
uWSGI 则是一个 web服务器,实现了WSGI协议(Web Server Gateway Interface),http协议等,它可以接收和处理请求,发出响应等。

所以只用uwsgi也是可以的。

nginx和uWSGI特点:

nginx 服务器的作用

  1. 反向代理,可以拦截一些web攻击,保护后端的web服务器
  2. 负载均衡,根据轮询算法,分配请求到多节点web服务器
  3. 缓存静态资源,加快访问速度,释放 web 服务器的内存占用,专项专用

uWSGI 服务器的作用

  1. 单节点服务器的简易部署
  2. 轻量级,好部署

为什么使用 nginx 服务器放在最前面,而不是发送给 uWSGI 服务器

项目架构配置

  1. 如果架构是 Nginx + uWSGI + APPuWSGI 服务器则是一个中间件服务器
  2. 如果架构是 uWSGI + APPuWSGI 服务器则是一个 Web + HTTP 服务器

http 请求 —> uWSGI 服务器 —> 通过 uwsgi 协议 处理并转发 —> WSGI 协议 —> APP

  1. uWSGI 服务器性能比 nginx 服务器差一些, nginx 服务器还提供反向代理、负载均衡、安全拦截等

在这里插入图片描述

打一个比方:

nginx 服务器比如是一个日本人,django项目比如是一个中国人
uwsgi 协议相当于日语,WSGI 协议相当于汉语
日本人如果想和中国人交流必须使用一个翻译官,这个翻译官必须要懂很多种语言
uWSGI 服务器:相当于就是一个既懂 uwsgi 协议(日语),又懂 WSGI 协议 (汉语) 的翻译官

项目环境

生产环境:

 cat /etc/redhat-release
 Centos 7.x

所需安装程序:

 pip list
 python 3.7.0
 django 3.2.15
 mysqlclient  2.1.1
 安装命令:pip install 

查看 nginx 服务器版本命令

 nginx -v
 nginx 1.x

查看 uWSGI 服务器 版本

 uwsgi --version
 uwsgi 2.x

一、安装 nginx 服务器

具体教程看连接 Linux安装nginx

安装时注意要点:

  1. 可以不用 mkdir 创建目录,其实默认情况下,nginx 的安装目录,便是教程里的 /usr/bin/nginx 目录,但是后面当使用 make install 命令时,可以自定义安装目录的,所以如果不想要默认目录,那么就得自己去 mkdir 一个自己想要安装 nginx 的目录,并且授权 755权限,命令如下:
 chmod -R 755 文件名(绝对路径目录)

eg:

 chmod -R 755 /home/XXX/Program/nginx

-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)

1. 权限划分详解

 7 - 5 - 5 = 4 + 2 + 1 - 4 + 1 - 4 + 1
 相当于       rwx      -  r-x  -  r-x
          用户创建者 - 用户所属的组 - 其他的用户
 rwxr-xr-x
 7 = 4 - 2 - 1  用户创建者      r - w - x  读 - 写 - 执行
 7 = 4 - 2 - 1  用户所属的组    r - w - x  读 - 写 - 执行
 7 = 4 - 2 - 1  其他的用户      r - w - x  读 - 写 - 执行

特别权限 4755
执行某文件时,也有 root 用户的权限

 chmod  4755 /home/XXX/Program/test

2. 安装 nginx 报错问题 ./configure: error: can not define uint32_t

解决方法:Shell 终端输入如下命令

 yum install kernel-headers kernel-devel gcc make -y

二、服务器项目内部配置常用命令

1、 whereis 查找安装路径命令

 whereis nginx

2、 配置防火墙,开放自定义端口监听

下面以 80 端口为例:

1. 查看防火墙是否开启

 systemctl status firewalld

在这里插入图片描述
启动防火墙后,默认没有开启任何端口,需要手动开启端口。nginx默认是80端口

1.1 查看防火墙已开放端口,有两条命令可以使用

命令1:

 sudo firewall-cmd --zone=public --list-ports

命令2:(推荐)

 firewall-cmd --list-all

2. 手动开启防火墙开放某端口的命令

 firewall-cmd --zone=public --add-port=80/tcp --permanent

命令含义:

 --zone             # 作用域 
 --add-port=80/tcp  # 添加端口,格式为:端口/通讯协议 
 --permanent        # 永久生效,没有此参数重启后失效

3. 手动关闭防火墙开放某端口的命令

 firewall-cmd --zone=public --remove-port=80/tcp --permanent

4. 重启防火墙服务使其配置生效

开启和关闭防火墙端口后,需要重启防火墙才生效

 systemctl restart firewalld.service

5. 解决服务端口占用问题

假设 80 端口被占用了,那么使用如下命令,查找占用该端口的进程,并 kill 了它。

 netstat -tunlp | grep 80

在这里插入图片描述

 kill -9 进程号

如上占用80端口的进程 pid 为 3848,所以 kill -9 3848 即可删除该进程,释放 80 端口。

3、重启 nginx 服务器命令

 nginx -s reload

上面的命令报错,则应该是未配置系统环境变量,当然也可以配置软连接,推荐使用软连接

1.配置 nginx 服务器的系统环境变量方法如下:

 vim /etc/profile

键盘输入 G
注意是大写的 G ,快速将光标切换到该文件的最后一行。

进入插入模式,按 i 键,在文件的最后一行写入如下内容:(看一下自己电脑的 nginx 安装的可执行文件的目录位置,使用 whereis 命令,请勿照搬

export PATH=$PATH:/usr/local/naginx/sbin

$PATH: 后是指定的 nginx 可执行文件的位置,即可以用 ./nginx 执行启动 nginx 服务器的可执行文件的位置。

2. nginx 服务器命令软连接配置 (推荐使用软连接)

这里自行选择目录,按实际情况选择目录,请勿照搬

 ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

软连接会在指定的位置如 /usr/bin/ 创建一个名为 nginx 的文件,但是其配置却是 /usr/local/nginx/sbin/nginx 的配置,所以利用这个特性,可以在项目目录内自行创建 nginx 服务器的 .conf 配置

例如:

ln -s /home/TestProject/test.conf  /usr/local/nginx/conf/nginx.conf

那么今后就可以在项目里面配置,nginx 服务器的 .conf 配置了。

当然原来的 nginx.conf 自然得删掉,不然会报出 File exists 错误

不用担心,在nginx/conf/ 目录下已经有备份过的 nginx.default 这是一个原版的 nginx.conf 的备份文件

特别注意:
这是一个同步的文件操作,在原来的文件修改了,那么软连接那边目录下的文件内容也会被修改,可以测试下,然后 cat 命令查看文件内容


三、服务器公网外部测试常用命令

1、curl 命令测试

1.1 获取当前本地服务器的公网 ip

curl ifconfig.me

nginx 参考链接

Linux 部署 nginx(下载、安装、启动)

linux下nginx重启命令是什么?

详解nginx的master进程和worker进程

详解linux下查看系统版本号信息的方法(总结)

服务器公网联通测试参考链接

阮一峰的网络日志 - curl 的用法指南

Linux查看公网IP和私网(内网)IP的方法

Linux netstat命令详解

Linux正确删除软链接

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu是一个自由开源的操作系统,其中有很多的工具和服务可以用于搭建与开发Web应用。其中,常用的Web应用栈是使用Nginx作为Web服务器UWSGI作为应用程序服务器Django作为Web框架,MySQL作为关系型数据库。 要安装和配置这些服务,需要进行以下步骤: 1. 安装Ubuntu操作系统,可以选择最新版本的Ubuntu LTS或者最新的Ubuntu发行版。 2. 安装Nginx服务,并配置Nginx服务器来处理并转发HTTP请求。这里可以使用apt-get install命令来安装Nginx包。 3. 安装UWSGI服务,并配置UWSGI服务器来处理Django应用程序。这里可以使用pip install命令来安装UWSGI包。 4. 安装Django,并编写一个基本的Django应用程序。然后配置UWSGI服务器以运行Django应用程序。可以使用pip install命令来安装Django包。可以使用此教程 - https://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html 5. 安装MySQL数据库服务,并配置MySQL服务器以使用Django应用程序。可以使用apt-get install命令来安装MySQL包。 6. 在Django应用程序中配置MySQL数据库连接参数,并创建 MySQL数据库及表。 7. 配置Nginx服务器以使用UWSGI服务器来处理Django应用程序。可以使用上面的教程来完成这一步骤。 8. 启动NginxUWSGI服务器,并测试Django应用程序是否可以访问。 在进行以上的步骤时,需要注意安全措施,防止 Web 应用程序被攻击和入侵。同时,也需要进行充分的测试,保证 Web 应用程序的稳定性和可用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值