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項目所需要的必備環境了;

點擊查看python3.6編譯安裝 

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更多說明

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

修改後重新連接

資料庫創建密碼

自行百度