centos 7.0 使用Nginx部署flask应用教程

参考文章://www.jb51.net/article/130989.htm

修改说明:修改nginx配置部分,更换配置文件内容及路径;从ip访问切换到域名访问

前言

最近博主在开发一个小项目,本机的开发环境是python3.6,因为需要部署到服务器(python2.7)的关系,所以研究了一下,网上大部分的教程是部署在Ubuntu上的,博主使用的是centos7.0,大部分的部署其实都是类似的,这篇博文对完完全全的新手可能会有所帮助,对遇到的一些困惑也可以进行描述。

环境准备

python包安装工具pip : sudo apt-get install pip
virtualenv:为了避免系统环境与应用环境之间的冲突,使用虚拟环境来安装应用的依赖,virtualenv可以为每个python应用创建独立的开发环境,安装方式:sudo pip install virtualenv

虚拟环境使用

flask项目地址:/usr/local/flasky,只需要在项目地址下运行指令:

virtualenv venv

约定俗成一般使用“venv”作为虚拟环境的名称,这样我们就创建了一个虚拟环境的文件夹venv如下图红框所示:

接下来激活虚拟环境,只用指令

source venv/bin/activate

激活虚拟环境后,命令行抬头会有(venv)标识,仅需虚拟环境后,一切安装python的操作都会讲包和引用装在虚拟环境中,不会影响全局的python环境

退出虚拟环境的指令,直接敲:

deactivate

即可退出虚拟环境

配置flask应用环境

flask应用开发的时候,会应用到非常多的模板,“狗书”中有介绍一种比较方便的方式,直接把开发环境的flask依赖等导出为一个txt文件,然后在centos的虚拟环境中使用相应指令根据这个txt文件安装会非常方便。

pip freeze >requerements.txt

该指令导出一个文件名为requirements.txt的文本,里面的内容如下图所示

然后centos中使用以下指令

pip install -r requerments.txt

这样就会在虚拟环境中安装一个与开发环境一致的副本了。
注意一定要在虚拟环境中使用批量安装指令,不然就安装到全局去了,后果还是比较蛋疼的。

安装uWSGI

flask的实际生产运行环境选择不多,比较成熟的是【Gunicorn】和【uWSGI】,这里推荐一本书董伟明的《Python Web开发实战》里面有讲这两种部署。

以下内容来自百度百科:

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
安装指令如下,注意一定要保证已经进入了虚拟环境并激活:

pip install uwsgi

不需要使用sudo ,因为virtualvenv没有权限要求。

上传项目文件

博主使用的linux连接工具是xshell,在之前的一篇文章//www.jb51.net/article/130991.htm中有讲如何上传文件到linux主机,这里不再详细说明,展示一下大概的项目结构以及启动文件manage.py

tree命令可以以树形图的形式展示文件结构,可以赋予参数设置树的深度,这里博主展示了2层
安装命令:

sudo apt-get install tree

manage.py代码如下

#coding=utf-8
#!/usr/local/flasky/venv python
'''
Created on 2017/11/9
@author: Savitar丶
Project:
'''
import os
from app import create_app
from flask_script import Manager, Shell
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)

def make_shell_context():
 return dict(app=app)
manager.add_command("shell", Shell(make_context=make_shell_context))
@manager.command
def deploy():
 """Run deployment tasks."""
 pass
if __name__ == '__main__':
 manager.run()
 #app.run()

命令行运行flask项目

python manage.py runserver

以上命令一般都是在开发环境进行调试的时候使用,或者注释掉“manager.run()”,使用“app.run()”,后者可以直接在pycharm中执行项目,这里不再详细说明

配置uWSGI

我们直接在flask的根目录下面新建一个文件“config.ini”,使用的方式是配置启动。文件内容如下

[uwsgi]

# uwsgi 启动时所使用的地址与端口

socket = 127.0.0.1:5000

#虚拟环境目录
home = /usr/local/flasky/venv

#指向网站根目录
chdir = /usr/local/flasky

#python启动程序文件
wsgi-file = manage.py

#python程序内用于启动的application变量名
callable = app

#处理器数
processes = 4

#线程数
threads = 2

#状态监测地址
stats = 127.0.0.1:9191

#设置uwsgi包解析的内部缓存区大小。默认4k

buffer-size = 32768

配置文件的执行方式,命令行输入指令:

uwsgi config.ini

或者不写配置文件(不建议这样做),直接命令行输入

uwsgi –socket 127.0.0.1:5000 –wsgi-file manage.py –callable app –process 4 –threads 2

这里的callable=app 这个app是manage.py程序文件内的一个变量,这个变量的类型是flask的application类

