CentOS7部署Flask項目

序 購買云服務(wù)器

我這里購買的是阿里云的服務(wù)器型奥,阿里云試用中心 如果是注冊不超過六個月的用戶恼蓬,可以免費試用一個月蟆炊,先玩一玩阿趁。 注意:必須要實名認證膜蛔,還有活動開啟時間是上午十點

買完服務(wù)器之后就可以通過阿里云控制臺來查看基本信息脖阵,這里提醒各位要重置一下實例密碼皂股,等下好連接服務(wù)器的時候試用,還需要配置一下安全組命黔,之后我們寫的接口可以通過這些端口訪問呜呐。

接下來就可以通過ssh root@公網(wǎng)ip連接服務(wù)器了就斤。

一、安裝python環(huán)境

CentOS7中默認就有Python2蘑辑,所以我們這里配置一下Python3.

1. 安裝相應(yīng)的編譯工具
yum -y groupinstall "Development tools"

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

yum install -y libffi-devel zlib1g-dev
yum install zlib* -y

這里直接復(fù)制黏貼就好

2. 安裝Python3
mkdir /usr/local/python3  # 創(chuàng)建安裝目錄
wget wget https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tar.xz  # 下載python3.7.7的源文件 我這里用的是3.7.7版本, 這里大家隨意, 跟本地的python版本一致就好
tar -xvJf  Python-3.7.7.tar.xz  # 解壓縮包
cd Python-3.7.7  # 進入解壓目錄
./configure --prefix=/usr/local/python3 --enable-optimizations --with-ssl  # 指定創(chuàng)建的目錄
make && make install # 編譯安裝

執(zhí)行./configure時可能會報錯洋机,configure: error: no acceptable C compiler found in $PATH,這是因為未安裝合適的編譯器洋魂,執(zhí)行 sudo yum install gcc-c++ 安裝下就好了

3. 創(chuàng)建軟連接
ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
python3 -V  # 驗證python3版本

這樣就可以通過python 命令試用Python2绷旗, python3命令試用Python3

4.安裝pip3
wget --no-check-certificate https://github.com/pypa/pip/archive/9.0.1.tar.gz  # 下載源代碼
tar -zvxf 9.0.1.tar.gz    # 解壓文件
cd pip-9.0.1
python3 setup.py install # 使用 Python 3 安裝
ln -s /usr/local/python3/bin/pip /usr/bin/pip3  # 創(chuàng)建軟連接
pip3 -V  # 驗證一下

到這我們的Python環(huán)境安裝好了, 接下來要開始安裝一下MySQL.

二、安裝MySQL

1. 下載并安裝MySQL官方的 Yum Repository
wget 'https://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm'  # 下載 Yum Repository 這里版本也盡量選擇和本地MySQL相一致的
yum -y install mysql57-community-release-el7-10.noarch.rpm  # 安裝 Yum Repository
yum -y install mysql-community-server  # 安裝MySQL服務(wù)器
2. MySQL數(shù)據(jù)庫設(shè)置
systemctl start  mysqld.service  # 啟動MySQL
systemctl status mysqld.service  # 查看運行狀態(tài)
grep "password" /var/log/mysqld.log # 獲取root用戶的密碼
mysql -uroot -p # 登錄數(shù)據(jù)庫
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';  # 修改數(shù)據(jù)庫密碼 new password 為新密碼  一般這步會出現(xiàn)密碼復(fù)雜度不符合的錯誤提示
SHOW VARIABLES LIKE 'validate_password%';  # 查看MySQL默認密碼復(fù)雜度
set global validate_password_policy=LOW;   # 設(shè)置安全度為low
set global validate_password_length=6;     # 設(shè)置密碼長度為6位  這個無所謂
SHOW VARIABLES LIKE 'validate_password%';  # 查看MySQL默認密碼復(fù)雜度是否修改
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';  # 可以重新設(shè)置下新密碼
3. 修改數(shù)據(jù)庫默認編碼
status # 查看數(shù)據(jù)庫的狀態(tài)
--------------
...
Server characterset:    latinl   # 我們需要修改為utf8
Db     characterset:    latinl   # 我們需要修改為utf8
Client characterset:    utf8
Conn.  characterset:    utf8
...
--------------

我們需要使用exit; 命令退出mysql, 然后到 /etc 目錄下的 my.cnf 文件增加四行代碼

# 在頂部添加
[client]
default-character-set=utf8

