Flask網站搭建:Ubuntu 14.04 sever (阿裏雲64bit) 部署 flask + uWSGI + Ngnix
第一次寫技術類的博客,有點小激動。這篇文章整合了多方資源,將在文末附上鏈接,非常感謝作者的幫助。同時也希望這篇博客能幫助像我一樣的外行玩家快速搭建自己的網站。如果文章有什麽不妥的地方,希望大家留個腳印哈~
一、購買雲服務器+域名
1、購買服務器和域名
一開始我是購買的購買騰訊的學生特惠套餐,結果忘(lao)了(nian)續(chi)費(dai),所以只好轉投阿裏的雲翼計劃,也是相當實惠的,不過騰訊的用戶體驗是真心好(除了要每月續費外)。域名我是從新網那邊遷到萬網的,需要重新備案外加續費一年。下面就以阿裏雲為例吧。
先在雲翼計劃首頁購買雲服務器(ECS),包年有贈品,我沒有包年,但是後來也送了雲對象存儲(OSS)等功能,還有各種阿裏營銷體驗你懂得=-=。系統我用的是Ubuntu14.04 64bit,當然大家也可以選用更受歡迎的CentOS,不過我等小白還是選一個自己熟悉的更舒服一些。購買成功後系統隨時可以更換,還可以建立磁盤快照。隨時備份文件、定時備份系統非常非常重要,否則可以來高歌一曲:啊~多麽痛的領悟~。阿裏的優惠域名好像.xin後綴,我沒有試過,就不多說了,大家及時備案就好,阿裏雲和騰訊雲一樣,都有域名備多久服務器便送多久的活動。
2、連接服務器
購買成功後進入服務器實例列表,如果你本地是用的Windows系統,可以在網頁上用密碼遠程登錄,如果本地也是Linux/Mac OS的話可以使用密鑰,我本地用的是Ubuntu16.04,也就以此為例啦。將服務器關機,選擇後邊“更多”選項中的更換系統盤,選擇Ubuntu14.04 64bit,輸入計算機名稱,下載密鑰,並將其移動到可信的地方起一個你喜歡的名字。
我們需要對密鑰文件更改權限:
sudo chmod 400 /密鑰的絕對路徑
接下來就可以連接我們的服務器了:
ssh -i /密鑰的絕對路徑 root@服務器公.網.IP
二、服務器初始配置
1.創建用戶
因為root用戶的權限實在太高,手抖的話容易出事,比如說隨手rm點啥,或者一不小心就把自己的Windows系統盤格式化了,別問我怎麽知道,來和我一起高歌一曲:啊~多麽痛的領悟~
所以我們要先來新建一個用戶:
adduser demo
接下來會有一串的問題,想填就填,不想填直接回車跳過就行。
2.更改用戶組
我們需要用到超級用戶權限,所以要將新建的用戶添加到“sudo”用戶組:
gpasswd -a demo sudo
3.生成ssh密鑰
用密鑰連接服務器更快捷更安全,所以我們來創建密鑰對(註意下面在local字樣的命令都是在本地終端上進行的):
locai$ ssh-keygen
接下來會有如下輸出:
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/localuser/.ssh/id_rsa):
括號裏的內容便是即將輸出密鑰文件的絕對地址,可以在冒號後面輸入自定義的文件名。回車確認之後便會有兩個文件輸出, id_rsa 是私鑰, 如同他的名字一樣,不能拿著到處宣揚;id_rsa.pub是公鑰,稍後會上傳到服務器上。打個比方就是:我們要給服務器配一把鎖(公鑰),在本機上存的是鑰匙(私鑰),所以只要別人願意用,鎖可以多發幾枚,但鑰匙要自己保存好。
4.安裝公鑰
在服務器上創建並編輯下面的文件:
su - demo
mkdir .ssh chmod 700 .ssh nano .ssh/authorized_keys
本地讀取公鑰:
local$ cat ~/.ssh/id_rsa.pub
復制以上命令輸出的內容,粘貼到在服務器上剛剛創建的文件中並保存。
註:nano 是一款很簡便的文本編輯器,編輯好後按“CTRL+X”退出編輯,隨後按“Y”確認保存,“ENTER”確認文檔名稱。
改變文件權限:
chmod 600 .ssh/authorized_keys
5. 測試連接
local$ ssh 服務器公.網.IP
這樣是不是就簡單多了呀 。
三、安裝Flask
安裝Flask及相關依賴,保證我們寫的程序能在服務器上運行。
1.搭建虛擬環境
安裝virtualenv:
sudo apt-get update sudo apt-get install python-dev
sudo pip install virtualenv
建立工作目錄:
mkdir ~/myproject cd ~/myproject
如果你的網站已經寫好,可以傳到Github上直接 git clone http:項目地址 ,這樣是最方便的。也可以用其他的雲盤下載或者直接用sftp從本地傳到服務器。
創建虛擬環境:
virtualenv myprojectenv
在此我們默認Python=3.4.3,當然你需要在創建虛擬環境的時候添加相關選項: virtualenv --python=3.4 myprojectenv 。
激活虛擬環境:
source myprojectenv/bin/activate
2.安裝Flask及相關依賴
安裝Flask:
pip install flask
至於其他的就需要大家按需安裝了,下面是我的安裝列表,僅做參考:
======================分割線1,按需取舍=========================
創建txt文件:
nano requirements.txt
文件內容:
Flask-WTF==0.10.2 Mako==1.0.0 Markdown==2.5.1 MarkupSafe==0.23 SQLAlchemy==0.9.8 WTForms==2.0.1 Werkzeug==0.9.6 six==1.8.0 awesome-slugify==1.6 python-docx cffi Flask-WeasyPrint Pillow
先安裝相關依賴:
sudo apt-get install libcairo2-dev libffi-dev libpango-1.0-0 sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk
需要更高版本的pango需要自行下載安裝,如果還缺少其他東西的話,根據終端提示來安裝就可以。
安裝我們表單的內容:
pip install -r requirements.txt
註意看好一定要已經進入了虛擬環境哈,強迫癥裝到全局會很難受的。
==========================END1=============================
如果還沒有寫好自己的網頁也沒關系,我們還是以hello world!為例,建一個簡單的程序:
nano myproject.py
from flask import Flask application = Flask(__name__) @application.route("/") def hello(): return "<h1 style=‘color:blue‘>Hello World!</h1>" if __name__ == "__main__": application.run(host=‘0.0.0.0‘)
退出保存。
運行程序:
python myproject.py
成功的話終端會輸出: * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
四、配置服務器安全組
為了我們的測試工作可以順利進行,需要在阿裏雲的控制臺配置安全組,開放相關端口的訪問權限。
首先進入阿裏雲的控制臺找到正在運行中的實例,點擊右側的”更多->安全組配置“,進入安全組的規則列表,點擊配置規則->添加安全組規則。
然後端口範圍填寫5000/5000,授權對象0.0.0.0/0,其他保持默認,我們便可以訪問服務器的5000端口了。
接下來重復以上步驟,添加8000和80端口的訪問權限。
這樣我們在本地瀏覽器輸入 服務器IP:5000 來訪問網頁了,試一試有沒有正常輸出藍色的Hello World!
五、配置WSGI與Nginx
1、安裝
sudo apt install nginx pip install uwsgi
創建wsgi.py文件:
nano ~/myproject/wsgi.py
文件內容:
from myproject import application if __name__ == "__main__": application.run()
這個文件在uwsgi運行時會自動調用。
來測試一下uwsgi有沒有正常工作:
uwsgi --socket 0.0.0.0:8000 --protocol=http -w wsgi:application
在本地瀏覽器訪問 服務器IP:8000 ,便會看到熟悉的字樣。
成功之後我們就不需要在虛擬環境裏了,可以交給uwsgi操作。
deactivate
2、配置uwsgi
創建配置文件:
nano ~/myproject/myproject.ini
文件內容:
[uwsgi] module = wsgi:application
master = true
processes = 5
socket = myproject.sock
chmod-socket = 660
vacuum = true
die-on-term = true
由於我在這方面懂得也不多,只是看別人的教程而已,就不托大了,大家可以自己深入研究。
創建自動啟動文件,保證在服務器重啟之後我們的程序還可以正常運行:
sudo nano /etc/init/myproject.conf
文件內容:
description "uWSGI server instance configured to serve myproject" start on runlevel [2345] stop on runlevel [!2345] setuid demo setgid www-data env PATH=/home/demo/myproject/myprojectenv/bin chdir /home/demo/myproject exec uwsgi --ini myproject.ini
保存退出後,啟動配置:
sudo start myproject
3、配置Nignx代理
sudo nano /etc/nginx/sites-available/myproject
文件內容:
server { listen 80; server_name 服務器地址或域名;
location / {
include uwsgi_params;
uwsgi_pass unix:/home/demo/myproject/myproject.sock;
}
}
監聽服務器的80端口,也就是我們瀏覽器一般會訪問的端口。
保存退出,鏈接文件,保證配置成功:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
刪除默認的配置文件:
sudo rm /etc/nginx/sites-available/default
測試一下Nginx配置是否正常:
sudo nginx -t
沒有錯誤之後重啟nginx:
sudo service nginx restart
六、測試網頁訪問
最後一步啦,在瀏覽器輸入域名,還沒備案通過的輸入地址,看下能不能正常訪問了。
一切正常之後我們就可以關閉不需要的端口了,還是在阿裏雲安全組配置那裏,刪除我們創建的8000和5000,留下瀏覽器需要訪問的80端口就可以啦。
祝好~
參考資料:
https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-14-04
https://www.cnblogs.com/Ray-liang/p/4173923.html
Flask網站搭建:Ubuntu 14.04 sever (阿裏雲64bit) 部署 flask + uWSGI + Ngnix