阿里雲ECS部署python及flask
阿新 • • 發佈:2018-12-18
因為原先伺服器是單位的,由於安全問題,不好放個人的東西,只好找一個虛擬主機之類的來放。但我對什麼雲或者虛擬主機都不懂,只是因為在註冊域名的時候,看到阿里雲有一個免費套餐,反正不用錢,就想試試當練手,就弄了個雲伺服器ECS基礎版。以下是就我個人的部署過程做個記錄:
- 下完單後,很快雲伺服器 ECS例項就建立成功,登入阿里雲管理控制檯,在例項中就可看到已經建立好的例項,並會看到例項的公網地址和私網地址。在其後邊的管理->基本資訊->更多->重置密碼,可以修改root密碼。而例項後面的遠端連線,可以登入上阿里雲上的這個例項。上去一看,其實就是一臺centOS的伺服器。
- 在管理控制檯裡的遠端連線是網頁版的,不好看也麻煩。可以用mac的終端連線:ssh
- 進入系統後,先對系統進行升級:
yum update
- 安裝python3:雲伺服器裡已經安裝了python2.7,但我用的是python3。
以下操作需要登入到雲伺服器
- 首先安裝編譯的相關包。其命令如下:
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel- 解壓:
xz -d Python-3.7.1.tar.xz
tar -xvf Python-3.7.1.tar- 解壓完成後,進入相應的解壓資料夾,進行編譯安裝:
./configure prefix=/usr/local/python3
make && make install
安裝完畢,/usr/local/目錄下就會有python3了- 設定軟連線
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
- 建立python的虛擬環境:
因為是測試用,所以我沒有新建使用者。直接在/root下建立一個專案test。
- mkdir /root/test
- python3 -m venv /root/test/venv
- 上傳檔案到雲伺服器
將本地建立的test專案上傳到雲伺服器,這一步是在本地機子上操作,在mac的終端上:
- 單個檔案上傳:
scp ~/myproject/test/requirements.txt [email protected]外網地址:/root/test/- 整個目錄上傳:
scp -r ~/myproject/test/ [email protected]外網地址:/root/test/
- 在虛擬環境中安裝所需的包
- 在雲伺服器端,進入剛才建立的python虛擬環境:
source /root/test/venv/bin activate- 安裝test專案所需的包(剛已經把requirements.txt上傳到雲伺服器的/root/test/gh ):
pip install -r /root/test/requirements.txt
- 依賴包安裝完成後,即可在
虛擬環境中
執行程式test。
- 雲管理控制檯->安全組->配置規則->新增安全組規則,將test專案中使用的埠新增進去。(我的test專案使用的是4000埠,見下邊的test.py程式碼)
- 在本地端使用瀏覽器開啟該雲實例的公網地址:埠,就可以看到你的test專案了。test.py如下:
from flask import Flask
app=Flask(__name__)
@app.route('/')
def index():
return '<center><h1>Hello Flask</h1></center>'
if __name__ == '__main__':
app.run(host='0.0.0.0',port=4000)
- 安裝配置uwsgi,所有操作都需在雲伺服器的虛擬環境裡。
- 安裝uwsgi:
pip install uwsgi
- 在專案中新建檔案test_uwsgi.ini,編寫如下配置配置如下:
[uwsgi]
# uwsgi 啟動時所使用的地址與埠
socket = 127.0.0.1:8000
# 外網訪問埠,如果直接用uWSGI外網,這裡由於使用了Nginx,故註釋掉
# http= :80
# 指向網站目錄
chdir = /root/test/
# python 啟動程式檔案
wsgi-file = test.py
# python 程式內用以啟動的 application 變數名
# app 是 manage.py 程式檔案內的一個變數,這個變數的型別是 Flask的 application 類
callable = app
# 處理器數
processes = 4
# 執行緒數
threads = 2
#狀態檢測地址
stats = 127.0.0.1:9191
daemonize=/var/log/uwsgi.log
- 啟動:uwsgi --ini test_uwsgi.ini
- 使用uwsgi之後,將test.py裡的
app.run(host='0.0.0.0',port=4000)
改為
app.run()
建議:
uwsgi --ini uwsgin.ini # 啟動
uwsgi --reload uwsgi/uwsgi.pid # 重啟
uwsgi --connect-and-read uwsgi/uwsgi.status # 連線並檢視狀態
uwsgi --stop uwsgi/uwsgi.pid # 停止服務
- 在雲伺服器上安裝配置nginx。
- 安裝nginx:
yum install nginx
- 配置nginx.conf。使用
find / grep nginx.conf
查詢nginx.conf的路徑,並修改其中的server{},如下:
server {
listen 80 default_server;
# listen [::]:80 default_server;
server_name test;
# root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location /static {
# alias /var/www/execution/static;
}
location / {
# 這裡指向uwsgi裡socket=*設定的地址
uwsgi_pass 127.0.0.1:8000;
include uwsgi_params;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
- 驗證配置是否正確: nginx -t
- 檢視Nginx的版本號:nginx -V
- 啟動Nginx:nginx -c /etc/nginx/nginx.conf
- 快速停止或關閉Nginx:nginx -s stop
- 正常停止或關閉Nginx:nginx -s quit
- 配置檔案修改重灌載命令:nginx -s reload
- 安裝mysql:
- 下載並新增儲存庫:
下載地址可以在https://www.mysql.com/downloads/ ->Yum Repository ->找到Red Hat Enterprise Linux 7 / Oracle Linux 7 (Architecture Independent), RPM Package(mysql80-community-release-el7-1.noarch.rpm),點選右邊的Download ->最低下的“No thanks, just start my download”即是該下載地址。
- 安裝MySQL包
yum install mysql-community-server
- 安裝完成後,啟用並啟動MySQL服務型別:
sudo systemctl enable mysqld
sudo systemctl start mysqld
- MySQL安全:
當第一次啟動MySQL伺服器時,為MySQL根使用者生成一個臨時密碼。 您可以通過執行以下命令找到密碼:
sudo grep ‘temporary password’ /var/log/mysqld.log
執行mysql_secure_installation命令來提高MySQL安裝的安全性,並重設root密碼。其後會有一些刪除匿名使用者和臨時資料庫、是否允許root遠端訪問等操作,一路“y”下去就可以了:
sudo mysql_secure_installation
連線上mysql,並建立資料庫:
mysql -u root -p
CREATE DATABASE test;