CentOS 下使用 Pipenv + Gunicorn + Supervisor 部署 Flask 網站

當我們開發了一個簡單的 Flask 程序,想把項目部署上線,我們可以選擇傳統的部署方式或者雲部署方式把項目部署上線。在本文中,筆者將使用 阿里雲輕量應用服務器 安裝 CentOS 7 系統部署一個簡單的 Flask 項目。

1. 購買域名、服務器、SSL 證書

要部署一個網站,首先要做的就是購買域名和服務器,市面上主要有阿里雲、騰訊雲、亞馬遜雲等雲服務器供應商,你可以自由選擇。除了域名和服務器外,還需要申請 SSL 證書,爲開啓 HTTPS 訪問做準備。

1.1 域名

對於還從未購買過域名的用戶,推薦使用阿里雲和騰訊雲購買域名,可以享受一元首購優惠。

1.2 服務器

阿里雲和騰訊雲針對有專門針對學生的學生機,價格非常實惠。其中阿里雲是隻要你的年齡 24 歲以下自動認定爲大學生,可以嘗試一下。

1.3 SSL 證書

SSL證書是數字證書的一種,類似於駕駛證、護照和營業執照的電子副本。因爲配置在服務器上,也稱爲SSL服務器證書。SSL 證書就是遵守 SSL 協議,由受信任的數字證書頒發機構 CA ,在驗證服務器身份後頒發,具有服務器身份驗證和數據傳輸加密功能。

阿里雲和騰訊雲控制檯都提供了 SSL 證書購買的功能,對於需要付費的 SSL 證書,你可以直接挑選一個價格合適的然後付錢即可。如果想申請免費的 SSL 證書,可以直接參考下方鏈接:

2. 網站備案

備案是指向主管機關報告事由存案以備查考。行政法角度看備案,實踐中主要是《立法法》和《法規規章備案條例》的規定。根據中華人民共和國信息產業部第十二次部務會議審議通過的《非經營性互聯網信息服務備案管理辦法》精神,在中華人民共和國境內提供非經營性互聯網信息服務,應當辦理備案。未經備案,不得在中華人民共和國境內從事非經營性互聯網信息服務。而對於沒有備案的網站將予以罰款和關閉。

簡單來說,購買了服務器之後,如果希望通過域名能正常訪問到您的網站,就需要進行網站備案。

3. 網站域名解析

這裏僅以阿里雲服務器控制檯爲例,其它雲服務器請參考官方說明文檔。

首先,選擇服務器控制檯中的 站點設置 > 域名 菜單;然後點擊 添加域名 按鈕,爲你的域名同時添加 'www' 及 '@' 記錄。假設你購買的域名爲 demo.com ,則同時添加的兩條記錄爲:

  • '@' 記錄 :demo.com
  • 'www' 記錄:www.demo.com

這兩個域名都能訪問到你的網站首頁。

圖片描述

4. SSH 遠程連接

通過 SSH 遠程連接服務器實例,可以方便的對服務器進行管理。你可以手動輸入命令生成 SSH 密鑰連接服務器;也可以通過雲服務器控制檯自動生成密鑰,然後導出密鑰到本地,再使用導出的密鑰連接服務器。這裏推薦通過雲服務器控制檯生成密鑰的方式。

相較於傳統的用戶名和密碼認證方式,使用 SSH 密鑰有以下優勢:

  • SSH 密鑰登錄認證更爲安全可靠,可以杜絕暴力破解威脅。
  • SSH 密鑰登錄方式更簡便,只需在控制檯和本地客戶端做簡單配置即可遠程登錄實例,再次登錄時無需再輸入密碼。

4.1 控制檯生成 SSH 密鑰方式(推薦)

4.2 手動生成 SSH 密鑰方式

在客戶端的 Shell 中執行下面命令生成 SSH 密鑰對:

$ ssh-keygen -t rsa -b 4096 -C "[email protected]"

在客戶端的 Shell 中執行下面命令授予 .ssh 文件夾 600 權限:

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorizes_keys

在客戶端的 Shell 中執行下面命令將客戶端私鑰拷貝到服務器:

# 執行下面的命令會被要求輸入服務器對應用戶的密碼,密碼輸入正確才能成功完成拷貝
# 記得將下面命令中的 [email protected] 替換成你自己的服務器的 SSH 地址
$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

在客戶端的 Shell 中執行下面命令,進行 SSH 免密碼登陸測試:

$ ssh [email protected]

在客戶端的 ~/.bashrc 文件中爲遠程連接的命令取個別名,以後就可以方便的進行登陸了:

$ vim ~/.bashrc

在文件中找到下面這一行:

# some more ls aliases

在該行代碼下面再添加一行並保存,內容如下:

alias ecs='ssh [email protected]'

在客戶端的 Shell 中執行下面命令,使剛剛修改文件生效:

$ source ~/.bashrc

在客戶端的 Shell 中執行下面命令,查看你已經設置的別名:

$ alias

5. 使用 MySQL 8 數據庫

MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 是最流行的關係型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關係數據庫管理系統) 應用軟件。MySQL 軟件採用了雙授權政策,分爲社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作爲網站數據庫。

5.1 安裝與初始化

  1. Download MySQL Yum Repository 頁面獲取 MySQL 8 Community Yum 倉庫文件的鏈接,例如:

    https://repo.mysql.com//mysql80-community-release-el7-2.noarch.rpm
  2. 通過 SSH 遠程連接服務器實例,執行下面命令切換到其它擁有 root 權限的用戶,阿里雲服務器實例默認有一個擁有 root 權限的 admin 用戶,這裏以切換到 admin 用戶爲例子:

    $ su admin
  3. 執行下面命令,下載 MySQL 8 Community Yum 倉庫文件:

    $ wget https://repo.mysql.com//mysql80-community-release-el7-2.noarch.rpm
  4. 執行下面命令,安裝 MySQL 8 Community Yum 倉庫文件:

    $ sudo yum localinstall mysql80-community-release-el7-2.noarch.rpm
  5. 執行下面命令,檢查 MySQL 8 Community Yum 倉庫文件是否正確安裝 :

    $ yum repolist enabled | grep "mysql.*-community.*"
  6. 執行下面命令,安裝 MySQL 8 Community :

    $ sudo yum install mysql-community-server
  7. 使用 service 命令管理 MySQL 服務:

    $ sudo service mysqld start          # 啓動 MySQL 服務
    $ sudo service mysqld stop           # 停止 MySQL 服務
    $ sudo service mysqld restart        # 重啓 MySQL 服務
    $ sudo service mysqld status         # 查看 MySQL 服務狀態
  8. 使用 systemctl 命令管理 MySQL 服務:

    $ sudo systemctl start mysqld   # 啓動 MySQL 服務
    $ sudo systemctl stop mysqld    # 停止 MySQL 服務
    $ sudo systemctl restart mysqld # 重啓 MySQL 服務
    $ sudo systemctl status mysqld  # 查看 MySQL 服務狀態
    $ sudo systemctl enable mysqld  # 設置 MySQL 服務開機自啓動
    $ sudo systemctl disable mysqld # 關閉 MySQL 服務開機自啓動
  9. 首次啓動 MySQL 服務,會自動初始化數據目錄、生成 SSL 證書和密鑰文件、創建超級用戶 ' root'@'localhost' ,超級用戶的密碼被設置並存儲在錯誤日誌文件中。可以使用以下命令查詢臨時密碼:

    $ sudo grep 'temporary password' /var/log/mysqld.log
  10. 現在你可以用你查詢到的臨時密碼連接數據庫服務器了。

5.2 連接數據庫服務器

  1. 輸入以下命令,根據提示輸入上一步獲得的臨時密碼,連接數據庫服務器:

    $ mysql -u root -p
    Enter password: (在這裏輸入上一步查詢到的臨時密碼) 
  2. 連接 MySQL 服務器後,在 MySQL 命令行中爲 ' root'@'localhost' 設置新密碼,使臨時密碼失效:

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

    新版 MySQL 的安全策略要求輸入的密碼要包含大寫字母、小寫字母、數字、特殊符號,推薦使用密碼管理工具生成隨機密碼來作爲你的新密碼。

  3. 爲了更加方便的遠程連接 MySQL 服務器,接下來需要允許 MySQL 的 root 賬戶在其它地址登陸:

    mysql> USE mysql;
    mysql> UPDATE user SET host = '%' WHERE host = 'root';
    # 這裏的 host = '%' 中的 % 表示允許在任意地址登陸,你也可以設置爲指定的局域網 IP、公網 IP、域名等
  4. 接下來你就可以使用 DataGrip、Navicat 等數據庫管理工具方便的管理雲服務器實例上的 MySQL 了。

