CentOS7.9系统部署(nginx+uwsgi+flask)项目

news2024/11/18 3:49:08

一、概述

上次,我们介绍了如何将CentOS服务器自带的Python3.6.8版本升级到Python3.8.0版本,现在我们开始介绍如何将flask项目部署的CentOS7.9版本的Linux服务器上。

二、环境准备

2.1安装git

我们通常会将自己的项目托管在Github或者gitee平台,这样不仅方便版本控制,而且容易管理。但是我们使用这两个平台管理代码都需要通过Git进行。Linux下载命令如下:

yum -y install git

2.2创建虚拟环境

# python3 -m venv "环境名"
python3 -m venv env

# 激活虚拟环境
# source ./环境名/bin/activate
source ./env/bin/activate

# 安装依赖库
pip install XXX

# 退出虚拟环境
deactivate

2.3拉取代码

git clone "代码仓库链接"

三、直接部署

python3 blog.py

在这里插入图片描述
运行成功后,可以通过其他电脑访问(前提是服务器的3000端口已经开启

四、nginx部署

4.1安装nginx(使用编译安装方式)

若是命令安装:

sudo yum install nginx

下载nginx安装包网址:http://nginx.org/en/download.html
在这里插入图片描述
复制指定版本安装地址后,用wget命令下载

deactivate # 退出虚拟环境(同时会退出项目文件夹)

# 在项目文件夹同级目录创建nginx文件夹用于安装
mkdir nginx
cd nginx

# 安装依赖环境
yum install gcc gcc-c++ pcre-devel zlib-devel open-devel -y

# 下载安装包
wget http://nginx.org/download/nginx-1.20.2.tar.gz

# 解压
tar xf nginx-1.20.2.tar.gz  
cd nginx-1.20.2

# 配置、并指定安装目录
./configure --prefix=/usr/local/nginx

# 编译(注意:不要使用make clean命令清除,否则报错)
make build

# 安装
make install 

4.2启动nginx

cd /usr/local/nginx/  # 进入安装nginx的目录 可以看到一个sbin目录
cd sbin  # 进入sbin目录可以看到一个绿色的名为nginx的可执行文件
./nginx  # 运行启动
ps -ef|grep nginx    # 查看进程,确认已经启动 
cd ..
vim nginx.conf   # 查看nginx配置 默认监听80端口
#(确保80端口是开启状态才能通过服务器地址:80端口(192.168.0.37:80)访问)

###### 查看已经开启端口
firewall-cmd --permanent --list-port
###### 开启80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
###### 重启防火墙
service firewalld restart

在这里插入图片描述

CentOS7 防火墙开启常见端口命令:Centos 7防火墙开放端口方法

设置nginx为系统服务

截止现在:
nginx安装目录:/usr/local/nginx
nginx.pid目录:/usr/local/nginx/logs/nginx.pid
nginx配置目录:/usr/local/nginx/conf/nginx.conf
nginx启动目录:/usr/local/nginx/sbin/ 启动命令:./nginx

在/usr/lib/systemd/system/ 目录创建一个配置文件 nginx.service

mkdir /usr/lib/systemd/system/nginx.service

在创建的nginx.service写入下面命令

[Unit]
Description=nginx - high performance web server 
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid                                                                                                                              
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
# 赋予脚本执行权限
chmod +x /usr/lib/systemd/system/nginx.service
# 设置nginx.service为系统服务
systemctl enable nginx.service
# 若nginx.service不在当前目录,记得加上路径
systemctl enable /usr/lib/systemd/system/nginx.service

##通过系统服务操作nginx
systemctl start nginx.service
systemctl reload nginx.service
systemctl restart nginx.service
systemctl stop nginx.service

systemctl start nginx
systemctl reload nginx
systemctl restart nginx
systemctl stop nginx

systemctl status nginx # 查看nginx服务状态

CentOS后台执行(nohup命令)

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。
nohup命令详解链接:nohup命令详解

nohup python blog.py > ./flask.log 2>&1 &    

命令解释:

  • 2>&1:把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件flask.log里面,所以结果是标准错误和标准输出都导入文件flask.log里面了。
  • 最后面的&:表示即使terminal(终端)关闭,或者电脑死机程序依然运行(前提是你把程序递交到服务器上)
jobs # 查看后台任务
kill %(jobs命令查看的进程号)

在这里插入图片描述

nginx转发请求到flask

保持flask项目为后台运行状态,然后打开nginx配置文件

cd /usr/local/nginx/conf/
vim nginx.conf

注:vim显示行索引:set number
在这里插入图片描述

配置nginx.conf文件
在这里插入图片描述
配置完成后测试nginx
因为我们没有配置软连接,所以测试或启动需要先进入:/usr/local/nginx/sbin/ 目录

./nginx -t 

在这里插入图片描述

测试成功后重启nginx服务

systemctl reload nginx

在这里插入图片描述
可以看到,成功跳转到了我们的项目页面(3000端口)
在这里插入图片描述

给nginx添加软连接

为了方便我们操作,不用每次测试或者启动都跑到nginx/sbin目录去执行 “./nginx”,我们现在来添加nginx命令的软连接

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

添加后,去到任意目录可以使用nginx命令了。

uwsgi

安装uwsgi

进入虚拟环境直接用pip3命令安装
在这里插入图片描述

pip3 install uwsgi

安装完成后给uwsgi添加软链接,首先要知道uwsgi的位置,通过下面命令寻找

find / -name uwsgi # 从根目录/开始找,通过名字

在这里插入图片描述
添加软连接:

ln -s /opt/flask_blog/env/bin/uwsgi /usr/bin/uwsgi

安装完成后,在项目的文件中创建一个uwsgi.ini配置文件

cd /opt/flask_blog/ # 确保位置在项目文件中
vim uwsgi.ini  
[uwsgi]
# 主进程
master=true
# 进程数
processes=1
# 线程数
threads=20
#配置工程目录
chdir =/opt/flask_blog/
# flask项目app文件所在的位置
wsgi-file=/opt/flask_blog/blog.py
# app实例的名字
callable=app
# 是否启用多线程
enable-threads=True
# socket文件指定的位置
socket = /opt/flask_blog/uwsgi.sock
# 监听地址
socket = 127.0.0.1:3000
# 给权限
chmod-socket = 777
# 结束pid的时候自动清理pid和sock文件
vacuum = true
# 指定python虚拟环境位置
virtualenv = /opt/flask_blog/env/
# 守护和日志
daemonize=/opt/flask_blog/uwsgi.log
# pid进程保存目录
pidfile=/opt/flask_blog/uwsgi.pid
# 每个进程单独价值flask
lazy-apps = true
# 禁用访问日志
disable-logging = true
# 一个进程处理多少个请求后重启一次
max-requests = 1000
# 日志最大容量多少
log-maxsize = 5000000
gid = root
uid = root

在这里插入图片描述
uwsgi常用命令

# 需要提前配置号软连接
uwsgi --ini uwsgi.ini # 指定配置文件启动
uwsgi --reload uwsgi.pid # 重启
uwsgi --stop uwsgi.pid # 关闭

启动uwsgi

uwsgi --ini ./uwsgi.ini  # 确保uwsgi.ini在当前目录

在这里插入图片描述
启动成功
在这里插入图片描述

启动成功后,当前目录产生了上面这三个文件。

截止到此,uwsgi配置完成。uwsgi已经成功对接flask服务,但是,现在uwsgi与nginx还相互不认识,接下来我们需要开始重新配置nginx对接现在的uwsgi。

nginx对接uwsgi

关闭后台运行的flask应用,关闭方法:需要找到对应的PID,然后kill掉

ps -aux|grep blog.py     # 查看进程
kill -9 11444            # 杀死进程                                                                               

在这里插入图片描述
关闭后:
在这里插入图片描述

在这里插入图片描述
关闭成功后:nginx的80端口和flask应用的3000端口都访问不了。

下面开始将nginx与uwsgi对接,到conf目录,打开nginx.conf配置文件

cd /usr/local/nginx/conf/
vim nginx.conf

在这里插入图片描述

将上面的内容改为:

include uwsgi_params;                                                                                                                            
uwsgi_pass unix:///opt/flask_blog/uwsgi.sock; # uwsgi_pass unix://‘sock文件路径’

在这里插入图片描述
修改保存后,启动uwsgi,重启nginx

uwsgi --ini ./uwsgi.ini  # 确保uwsgi.ini在当前目录
systemctl reload nginx

即可重新访问80端口:
在这里插入图片描述

部署架构

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/63303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

地址锁存器,总线控制器,双向总线驱动器(数据缓冲器),时钟发生器。8088最小工作模式。

这几个芯片你知道它叫什么干什么用,跟CPU怎么接就可以。一般就是考填空 目录 这几个芯片你知道它叫什么干什么用,跟CPU怎么接就可以。一般就是考填空 地址锁存器(74LS373,8282) 数据缓冲器 8286,74LS24…

Spring MVC 常用注解的使用

ResponseBody 由于 Spring MVC 是基于 MVC 这个设计模式的,所以在不加上注解的情况下,页面和前端交互的时候返回的默认是一个视图 View,或者说静态页面,而实际上用的比较多的是将处理完的数据发送给前端,所以我们可以…

第五章. 可视化数据分析分析图表—常用图表的绘制2—直方图,饼形图

第五章. 可视化数据分析分析图 5.3 常用图表的绘制2—直方图,饼形图 本节主要介绍常用图表的绘制,主要包括直方图,饼形图。 1.直方图(matplotlib.pyplot.hist) 直方图,又称质量分布图,一般用横…

[附源码]JAVA毕业设计农产品的物流信息服务平台(系统+LW)

[附源码]JAVA毕业设计农产品的物流信息服务平台(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 …

MyBatis开发的详细步骤

推荐教程:SSM框架 一、什么是Mybatis 1.mybatis 是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。 2.mybatis通过x…

Windows下使用labelme标注图像

安装参考链接:https://github.com/wkentaro/labelme 一、安装Anaconda Windows下安装labelme需要借助Anaconda环境,安装很简单 https://www.anaconda.com/download/ 先进入官网,然后点击Windows系统版本 下载完成之后,就按照提…

[附源码]计算机毕业设计社区生活废品回收APPSpringboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

网站都变成灰色,其实几行代码就搞定了!

最近,全站和各个App的内容都变成了灰色,包括按钮、图片等等。 这时候我们可能会好奇这是怎么做到的呢? 有人会以为所有的内容都统一换了一个 CSS 样式,图片也全换成灰色的了,按钮等样式也统一换成了灰色样式。但你想想…

Java入门教程(11) ——基本数据类型

文章目录1.数据类型22.1 整型2.2 浮点型2.3 字符型2.4 布尔型1.数据类型 分为基本数据类型和引用数据类型 如图示: 2 2.1 整型 byte 1字节 short 2 字节 int 4字节 long 8字节. Java 整型常数默认为 int 型,声明 long 型常量可以后加‘ l ’或‘ L ’…

kube-OVN总体架构

本文档将介绍 Kube-OVN 的总体架构,和各个组件的功能以及其之间的交互。 总体来看,Kube-OVN 作为 Kubernetes 和 OVN 之间的一个桥梁,将成熟的 SDN 和云原生相结合。 这意味着 Kube-OVN 不仅通过 OVN 实现了 Kubernetes 下的网络规范&#x…

热销产品缺货,滞销产品积压?WMS系统如何打造智能仓储

仓库是企业物流系统中的一个关键环节,涵盖出库、入库、质检等各个流程。传统的仓储模式单一、反应迟钝,难以适应企业的数字化经营要求。 如何在最小的人力资源下,最大限度地发挥仓库的价值,在最小的成本下,最大限度地利…

【服务器数据恢复】Zfs文件系统误删除数据的数据恢复案例

服务器故障: 一台zfs文件系统服务器,运维人员误操作删了服务器上的数据,用户联系到我们数据恢复中心要求恢复数据。 服务器数据恢复过程: 1、服务器数据恢复工程师对故障服务器所有硬盘进行扇区级镜像备份,后续的数据…

Kafka核心技术与实战 04

Kafka 不再是一个单纯的消息引擎系统,而是能够实现精确一次(Exactly-once)处理语义的实时流处理平台。 Kafka版本 Apache Kafka,也称社区版 Kafka。优势在于迭代速度快,社区响应度高,使用它可以让你有更高…

美团一面:为什么线程崩溃崩溃不会导致 JVM 崩溃

网上看到一个很有意思的美团面试题:为什么线程崩溃崩溃不会导致 JVM 崩溃,这个问题我看了不少回答,但发现都没答到根上,所以决定答一答,相信大家看完肯定会有收获,本文分以下几节来探讨 线程崩溃&#xff0…

公众号美食文案怎么写?怎么写才能吸引人?

美食类公众号的文案还是比较难写的,毕竟文案没有图片那么直观,让用户看着就有食欲。 公众号美食文案怎么写?怎么写才能吸引人?怎么写才能在字里行间透露着美食的诱惑力? 作为一个有着十年丰富经验的文案人&#xff0c…

Java编程最常见的208道面试题,一文解析

相比与这些问题,我的这 208 道面试题具备以下优点: 披沙拣金提炼出每个 Java 模块中最经典的面试题;答案准确,每个题目都是我仔细校对过的;接近最真实的企业面试,题目实用有效果;难懂的题目&am…

SAP IDoc状态70 - This IDoc is saved as the original of an edited document.

SAP IDoc状态70 - This IDoc is saved as the original of an edited document. 根据SAP的标准逻辑,一个IDoc一旦被修改了,SAP系统会自动创建一个新的IDoc(状态70)来存储IDoc修改日志。 比如idoc # IDoc 208828452,由于库存不够,所…

SQL注入【SQLi-LABS Page-1(Basic Challenges Less1-Less22)】

文章目录前言sqlmapless-1(基于错误的GET单引号字符型注入)less-2(基于错误的GET整型注入)less-3(基于错误的GET单引号变形注入)less4(基于错误的GET双引号字符型注入)less5&#xf…

Docker的资源管理控制(CPU、内存、磁盘IO配额)

目录 一、CPU 资源控制 1、设置CPU使用率上限 (1)查看CPU使用率 (2)进行CPU压力测试 (3)设置CPU使用率 2、设置CPU资源占用比(设置多个容器时才有效) 3、设置容器绑定指定的CP…

word如何转化成pdf,最新图文教学,学会只需1分钟

​在日常生活中,我们经常会遇到需要将word文档转换成PDF格式的情况。那word如何转化成pdf呢?word文件转换成PDF并不难,只要你操作正确,就可以将其快速地转化成PDF。下面就给大家分享一下操作步骤吧。 一、第一步,打开需…