在Linux中部署Flask+Gunicorn+Nginx

news2024/11/25 2:44:33

flask是一个轻量级的基于Werkzeug和Jinja2模板引擎的Web应用框架。gunicorn能与很多Web框架兼容,执行起来很简单,资源消耗很少,并且运行速度很快。

flask+gunicorn+nginx部署在公网IP为x.x.x.x的服务器上。

flask需要部署在Python3的环境中。

gunicorn需要安装在virtualenv环境中。

nginx安装

第一步,安装编译工具及库文件。

命令:yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel pcre pcre-devel

第二步,安装Nginx。

# 下载Nginx安装包

命令:cd /usr/local/src/

wget http://nginx.org/download/nginx-1.18.0.tar.gz

# 解压Nginx安装包

命令:tar zxvf nginx-1.18.0.tar.gz

# 编译安装Nginx

命令:cd nginx-1.18.0

./configure \

--prefix=/usr/local/nginx \

--sbin-path=/usr/sbin/nginx \

--conf-path=/etc/nginx/nginx.conf \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--pid-path=/var/run/nginx.pid \

--lock-path=/var/run/nginx.lock \

--http-client-body-temp-path=/var/tmp/nginx/client \

--http-proxy-temp-path=/var/tmp/nginx/proxy \

--http-fastcgi-temp-path=/var/tmp/nginx/fcgi \

--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \

--http-scgi-temp-path=/var/tmp/nginx/scgi \

--with-pcre \

--with-http_v2_module \

--with-http_ssl_module \

--with-http_realip_module \

--with-http_addition_module \

--with-http_sub_module \

--with-http_dav_module \

--with-http_flv_module \

--with-http_mp4_module \

--with-http_gunzip_module \

--with-http_gzip_static_module \

--with-http_random_index_module \

--with-http_secure_link_module \

--with-http_stub_status_module \

--with-http_auth_request_module \

--with-mail \

--with-mail_ssl_module \

--with-file-aio \

--with-http_v2_module \

--with-threads \

--with-stream \

--with-stream_ssl_module

make && make install

# 查看nginx版本

命令:/usr/sbin/nginx -v

或    /usr/sbin/nginx -V

若结果显示“nginx version: nginx-1.18.0”,则nginx安装完成。

nginx配置

第一步,创建 Nginx 运行使用的用户nginx。

命令:useradd -s /sbin/nologin -M nginx

第二步,修改nginx.conf配置文件。

nginx.conf路径为/etc/nginx/nginx.conf。nginx.conf内容如下:

user nginx nginx;  #用户名设置为刚刚创建的用户名

worker_processes  4; #允许生成的进程数,默认为1

worker_cpu_affinity 0001 0010 0100 1000;

error_log  /var/log/nginx/error.log info; #日志位置和级别

pid      /var/run/nginx.pid; #指定nginx进程运行文件存放地址

worker_rlimit_nofile 102400; #最大连接数,默认为512

events {

    use epoll; #事件驱动模型

    worker_connections 102400; #最大连接数,默认为512

    accept_mutex off; #设置网路连接序列化,防止惊群现象发生,默认为on

    multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off

}

http

