VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > python入门 >
  • python入门教程之带你认识 flask linux 部署(3)

本站最新发布   Python从入门到精通|Python基础教程
试听地址  
https://www.xin3721.com/eschool/pythonxin3721/


  •  
  • [program:microblog]command=/home/ubuntu/microblog/venv/bin/gunicorn -b localhost:8000 -w 4 microblog:appdirectory=/home/ubuntu/microbloguser=ubuntuautostart=trueautorestart=truestopasgroup=truekillasgroup=true

     

     

    commanddirectoryuser设置告诉supervisor如何运行应用程序。如果计算机启动或崩溃,autostartautorestart设置会使microblog自动重新启动。 stopasgroupkillasgroup选项确保当supervisor需要停止应用程序来重新启动它时,它仍然会调度成顶级gunicorn进程的子进程。

    编写此配置文件后,必须重载supervisor服务的配置才能导入它:

    •  
    $ sudo supervisorctl reload

    像这样,这个gunicorn web服务器就已经启动和运行,并处于监控之中!

    10

    设置 nginx

    由gunicorn启动的microblog应用服务器现在运行在本地端口8000。我现在需要做的是将应用程序暴露给外部世界,为了使面向公众的web服务器能够被访问,我在防火墙上打开了两个端口(80和443)来处理应用程序的Web通信。

    我希望这是一个安全的部署,所以我要配置端口80将所有流量转发到将要加密的端口443。我将首先创建一个SSL证书。创建一个自签名SSL证书,这对于测试是可以的,但对于真正的部署不太好,因为Web浏览器会警告用户,证书不是由可信证书颁发机构颁发的。创建microblog的SSL证书的命令是:

    •  
    •  
    •  
    $ mkdir certs$ openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \  -keyout certs/key.pem -out certs/cert.pem

     

    该命令将要求你提供关于应用程序和你自己的一些信息。这些信息将包含在SSL证书中,如果用户请求查看它,Web浏览器则会向用户显示它们。上述命令的结果将是名为key.pemcert.pem的两个文件,我将其放置在Microblog根目录的certs子目录中。

    要有一个由nginx服务的网站,你需要为它编写配置文件。在大多数nginx安装中,这个文件需要位于 /etc/nginx/sites-enabled 目录中。Nginx在这个位置安装了一个我不需要的测试站点,所以我将首先删除它:

    •  
    $ sudo rm /etc/nginx/sites-enabled/default

    下面你可以看到Microblog的nginx配置文件,它在 /etc/nginx/sites-enabled/microblog 中:

    /etc/nginx/sites-enabled/microblog:Nginx配置

    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    server {    # listen on port 80 (http)    listen 80;    server_name _;    location / {        # redirect any requests to the same URL but on https        return 301 https://$host$request_uri;    }}server {    # listen on port 443 (https)    listen 443 ssl;    server_name _;
        # location of the self-signed SSL certificate    ssl_certificate /home/ubuntu/microblog/certs/cert.pem;    ssl_certificate_key /home/ubuntu/microblog/certs/key.pem;
        # write access and error logs to /var/log    access_log /var/log/microblog_access.log;    error_log /var/log/microblog_error.log;
        location / {        # forward application requests to the gunicorn server        proxy_pass http://localhost:8000;        proxy_redirect off;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    }
        location /static {        # handle static files directly, without forwarding to the application        alias /home/ubuntu/microblog/static;        expires 30d;    }}

    Nginx的配置不易理解,但我添加了一些注释,至少你可以知道每个部分的功能。如果你想获得关于特定指令的信息,请参阅nginx官方文档

    添加此文件后,你需要告诉nginx重新加载配置以激活它:

    •  
    $ sudo service nginx reload

    现在应用程序应该部署成功了。在你的Web浏览器中,可以键入服务器的IP地址(如果使用的是Vagrant VM,则为192.168.33.10),然后该服务器将连接到应用程序。由于你使用的是自签名证书,因此将收到来自Web浏览器的警告,你必须解除该警告。

    使用上述说明为自己的项目完成部署之后,我强烈建议你将自签名证书替换为真实的证书,以便浏览器不会在用户访问你的网站时发出警告。为此,你首先需要购买域名并将其配置为指向你的服务器的IP地址。一旦你有一个域名,你可以申请一个免费的Let's Encrypt SSL证书。我在博客上写了一篇关于如何通过HTTPS运行你的Flask应用程序的详细文章

    11

    部署应用更新

     

    我想讨论的基于Linux的部署的最后一个主题是如何处理应用程序升级。应用程序源代码通过git安装在服务器中,因此,无论何时想要将应用程序升级到最新版本,都可以运行git pull来下载自上次部署以来的新提交。

    当然,下载新版本的代码不会导致升级。当前正在运行的服务器进程将继续运行,旧代码已被读取并存储在内存中。要触发升级,你必须停止当前的服务器并启动一个新的服务器,以强制重新读取所有代码。

    进行升级通常比重新启动服务器更为复杂。你可能需要应用数据库迁移或编译新的语言翻译,因此实际上,执行升级的过程涉及一系列命令:

    •  
    •  
    •  
    •  
    •  
    (venv) $ git pull                              # download the new version(venv) $ sudo supervisorctl stop microblog     # stop the current server(venv) $ flask db upgrade                      # upgrade the database(venv) $ flask translate compile               # upgrade the translations(venv) $ sudo supervisorctl start microblog    # start a new server

     

    12

    树莓派托管

     

    树莓派是一款革命性低成本的小型Linux计算机,功耗非常低,因此它是托管家庭在线服务器的理想设备,可以全天候在线而无需捆绑你的台式电脑或笔记本电脑。 有几个Linux发行版可以在树莓派上运行。 我的选择是Raspbian,这是树莓派基金会的官方发行版。

    为了准备树莓派的环境,我要安装一个新的Raspbian版本。 我将使用2017年9月版的Raspbian Stretch Lite,但在阅读本文时,可能会有更新的版本,请查看官方下载页面获得最新版本。

    Raspbian镜像需要安装在SD卡上,然后插入树莓派,以便它启动时可以识别到。 在树莓派站点上可以查看到从Windows,Mac OS X和Linux将Raspbian镜像复制到SD卡的方法。

    当你第一次启动树莓派时,请在连接到键盘和显示器时进行操作,以便你可以进行设置。 至少应该启用SSH,以便你可以从计算机登录并方便地执行部署任务。

    和Ubuntu一样,Raspbian也是Debian的衍生产品,所以上面针对的Ubuntu Linux的说明,大部分都可以在树莓派上生效。 但是,如果你计划在家庭网络上运行小型应用程序而无需外部访问时,则可以跳过某些步骤。 例如,你可能不需要防火墙或无密码登录。 你可能想在这样一台小型的计算机上使用SQLite而不是MySQL。 你可以选择不使用nginx,并且让gunicorn服务器直接监听来自客户端的请求。 你可能只想要一个gunicorn worker进程。 Supervisor服务对于确保应用程序始终处于运行状态非常有用,因此我建议你仍然在树莓派上使用它

     
    相关教程