热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

flask部署_Nginx部署flask项目之uwsgi配置发布(下篇)

3.部署过程3.5安装Nginx3.6配置Nginx3.6.1配置nginx的全局配置文件3.6.2配置flask项目的nginx配置文件3.7配置uwsgi.ini4.启动fla
32f31f60e55b0644c4350d2e311b2df8.gif

3. 部署过程

   3.5安装Nginx

   3.6配置Nginx

       3.6.1配置nginx的全局配置文件

       3.6.2配置flask项目的nginx配置文件

   3.7配置uwsgi.ini

4.启动flask项目 

4.1开启nginx

4.2通过uwsgi启动flask项目     

32f31f60e55b0644c4350d2e311b2df8.gif

3.5 安装Nginx

01

执行以下指令使用yum安装nginx

yum install nginx

03d27aba0f051e3347744d66861685ed.png

02

选择y,点回车

51cd14ccaedb16d3fc4d5c461c4af5d9.png

出现Complete!表示Nginx安装完成

e2e156c4a934c3f44d26d68fbe664423.png

3.4 上传flask项目至服务器

上传项目至服务器有很多种方法,这里使用PyCharm专业版做演示。

01

在工具栏里找到Tools->Deployment->Configuration...

52456ce4d0389628e936e0add34cb3c8.png

02

进入Configuration..界面后,点击按钮+,选择SFTP

17b7173c9106ecb1fc6ceac75648c444.png

为服务器取个名

4c38fad5b575b7bae5ec0a1310222b1f.png

点击OK,进入配置界面

a26f23553dbedf0b920b5e25ac7009e1.png

03

点击...进入SSH Configuration界面

d8c94deb6869c58053d04a5d329be08b.png

点击按钮+,然后填入相关信息

Host一栏填入服务器的公网IP地址

Port选择22即可

User name和Password中分别填入用户名和密码即可

填完以上信息后可以点击Test Connection调试一下是否连接成功

4ac41fd5d3c80d8b8751907def49c682.png

04

配置文件的存放位置

(路径必须在服务器中存在,否则上传文件过程中会报错)

303f94c37ead5462c9afb908a6de6048.png

把Web Server URL设置成服务器的公网IP地址,并在Advanced选项里设置utf-8即可

d0fc8161a81b5b12f11c58463ea6f420.png

点击OK,配置结束

配置完成便可开始上传flask项目文件

05

在工具栏找到Tools->Deployment->Browse Remote Host

325cde7669fa4f41393aef43c19460e3.png

点击Browse Remote Host后,PyCharm右侧边栏便会弹出一个Remote Host窗口,

复制运行flask项目所需的文件,并在窗口粘贴即可。

e5a7397da67b7811433517ab6f170375.png

06

文件上传完成验证一下,打开XShell查看服务器上的指定文件夹下有没有上传的文件

69e57c999a5ad0be241aae1ee6bdcd5f.png

这里要注意,上传到服务器上的flask项目中的入口文件里,必须要把debug设置成False,否则项目将无法在服务器运行。

7892725349377bdd9bc2f6e8d63dc317.png

3.5 在服务器上创建flask虚拟环境

flask项目

开发flask项目需要在虚拟环境,部署也是如此。所以部署flask项目前需要在服务器中创建一个和开发环境一致的虚拟环境。虚拟环境是Python解释器的一个私有的副本,在这个环境中你可以安装私有包,而且不会影响系统中安装的全局Python解释器,也不需要管理员权限。虚拟环境可以在系统中Python解释器中避免包的混乱和版本的冲突。为每个程序单独创建虚拟环境可以保证程序只能访问虚拟环境中的包,从而保持全局解释器的干净简洁,使其只作为(更多)虚拟环境的源。

笔者把flask项目放在flask_demo文件夹中,并在flask_demo同级创建了一个Virtualenv

文件夹,在Virtualenv路径下运行python3 -m venv flask-env

可以看到Virtualenv文件夹下多了一个flask-env文件夹

b055294d3988dfd2520a47b6f69ee839.png

进入flask-env文件夹,发现有一个bin文件夹

d0ac3db6297a7f5f80eeb6e6fd880e64.png

进入bin文件夹可以看到一个activate文件

