flask項目部署到雲服務器+域名綁定
- 2019 年 10 月 3 日
- 筆記
一、效果演示
首頁展示
播放頁面
該項目部署只為學習,所以用的服務器是騰訊雲服務器10元/月,域名也是在騰訊雲買的.com 55元/年 因為本人比較窮 哈哈?
這個服務器純粹是為新手準備的,1M帶寬 速度堪稱蝸牛,不過價格是真心便宜,適合練手。。。
廢話不多說下面我們開始項目部署
二、準備雲服務器
服務器鏡像我們選擇CentOS 7.2 64位
服務器買完後點擊控制台進入如下頁面
找到我們購買的服務器查看公網ip地址,我的這裡為49.232.24.154 端口默認為22
那麼22端口又是幹什麼的呢?
說白了就是我們用於連接liunx服務器的,我用的連接工具是xshell 點擊下載 ?
打開後界面如下:
在這裡我們輸入連接服務器的命令
# root為默認的主機名 ssh [email protected]
接下來會讓我們輸入服務器的密碼
如果忘記密碼需要重置密碼
三、環境準備
成功連接服務器後接下來就要準備運行Flask項目所需要的必備環境了;
mongodb安裝
yum install mongodb-server
yum install mongodb 啟動服務端 systemctl start mongod 查看端口 netstat -tunlp 默認端口為27017 查看進程 ps -ef|grep mongo
在部署項目之前需要我們將Windows上的mongodb數據庫中的數據導出
導出命令
# 在cmd命令行執行 mongoexport -d [數據庫名] -c [表名] -o [文件名字] 文件後綴為json格式
四、上傳項目文件
Windows與liunx文件互傳需要用到lrzsz
在服務器上安裝
yum install lrzsz # 安裝完直接從win拖到liunx指定目錄即可 # 通常我們將項目文件放在opt下
我們需要將Windows中的項目文件壓縮成zip文件上傳至服務器opt的目錄下
在服務器上我們需要將項目的壓縮文件解壓縮
# 解壓縮命令 unzip 【項目名.zip】
項目所依賴的python模塊
# 安裝命令 pip3 install 模塊名
將Windows上mongodb的數據文件【json格式】上傳到服務器並導入mongodb中
# 導入命令 mongoimport -d [數據庫名] -c [表名] --upsert [需要導入的文件路徑]
至此我們就將部署項目所依賴的環境和數據都上傳到了服務器,接下來開始表演。。。
五、安裝gunicorn啟動Flask服務
在生產環境中,flask自帶的服務器,無法滿足性能要求,我們這裡採用Gunicorn做wsgi容器,來部署flask程序。
Gunicorn(綠色獨角獸)是一個Python WSGI的HTTP服務器。從Ruby的獨角獸(Unicorn )項目移植。該Gunicorn服務器與各種Web框架兼容,實現非常簡單,輕量級的資源消耗。Gunicorn直接用命令啟動,不需要編寫配置文件,相對uWSGI要容易很多。 Gunicorn 服務器與許多 Web 框架廣泛兼容,簡單實現,輕鬆服務器資源並且速度相當快。
區分幾個概念:
WSGI:全稱是Web Server Gateway Interface(web服務器網關接口),它是一種規範,它是web服務器和web應用程序之間的接口。它的作用就像是橋樑,連接在web服務器和web應用框架之間。 uwsgi:是一種傳輸協議,用於定義傳輸信息的類型。 uWSGI:是實現了uwsgi協議WSGI的web服務器。 我們的部署方式: nginx + gunicorn + flask
Gunicorn 服務器作為 wsgi app 的容器,能夠與各種 Web 框架兼容(flask,django 等),得益於 gevent 等技術,使用 Gunicorn 能夠在基本不改變 wsgi app 代碼的前提下,大幅度提高 wsgi app 的性能。
安裝命令
# 在liunx命令行執行 pip3 install gunicorn
基於Gunicorn啟動我們的Flask項目
gunicorn -w 4 -b 127.0.0.1:5001 manage:app 用gunicorn啟動flask服務 -w 4 [開啟4個進程] -b 127.0.0.1:5001 [啟動flask服務的ip+端口] manage [啟動flask服務的文件名.py] app [項目實例]
這裡注意:想要用gunicorn啟動你的項目,需要先把項目所依賴的python模塊下載下來例如:pymongo
啟動Flask項目後查看Gunicorn進程命令
這樣我們的項目就在服務器上跑起來了 開森 ~~~ ???
你以為這樣就完事兒了么,no no no 我們的項目指定的是本地迴環地址【127.0.0.1】,也就是只有本機才可以訪問這個項目;
為了我們的項目能夠實現高並發我們還需要配置nginx;
六、Nginx反向代理Flask項目
Nginx (engine x) 是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務。因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特點是佔有內存少,並發能力強,事實上nginx的並發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。
nginx配置文件配置
# 進入opt目錄下 進入nginx配置文件 cd tngx231/conf/ vim nginx.conf # 進行如下配置 server { # 監聽80端口 listen 80; # 本機 server_name localhost; # 默認請求的url location / { #請求轉發到gunicorn服務器 proxy_pass http://127.0.0.1:5001; # 這裡的ip+端口就是我們啟動flak的ip和端口 #設置請求頭,並將頭信息傳遞給服務器端 proxy_set_header Host $host; } }
配置完nginx需要重啟nginx配置文件才會生效,選用平滑重啟
七、配置雲服務器的安全組防火牆
默認是方通全部端口,我們選擇第二個
端口說明
22 端口 【ssh連接服務器】 80 端口 【瀏覽網頁服務默認的端口號】 443 端口 【網頁瀏覽端口,主要是用於HTTPS服務,是提供加密和通過安全端口傳輸的另一種HTTP】 3389 端口 【Windows 2000(2003) Server遠程桌面的服務端口,可以通過這個端口,用"遠程桌面"等連接工具來連接到遠程的服務器,如果連接上了,輸入系統管理員的用戶名和密碼後,將變得可以像操作本機一樣操作遠程的電腦,因此遠程服務器一般都將這個端口修改數值或者關閉。】 ICMP 協議 【ICMP協議是一種面向無連接的協議,用於傳輸出錯報告控制信息。它是一個非常重要的協議,它對於網絡安全具有極其重要的意義。 [3] 它屬於網絡層協議,主要用於在主機與路由器之間傳遞控制信息,包括報告錯誤、交換受限控制和狀態信息等。當遇到IP數據無法訪問目標、IP路由器無法按當前的傳輸速率轉發數據包等情況時,會自動發送ICMP消息。】
至此我們就完成了Flask項目部署到雲服務器上的所有流程,可以通過公網ip訪問我們的項目了,但是ip太長了不好記,我這個記憶力。。。。。。so 決定買一個域名綁定我們的ip,這樣我們以後就可以直接在瀏覽器上輸入域名來訪問我們的項目了;
八、綁定域名
網域名稱系統(DNS,Domain Name System,將域名和IP地址相互映射的一個分佈式數據庫)是互聯網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,能夠使人更方便地訪問互聯網,而不用去記住能夠被機器直接讀取的IP地址數串。
購買前需要查詢你要註冊的域名是否已經被註冊
購買後點擊雲產品下的移動解析httpDNS
需要進行實名認證,按照提示照做就行
進入域名解析列表點擊默認是沒有記錄的,點擊添加記錄
解析域名
ok大功告成,按照我的步驟一步一步操作就可以輕鬆將你的web項目部署到雲服務器上;
最後因路徑問題找不到文件,因為我在本地把路徑寫死了,沒有寫死的可自行忽略
項目中涉及路徑查找 import os # 跟目錄 MOVIE_TXT_PATH=os.path.dirname(os.path.dirname(os.path.abspath(__name__)))
嘀 嘀 嘀 歡迎訪問我的第一個網站http://www.flaskvideo.com??? 至於為什麼域名用這個,因為我用的Flask框架搭建的視頻網站,剛開始想做影評網站的,一不小心做成視頻了。。。
九、防止被黑客攻擊
修改ssh連接端口
# 不要讓22號端口暴露在公網中 [root@VM_0_6_centos ssh]# vim sshd_config
修改後重新連接
數據庫創建密碼
自行百度