# 在尾部添加
character-set-server=utf8
collation-server=utf8_general_ci

保存修改后的my.cnf 文件, 重啟mysql service mysqld restart , 然后輸入 status 再次查看狀態(tài), 應(yīng)該會發(fā)生變化了

到這MySQL安裝完畢

三忧设、安裝Nginx

Nginx是一款輕量級的網(wǎng)頁服務(wù)器刁标、反向代理服務(wù)器。相較于Apache址晕、lighttpd具有占有內(nèi)存少膀懈,穩(wěn)定性高等優(yōu)勢。它最常的用途是提供反向代理服務(wù)谨垃。簡而言之启搂,一個請求經(jīng)過代理服務(wù)器從局域網(wǎng)發(fā)出,然后到達互聯(lián)網(wǎng)上服務(wù)器刘陶,這個過程的代理為正向代理胳赌。如果一個請求,從互聯(lián)網(wǎng)過來匙隔,先進入代理服務(wù)器疑苫,再由代理服務(wù)器轉(zhuǎn)發(fā)給局域網(wǎng)的目標服務(wù)器,這個時候纷责,代理服務(wù)器為反向代理(相對正向而言)捍掺。

我們這里應(yīng)該在安裝Python3的時候安裝過gcc gcc-c++, 如果沒有安裝過, 可通過命令 yum install -y gcc gcc-c++ 進行安裝.

1. 安裝PCRE庫
cd /usr/local/  # 一般我們需要安裝的都會放在 local 這里
wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz  # 下載源文件
tar -zxvf pcre-8.33.tar.gz  # 解壓縮
cd pcre-8.33
./configure  # 配置
make && make install  # 安裝
2. 安裝SSL庫
cd /usr/local/
wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1j.tar.gz
tar -zxvf openssl-1.0.1j.tar.gz
cd openssl-1.0.1j
./config
make && make install
3. 安裝zlib庫
cd /usr/local/
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make && make install
4. 安裝Nginx
cd /usr/local/
wget http://nginx.org/download/nginx-1.8.0.tar.gz  # 這里安裝的是1.8.0 版本的
tar -zxvf nginx-1.8.0.tar.gz
cd nginx-1.8.0 

./configure --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_ssl_module --with-pcre=/usr/local/pcre-8.33 --with-zlib=/usr/local/zlib-1.2.11
#(注: --with-http_ssl_module:這個不加后面在nginx.conf配置ssl:on后,啟動會報nginx: [emerg] unknown directive "ssl" in /opt/nginx/conf/nginx.conf 異常)

make && make install
5.Nginx操作命令
service nginx start  # 啟動服務(wù)
service nginx restart  # 重啟 Nginx
service nginx stop  # 停止 Nginx服務(wù)
nginx -s reload  # 重新加載 Nginx 服務(wù)

這時候在瀏覽器輸入服務(wù)器ip地址, 應(yīng)該能看到Nginx的歡迎頁面, 這時Nginx安裝成功

6. 添加配置

Nginx的配置文件地址為 /etc/nginx/nginx.conf

