Ubuntu+Nginx+Python+Flask+Gunicorn+Supervisor

寫在前面關于配置網絡IP

1、查看當前 IP地址及網卡名等信息

ifconfig

2、在netplan中配置ip

用Vim打開配置文件

sudo vim /etc/netplan/50-cloud-init.yaml

配置完畢后用

sudu netplan apply

具體操作請見另一篇關于《Ubuntu 18.04 Server 配置靜態IP》

一、安裝及配置virtualenv

sudo apt install virtualenv

二、安裝pip

Ubuntu server 18 默認已經安裝了python3,所以直接安裝pip3

sudo apt install python3-pip

升級pip

pip3 install --upgrade pip

三、建立virtualenv

默認已經安裝了python3.6,所以指定。virtualenv默認是對應python2,如果不加參數,會報錯。

virtualenv -p /usr/bin/python3.6 venv

激活虛擬環境

source venv/bin/activate

此外,退出虛擬環境的命令為:

deactivate

四、安裝flask

用pip安裝flask,指令如下:

pip install flask

五、安裝Nginx

sudo apt install nginx

安裝即可使用,默認頁面80端口

六、安裝gunicorn

pip install gunicorn

七、安裝FTP

1、安裝FTP Server

sudo apt install vsftpd

安裝即可使用,系統的用戶即可登錄

2、開啟可寫權限

先備份vsftpd.conf,然后以管理員身份用vim打開vsftpd.conf。
不同版本的vsftpd的vsftpd.conf目錄不同,在本版本就在/etc/下

sudo cp /etc/vsftpd.conf  /etc/vsftpd.conf.bak
sudo vim /etc/vsftpd.conf

vim文本編輯器打開了conf文件,進行配置打開“寫”權限。vim操作參看我的另一篇《Vim常用操作》,就此不提。

# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES  #取消前面的#號

3、重啟服務

sudo service vsftpd restart

4、小插曲

重啟后,用FileZilla連接,總是出現“嘗試連接“ECONNREFUSED - 連接被服務器拒絕”失敗。”的錯誤。一開始以為自己配置文件時候出了錯誤,后來查了網上的資料,發現在FTP客戶端上,更改FileZilla的傳輸協議為 SFTP ,發現居然就OK了。就此不提。

八、測試Flask

1、新建Web根目錄

新建了一個wwwroot目錄,我習慣就把他和venv平行了。

2、新建項目

新建了一個helloflask項目,上傳至wwwroot下

3、運行gunnicorn

gunicorn -w 4 -b 0.0.0.0:8080 main:app
# helloflask是啟動文件名,也就是main.py,app是程序中的應用程序名(app = Flask(__name__))

九、配置Nginx

Nginx默認的安裝目錄為:/etc/nginx/
編輯配置文件conf
/etc/nginx/sites-available/default
在此之前最好備份一下,操作指令如下

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

然后用vim編輯它。

sudo vim /etc/nginx/sites-available/default 

在local中增加

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        proxy_pass http://127.0.0.1:8080;
                proxy_redirect     off;
                proxy_set_header   Host                 $http_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;

    }

Ubantu系統下Nginx啟動和停止的命令

sudo service nginx start
sudo service nginx stop

重新啟動之后,就可以用http://127.0.0.1/訪問到gunicorn的http://127.0.0.1:8080了。

九、Supervisor

1、安裝supervisor

pip install supervisor

2、 導出配置文件

隨便導到什么地方都可以的,但我習慣把它導導了venv下。

echo_supervisord_conf > supervisor.conf   # 生成 supervisor 默認配置文件

3、編輯配置文件

vim supervisor.conf

在文件的最后增加以下信息:
注意FlaskApp``main``app和路徑等,記得要和調整成實際情況


[program:FlaskApp]
command=/home/ubuntu/venv/bin/gunicorn -w 4 -b 0.0.0.0:8080 app:app  ; supervisor啟動命令
directory=/home/ubuntu/wwwroot/          ; 項目的文件夾路徑
startsecs=0                                                ; 啟動時間
stopwaitsecs=0                                          ; 終止等待時間
autostart=true                                            ; 是否自動啟動
autorestart=true                                        ; 是否自動重啟
stdout_logfile=/home/ubuntu/venv/log/gunicorn.log     ; log 日志,記得要建立log目錄
stderr_logfile=/home/ubuntu/venv/log/gunicorn.err      ; 錯誤日志,記得要建立log目錄

4 、啟動Supervisor

supervisord -c supervisor.conf

supervisor的基本使用命令

supervisord -c supervisor.conf                             通過配置文件啟動supervisor
supervisorctl -c supervisor.conf status                    察看supervisor的狀態
supervisorctl -c supervisor.conf reload                    重新載入 配置文件
supervisorctl -c supervisor.conf start [all]|[appname]     啟動指定/所有 supervisor管理的程序進程
supervisorctl -c supervisor.conf stop [all]|[appname]      關閉指定/所有 supervisor管理的程序進程

supervisor 還有一個web的管理界面,可以激活。具體如下:

[inet_http_server]         ; inet (TCP) server disabled by default
port=127.0.0.1:9001        ; (ip_address:port specifier, *:port for all iface)
username=user              ; (default is no username (open server))
password=123               ; (default is no password (open server))

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
username=user              ; should be same as http_username if set
password=123                ; should be same as http_password if set
;prompt=mysupervisor         ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history  ; use readline history if available

其他命令

有時候會出現服務占用的莫名問題,我自己也沒搞清楚,但查了資料,可以運行下述命令斷開連接,然后再運行即可。

sudo unlink /tmp/supervisor.sock
sudo unlink /var/run/supervisor.sock

十、設置為開機自啟動

目前每次重啟服務器后,還需要
1、激活venv
2、運行supervisor 
我想著能夠開機自動啟動,直接運行該多好啊。
不過還沒學會,容我偷會兒懶。
等我學會了再和大家分享。

—— 最后更新于2020.03.28 北京

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容