跳到主要內容

[Python] Python Flask + virtualenv + gunicorn + Supervisor + Nginx







作業環境: Centos 7


初始安裝

yum install gcc   #Linux上的編譯器原始碼
yum -y install wget     #Linux 下載工具



主要安裝及設定

  • 安裝 python3.6  ( linux 預設只安裝python2.7 )
    • wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
    • mkdir -p /usr/local/python3    # [-p] 遞迴建立好目錄
    • tar -zxvf Python-3.6.1.tgz    #解壓縮
    • cd Python-3.6.1
    • ./configure --prefix=/usr/local/python3  #安裝python3
    • make     #簡化編譯過程
    • make install
    • ln -s /usr/local/python3/bin/python3 /usr/bin/python3  #建立連結,可直接執行 [python3]
    • ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3     #建立連結,可直接執行 [pip3]
check
[...]# python3 -V     #顯示python版本
[...]# pip3 -V           #顯示pip 版本



---------------------------------------------------------------------------------

  • 安裝 virtualenv:python 執行在各專案的虛擬環境
    • pip install virtualenv
    • cd /var/local/<target path>
    • python3 -m virtualenv <project name>
check
[...]# cd /var/local/<target path>/ <project name>
[...]# source bin/activate         #run env
(env)[...]# python -V     #顯示python版本,和建立虛擬環境py的版本一致
(env)[...]# pip -V           #顯示pip 版本
(env)[...]# deactivate     #exit env

  • 安裝 Gunicorn:Flask 的 WSGI
    • (env)[...]# pip install gunicorn
    • (env)[...]# gunicorn <執行.py的檔名>:app -b 0.0.0.0:<port>   #在本機執行app

Gunicorn詳細設定
http://docs.gunicorn.org/en/stable/deploy.html

Gunicorn Work Type Setting
https://medium.com/@genchilu/%E6%B7%BA%E8%AB%87-gunicorn-%E5%90%84%E5%80%8B-worker-type-%E9%81%A9%E5%90%88%E7%9A%84%E6%83%85%E5%A2%83-490b20707f28



  • 如果work-type使用gevent,安裝 Gunicorn [ gevent ]:Web多 io
    • (env)[...]# pip install gevent 



---------------------------------------------------------------------------------
  • 安裝 Supervisor:進程監管工具
    • yum install python-setuptools
    • easy_install supervisor

  • 配置Supervisor
    • echo_supervisord_conf      #顯示supervisor配置
    • mkdir -p /etc/supervisor
    • echo_supervisord_conf > /etc/supervisor/supervisord.conf      #配置重新導向
    • mkdir -p /etc/supervisor/config.d
    • vim /etc/supervisor/supervisord.conf   #編輯如下