{

      include mime.types;

      default_type application/octet-stream;

      ...

      server

      {

        listen 80;  #监听端口

        server_name localhost;  #域名,当前IP地址

        #charset utf-8;  #编码改为utf-8

        location / {

            root   html;

            index  index.html index.htm;

        }

    ...

}

第三步,检查配置文件nginx.conf的正确性。

命令:/usr/sbin/nginx -t

若结果显示“nginx: [emerg] mkdir() "/var/tmp/nginx/client" failed (2: No such file or directory)  nginx: configuration file /etc/nginx/nginx.conf test failed”,则说明服务无法启动。可以使用命令“mkdir -p /var/tmp/nginx”创建目录,然后再次运行命令“/usr/sbin/nginx -t”就可以了。

若结果显示“nginx: configuration file /etc/nginx/nginx.conf test is successful”,则说明nginx安装和配置成功。

nginx启动和访问站点

第一步,启动nginx。

命令:/usr/sbin/nginx

第二步,检查是否已经启动。(查看是否有进程)

命令:ps -ef | grep nginx

结果的第一行显示“nginx:master process”,nginx已经启动。

注意:nginx:master process后面有一个路径,这就是nginx的安装路径。

第三步,访问站点。

从浏览器访问已经配置好的站点IP,如果页面显示“Welcome to nginx!”,则说明Nginx已经安装及配置好了。

nginx关闭和重启

第一步,关闭nginx。

命令:/usr/sbin/nginx -s stop

第二步,配置文件修改后,需要指定配置文件进行重启。

如果nginx服务已经停止,那就需要把nginx服务启动。

命令:/usr/sbin/nginx  -c /etc/nginx/nginx.conf

重启nginx服务必须是在nginx服务已经启动的情况下进行,因为这时,/var/run中存在nginx.pid文件。

命令:/usr/sbin/nginx  -s  reload

不进入nginx根目录即可进行相应的操作

第一种方法:

第一步,找到nginx所在的安装目录/usr/local/nginx/sbin,这个目录下有一个名为nginx的文件。

第二步,创建一个软链接放在全局目录中。相当于在全局环境中设置了一个文件指向依赖的环境目录中。

命令:cd /usr/local/bin/

ln -s /usr/sbin/nginx nginx

现在不进入nginx根目录输入命令,不会再提示command not found。

第二种方法:

第一步,新建nginx启动脚本代码。

在文件夹/etc/init.d中新建名为nginx的文件,然后写入下面代码成为脚本文件。代码如下:

#!/bin/bash

# nginx Startup script for the Nginx HTTP Server

# it is v.0.0.2 version.

# chkconfig: - 85 15

# description: Nginx is a high-performance web and proxy server.

#              It has a lot of features, but it's not for everyone.

# processname: nginx

# pidfile: /var/run/nginx.pid

# config: /usr/local/nginx/conf/nginx.conf

nginxd=/usr/sbin/nginx

nginx_config=/etc/nginx/nginx.conf

nginx_pid=/var/run/nginx.pid

RETVAL=0

prog="nginx"

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

[ -x $nginxd ] || exit 0

# Start nginx daemons functions.

start() {

if [ -e $nginx_pid ];then

   echo "nginx already running...."

   exit 1

fi

   echo -n $"Starting $prog: "

   daemon $nginxd -c ${nginx_config}

   RETVAL=$?

   echo

   [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx

   return $RETVAL

}

# Stop nginx daemons functions.

stop() {

        echo -n $"Stopping $prog: "

        killproc $nginxd

        RETVAL=$?

        echo

        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid

}

# reload nginx service functions.

reload() {

    echo -n $"Reloading $prog: "

    #kill -HUP `cat ${nginx_pid}`

    killproc $nginxd -HUP

    RETVAL=$?

    echo

}

# See how we were called.

case "$1" in

start)

        start

        ;;

stop)

        stop

        ;;

reload)

        reload

        ;;

restart)

        stop

        start

        ;;

status)

        status $prog

        RETVAL=$?

        ;;

*)

        echo $"Usage: $prog {start|stop|restart|reload|status|help}"

        exit 1

esac

exit $RETVAL

第二步,给予/etc/init.d/nginx文件权限。

命令:chmod +x /etc/init.d/nginx

# 设置开机自启

命令:chkconfig --add nginx

chkconfig nginx on

# 检查nginx命令

命令:service nginx

Usage: nginx {start|stop|restart|reload|status|help}

第三步,检查一下脚本是否有用。

命令:/sbin/chkconfig nginx on

sudo /sbin/chkconfig --list nginx

如果结果显示“nginx 0:off 1:off 2:on 3:on 4:on 5:on 6:off”,则说明脚本文件有用。

第四步,服务器重启后,查看nginx是否成功自动启动。

与“nginx启动和访问站点”中的第二步和第三步一样操作。

命令:shutdown -r now  #立刻重启

或    reboot           #立刻重启

或    init 6           #立刻重启

或    shutdown -r 10   #过10分钟自动重启

第五步,nginx启动、关闭以及重启命令。

命令:ps -ef | grep nginx

systemctl start nginx

systemctl stop nginx

systemctl reload nginx

service nginx start

service nginx stop

service nginx reload

Python-3.9.5安装

第一步,检查Linux系统是否自带Python。

命令:python --version

  

第二步,安装依赖包。

命令:yum -y install bzip2-devel gcc make ncurses-devel openssl-devel readline-devel sqlite-devel tk-devel zlib-devel

第三步,下载Python-3.9.5安装包。

命令:cd /usr/local/src

wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz

第四步,解压Python-3.9.5安装包。

