徐秀芬 發表於 2023-5-9 00:00:00

阿里云CentOS 7.4 使用Flask建站的方法

<p>
        python web 部署方式为:nginx + gunicorn + supervisor + flask</p>
<p>
        <span><strong>一、准备工作,先来安装pip</strong></span></p>
<p>
        详细教程如:</p>
<p>
        1、首先检查linux有没有安装python-pip包,直接执行 yum install python-pip</p>
<p>
        ※显示No package python-pip available. 则没有,继续如下操作</p>
<p>
        2、没有python-pip包就执行命令 yum -y install epel-release</p>
<p>
        3、执行成功之后,再次执行yum install python-pip</p>
<p>
        4,、对安装好的pip进行升级 pip install --upgrade pip</p>
<p>
        至此,pip工具就安装好了。</p>
<p>
        <span><strong>二、创建一个项目和 python 虚拟环境</strong></span></p>
<p>
        使用python的virtualenv创建虚拟环境 。用来在一个系统中创建不同的 python 隔离环境。相互之间还不会影响,而且使用相当简单。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_492957">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash functions">mkdir</code> <code class="bash plain">myflask</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash functions">cd</code> <code class="bash plain">myflask</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">virtualenv venv</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        创建了 venv 环境之后,激活就可以了</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_225480">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">source venv/bin/activate</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>三、安装 python web 框架 — flask</strong></span></p>
<p>
        flask 是一个 python web 轻型框架,简洁高效。flask 依赖两个库 werkzeug 和 jinjia2。可采用 pip 方式安装:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterpy" id="highlighter_866561">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="py plain">pip install flask</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        测试我们的 flask 安装是否成功,并使用 flask 写一个简单的 web 服务。</p>
<p>
        vim run.py</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterpy" id="highlighter_568358">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="py keyword">from</code> <code class="py plain">flask </code><code class="py keyword">import</code> <code class="py plain">Flask</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                         </div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="py plain">app </code><code class="py keyword">=</code> <code class="py plain">Flask(__name__)</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                         </div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="py decorator">@app</code><code class="py plain">.route(</code><code class="py string">'/'</code><code class="py plain">)</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="py keyword">def</code> <code class="py plain">index():</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="py spaces">  </code><code class="py keyword">return</code> <code class="py string">'hello world!'</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                         </div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="py keyword">if</code> <code class="py plain">__name__ </code><code class="py keyword">=</code><code class="py keyword">=</code> <code class="py string">'__main__'</code><code class="py plain">:</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="py spaces">  </code><code class="py plain">app.run()</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        启动 flask</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_489326">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">python run.py</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        此时,用浏览器访问 http://127.0.0.1:5000 就能看到网页显示 hello world!</p>
<p>
        <span><strong>三、使用 gunicorn 部署 python web</strong></span></p>
<p>
        现在我们使用 flask 自带的服务器,完成了 web 服务的启动。生产环境下,flask 自带的 服务器,无法满足性能要求。我们这里采用 gunicorn 做 wsgi容器,用来部署 python,用pip直接安装。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterpy" id="highlighter_186324">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="py plain">pip install gunicorn</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        pip 是python 用来管理包的一个重要工具。每次安装新库后写入一个 requirement 文件里面,既能知道自己安装了什么库,也方便别人部署时,安装相应的库。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterpy" id="highlighter_292107">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="py plain">pip freeze &gt; requirements.txt</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        以后每次 pip 安装了新的库的时候,都需freeze 一次。完整保存好requirement文本,重新安装库则只需要执行如下操作:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterpy" id="highlighter_988020">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="py plain">pip install </code><code class="py keyword">-</code><code class="py plain">r requirements.txt</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        当我们安装好 gunicorn 之后,需要用 gunicorn 启动 flask,注意 flask 里面的name里面的代码启动了 app.run(),这个含义是用 flask 自带的服务器启动 app。这里我们使用了 gunicorn,run.py 就等同于一个库文件,被 gunicorn 调用。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_73792">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">gunicorn -w4 -b0.0.0.0:5000 run:app #-w worker数量 -b 访问地址</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        此时,我们可以用 5000 的端口进行访问。</p>
<p>
        想要结束 gunicorn 只需执行 pkill gunicorn,有时候还需要用 ps 找到 pid 进程号才能 kill。</p>
<p>
        <span><strong>四、使用nginx</strong></span></p>
<p>
        nginx,一个高性能的web服务器。通常用来在前端做反向代理服务器。代理服务,简而言之,一个请求经过代理服务器从局域网发出,然后到达互联网上服务器,这个过程的代理为正向代理。如果一个请求,从互联网过来,先进入代理服务器,再由代理服务器转发给局域网的目标服务器,这个时候,代理服务器为反向代理(相对正向而言)。</p>
<p>
        1. gcc 安装</p>
<p>
        安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_317530">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">yum </code><code class="bash functions">install</code> <code class="bash plain">gcc-c++</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        2. PCRE pcre-devel 安装</p>
<p>
        PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_327053">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">yum </code><code class="bash functions">install</code> <code class="bash plain">-y pcre pcre-devel</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        3. zlib 安装</p>
<p>
        zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_374492">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">yum </code><code class="bash functions">install</code> <code class="bash plain">-y zlib zlib-devel</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        4. OpenSSL 安装</p>
<p>
        OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。</p>