6. 編譯安裝 Python 3

Cent OS 預裝了一個 Python 2,並且系統很多組件都依賴於 Python 2 ,筆者在安裝和使用 Python 3 時就因爲這些依賴情況遇到了很多問題,最後總結下來,正確的安裝和使用 Python 3 的過程如下:

  1. 遠程連接雲服務器實例,在本示例中將使用 root 用戶通過編譯安裝方式全局安裝 Python 3,你也可以選擇單獨爲某個用戶安裝 Python 3 ,步驟上大同小異,詳細編譯安裝文檔參考 Using Python on Unix platforms
  2. 使用 Yum 安裝編譯安裝 Python 3 時依賴的包:

    $ yum -y groupinstall "Development tools"
    $ yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
  3. 下載 Python 3.6.7 版本的安裝包,其它版本的請自行去 Download Python | Python.org 獲取鏈接:

    $ wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tgz
  4. 在當前用戶目錄解壓下載的 Python 安裝包:

    $ tar -zxvf Python-3.6.7.tgz
  5. 進入已解壓的 Python 安裝文件根目錄:

    $ cd Python-3.6.7
  6. 通過編譯配置指定 Python 的安裝位置:

    $ ./configure --prefix=/usr/local/python3
  7. 使用 make 命令開始編譯安裝 Python:

    $ make && make install
  8. 爲了和系統自帶的 pythonpip 命令區分開來,給剛剛安裝的 Python 建立軟鏈接,併爲其設置命令別名。分別取名爲 python3pip3

    $ ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
    $ ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
  9. 測試 Python 3 是否正確安裝,輸入 python3 命令:

    $ python3
    Python 3.6.7 (default, Feb  4 2019, 19:05:27)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
  10. 測試 Pip 3 是否正確安裝,輸入 pip3 命令:

    $ pip3 -V
    pip 10.0.0 from /usr/local/python3/lib/python3.6/site-packages/pip (python 3.6)
  11. 更新 Pip :

    $ pip3 install --upgrade pip

7. 使用 Pipenv 管理 Python 虛擬環境

Pipenv 是 Pipfile 主要倡導者、requests 作者 Kenneth Reitz 寫的一個命令行工具,主要包含了 Pipfile、pip、click、requests 和 virtualenv ,使用 Pipenv 可以方便的管理 Python 虛擬環境、管理依賴文件。Pipfile 和 Pipenv本來都是Kenneth Reitz 的個人項目,後來貢獻給了 pypa 組織。Pipfile 是社區擬定的依賴管理文件,用於替代過於簡陋的 requirements.txt 文件。

  1. 執行下面命令,安裝 Pipenv :

    $ pip3 install pipenv
  2. 執行下面命令,爲 Pipenv 可執行文件設置軟鏈接,之後可以通過 pipenv 命令來使用 Pipenv :

    $ ln -s /usr/local/python3/bin/pipenv /usr/bin/pipenv
  3. 切換到一個擁有 root 權限的用戶,這裏以 admin 用戶爲例:

    $ su admin
  4. 在用戶目錄下爲你的項目創建一個目錄,並進入項目目錄,項目名稱以 FlaskApp 爲例:

    $ cd ~
    $ mkdir FlaskApp
    $ cd FlaskApp
  5. 執行下面命令,爲項目創建 Python 虛擬環境,默認將虛擬環境保存在 ~/.local/share/virtualenvs

    $ pipenv install

    如果想把虛擬環境保存至項目根目錄,需要設置環境變量 PIPENV_VENV_IN_PROJECT=1 ,再執行創建命令:

    $ export PIPENV_VENV_IN_PROJECT=1
    $ pipenv install
  6. 虛擬環境創建完成後,執行下面命令爲虛擬環境安裝 Flask 包:

    $ pipenv install flask
  7. 在項目根目錄編寫一個簡單的 Flask Demo 進行測試:

    # 新建並打開一個名爲 app.py 的文件
    $ vim app.py

    輸入下面的代碼並保存:

    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def hello_flask():
        return 'Hello Flask!'
    
  8. 使用 pipenv run 調用虛擬環境中的 Python 執行 flask run 命令可以運行編寫的代碼:

    $ pipenv run flask run

    也可以使用 pipenv shell 命令進入虛擬環境,然後再在虛擬環境執行 flask run 命令運行程序:

    $ pipenv shell
    (venv)$ flask run
  9. Flask 默認運行的地址和端口爲 http://127.0.0.1:5000 ,雲服務器實例不包含桌面環境的話,你很難去瀏覽這個頁面。你可以設置 flask 運行的地址和端口,然後嘗試從外網訪問該頁面。先執行下面命令,讓 flask 允許外網訪問,並且監聽 80 端口:

    $ pipenv run flask run --host 0.0.0.0 --port 80

    然後你可以通過你的服務器公網 IP 或 域名 直接訪問到該頁面。