这里是因为博主已经配置好了项目自启动,已经有一个配置文件在运行了,大家按照正常流程配置就好。ctrl+c关闭程序,在实际项目中我们的服务器上可能会有多个项目在运行,我们需要应用随同服务器启动并作为后台服务运行才是实际项目需要,所以我们需要安装另一个工具来引导执行uwsgi

安装supervisor

supervisor可以同时启动多个应用,最重要的是当某个应用down掉的时候,他可以自动重启该应用,保证可用性。

sudo apt-get install supervisor

supervisor的全局配置文件在

打开该默认配置文件,最下面一行我们看到,该默认配置文件会从 /etc/supervisord/目录下面加载所有的配置文件

我们不需要修改默认的配置文件,只需要在/etc/supervisord/目录下新建一个配置文件(命名为flask_supervisor.conf)

该文件内容如下:

[program:flasky]
# 启动命令入口
command=/usr/local/flasky/venv/bin/uwsgi /usr/local/flasky/config.ini

# 命令程序所在目录
directory=/usr/local/flasky
#运行命令的用户名
user=root

autostart=true
autorestart=true
#日志地址
stdout_logfile=/usr/local/flasky/logs/uwsgi_super.log

这里command这一行代码看起来很长,其实就是之前我们的 “uwsgi config.ini”指令,这里使用的是绝对路径,保证命令和文件的准确性,大家也可以copy这一行代码出去执行,结果是ok的。autostart和autorestart参数保证了我们的应用可以一直保持启动的状态,即使是down掉了也能重启服务。

启动服务

sudo service supervisor start

终止服务

sudo service supervisor stop

安装Nginx

Nginx是轻量级,性能强,占用资源少,能很好的处理高并发的反向代理软件。

正向代理和反向代理

正向代理,作为一个媒介将互联网上获取的资源返回给相关联的客户端。代理和客户端在一个局域网,对于服务是透明的。反向代理,根据客户端的请求,从后端的服务器上获取资源,然后再讲这些资源返回给客户端。代理和服务器再一个局域网,对客户端是透明的。Nginx是反向代理的最佳选择。

反向代理的作用

提高动态语言的IO处理能力
加密和SSL加速
安全。
负载均衡
缓存静态内容
支持压缩。

Nginx安装指令:

sudo apt-get install nginx

配置Nginx

我们找到nginx的配置文件,不要修改默认的nginx.conf(路径 /etc/nginx/nginx.conf)文件,只需要在同样的文件夹下面新建一个文件夹(conf.d)然后在conf.d下面新建配置文件(flask_ng.conf)即可,如下图

flask_ng.conf文件内容如下

server {
  listen 80;
  server_name www.cloud-test.com; #公网地址

  location / {
  include  uwsgi_params;
  uwsgi_pass 127.0.0.1:5000; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
  uwsgi_param UWSGI_PYHOME /usr/local/flasky/venv; # 指向虚拟环境目录
  uwsgi_param UWSGI_CHDIR /usr/local/flasky; # 指向网站根目录
  uwsgi_param UWSGI_SCRIPT manage:app; # 指定启动程序
  }
 }

启动Nginx

sudo service nginx restart

然后浏览器直接访问服务器http://www.cloud-test.com地址,结果如下

小case,解决办法,直接修改本机hosts,绑定就好了,如下图所示

然后再去访问http://www.cloud-test.com

然后也可以找自己的同事一起访问,看看并发请求,网站的运行情况,想来能解决在开发环境使用了host 0.0.0.0 也只能处理一个用户的请求的问题

查看应用的运行情况

supervisorctl 是 supervisord 的命令行客户端工具,使用的配置和 supervisord 一样,这里就不再说了。下面,主要介绍 supervisorctl 操作的常用命令:
输入命令 supervisorctl 进入 supervisorctl 的 shell 交互界面(还是纯命令行),可以看到应用的运行情况
就可以在下面输入命令了。:

help # 查看帮助
status # 查看程序状态
stop program_name # 关闭 指定的程序
start program_name # 启动 指定的程序
restart program_name # 重启 指定的程序
tail -f program_name # 查看 该程序的日志
update # 重启配置文件修改过的程序(修改了配置,通过这个命令加载新的配置)

也可以直接通过 shell 命令操作:

supervisorctl status
supervisorctl update

(0)