在命令行输入source activate指令激活虚拟环境,可以看到命令行前面多了一个(flask-env),代表此时现在是在虚拟环境下(要退出虚拟环境,只要输入deactivate指令即可)

2f93621e2c79edbdade921576eb60251.png

此时便可以在服务器的flask虚拟环境下用pip安装所需的库

32f31f60e55b0644c4350d2e311b2df8.gif

安装的库的种类以及版本必须要和开发时用到的库保持一致,确保代码的运行环境一致,否则有可能出现,自己电脑里可以运行项目,服务器里却无法运行项目的情况。

首先保证服务器的pip版本要和自己电脑的pip版本一致

32f31f60e55b0644c4350d2e311b2df8.gif

01

使用如下指令即可指定版本更新

pip install --upgrade pip==版本号

例如:将pip版本更新到20.2.2,如下

pip install --upgrade pip==20.2.2

02

查看自己开发时用到的库,可以在自己开发用的电脑的flask虚拟环境下执行pip3 list

58b6fb80c9182e6462afb9eef54ba50b.png

同理,查看服务器的flask虚拟环境的库,只要在flask虚拟环境下执行pip3 list即可

e7851fb2cb33996a7af0b674924630b7.png

03

装库用到的指令

pip3 install 库名==版本号

例如:

安装版本号为2.4.4的Flask-SQLAlchemy库只需要输入如下指令即可

pip3 install Flask-SQLAlchemy==2.4.4

如果网速过慢,也可以用阿里云的镜像安装库

例如:安装版本号为1.1.2的Flask库

pip install -i http://mirrors.aliyun.com/pypi/simple/ Flask==1.1.2 --trusted-host mirrors.aliyun.com

安装完成后就可以退出flask虚拟环境

3.6 配置Nginx

3.6.1 配置nginx的全局配置文件

01

进入全局配置文件的路径

cd /etc/nginx

编辑nginx.conf

vi nginx.conf

敲击键盘上的Insert键或i键开始对文件进行编辑

将用户换为root

230fbca093ba83290e779b1cbbc1468b.png

02

打开gzip,加快站点内容下载速度

a55caf6399af0064e229a9fe722e2433.png

03

Nginx.conf默认配置了一个站点,需要把它注释掉,因为不同的站点都是在子目录里进行配置的

836a732cc6b5085b0eded9b5d7acc90e.png4e8e174ef03e7be354f52ae8b6c031d3.png

注意:

不要把include/etc/nginx/conf.d/*.conf;注释掉了

Nginx可以部署很多个站点,每一个站点都可以在/etc/nginx/conf.d/路径下后缀为.conf的文件中进行配置。

nginx.conf的内容如下,供参考:

代码

# For more information on configuration, see:

#   * Official English Documentation: http://nginx.org/en/docs/

#   * Official Russian Documentation: http://nginx.org/ru/docs/

user root;

worker_processes auto;

error_log /var/log/nginx/error.log;

pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.

include /usr/share/nginx/modules/*.conf;

events {

    worker_connections 1024;

}

http {

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    gzip                on;

    sendfile            on;

    tcp_nopush          on;

    tcp_nodelay         on;

    keepalive_timeout   65;

    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;

    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.

    # See http://nginx.org/en/docs/ngx_core_module.html#include

    # for more information.

    include /etc/nginx/conf.d/*.conf;

   # server {

   #     listen       80 default_server;

   #     listen       [::]:80 default_server;

   #     server_name  _;

   #     root         /usr/share/nginx/html;

   #     # Load configuration files for the default server block.

   #     include /etc/nginx/default.d/*.conf;

   #     location / {

   #     }

   #     error_page 404 /404.html;

   #     location = /404.html {

   #     }

   #     error_page 500 502 503 504 /50x.html;

   #     location = /50x.html {

   #     }

   # }

# Settings for a TLS enabled server.

#

#    server {

#        listen       443 ssl http2 default_server;

#        listen       [::]:443 ssl http2 default_server;

#        server_name  _;

#        root         /usr/share/nginx/html;

#

#        ssl_certificate "/etc/pki/nginx/server.crt";

#        ssl_certificate_key "/etc/pki/nginx/private/server.key";

#        ssl_session_cache shared:SSL:1m;

#        ssl_session_timeout  10m;

#        ssl_ciphers HIGH:!aNULL:!MD5;

#        ssl_prefer_server_ciphers on;

#

#        # Load configuration files for the default server block.

#        include /etc/nginx/default.d/*.conf;

#

#        location / {

#        }

#

#        error_page 404 /404.html;

#        location = /404.html {

#        }

#

#        error_page 500 502 503 504 /50x.html;

#        location = /50x.html {

#        }

#    }

}

修改好文件以后,敲击键盘上的ESC按钮,输入冒号(:),再输入wq,这样就修改并保存了。

3.6.2 配置flask项目的nginx配置文件

进入到conf.d路径下

cd /etc/nginx/conf.d

创建一个自己flask项目的nginx配置文件

vi flask_demo.conf

敲击键盘上的Insert键或i键开始对文件进行编辑

具体内容如下,红字的为注释,不要写入配置文件里。

397c6fbe24650e2e4170a738d1e8dcf6.png

代码

server{

  listen  8181     ;

  server_name  绑定的域名或你的服务器公网IP地址;

  charset      utf-8;

  access_log   /var/log/nginx/log/flask_demo.access.log   main;

  error_log    /var/log/nginx/log/flask_demo.error.log    warn;

  location  / {

     root   /root/lk/back_end/flask_demo;

     index  index.html index.htm;

     include uwsgi_params;

    # include /etc/nginx/uwsgi_params;

     uwsgi_pass  127.0.0.1:5000;

     uwsgi_param UWSGI_PYHOME  /root/lk/back_end/Virtualenv/flask-env;

     uwsgi_param UWSGI_CHDIR   /root/lk/back_end/flask_demo;

     uwsgi_param PYTHONPATH    /root/lk/back_end/flask_demo;

     uwsgi_param UWSGI_MODULE  run;

#这里写入口文件名,也就是下图代码所在的文件,笔者的入口文件名为run.py,所以这里写run

     uwsgi_param UWSGI_CALLABLE  app;

#app就是下图中app.run方法中的app 

  }          

}

494c700a5d66bfcf3c90a0a77789e598.png

修改好文件以后,敲击键盘上的ESC按钮,输入冒号(:),再输入wq,这样就修改并保存了。

3.7 配置uwsgi.ini

在站点目录中(flask项目入口文件所在目录,笔者的入口文件为run.py)创建uwsgi.ini文件

vi uwsgi.ini

fc9d7fe051c2b13620d63b90c2a40cbf.png

内容如下

[uwsgi]

enable-theads=true

thunder-lock=true

vhost=true

socket=127.0.0.1:5000

master=true

workers=4

max-requests=128

4.启动flask项目

4.1 开启nginx

01

到/var/log/nginx路径下创建文件夹log,如果不创建文件夹的话服务器找不到日志文件要写的地址

cd /var/log/nginx

mkdir log

nginx -t -c /etc/nginx/nginx.conf

如果结果如下图所示,就表示nginx配置文件完成

2b5324ec237a7ccb2591ba67d20eadeb.png

02

现在便可以启动nginx了

systemctl start nginx.service

这时可以在浏览器里访问一下服务器的公网ip地址,如果出现下图所示,就表示nginx启动成功了

73ce196b6b0d532d65587ddbd6cc38dd.png

4.2 通过uwsgi启动flask项目

01

激活flask虚拟环境

02

进入到uwsgi.ini文件所在路径下,运行以下指令

uwsgi --ini uwsgi.ini

03

启动成功

75e5583eef46134c151b20c7fc3d1f40.png

04

在浏览器中测试一下flask项目是否成功运行

841eaa5d8ae2393e40cd454ccf0d1877.png

这里可以看到,确实可以访问到,部署成功。

想看更多精彩内容

请关注我们的实验室公众号哟

82718690a9a1902ca5d00eca679dacc2.png

扫码关注啦!

0b59c0c36c5b6ed96f997fc6f1fb7c9f.png



推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了如何使用iptables添加非对称的NAT规则段,以实现内网穿透和端口转发的功能。通过查阅相关文章,得出了解决方案,即当匹配的端口在映射端口的区间内时,可以成功进行端口转发。详细的操作步骤和命令示例也在文章中给出。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
author-avatar
上海十里红妆婚礼策划红_196
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有