8. 使用 Gunicorn 運行程序

flask run 命令啓動的開發服務器是由 Werkzeug 提供的。細分的話, Werkzeug 提供的這個開發服務器應該被稱爲 WSGI 服務器,而不是單純意義上的 Web 服務器。在生產環境中,我們需要一個更強健、性能更高的 WSGI 服務器。這些 WSGI 服務器也被稱爲獨立 WSGI 容器,因爲它們可以承載我們編寫的 WSGI 程序,然後處理 HTTP 請求和響應。這通常有很多選擇,比如 Gunicorn 。 Gunicorn 是 Green Unicorn 的簡寫,意爲綠色獨角獸,是一款專爲 UNIX 設計的 Python WSGI HTTP 服務器。是一個Pre-fork 工人模型。Gunicorn 服務器廣泛兼容各種 web 框架,實現簡單,節省服務器資源,速度相當快。

  1. 安裝 Gunicorn :

    $ pipenv install gunicorn
  2. 使用 Gunicorn 運行一個 WSGI 程序:

    $ pipenv run gunicorn --workers=4 --bind=0.0.0.0:8000 app:app
    # --workers = 4 表示使用 4 worker 進程運行程序,建議 worker 數量爲 ( CPU 核心數 × 2 ) + 1
    # Gunicorn 默認只允許從本地 8000 端口訪問,--bind=0.0.0.0:8000 表示允許使用 8000 端口從外部訪問
    # app:app 冒號前面的 app 表示 app.py 文件,冒號後面的 app 表示 flask 程序的名稱

    也可以把 --workers 簡寫爲 -w--bind 簡寫爲 -b ,如下:

    # 沒有 -b 或者 --bind 參數,默認監聽 127.0.0.1:8000
    $ pipenv run gunicorn -w 4 app:app
    
    # 指定 -b 0.0.0.0:8000 監聽 8000 端口的外部請求
    $ pipenv run gunicorn -w 4 -b 0.0.0.0:8000 app:app

9. 使用 Nginx 提供反向代理