命令:cd /usr/local/src

tar -xvJf Python-3.9.5.tar.xz

第五步,编译安装Python-3.9.5。

命令:cd /usr/local/src/Python-3.9.5

./configure prefix=/usr/local/Python-3.9.5

make && make install

若结果显示下图的内容,则说明Python-3.9.5编译安装成功。

  

第六步,配置Python环境变量。

在配置文件/etc/profile中添加下面的代码:

export PATH=$PATH:/usr/local/Python-3.9.5/bin

# 使profile配置立即生效

命令:source /etc/profile

# 查看Python版本

命令:python3.9 -V

若结果显示“Python 3.9.5”,则说明Python-3.9.5安装成功。

pip安装

第一步,检查Python3是否自带pip。

命令:pip3 --version

若结果显示“pip 9.0.3”,则说明Python3自带pip。

  

第二步,更新pip。

命令:sudo pip3 install --upgrade pip

若结果显示“Successfully installed pip-21.1.1”,则说明pip更新成功。

第三步,查看更新的pip版本。

命令:python3.9 -m pip -V

  

virtualenv安装以及工作原理

virtualenv如何创建“独立”的Python运行环境,原理很简单,就是把安装的Python复制一份到virtualenv环境,然后进入一个virtualenv环境,virtualenv会修改相关的环境变量,这样就会让python和pip指向当前的virtualenv环境。

第一步,安装virtualenv和virtualenvwrapper。

命令:pip3 install virtualenv virtualenvwrapper

若结果显示“Successfully”,则说明virtualenv和virtualenvwrapper安装成功。

  

第二步,创建独立运行环境。

# 新建项目目录

命令:mkdir /usr/local/Myproject

# 创建独立第三方包的运行环境VENV

命令:cd /usr/local/Myproject

virtualenv VENV

第三步,设置环境变量。

在文件~/.bash_profile中添加下面两行代码:

export WORKON_HOME=/usr/local/Myproject/VENV

source /usr/local/bin/virtualenvwrapper.sh

# 使环境变量生效

命令:source ~/.bash_profile

  

第四步,进入并激活虚拟环境(VENV)Myproject。

命令:cd /usr/local/Myproject

source VENV/bin/activate

参数说明:

VENV/bin/activate:安装虚拟环境下的bin目录下的activate。

第五步,在(VENV)Myproject中创建、列出和切换虚拟环境。

# 创建虚拟环境格式:mkvirtualenv [虚拟环境名称]

命令:mkvirtualenv venv

mkvirtualenv venv1

mkvirtualenv venv2

# 列出虚拟环境

命令:lsvirtualenv

# 切换虚拟环境格式:workon [虚拟环境名称]

命令:workon venv1

workon venv2

workon venv

 

第六步,在(VENV)Myproject中检查环境变量PATH确认是否正确激活了虚拟环境VENV。

命令:workon venv

echo $PATH

workon venv1

echo $PATH

workon venv2

echo $PATH

若结果显示下图中的内容,则说明正确激活了虚拟环境VENV。

  

第七步,在(VENV)Myproject中安装flask。

# 通过pip3安装的包都会安装到虚拟环境VENV中

命令:workon venv

pip3 install flask

若结果显示“Successfully”,则说明flask安装成功。

  

workon venv1

pip3 install flask

若结果显示“Successfully”,则说明flask安装成功。

  

workon venv2

pip3 install flask

若结果显示“Successfully”,则说明flask安装成功。

  

第八步,在(VENV)Myproject中检查当前的python3和pip3的路径。

命令:workon venv

which python3

which pip3

workon venv1

which python3

which pip3

workon venv2

which python3

which pip3

  

第九步,退出虚拟环境(VENV)Myproject。

命令:deactivate

Gunicorn安装

第一步,在/usr/local/Myproject目录下新建wsgi.py文件。

命令:vim /usr/local/Myproject/wsgi.py

在wsgi.py文件中添加下面的代码:

# wsgi.py

from flask import Flask

def create_app():

   # 这个工厂方法可以从原有的`__init__.py`或者其它地方引入

   app = Flask(__name__)

   return app

application = create_app()

if __name__ == '__main__':

application.run()

第二步,进入并激活虚拟环境(VENV)Myproject。

命令:cd /usr/local/Myproject

source VENV/bin/activate

第三步,在(VENV)Myproject中安装Gunicorn。

