序 購買云服務(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
文件, 重啟mysqlservice 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.期待~