像 Gunicorn 這類 WSGI 服務器內置的 Web 服務器還不夠強健,雖然程序可以正常運行,但是更流行的部署方式是使用一個常規的 Web 服務器運行在前端,爲 WSGI 提供反向代理。比較流行的開源 Web 服務器有 Nginx 、Apache 等,這裏選擇使用和 Gunicorn 集成良好的 Nginx 。

  1. 訪問 nginx packages 獲取對應版本 Nginx 的 Yum 倉庫的鏈接,例如:

    http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
  2. 下載 Nginx Yum 倉庫文件:

    $ wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
  3. 安裝 Nginx Yum 倉庫文件:

    $ sudo yum localinstall nginx-release-centos-7-0.el7.ngx.noarch.rpm
  4. 安裝 Nginx :

    $ sudo yum install nginx
  5. 進入 Nginx 配置文件目錄:

    $ cd /etc/nginx/
  6. 創建 cert 目錄,並上傳你的 SSL 證書到該目錄:

    $ mkdir cert

    上傳 SSL 證書到 cert 目錄你可以使用 scp 命令,或者使用 FileZilla 等 SFTP 軟件,我上傳的文件如下:

    $ cd cert
    $ ls
    ssl.key  ssl.pem
  7. 進入 /etc/nginx/conf.d/ 目錄編輯默認的配置文件 default.conf

    $ cd /etc/nginx/conf.d/
    $ vim default.conf

    刪除文件中原有的全部內容,新增下面內容並保存:

    # 監聽 http 請求,強制跳轉到 https
    server {
        listen      80;
        
        # 這裏的 your.domain.com 換成你購買的域名
        server_name your.domain.com;
        
        # 這裏的 your.domain.com 換成你購買的域名
        return 301 https://your.domain.com$request_uri;
    }
    
    # 監聽 https 請求
    server {
        listen      443;
        
        # 這裏的 your.domain.com 換成你購買的域名
        server_name your.domain.com;
        
        access_log  /var/log/nginx/host.access.log;
        error_log   /var/log/nginx/host.error.log;
    
        ssl on;
        
        # 這部分的 ssl.pem ssl.key 換成你上傳的與其對應的文件
        ssl_certificate             cert/ssl.pem;
        ssl_certificate_key         cert/ssl.key;
    
        ssl_session_cache           shared:SSL:1m;
        ssl_session_timeout         5m;
    
        ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers                 ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers   on;
    
        location / {
            # 轉發請求給 Gunicorn
            proxy_pass      http://127.0.0.1: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;
            proxy_set_header    X-Forwarded-Proto   $scheme;
        }
        
        # 處理靜態文件夾中的靜態文件
        location /static {
            alias   /home/admin/FlaskApp/static/;
            
            # 設置靜態文件緩存過期時間爲 30 天
            expires  30d;
        }
    }
  8. 測試配置正確性:

    $ sudo nginx -t

    如果出現的提示中沒有報錯,則可以啓動 nginx 了。

  9. 啓動 nginx :

    $ sudo nginx

    現在,你可以使用 Gunicorn 不指定 --bind 參數運行 Flask 程序,然後嘗試從外網通過 HTTPS 訪問,判斷 nginx 反向代理是否設置成功。

  10. 使用 nginx 命令管理 Nginx :

    $ sudo nginx            # 啓動 Nginx 服務
    $ sudo nginx -s stop    # 關閉 Nginx 服務
    $ sudo nginx -s reload  # 重載 Nginx 服務
    $ sudo nginx -s reopen  # 重啓 Nginx 服務
    $ sudo nginx -s quit    # 退出 Nginx 服務
  11. 使用 service 命令管理 Nginx 服務:

    $ sudo service nginx start          # 啓動 Nginx 服務
    $ sudo service nginx stop           # 停止 Nginx 服務
    $ sudo service nginx restart        # 重啓 Nginx 服務
    $ sudo service nginx status         # 查看 Nginx 服務狀態
  12. 使用 systemctl 命令管理 Nginx 服務:

    $ sudo systemctl start nginx   # 啓動 Nginx 服務
    $ sudo systemctl stop nginx    # 停止 Nginx 服務
    $ sudo systemctl restart nginx # 重啓 Nginx 服務
    $ sudo systemctl status nginx  # 查看 Nginx 服務狀態
    $ sudo systemctl enable nginx  # 設置 Nginx 服務開機自啓動
    $ sudo systemctl disable nginx # 關閉 Nginx 服務開機自啓動
  13. 如果 Nginx 已經啓動卻又被啓動了一次,可能會報錯。比如:找不到 nginx.pid 文件、提示 XX 端口已經被使用等等...,解決辦法如下:

    # 殺掉佔用 80 端口的進程
    $ sudo fuser -k 80/tcp
    
    # 殺掉佔用 443 端口的進程
    $ sudo fuser -k 443/tcp
    
    # 使用默認配置文件重新啓動 Nginx
    $ sudo nginx -c /etc/nginx/nginx.conf