# 通过pip3安装的包都会安装到虚拟环境VENV中

命令:workon venv

pip3 install gunicorn

workon venv1

pip3 install gunicorn

workon venv2

pip3 install gunicorn

若结果显示“Successfully installed gunicorn-20.1.0”,则说明gunicorn安装成功。

第四步,在(VENV)Myproject中运行Gunicorn。

命令:workon venv

gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application

workon venv1

gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application

workon venv2

gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application

deactivate

只要gunicorn运行成功,就会具体host一个flask实例。

参数注释:

wsgi:application参数分为两部分:wsgi是刚刚新建的起引导作用的python文件的名称,application是flask实例的名称。

nginx配置

第一步,备份配置文件nginx.conf。

命令:cp -pr /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

第二步,在nginx.conf中进行修改。

在server{}节点中做出下面的修改:

server {

            listen 80;

            # 服务器的外部域名,使用地址也可以

            server_name localhost;

            location / {
    
                  # 指向gunicorn host的服务地址

                  proxy_pass http://127.0.0.1:8080;

                  proxy_set_header Host $host;

                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

           }

}

第三步,重启nginx。

命令:nginx -t

ps -ef | grep nginx

service nginx reload

将Gunicorn作为服务程序运行

采用UpStart来配置flask程序作为服务程序,该服务程序在服务器启动时运行。

第一步,在/etc/init/目录下新建配置文件myflask.conf。

命令:vim /etc/init.d/myflask.conf

在myflask.conf中加入下面的代码:

description "The myflask service"

start on runlevel [2345]

stop on runlevel [!2345]

respawn

setuid root

setgid www-data

# virtualenv路径和项目路径

env PATH= /usr/local/Myproject/VENV/venv/bin

env PATH= /usr/local/Myproject/VENV/venv1/bin

env PATH= /usr/local/Myproject/VENV/venv2/bin

chdir /usr/local/Myproject/

exec gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application

第二步,授予/etc/init.d/myflask.conf文件权限。

命令:chmod +x /etc/init.d/myflask.conf

第三步,启动myflask服务。

命令:service myflask start

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

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

相关文章

KingIOServer采集杰控OPC UA服务器数据测试

哈喽,大家好,我是雷工! 上一篇测试了同一台电脑上,KingIOServer采集杰控OPC DA服务器数据,本篇测试用KingIOServer采集杰控OPC UA服务器数据。 以下记录测试过程。 一、 KingIOServer的OPC UA数据采集介绍 KingIOSer…

少儿英语-思维导图学语法-特殊名词变复数

“通过思维导图,轻松学语法” 正文: 今天我们将一起探索英语中那些特殊的名词复数形式。学习特殊名词的复数变换可以让我们的英语更加地道和流利。让我们来看看一些有趣的例子吧! "Man" 变成 "Men" 你可能已经知道 &q…

【数据结构与算法】1、学习动态数组数据结构(基本模拟实现 Java 的 ArrayList 实现增删改查)

目录 一、什么是数据结构(1) 概念(2) 分类 二、线性表三、数组(Array)(1) 数组的底层结构(2) 数组缺点 四、动态数组(Dynamic Array)接口设计五、动态数组的设计和基本代码实现(1) 成员变量(2) 代码① get ()② indexOf ()③ clea…

嵌入式实时操作系统的设计与开发New(二)

轮询系统 轮询系统也称为简单循环控制系统,是一种最简单嵌入式实时软件体系结构模型。 在单个微处理情况下,系统由多个函数完成,每个函数负责该系统的一部分功能。 这些函数被循环调用执行,即它们按照一个执行顺序构成一个单向的…

nand flash 介绍

flash名称由来 Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次性地将一个block,常见的块的大…

如何在VMware Workstation虚拟机上快速部署AntDB社区版

AntDB社区版采用了一键部署架构,步骤简单,耗时短,部署快,为大家的快速体验提供了极大便利。 这里将通过环境准备、下载AntDB社区版、部署AntDB社区版三个部分跟大家一起体验如何快速完成AntDB社区版在VMware Workstation虚拟机上…

(十二)反射与特性 -反射与预定义特性(1)

一、反射 1、什么是反射 了解反射之前,要先了解一下元数据。元数据指保存在程序集中的一些有关程序及其类型的数据,包括类、结构、委托、接口和枚举等)的成员和成员的信息。 程序在运行时,可以查看程序集以及其本身的元数据&…