<p>
        nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_56514">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">yum </code><code class="bash functions">install</code> <code class="bash plain">-y openssl openssl-devel</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        5. 使用wget下载nginx:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_34991">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">wget https:</code><code class="bash plain">//nginx</code><code class="bash plain">.org</code><code class="bash plain">/download/nginx-1</code><code class="bash plain">.13.12.</code><code class="bash functions">tar</code><code class="bash plain">.gz</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash functions">tar</code> <code class="bash plain">-zxvf nginx-1.13.12.</code><code class="bash functions">tar</code><code class="bash plain">.gz</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash functions">cd</code> <code class="bash plain">nginx-1.13.12</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash functions">make</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash functions">make</code> <code class="bash functions">install</code> <code class="bash comments">#编译安装</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        然后配置Nginx,刚才安装了Nginx之后,我们打开/etc/nginx/conf.d/default.conf,然后修改默认的default.conf为:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_191121">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">server {</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash spaces">  </code><code class="bash plain">listen    80;</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash spaces">  </code><code class="bash plain">server_name localhost;</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash spaces">  </code><code class="bash plain">location / {</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash spaces">    </code><code class="bash plain">proxy_pass http:</code><code class="bash plain">//127</code><code class="bash plain">.0.0.1:5000;</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash spaces">    </code><code class="bash plain">proxy_redirect off;</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash spaces">    </code><code class="bash plain">proxy_set_header Host $host:80;</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="bash spaces">    </code><code class="bash plain">proxy_set_header X-Real-IP $remote_addr;</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="bash spaces">    </code><code class="bash plain">proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="bash spaces">  </code><code class="bash plain">}</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                         </div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="bash plain">}</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        其中server_name就是你的域名,这里用localhost代表通过ip访问,配置好default.conf之后试着启动Nginx!</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_809276">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain"></code><code class="bash comments"># service nginx start</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">Starting nginx:                      [ OK ]</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain"></code><code class="bash comments"># nginx -s reload</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        ok!到这一步,整个部署过程就完成了!</p>
<p>
        <span><strong>六、为了方便管理使用supervisor</strong></span></p>
<p>
        1.安装 supervisor</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterpy" id="highlighter_417392">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="py plain">pip install supervisor</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="py plain">echo_supervisord_conf &gt; supervisor.conf  </code><code class="py comments"># 生成 supervisor 默认配置文件</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="py plain">vim supervisor.conf            </code><code class="py comments"># 修改 supervisor 配置文件,添加 gunicorn和nginx</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        2.添加gunicorn到supervisor中,添加到配置最下面。此处因为使用了python虚拟环境,可先在虚拟环境找到gunicorn地址,使用whereis 如:/usr/local/bin/gunicorn,记住此位置加入到supervisor的command中,如下:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_416846">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">【program:myflask】</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain plain">command = /usr/local/bin/gunicorn -w4 -b0.0.0.0:5000 run:app</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="plain plain">directory = /home/myflask #位置</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="plain plain">autostart = true #自动启动</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="plain plain">startsecs = 5</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="plain plain">autorestart = true #自动重启</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="plain plain">startretries = 3 #启动失败时的最多重试次数</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="plain plain">redirect_stderr = true #重定向stderr到stdout</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="plain plain">stdout_logfile = /var/log/flask_supervisor.log</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        3、添加nginx进程到supervisor</p>
<p>
        先新建一个log文件夹</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_166151">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash functions">mkdir</code> <code class="bash plain">/home/myflask/log</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_662777">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain"></code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain plain">command = /usr/sbin/nginx</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="plain plain">autostart = true       #随着supervisord的启动而启动</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="plain plain">autorestart = true     #自动重启</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="plain plain">startretries = 10       #启动失败时的最多重试次数</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="plain plain">exitcodes = 0         #正常退出代码</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="plain plain">stopsignal = KILL      #用来杀死进程的信号</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="plain plain">stopwaitsecs = 10      #发送SIGKILL前的等待时间</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="plain plain">redirect_stderr = true    #重定向stderr到stdout</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="plain plain">stdout_logfile = /home/myflask/log/nginx.log</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="plain plain">stdout_logfile = /home/myflask/log/nginx.err</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        4.启用supervisor管理工具</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_118961">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">supervisord -c supervisord.conf</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain plain">#sudo unlink /tmp/supervisor.sock #如上面启动失败先使用此命令之后在使用上面命令</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="plain plain">supervisorctl start all</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        至此所有配置结束,试试网站是否如正常运行吧,还可增加supervisor开机自启动(这个未试验,大家试试看吧):</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_877770">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash comments">#开机任务自动启动</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash functions">vi</code> <code class="bash plain">/etc/rc</code><code class="bash plain">.d</code><code class="bash plain">/rc</code><code class="bash plain">.</code><code class="bash functions">local</code>  <code class="bash comments">#并在最后添加</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">supervisord -c </code><code class="bash plain">/home/myflask/supervisord</code><code class="bash plain">.conf</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                         </div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash comments">#尾声:通过以上步骤,那么基本上就可以开启启动网站了!reboot试一试~~</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        ※supervisor的基本使用命令</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_356002">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">supervisord -c supervisor.conf     </code><code class="bash comments">#通过配置文件启动supervisor</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">supervisorctl status          </code><code class="bash comments">#察看supervisor的状态</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">supervisorctl reload          </code><code class="bash comments">#重新载入 配置文件</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash plain">supervisorctl start |   </code><code class="bash comments">#启动指定/所有 supervisor管理的程序进程</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash plain">supervisorctl stop |   </code><code class="bash comments">#关闭指定/所有 supervisor管理的程序进程</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。</p>
<p>
        原文链接:http://www.cnblogs.com/lethon/p/8808368.html</p>
頁: [1]
查看完整版本: 阿里云CentOS 7.4 使用Flask建站的方法