10. 使用 Supervisor 管理進程

Supervisor 是用 Python 開發的一套通用的進程管理程序,能將一個普通的命令行進程變爲後臺 daemon ,並監控進程狀態,異常退出時能自動重啓。它是通過 fork/exec 的方式把這些被管理的進程當作 Supervisor 的子進程來啓動,這樣只要在 Supervisor 的配置文件中把要管理的進程的可執行文件的路徑寫進去即可。也實現當子進程掛掉的時候,父進程可以準確獲取子進程掛掉的信息的,可以選擇是否自己啓動和報警。Supervisor 還提供了一個功能,可以爲 supervisord 或者每個子進程設置一個非 root 的用戶,這個用戶就可以管理它對應的進程。

  1. 安裝 Supervisor :

    $ sudo yum install supervisor
  2. 檢查 Supervisor 配置文件:

    $ vim /etc/supervisord.conf

    找到最後一行,檢查是否是如下內容:

    [include]
    files = supervisord.d/*.ini

    如果不是,則修改文件使其跟上面內容一致。

  3. 進入 /etc/supervisord.d/ 目錄, 爲項目創建一個 Supervisor 配置文件:

    $ cd /etc/supervisord.d/
    $ vi FlaskApp.ini

    配置文件內容爲:

    [program:app]
    ; 下面命令中的 app:app 請修改爲你實際部署時的項目名稱
    command=pipenv run gunicorn -w 4 app:app
    
    ; 下面的路徑請修改爲你創建的項目的根目錄
    directory=/home/admin/FlaskApp
    
    autostart=true
    autorestart=true
    stopsignal=QUIT
    stopasgroup=true
    killasgroup=true
    
    ; 下面的用戶請修改爲創建該項目的用戶
    user=admin
    
    redirect_stderr=true
    
    ; log 文件的路徑你可以重新自定義
    stdout_logfile=/home/admin/FlaskApp/log/supervisor.log
    
    ; 解決編碼問題
    [supervisord]
    environment=LC_ALL='en_US.UTF-8',LANG='en_US.UTF-8'
  4. 啓動 Supervisor :

    $ supervisord -c /etc/supervisord.conf
  5. 使用 service 命令管理 Supervisor 服務:

    $ sudo service supervisord start          # 啓動 Supervisor 服務
    $ sudo service supervisord stop           # 停止 Supervisor 服務
    $ sudo service supervisord restart        # 重啓 Supervisor 服務
    $ sudo service supervisord status         # 查看 Supervisor 服務狀態
  6. 使用 systemctl 命令管理 Supervisor 服務:

    $ sudo systemctl start supervisord   # 啓動 Supervisor 服務
    $ sudo systemctl stop supervisord    # 停止 Supervisor 服務
    $ sudo systemctl restart supervisord # 重啓 Supervisor 服務
    $ sudo systemctl status supervisord  # 查看 Supervisor 服務狀態
    $ sudo systemctl enable supervisord  # 設置 Supervisor 服務開機自啓動
    $ sudo systemctl disable supervisord # 關閉 Supervisor 服務開機自啓動
  7. 進入 Supervisor 控制檯,管理後臺進程:

    $ sudo supervisorctl
    app                              RUNNING   pid 2696, uptime 23:46:00
    supervisor > help # 輸入 help 命令,查看 supervisor 支持的命令
    
    default commands (type help <topic>):
    =====================================
    add    clear  fg        open  quit    remove  restart   start   stop  update
    avail  exit   maintail  pid   reload  reread  shutdown  status  tail  version

    使用 status 命令,查看正在運行的後臺進程:

    supervisor> status
    app                              RUNNING   pid 2696, uptime 23:49:37

    使用 stop 命令,結束指定的進程:

    supervisor> stop app
    app: stopped

    使用 start 命令,啓動指定的進程:

    supervisor> start app
    app: started
  8. 測試,你可以先使用 Supervisor 運行進程,再通過外網訪問頁面,檢查是否正常訪問;再結束進程,看看頁面是否顯示 502 Bad Gateway
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章