babycrypt 自己出的第一道逆向题目 WP

Patch掉反调试 先进行了Base32解密,之后是RC4加密 Base32编码表是RC4加密后存储的,动调得到 动调可以看出,经过base32编码密文会在首部添加M7WGC76B 之后密文进行RC4加密 动调得到第二处RC4加密的密钥 解密过程 def rc4(data, key): S l…

面试题:分布式事务有哪些方案及运用场景

一、分布式事务概述 分布式事务是指涉及多个不同资源或数据库的事务处理,这些资源或数据库分布在不同的网络节点上,通过协调器将多个事务组合成一个分布式事务。分布式事务的目的是确保多个事务操作要么全部成功,要么全部失败,保…

白嫖Tesla T4 GPU玩转Stable Diffusion Webui

想要玩stable diffusion,算力不可少,白嫖google colab Tesla T4 GPU 玩转Stable Diffusion Webui 1、google colab上安装stable diffusion webui https://colab.research.google.com/drive/1qL5eD2VESnop8mrbFcHzMmfzqzmRMMF4?uspsharing 在google col…

提高代码调试能力——IDEA debug技巧

一、文章概述 idea debug调试的一些方法 二、按键简单介绍 如上如是debug时的按钮,标上序号便于说明。 1、重新开始调试 图中是已开是debug模式,不管你此时调试到哪个地方,此时点击1就可以重新开始运行程序调试:等价于&#x…

vue配置反向代理的使用

反向代理:常用于生产环境,项目部署时服务器的配置。 反向代理:同样创建一个代理服务器,用于接收客户端发送的请求,再将请求转发给内部网络上的服务器,从服务器中获取数据并返回给客户端。也就是 代理服务端…

一文了解:计算机视觉领域下自监督学习方法原理

计算机视觉领域下自监督学习方法原理 导语为什么在计算机视觉领域中进行自我监督学习? 自监督学习方法Generative methodsBEiT 架构 Predictive methodsContrastive methodsBootstraping methodsSimply Extra Regularization methods 导语 自监督学习是一种机器学习…

【NLP】从双曲面到双曲几何庞加莱盘

一、说明 在研究双曲空间的时候,不能不遇到双曲面的问题。双曲几何在什么样的双曲面建立?其它几何元素在双曲面的表现。庞加莱盘不是双曲几何的一部分,而是一个投影平面,自然语言处理中,图网络不是卷积神经网络。本篇从双曲方程开始,展开双曲空间的探讨。 二、双曲面总论…

数据库系统概述——第四章 数据库安全性(知识点复习+练习题)

🌟博主:命运之光 🦄专栏:离散数学考前复习(知识点题) 🍓专栏:概率论期末速成(一套卷) 🐳专栏:数字电路考前复习 🦚专栏&am…

【汤4操作系统】深入掌握操作系统-输入输出系统篇

第五章 输入输出系统 I/O系统简介 设备管理对象:主要是IO设备 设备管理的基本任务:完成用户提出的IO请求,提高IO速率以及改善IO设备的利用率 主要功能有: 隐藏物理设备细节。IO系统对IO设备进行适当的抽象,以隐藏掉物…

selenium 要点击的元素被其他元素遮挡 or 无法找到非可视范围内的元素

selenium 无法找到非可视范围内的元素 org.openqa.selenium.StaleElementReferenceException: The element reference of is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed se…

Java根据word模板生成word文档并转成PDF文件

1. 处理word模板 1.1 定义word模版 1.2 定义完我们的模板之后,我们要将文档保存为xml的格式 定义完我们的模板之后,我们要将文档保存为xml的格式 1.3 xml格式化 生成的xml格式看起来比较乱,没有层次感, 所以需要格式化一下 格式化 1.4 修改xml 基础信息…

TestNG官方文档中文版

TestNG官方文档中文版(1) -介绍 T e s t NG 的 官 方 文 档 请 见 :http://testng.org/doc/documentation-main.html 1 介绍 T e s t N G 是 一 个 设 计 用 来 简 化 广 泛 的 测 试 需 求 的 测 试 框 架 , 从 单 元 测 试 (隔 离测试- 个类)到集成测试(测试由有…

Visio2013绘制任意曲线

曲线上蓝色的‘弯曲点‘,随着拉伸曲线,它自己会增减,这里要和’连接点‘区分开,连接点是用来连接别的图形的。