>  기사  >  운영 및 유지보수  >  Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법

Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법

WBOY
WBOY앞으로
2023-05-21 22:13:041086검색

환경 준비

Python 패키지 설치 도구 pip: sudo apt-get install pip
virtualenv: 시스템 환경과 애플리케이션 환경 간의 충돌을 피하기 위해 가상 환경을 사용합니다. 애플리케이션 설치 종속성, virtualenv는 각 Python 애플리케이션에 대한 독립적인 개발 환경을 생성할 수 있습니다. 설치 방법: sudo pip install virtualenvsudo apt-get install pip
virtualenv:为了避免系统环境与应用环境之间的冲突,使用虚拟环境来安装应用的依赖,virtualenv可以为每个python应用创建独立的开发环境,安装方式:sudo pip install virtualenv

虚拟环境使用

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

virtualenv venv

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

Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법 

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

source venv/bin/activate

Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법 

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

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

deactivate

即可退出虚拟环境

配置flask应用环境

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

pip freeze >requerements.txt

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

Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법 

然后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,在之前的一篇文章中有讲如何上传文件到linux主机,这里不再详细说明,展示一下大概的项目结构以及启动文件manage.py

Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법 

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

가상 환경 사용법

flask 프로젝트 주소: /usr/local/flasky , 프로젝트 주소 아래에 명령어를 실행하면 됩니다:

[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

가상 환경 이름은 "venv"를 사용하는 것이 관례이므로 아래 빨간색 상자와 같이 가상 환경 폴더 venv를 생성합니다.

Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법

🎜 다음 가상 환경을 활성화하려면 🎜
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를 사용하여 배포하는 방법 🎜🎜Activate 가상 환경 이후에는 명령줄 헤더에 (venv) 표시가 있습니다. 가상 환경을 사용하는 한 모든 Python 설치 작업에는 설치된 패키지 및 참조가 포함됩니다. 🎜🎜가상 환경 종료 지침 🎜🎜deactivate🎜🎜을 입력하여 가상 환경을 종료하세요🎜🎜🎜Flask 애플리케이션 환경 구성🎜 🎜🎜Flask 애플리케이션을 개발할 때 많은 템플릿이 사용됩니다. "dog book"에는 개발 환경의 플라스크 종속성을 txt 파일로 직접 내보낸 다음 해당 지침을 사용하는 더 편리한 방법이 있습니다. 이 txt 파일에 따라 centos 가상 환경을 설치하면 매우 편리합니다. 🎜rrreee🎜 이 명령은 require.txt라는 텍스트 파일을 내보냅니다. 내용은 아래와 같습니다🎜🎜Nginx를 사용하여 centos에 플라스크 애플리케이션을 배포하는 방법 🎜🎜그런 다음 centos에서 다음 명령을 사용하세요. 🎜🎜pip install -r requerments.txt🎜🎜이것은 가상 환경에 있습니다. 환경 개발 환경과 일치하는 복사본을 설치합니다.
가상 환경에서 일괄 설치 지침을 사용해야 합니다. 그렇지 않으면 전역적으로 설치되며 그 결과는 매우 고통스럽습니다. 🎜🎜🎜Uwsgi 설치🎜🎜🎜Flask의 실제 제작 실행 환경에는 선택의 여지가 많지 않습니다. 더 성숙한 것은 [gunicorn]과 [uwsgi]입니다. Dong Weiming의 "Python Web Development in Practice"가 추천하는 책입니다. 이 두 가지 배포에 대해 설명합니다. 🎜🎜다음 콘텐츠는 Baidu Encyclopedia에서 가져온 것입니다. 🎜🎜uwsgi는 wsgi 프로토콜, uwsgi, http 및 기타 프로토콜을 구현하는 웹 서버입니다. nginx의 httpuwsgimodule 기능은 uwsgi 서버와 교환하는 것입니다. wsgi는 웹 서버 게이트웨이 인터페이스입니다. 이는 웹 서버(예: nginx, uwsgi 등)와 웹 애플리케이션(예: Flask 프레임워크로 작성된 프로그램) 간의 통신을 위한 사양입니다.
설치 지침은 다음과 같습니다. 가상 환경에 진입하여 활성화했는지 확인하세요. 🎜🎜pip install uwsgi🎜🎜virtualvenv에는 권한 요구 사항이 없으므로 sudo를 사용할 필요가 없습니다. . 🎜🎜🎜프로젝트 파일 업로드🎜🎜🎜블로거가 사용하는 Linux 연결 도구는 xshell입니다. 이전 글에서 Linux 호스트에 파일을 업로드하는 방법에 대해 이야기했는데 여기서는 자세히 설명하지 않고 일반적인 프로젝트만 보여드리겠습니다. 구조 및 시작 파일.manage.py🎜🎜Nginx를 사용하여 플라스크 애플리케이션을 배포하는 방법 in centos 🎜🎜tree 이 명령은 파일 구조를 트리 다이어그램 형식으로 표시할 수 있으며 매개변수 설정 트리의 깊이를 제공할 수 있습니다. 여기서 블로거는 2계층
설치 명령을 보여줍니다. 🎜 🎜sudo apt-get 설치 트리🎜 🎜manage.py 코드는 다음과 같습니다🎜rrreee🎜🎜Flask 프로젝트를 실행하는 명령줄🎜🎜🎜pythonmanage.py runserver🎜🎜 위 명령은 일반적으로 개발 환경에서 디버깅할 때 사용됩니다. 또는 "manager.run()"을 주석 처리하고 "app.run()"을 사용합니다. 후자는 pycharm에서 프로젝트를 직접 실행할 수 있습니다. 여기서는 자세한 내용을 설명하지 않습니다🎜 🎜🎜Configure uwsgi🎜🎜🎜Flask "config.ini"의 루트 디렉토리 아래에 직접 새 파일을 생성하여 시작을 구성합니다. 파일 내용은 다음과 같습니다🎜rrreee🎜구성 파일을 실행하는 방법은 명령줄에 다음 명령을 입력하세요:🎜🎜uwsgi config.ini🎜🎜또는 구성 파일을 작성하지 마세요. 권장), 명령줄에 직접 입력🎜🎜 uwsgi –socket 127.0.0.1:5000 –wsgi-filemanage.py –callable app –process 4 –threads 2🎜🎜callable=app 여기서 app은manage.py의 변수입니다. 프로그램 파일에서 이 변수의 유형은 플라스크 애플리케이션 클래스🎜🎜🎜🎜입니다.

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

安装supervisor

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

sudo apt-get install supervisor

supervisor的全局配置文件在

Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법 

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

Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법

我们不需要修改默认的配置文件,只需要在/etc/supervisord/目录下新建一个配置文件(命名为flask_supervisor.conf)
Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법 

该文件内容如下:

[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)即可,如下图

Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법 

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地址,结果如下

Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법 

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

Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법 

然后再去访问

Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법 

然后也可以找自己的同事一起访问,看看并发请求,网站的运行情况,想来能解决在开发环境使用了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 # 重启配置文件修改过的程序(修改了配置,通过这个命令加载新的配置)

쉘 명령을 통해 직접 작업할 수도 있습니다:

supervisorctl status
supervisorctl update

Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법

위 내용은 Nginx를 사용하여 Centos에 플라스크 애플리케이션을 배포하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제