相关推荐

  • flask中主动抛出异常及统一异常处理代码示例

    本文主要介绍的是flask中主动抛出异常及统一异常处理的相关内容,具体如下. 在开发时,后台出现异常 ,但不想把异常显示给用户或者要统一处理异常时,可以使用abort主动抛出异常,再捕获异常返回美化后的页面. 主动抛出异常: @user.route('/testError') def testError(): print ('testError') abort(404) 使用装饰器errorhandler捕获异常: @user.errorhandler(404) def error(e): re

  • CentOS 部署 flask项目的方法

    最近在学习 python,使用 flask 实现了个个人博客程序,完了想部署到服务器上.因为是新手,一路磕磕绊绊最终把它基本搞定.网上资料对新手感觉都不太友好,都是零零碎碎的,所以我整理了一下,一方面作为我自己的记录,方便以后查阅,另一方面也希望能帮助到跟我一样的新手. 前提 有一个服务器(不然搞毛),购买可以参考优质国外vps推荐 有个人域名(当然,你可以直接使用 IP访问,但有点奇怪不是?购买域名可以去GoDaddy 1.安装git 可以选择 github 或者Bitbucket,当然你也可

  • 浅谈flask中的before_request与after_request

    本文主要是对flask中的before_request与after_request用法做一个简单的分析,具体实例和介绍如下. 使用before_request 和 after_request的方法都非常简单,使用 @app.before_request 或者@app.after_request 修饰期望在请求前或请求后执行的函数即可 示例: @app.before_request def before_request(): if not m_ip_range.is_ip_strict(): re

  • python Flask实现restful api service

    一直在用node.js做后端,要逐步涉猎大数据范围,注定绕不过python,因此决定把一些成熟的东西用python来重写,一是开拓思路.通过比较来深入学习python:二是有目标,有动力,希望能持之以恒的坚持下去. 项目介绍 用python语言来写一个restful api service,数据库使用mysql.因为只做后端微服务,并且ORM的实现方式,采用自动生成SQL的方式来完成,因此选择了轻量级的flask作为web框架.如此选择,主要目的是针对中小规模的网络应用,能充分利用关系数据库的种

  • Flask实现异步非阻塞请求功能实例解析

    本文研究的主要是Flask实现异步非阻塞请求功能,具体实现如下. 最近做物联网项目的时候需要搭建一个异步非阻塞的HTTP服务器,经过查找资料,发现可以使用gevent包. 关于gevent Gevent 是一个 Python 并发网络库,它使用了基于 libevent 事件循环的 greenlet 来提供一个高级同步 API.下面是代码示例: from gevent.wsgi import WSGIServer from yourapplication import app http_serve

  • flask使用session保存登录状态及拦截未登录请求代码

    本文主要研究的是flask使用session保存登录状态及拦截未登录请求的相关内容,具体介绍如下. 前端请求form: <form action="/user/add" method="get"> <input type="text" name="username" value="111"> <input type="submit" value="

  • Vue+Flask实现简单的登录验证跳转的示例代码

    本文介绍了Vue+Flask实现简单的登录验证跳转,分享给大家,具体如下: 文件位置: login.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login</title> <script type="text/javascript" src="../sta

  • flask中使用蓝图将路由分开写在不同文件实例解析

    本文的内容主要是flask中使用蓝图将路由分开写在不同文件的相关介绍,具体如下. Flask 用 蓝图(blueprints) 的概念来在一个应用中或跨应用制作应用组件和支持通用的模式.蓝图很好地简化了大型应用工作的方式,并提供给 Flask 扩展在应用上注册操作的核心方法.一个Blueprint 对象与Flask 应用对象的工作方式很像,但它确实不是一个应用,而是一个描述如何构建或扩展应用的蓝图 . Flask 中的蓝图为这些情况设计: 把一个应用分解为一个蓝图的集合.这对大型应用是理想的.一

  • centos 7.0 使用Nginx部署flask应用教程

    参考文章://www.jb51.net/article/130989.htm 修改说明:修改nginx配置部分,更换配置文件内容及路径:从ip访问切换到域名访问 前言 最近博主在开发一个小项目,本机的开发环境是python3.6,因为需要部署到服务器(python2.7)的关系,所以研究了一下,网上大部分的教程是部署在Ubuntu上的,博主使用的是centos7.0,大部分的部署其实都是类似的,这篇博文对完完全全的新手可能会有所帮助,对遇到的一些困惑也可以进行描述. 环境准备 python包安装

  • CentOS 7.0下SVN服务器图文搭建教程

    本文为大家分享了CentOS 7.0搭建SVN服务器的详细过程,供大家参考,具体内容如下 1. 通过yuminstall subversion来安装 2. 提示已经安装.查看svn版本 第二步: 创建svn版本库 第三步: 配置svn信息 2. 配置权限配置文件authz 3. 配置用户口令文件passwd 4. 配置svn服务综合配置文件svnserve.conf 第四步: 启用svn,连接svn以及关闭svn 1. 启用svn svnserve -d -r /home/svn/project

  • 在Centos 8.0中安装Redis服务器的教程详解

    目录 1.官网下载Linux版安装包 2.使用XShell 和Xftp连接Centos: 3.默认下,redis相关的安装文件会存储在/usr/local/bin 这个目录下 4.前台启动redis服务器 5.后台启动Redis服务器(推荐) 5.1  把redis.conf 文件复制一份 5.2 修改配置文件参数: 5.3 回到redis-server 所在目录: 企业级开发中,经常需要把一些中间件安装在Linux服务上.主要考虑到linux服务器的性能吧. 1.官网下载Linux版安装包 R

  • 用uWSGI和Nginx部署Flask项目的方法示例

    概况 在开发过程中,我们一般直接用Python命令直接运行Flask程序.这样的运行只适合我们开发,方便我们调试.一旦程序部署到线上,这样运行的Flask程序性能会比较低.可以采用uWSGI+Nginx进行部署. uWSGI 在部署之前,我们得先了解几个概念 wsgi web应用程序之间的接口.它的作用就像是桥梁,连接在web服务器和web应用框架之间. uwsgi 是一种传输协议,用于定义传输信息的类型. uWSGI 是实现了uwsgi协议WSGI的web服务器. 部署 首先准备一个flask

  • CentOS 7.0下nginx实现每天定时分割日志

    环境说明: 操作系统CentOS7.0,默认在线安装nginx. nginx配置文件路径:/etc/nginx/nignx.conf, nginx日志文件路径:/var/log/nginx/access.log nignx.pid路径:/run/nginx.pid 新建的定时脚本位置/shell/nginx/logs.sh 1.新建脚本并执行 #mkdir /shell/nignx #cd /shell/nginx #vim logs.sh #!/bin/bash base_path='/var

  • windows下Docker部署Flask的详细教程

    Docker默认安装路径是在C盘,Windows中修改Docker**默认安装****路径方法: 1.先创建 D:\Program Files\Docker 目录 2.运行命令,创建链接 mklink /J "C:\Program Files\Docker" "D:\codeSoftware\Docker" 3.点击exe安装完成后,查看版本 docker -v 4.运行docker的hello world docker run hello-world 查看镜像 d

  • Docker部署Flask应用的实现步骤

    一.目的 本地写好一个Flask应用,用Docker封装,上传至自己的服务器,完成部署. 流程图: 二.实验环境 本地:Windows10 1909 服务器:阿里云Centos系统 三.所需软件 1.DockerDesktop 2.Pycharm 2020.3.3 四.步骤 1.本地完成Flask应用的编写 (1)在PyCharm里新建一个Flask应用docker_flask (2)安装gunicorn,gevent包 (3)新建gunicorn.config.py文件,并填入以下内容 wor

  • docker-compose+nginx部署前后端分离的项目实践

    目录 安装docker 安装必要的系统工具 软件源信息切换 安装 配置镜像加速器 安装docker-compose 安装 权限修改 解决js.css文件404的情况 Vue项目配置 安装docker 安装必要的系统工具 # 更新yum工具 yum update -y # 安装必要的工具 yum install -y yum-utils device-mapper-persistent-data lvm2 软件源信息切换 yum-config-manager --add-repo http://m

  • CentOS 7.9服务器Java部署环境配置的过程详解

    目录 CentOS 7服务器Java部署环境配置 FTP服务器搭建 设置root用户可登录 jdk安装 mysql安装 开启Navicat远程连接的配置 Tomcat安装 Redis安装 Nginx安装 CentOS 7服务器Java部署环境配置 FTP服务器搭建 1.安装 vsftpd yum install -y vsftpd 2.安装完成后运行以下命令进入/etc/vsftpd目录,并查看该目录下的文件 cd /etc/vsftpd ls 设置root用户可登录 在安装vsftpd默认情况

  • 一篇文章快速掌握Nginx部署前端项目(Nginx安装配置及部署都非常详细!)

    目录 前言: Nginx的三个作用: 负载均衡: 反向代理: 动静分离: Nginx的下载安装(Linux环境下) Nginx的使用 三.部署前端项目 总结 前言: 之前在Linux系统中部署了后端项目,今天继续来给大家分享如何部署前端项目. 涉及到了Nginx的简单介绍以及Nginx如何安装及配置并且能够部署前端项目 Nginx是一个轻量级的反向代理web服务器,在当今应用地非常广泛,特别是前后端分离的情况下. Nginx的三个作用: 负载均衡: 当我们的单个项目访问量达到了单个tomcat无

随机推荐