摘要:根據中華人民共和國信息產業部第十二次部務會議審議通過的非經營性互聯網信息服務備案管理辦法精神,在中華人民共和國境內提供非經營性互聯網信息服務,應當辦理備案。未經備案,不得在中華人民共和國境內從事非經營性互聯網信息服務。
1. 購買域名、服務器、SSL 證書</>復制代碼
當我們開發了一個簡單的 Flask 程序,想把項目部署上線,我們可以選擇傳統的部署方式或者云部署方式把項目部署上線。在本文中,筆者將使用 阿里云輕量應用服務器 安裝 CentOS 7 系統部署一個簡單的 Flask 項目。
要部署一個網站,首先要做的就是購買域名和服務器,市面上主要有阿里云、騰訊云、亞馬遜云等云服務器供應商,你可以自由選擇。除了域名和服務器外,還需要申請 SSL 證書,為開啟 HTTPS 訪問做準備。
1.1 域名對于還從未購買過域名的用戶,推薦使用阿里云和騰訊云購買域名,可以享受一元首購優惠。
阿里云 域名1元購專題
騰訊云 特價域名1元起,免費送SSL證書
1.2 服務器阿里云和騰訊云針對有專門針對學生的學生機,價格非常實惠。其中阿里云是只要你的年齡 24 歲以下自動認定為大學生,可以嘗試一下。
阿里云 云翼計劃2018
騰訊云 云+校園
1.3 SSL 證書SSL證書是數字證書的一種,類似于駕駛證、護照和營業執照的電子副本。因為配置在服務器上,也稱為SSL服務器證書。SSL 證書就是遵守 SSL 協議,由受信任的數字證書頒發機構 CA ,在驗證服務器身份后頒發,具有服務器身份驗證和數據傳輸加密功能。
阿里云和騰訊云控制臺都提供了 SSL 證書購買的功能,對于需要付費的 SSL 證書,你可以直接挑選一個價格合適的然后付錢即可。如果想申請免費的 SSL 證書,可以直接參考下方鏈接:
阿里云 阿里云申請免費SSL證書實現網站HTTPS化
騰訊云 手把手教你申請騰訊云免費SSL證書
2. 網站備案備案是指向主管機關報告事由存案以備查考。行政法角度看備案,實踐中主要是《立法法》和《法規規章備案條例》的規定。根據中華人民共和國信息產業部第十二次部務會議審議通過的《非經營性互聯網信息服務備案管理辦法》精神,在中華人民共和國境內提供非經營性互聯網信息服務,應當辦理備案。未經備案,不得在中華人民共和國境內從事非經營性互聯網信息服務。而對于沒有備案的網站將予以罰款和關閉。
簡單來說,購買了服務器之后,如果希望通過域名能正常訪問到您的網站,就需要進行網站備案。
阿里云網站備案 幫助文檔
騰訊云網站備案 幫助文檔
3. 網站域名解析這里僅以阿里云服務器控制臺為例,其它云服務器請參考官方說明文檔。
首先,選擇服務器控制臺中的 站點設置 > 域名 菜單;然后點擊 添加域名 按鈕,為你的域名同時添加 "www" 及 "@" 記錄。假設你購買的域名為 demo.com ,則同時添加的兩條記錄為:
"@" 記錄 :demo.com
"www" 記錄:www.demo.com
這兩個域名都能訪問到你的網站首頁。
4. SSH 遠程連接通過 SSH 遠程連接服務器實例,可以方便的對服務器進行管理。你可以手動輸入命令生成 SSH 密鑰連接服務器;也可以通過云服務器控制臺自動生成密鑰,然后導出密鑰到本地,再使用導出的密鑰連接服務器。這里推薦通過云服務器控制臺生成密鑰的方式。
相較于傳統的用戶名和密碼認證方式,使用 SSH 密鑰有以下優勢:
SSH 密鑰登錄認證更為安全可靠,可以杜絕暴力破解威脅。
SSH 密鑰登錄方式更簡便,只需在控制臺和本地客戶端做簡單配置即可遠程登錄實例,再次登錄時無需再輸入密碼。
4.1 控制臺生成 SSH 密鑰方式(推薦)阿里云 用戶指南:遠程連接到Linux操作系統實例
騰訊云 操作指南:登錄 Linux 實例
4.2 手動生成 SSH 密鑰方式在客戶端的 Shell 中執行下面命令生成 SSH 密鑰對:
</>復制代碼
$ ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"
在客戶端的 Shell 中執行下面命令授予 .ssh 文件夾 600 權限:
</>復制代碼
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorizes_keys
在客戶端的 Shell 中執行下面命令將客戶端私鑰拷貝到服務器:
</>復制代碼
# 執行下面的命令會被要求輸入服務器對應用戶的密碼,密碼輸入正確才能成功完成拷貝
# 記得將下面命令中的 root@47.107.132.88 替換成你自己的服務器的 SSH 地址
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@47.107.132.88
在客戶端的 Shell 中執行下面命令,進行 SSH 免密碼登陸測試:
</>復制代碼
$ ssh root@47.107.132.88
在客戶端的 ~/.bashrc 文件中為遠程連接的命令取個別名,以后就可以方便的進行登陸了:
</>復制代碼
$ vim ~/.bashrc
在文件中找到下面這一行:
</>復制代碼
# some more ls aliases
在該行代碼下面再添加一行并保存,內容如下:
</>復制代碼
alias ecs="ssh root@47.107.132.88"
在客戶端的 Shell 中執行下面命令,使剛剛修改文件生效:
</>復制代碼
$ source ~/.bashrc
在客戶端的 Shell 中執行下面命令,查看你已經設置的別名:
</>復制代碼
$ alias
5. 使用 MySQL 8 數據庫
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件。MySQL 軟件采用了雙授權政策,分為社區版和商業版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站數據庫。
5.1 安裝與初始化
在 Download MySQL Yum Repository 頁面獲取 MySQL 8 Community Yum 倉庫文件的鏈接,例如:
</>復制代碼
https://repo.mysql.com//mysql80-community-release-el7-2.noarch.rpm
通過 SSH 遠程連接服務器實例,執行下面命令切換到其它擁有 root 權限的用戶,阿里云服務器實例默認有一個擁有 root 權限的 admin 用戶,這里以切換到 admin 用戶為例子:
</>復制代碼
$ su admin
執行下面命令,下載 MySQL 8 Community Yum 倉庫文件:
</>復制代碼
$ wget https://repo.mysql.com//mysql80-community-release-el7-2.noarch.rpm
執行下面命令,安裝 MySQL 8 Community Yum 倉庫文件:
</>復制代碼
$ sudo yum localinstall mysql80-community-release-el7-2.noarch.rpm
執行下面命令,檢查 MySQL 8 Community Yum 倉庫文件是否正確安裝 :
</>復制代碼
$ yum repolist enabled | grep "mysql.*-community.*"
執行下面命令,安裝 MySQL 8 Community :
</>復制代碼
$ sudo yum install mysql-community-server
使用 service 命令管理 MySQL 服務:
</>復制代碼
$ sudo service mysqld start # 啟動 MySQL 服務
$ sudo service mysqld stop # 停止 MySQL 服務
$ sudo service mysqld restart # 重啟 MySQL 服務
$ sudo service mysqld status # 查看 MySQL 服務狀態
使用 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 服務開機自啟動
首次啟動 MySQL 服務,會自動初始化數據目錄、生成 SSL 證書和密鑰文件、創建超級用戶 " root"@"localhost" ,超級用戶的密碼被設置并存儲在錯誤日志文件中。可以使用以下命令查詢臨時密碼:
</>復制代碼
$ sudo grep "temporary password" /var/log/mysqld.log
現在你可以用你查詢到的臨時密碼連接數據庫服務器了。
5.2 連接數據庫服務器
輸入以下命令,根據提示輸入上一步獲得的臨時密碼,連接數據庫服務器:
</>復制代碼
$ mysql -u root -p
Enter password: (在這里輸入上一步查詢到的臨時密碼)
連接 MySQL 服務器后,在 MySQL 命令行中為 " root"@"localhost" 設置新密碼,使臨時密碼失效:
</>復制代碼
mysql> ALTER USER "root"@"localhost" IDENTIFIED BY "new_password";
新版 MySQL 的安全策略要求輸入的密碼要包含大寫字母、小寫字母、數字、特殊符號,推薦使用密碼管理工具生成隨機密碼來作為你的新密碼。
為了更加方便的遠程連接 MySQL 服務器,接下來需要允許 MySQL 的 root 賬戶在其它地址登陸:
</>復制代碼
mysql> USE mysql;
mysql> UPDATE user SET host = "%" WHERE host = "root";
# 這里的 host = "%" 中的 % 表示允許在任意地址登陸,你也可以設置為指定的局域網 IP、公網 IP、域名等
接下來你就可以使用 DataGrip、Navicat 等數據庫管理工具方便的管理云服務器實例上的 MySQL 了。
6. 編譯安裝 Python 3Cent OS 預裝了一個 Python 2,并且系統很多組件都依賴于 Python 2 ,筆者在安裝和使用 Python 3 時就因為這些依賴情況遇到了很多問題,最后總結下來,正確的安裝和使用 Python 3 的過程如下:
遠程連接云服務器實例,在本示例中將使用 root 用戶通過編譯安裝方式全局安裝 Python 3,你也可以選擇多帶帶為某個用戶安裝 Python 3 ,步驟上大同小異,詳細編譯安裝文檔參考 Using Python on Unix platforms 。
使用 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
下載 Python 3.6.7 版本的安裝包,其它版本的請自行去 Download Python | Python.org 獲取鏈接:
</>復制代碼
$ wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tgz
在當前用戶目錄解壓下載的 Python 安裝包:
</>復制代碼
$ tar -zxvf Python-3.6.7.tgz
進入已解壓的 Python 安裝文件根目錄:
</>復制代碼
$ cd Python-3.6.7
通過編譯配置指定 Python 的安裝位置:
</>復制代碼
$ ./configure --prefix=/usr/local/python3
使用 make 命令開始編譯安裝 Python:
</>復制代碼
$ make && make install
為了和系統自帶的 python 和 pip 命令區分開來,給剛剛安裝的 Python 建立軟鏈接,并為其設置命令別名。分別取名為 python3 、pip3 :
</>復制代碼
$ ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
$ ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
測試 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.
>>>
測試 Pip 3 是否正確安裝,輸入 pip3 命令:
</>復制代碼
$ pip3 -V
pip 10.0.0 from /usr/local/python3/lib/python3.6/site-packages/pip (python 3.6)
更新 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 文件。
執行下面命令,安裝 Pipenv :
</>復制代碼
$ pip3 install pipenv
執行下面命令,為 Pipenv 可執行文件設置軟鏈接,之后可以通過 pipenv 命令來使用 Pipenv :
</>復制代碼
$ ln -s /usr/local/python3/bin/pipenv /usr/bin/pipenv
切換到一個擁有 root 權限的用戶,這里以 admin 用戶為例:
</>復制代碼
$ su admin
在用戶目錄下為你的項目創建一個目錄,并進入項目目錄,項目名稱以 FlaskApp 為例:
</>復制代碼
$ cd ~
$ mkdir FlaskApp
$ cd FlaskApp
執行下面命令,為項目創建 Python 虛擬環境,默認將虛擬環境保存在 ~/.local/share/virtualenvs:
</>復制代碼
$ pipenv install
如果想把虛擬環境保存至項目根目錄,需要設置環境變量 PIPENV_VENV_IN_PROJECT=1 ,再執行創建命令:
</>復制代碼
$ export PIPENV_VENV_IN_PROJECT=1
$ pipenv install
虛擬環境創建完成后,執行下面命令為虛擬環境安裝 Flask 包:
</>復制代碼
$ pipenv install flask
在項目根目錄編寫一個簡單的 Flask Demo 進行測試:
</>復制代碼
# 新建并打開一個名為 app.py 的文件
$ vim app.py
輸入下面的代碼并保存:
</>復制代碼
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_flask():
return "Hello Flask!"
使用 pipenv run 調用虛擬環境中的 Python 執行 flask run 命令可以運行編寫的代碼:
</>復制代碼
$ pipenv run flask run
也可以使用 pipenv shell 命令進入虛擬環境,然后再在虛擬環境執行 flask run 命令運行程序:
</>復制代碼
$ pipenv shell
(venv)$ flask run
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 框架,實現簡單,節省服務器資源,速度相當快。
安裝 Gunicorn :
</>復制代碼
$ pipenv install gunicorn
使用 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 。
訪問 nginx packages 獲取對應版本 Nginx 的 Yum 倉庫的鏈接,例如:
</>復制代碼
http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
下載 Nginx Yum 倉庫文件:
</>復制代碼
$ wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
安裝 Nginx Yum 倉庫文件:
</>復制代碼
$ sudo yum localinstall nginx-release-centos-7-0.el7.ngx.noarch.rpm
安裝 Nginx :
</>復制代碼
$ sudo yum install nginx
進入 Nginx 配置文件目錄:
</>復制代碼
$ cd /etc/nginx/
創建 cert 目錄,并上傳你的 SSL 證書到該目錄:
</>復制代碼
$ mkdir cert
上傳 SSL 證書到 cert 目錄你可以使用 scp 命令,或者使用 FileZilla 等 SFTP 軟件,我上傳的文件如下:
</>復制代碼
$ cd cert
$ ls
ssl.key ssl.pem
進入 /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;
}
}
測試配置正確性:
</>復制代碼
$ sudo nginx -t
如果出現的提示中沒有報錯,則可以啟動 nginx 了。
啟動 nginx :
</>復制代碼
$ sudo nginx
現在,你可以使用 Gunicorn 不指定 --bind 參數運行 Flask 程序,然后嘗試從外網通過 HTTPS 訪問,判斷 nginx 反向代理是否設置成功。
使用 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 服務
使用 service 命令管理 Nginx 服務:
</>復制代碼
$ sudo service nginx start # 啟動 Nginx 服務
$ sudo service nginx stop # 停止 Nginx 服務
$ sudo service nginx restart # 重啟 Nginx 服務
$ sudo service nginx status # 查看 Nginx 服務狀態
使用 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 服務開機自啟動
如果 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 的用戶,這個用戶就可以管理它對應的進程。
安裝 Supervisor :
</>復制代碼
$ sudo yum install supervisor
檢查 Supervisor 配置文件:
</>復制代碼
$ vim /etc/supervisord.conf
找到最后一行,檢查是否是如下內容:
</>復制代碼
[include]
files = supervisord.d/*.ini
如果不是,則修改文件使其跟上面內容一致。
進入 /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"
啟動 Supervisor :
</>復制代碼
$ supervisord -c /etc/supervisord.conf
使用 service 命令管理 Supervisor 服務:
</>復制代碼
$ sudo service supervisord start # 啟動 Supervisor 服務
$ sudo service supervisord stop # 停止 Supervisor 服務
$ sudo service supervisord restart # 重啟 Supervisor 服務
$ sudo service supervisord status # 查看 Supervisor 服務狀態
使用 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 服務開機自啟動
進入 Supervisor 控制臺,管理后臺進程:
</>復制代碼
$ sudo supervisorctl
app RUNNING pid 2696, uptime 23:46:00
supervisor > help # 輸入 help 命令,查看 supervisor 支持的命令
default commands (type help ):
=====================================
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
測試,你可以先使用 Supervisor 運行進程,再通過外網訪問頁面,檢查是否正常訪問;再結束進程,看看頁面是否顯示 502 Bad Gateway 。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43155.html
摘要:創建文件,加入的進程管理中,實現服務器后臺運行是在中的進程名,隨便取啥上述代碼為使用運行。 suopervisor 一、安裝supervisor安裝 注:以下所有操作在CentOS7中進行 1.安裝CentOS7擴展軟件倉庫 sudo yum install -y epel-release 2.安裝supervisor yum install -y supervisor 3.查看安...
摘要:生產環境下,自帶的服務器,無法滿足性能要求。配置前面我們已經在系統環境下安裝了安裝好的二進制文件放在文件夾下,接下來使用來管理。參考文章探針安裝部署部署筆記在生產環境上部署使用詳解本文系工程師編譯整理。 由于字數的限制,其實本篇文章的全標題為 《如何在 virtualenv 環境下 Django + Nginx + Gunicorn+ Supervisor 搭建 Python Web》...
閱讀 3732·2021-11-24 10:23
閱讀 2776·2021-09-06 15:02
閱讀 1280·2021-08-23 09:43
閱讀 2358·2019-08-30 15:44
閱讀 3052·2019-08-30 13:18
閱讀 785·2019-08-23 16:56
閱讀 1750·2019-08-23 16:10
閱讀 544·2019-08-23 15:08