server {
        listen 80;  # 監(jiān)聽http默認的端口號 80
        server_name ;  # 個人域名或者外網(wǎng)ip地址

        location / {
                proxy_pass http://127.0.0.1:8000; # 把請求代理到本機的8000端口(gunicorn啟動服務(wù)指定的端口) 這里一定要和項目的啟動端口一致, 才能保證項目能夠被nginx代理
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

到這里Nginx部分告一段落~

四、部署項目

1. 創(chuàng)建虛擬環(huán)境
cd /home/project/demo    # 一般都會將項目創(chuàng)建在home 下面 這里自己起文件名
mkdir venv  # 創(chuàng)建文件夾
python3 -m venv venv    # 創(chuàng)建虛擬環(huán)境
2. 激活虛擬環(huán)境
source venv/bin/activate    
3. 安裝項目依賴包

首先我們從本地項目的根目錄執(zhí)行 pip freeze > requirements.txt 生成requirements.txt 文件

pip3 install -r requirements.txt
4. 安裝gunicorn

Gunicorn (獨角獸)是一個高效的Python WSGI Server,通常用它來運行 wsgi application或者 wsgi framework,地位相當(dāng)于Java中的Tomcat再膳。

pip3 install gunicorn
5. 創(chuàng)建項目文件

這里只是做一個簡單的示例, 如果項目文件大的話, 可以先上傳git, 然后通過 sudo yum install git 安裝git, 配置下SSH, clone代碼就OK啦

touch wsgi.py  # 創(chuàng)建文件
vim wsgi.py   # 編輯文件

# 輸入下面的代碼
"""
from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'hello world'

if __name__ == '__main__':
    ap.run(host='0.0.0.0', port='8000')
"""
# 保存并退出

gunicorn -w 4 -b 0.0.0.0:8000 wsgi:app  # 啟動服務(wù)

這時候在瀏覽器輸入域名加端口號, 網(wǎng)頁應(yīng)該就會顯示 hello world 挺勿。 到這基本工作就算結(jié)束了,現(xiàn)在可以自己寫一些小的接口配合MySQL試一試啦

最后說一下Gunicorn和 Nginx的關(guān)系

gunicorn 可以單獨提供服務(wù),但生產(chǎn)環(huán)境一般不這樣做喂柒。首先靜態(tài)資源(jscssimg)會占用不少的請求資源不瓶,而對于 gunicorn 來講它本身更應(yīng)該關(guān)注實際業(yè)務(wù)的請求與處理而不應(yīng)該把資源浪費在靜態(tài)資源請求上;此外灾杰,單獨運行 gunicorn 是沒有辦法起多個進程多個端口來負載均衡的蚊丐。

Nginx 的特點是能夠做負載均衡和 HTTP 緩存,首先作為前端服務(wù)器它可以處理一切靜態(tài)文件請求艳吠,此時 gunicorn 作為后端服務(wù)器吠撮,nginx 將會把動態(tài)請求轉(zhuǎn)發(fā)給后端服務(wù)器,因此我們可以起多個 gunicorn 進程,然后讓 nginx 作均衡負載轉(zhuǎn)發(fā)請求給多個 gunicorn 進程從而提升服務(wù)器處理效率與處理能力泥兰。最后弄屡,nginx 還可以配置很多安全相關(guān)、認證相關(guān)等很多處理鞋诗,可以讓你的網(wǎng)站更專注業(yè)務(wù)的編寫膀捷,把一些轉(zhuǎn)發(fā)規(guī)則等其它業(yè)務(wù)無關(guān)的事情交給 nginx 做。

總結(jié)

配置CentOS7環(huán)境花了很長時間, 但是這只是一些最基礎(chǔ)的, 當(dāng)然現(xiàn)在也可以滿足一些小項目的接口, 不管怎么樣, 還是先做出來, 可優(yōu)化的等做好之后再進行優(yōu)化削彬。這篇文章主要記錄下,防止以后忘記怎么配置全庸。接下來打算寫一個小程序,后端就用Flask.期待~

參考資料

CentOS7安裝Python3

CentOS7安裝Nginx及配置

CentOS7安裝MySQL

CentOS 部署 flask項目

Python3+Gunicorn+Nginx 部署Flask項目

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市融痛,隨后出現(xiàn)的幾起案子壶笼,更是在濱河造成了極大的恐慌,老刑警劉巖雁刷,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件覆劈,死亡現(xiàn)場離奇詭異,居然都是意外死亡沛励,警方通過查閱死者的電腦和手機责语,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來目派,“玉大人坤候,你說我怎么就攤上這事∑蟛洌” “怎么了白筹?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谅摄。 經(jīng)常有香客問我遍蟋,道長,這世上最難降的妖魔是什么螟凭? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮它呀,結(jié)果婚禮上螺男,老公的妹妹穿的比我還像新娘。我一直安慰自己纵穿,他們只是感情好下隧,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谓媒,像睡著了一般淆院。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上句惯,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天土辩,我揣著相機與錄音支救,去河邊找鬼。 笑死拷淘,一個胖子當(dāng)著我的面吹牛各墨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播启涯,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼贬堵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了结洼?” 一聲冷哼從身側(cè)響起黎做,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎松忍,沒想到半個月后蒸殿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡挽铁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年伟桅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叽掘。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡楣铁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出更扁,到底是詐尸還是另有隱情盖腕,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布浓镜,位于F島的核電站溃列,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏膛薛。R本人自食惡果不足惜听隐,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哄啄。 院中可真熱鬧雅任,春花似錦、人聲如沸咨跌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锌半。三九已至禽车,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背殉摔。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工州胳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钦勘。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓陋葡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親彻采。 傳聞我的和親對象是個殘疾皇子腐缤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361