........................
[include]   #Supervisor設定檔包含config.d的所有conf檔
files = /etc/supervisor/config.d/*.conf   

.......................
[inet_http_server]   #連 ip:port 可以監控所有網站
port=0.0.0.0:9001  

.......................




  • Supervisor 設定專案的 conf
    • vim /etc/supervisor/config.d/<proj>.conf 
[program:testflaskpy]
directory=/usr/local/<target path>/<project name>
command=/usr/local/<target path>/<project name>/bin/gunicorn <執行.py的檔名>:app -b 0.0.0.0:<port>    #在虛擬環境下執行
autostart=true   #自動開啟
autorestart=true   #自動重啟
priority=99  #Supervisor優先順序
startsecs=10  #啟動成功幾秒判斷為啟動成功
stdout_logfile=<runflask.log> #log檔路徑
redirect_stderr=true #error 輸出標準資訊



  • Supervisor Command

    啟動 supervisor
    supervisord -c /etc/supervisor/supervisord.conf

    關閉 supervisor
    supervisorctl shutdown

    重啟 supervisor 所有服務
    supervisorctl reload

    新增/修改/刪除 配置更新 
    supervisorctl update

    顯示 supervisor 所有服務狀態
    supervisorctl status


    Supervisor 開機自動啟動設定
    command-centos-supervisor.html


    ---------------------------------------------------------------------------------



    Nginx 完整文章
     <-- click


    • 安裝 nginx
      • 添加CentOS 7 Nginx yum资源库
        • rpm -Uvh  http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
      • 安裝
        • yum install nginx

    • 配置nginx
      • mkdir -p /etc/nginx/config.d
      • vim /etc/nginx/nginx.conf   #編輯如下
    ........................
    http {   
        
    include /etc/nginx/conf.d/*.conf;  #Nginx設定檔包含config.d的所有conf檔
    .......................
    .......................


    • Nginx 設定專案的 conf
      • vim /etc/nginx/config.d/<proj>.conf 
    server {
          listen 80;
            server_name unapy.test.com;    #對外的Url

            location / {
            proxy_pass http://127.0.0.1:5000;    #對應內網的Url
        }
    }



    • Nginx Command

    啟動 supervisor
    service nginx start


    重啟 supervisor 所有服務
    service nginx restart







    相關參考

    Deploy flask app with nginx using gunicorn and supervisor

    Linux安装python3.6

    CentOS7——supervisor安装配置实战

    gunicorn 部署 flask 应用

    Django的部署:Nginx+Gunicorn+virtualenv+supervisor+PostgreSQL

    CentOS 7 yum 安装 Nginx


    留言

    這個網誌中的熱門文章

    [python] python 時區轉換 ( timezone )

    python 時區轉換 import datetime as dt import pytz d = dt.datetime(2019,1,1,14,0,0) #create Taipei timezone tw = pytz.timezone('Asia/Taipei') #set d timezone is 'Asia/Taipei' twdt = tw.localize(d) #change to utc time utc_dt = twdt.astimezone(pytz.utc) *注意 網路上很多使用 d.replace(tzinfo=tw)   但是可能會出現時差問題, 如下: datetime.time(23, 18, 5, tzinfo=<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>) 參考文件 python时区设置——pytz模块

    [HTML] 文字浮水印效果 text watermark css

    [.css] .info-mask {     height: 0;       position: absolute;       margin-top:120px;   } .info-opacity {     opacity: 0.8;     color: black; } .info-text {     color: gray;     font-size: 40px;     -webkit-transform: rotate(-5deg);       line-height: 60px;     max-width:1200px;     letter-spacing:3px;     padding-left:0.8em; } [.html]     <div class="info-mask">         <p class="info-text">             WaterMarkText         </p>     </div>    <table class="table table-bordered table-striped table-responsive table-hover" style="position:                 relative;" >        <tbody class="info-opacity" >        </tbody>    </table>

    [GCP] Google Cloud Platform 搬移 VM & cloud sql & datastore

    建立同VM 同專案 VM  建立快照 --> 用快照建立新的VM 跨專案 VM  建立快照  --> 用快照建立映像檔 --> 用印象檔建立新的VM Notice  開機磁碟: 自訂映像檔->選擇印象檔 搬移cloud sql step 1. A SQL [Top option] '匯出' setting Bucket and formate is 'SQL' step 2. B SQL [Top option] '匯入' setting Bucket and formate is 'SQL' Bucket path: gs://{Bucket}/file.sql Notice   不同專案的gs要有權限讀取 搬移 datastore 詳細請參考: https://cloud.google.com/datastore/docs/export-import-entities   step 1. 'new' project [menu] 資料儲存庫 -> 啟用datastore step 2. gcloud terminal gcloud auth login  gcloud config set project <projectid> gcloud beta datastore export --kinds=" <KIND> " gs:// <BUCKET> gcloud config set project new-projectid gcloud datastore export gs:// <BUCKET> Notice  跨專案gs storage auth 需要新增  xxx@appspot.gserviceaccount.com  [storage BUCKET 讀取者] 權限