CentOS7安裝python生產(chǎn)環(huán)境

1. 安裝 Mysql

添加 MySQL YUM 源

$wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm'

$sudorpm -Uvh mysql57-community-release-el7-11.noarch.rpm

$yum repolist all | grepmysql

mysql-connectors-community/x86_64MySQL Connectors Community???????? 36

mysql-tools-community/x86_64MySQL Tools Community??????????? 47

mysql57-community/x86_64MySQL 5.7 Community Server???????? 187

安裝最新版本

$sudoyum installmysql-community-server

啟動服務(wù)

$sudo service mysqld start

$sudo systemctl start mysqld #CentOS 7

$sudo systemctl status mysqld

● mysqld.service - MySQL Community Server

??Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)

??Active: active (running) since Sat 2017-05-27 12:56:26 CST; 15s ago

?Process: 2482 ExecStartPost=/usr/bin/mysql-systemd-start post (code=exited, status=0/SUCCESS)

?Process: 2421 ExecStartPre=/usr/bin/mysql-systemd-start pre (code=exited, status=0/SUCCESS)

?Main PID: 2481 (mysqld_safe)

??CGroup: /system.slice/mysqld.service

??????├─2481 /bin/sh /usr/bin/mysqld_safe --basedir=/usr

??????└─2647 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/...

說明已經(jīng)正在運(yùn)行中了

修改密碼

$ mysql -uroot -p

這里有要求你輸入密碼橡淑,Mysql安裝時會生成一個默認(rèn)密碼苟耻,使用 grep "temporary password" /var/log/mysqld.log 命令,返回結(jié)果最后引號后面的字符串就是root的默認(rèn)密碼

mysql> ALTERUSER'root'@'localhost'IDENTIFIED BY'NewPassword';

修改編碼

在 /etc/my.cnf 中設(shè)置默認(rèn)的編碼

[client]

default-character-set = utf8

[mysqld]

default-storage-engine = INNODB

character-set-server = utf8

collation-server = utf8_general_ci #不區(qū)分大小寫

collation-server = utf8_bin #區(qū)分大小寫

collation-server = utf8_unicode_ci #比 utf8_general_ci 更準(zhǔn)確

創(chuàng)建數(shù)據(jù)庫

mysql> CREATEDATABASE CHARACTERSETutf8;

2. 安裝python3

CentOS 7 默認(rèn)安裝了 Python 2沦零,當(dāng)需要使用 Python 3 的時候纲熏,可以手動下載 Python 源碼后編譯安裝尘吗。

安裝 Python 3

sudo mkdir /usr/local/python3# 創(chuàng)建安裝目錄

$ wget --no-check-certificate https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz # 下載 Python 源文件

# 注意:wget獲取https的時候要加上:--no-check-certifica

$ tar -xzvf Python-3.6.2.tgz # 解壓縮包

$ cd Python-3.6.2 # 進(jìn)入解壓目錄

sudo ./configure --prefix=/usr/local/python3# 指定創(chuàng)建的目錄

sudo make

sudo make install# 編譯安裝

執(zhí)行./configure時可能會報錯,configure: error: no acceptable C compiler found in $PATH兢孝,這是因為未安裝合適的編譯器窿凤,安裝下就好了,

sudo yum install gcc-c++ (使用sudo yum install gcc-c++時會自動安裝/升級gcc及其他依賴的包西潘。)

編譯時報錯?ModuleNotFoundError: No module named '_ctypes'卷玉,3.7版本需要一個新的包libffi-devel,安裝此包之后再次進(jìn)行編譯安裝即可

解決方法:sudo yum -y install libffi-devel

重新編譯安裝即可

若在安裝前移除了/usr/bin下python的文件鏈接依賴喷市,此時yum無法正常使用相种,需要自己下載相關(guān)軟件包安裝,為節(jié)省讀者時間品姓,放上鏈接

#wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libffi-devel-3.0.13-18.el7.x86_64.rpm

#rpm -ivh libffi-devel-3.0.13-18.el7.x86_64.rpm

安裝完成后重新進(jìn)行make install寝并,結(jié)束后再次配置相關(guān)文件的軟連接即可

配置兩個版本共存

創(chuàng)建 python3 的軟鏈接:

$ sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3

這樣就可以通過 python 命令使用 Python 2, python3 來使用 Python 3腹备。

3.安裝 pip

$ sudoyum -y installepel-release # 首先安裝 epel 擴(kuò)展源

$ sudoyum -y installpython-pip # 安裝 python-pip

$ sudoyum clean all # 清除 cache

通過這種方式貌似只能安裝 pip2衬潦,想要安裝 Python 3 的 pip,可以通過以下的源代碼安裝方式植酥。

# 下載源代碼

$ 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 安裝

創(chuàng)建鏈接:

$ sudo ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

升級 pip

$ pip install--upgrade pip

4. 安裝 gunicorn

Gunicorn (獨(dú)角獸)是一個高效的Python WSGI Server,通常用它來運(yùn)行 wsgi application(由我們自己編寫遵循WSGI application的編寫規(guī)范) 或者 wsgi framework(如Django,Paster),地位相當(dāng)于Java中的Tomcat镀岛。 WSGI就是這樣的一個協(xié)議:它是一個Python程序和用戶請求之間的接口。WSGI服務(wù)器的作用就是接受并分析用戶的請求友驮,調(diào)用相應(yīng)的python對象完成對請求的處理漂羊,然后返回相應(yīng)的結(jié)果醋旦。 簡單來說gunicorn封裝了HTTP的底層實現(xiàn)朴皆,我們通過gunicorn啟動服務(wù)翎卓,用戶請求與服務(wù)相應(yīng)都經(jīng)過gunicorn傳輸

創(chuàng)建虛擬環(huán)境

cd /home/www/blog(到項目目錄下)

mkdir venv

python3 -m venv venv

激活虛擬環(huán)境:

source venv/bin/activate

然后根據(jù) requirements.txt 文件安裝依賴包:

pip3 install -r requirements.txt

安裝gunicorn:

pip3 install gunicorn

在項目根目錄創(chuàng)建一個wsgi.py文件拷貝入項目測試環(huán)境manage.py中的啟動代碼钧唐,不再通過manage.py啟動服務(wù),那只在開發(fā)的時候使用

啟動服務(wù):

gunicorn -w 4 -b 127.0.0.1:8000 wsgi:app(項目目錄名)

5. 安裝 Nginx

nginx 是一個高性能的web服務(wù)器吴攒。通常用來在前端做反向代理服務(wù)器宏侍。所謂正向與反向(reverse)潮太,只是英文說法翻譯。代理服務(wù)谆构,簡而言之裸扶,一個請求經(jīng)過代理服務(wù)器從局域網(wǎng)發(fā)出,然后到達(dá)互聯(lián)網(wǎng)上服務(wù)器低淡,這個過程的代理為正向代理姓言。如果一個請求,從互聯(lián)網(wǎng)過來蔗蹋,先進(jìn)入代理服務(wù)器,再由代理服務(wù)器轉(zhuǎn)發(fā)給局域網(wǎng)的目標(biāo)服務(wù)器囱淋,這個時候猪杭,代理服務(wù)器為反向代理(相對正向而言)。

正向代理:{ 客戶端 ---》 代理服務(wù)器 } ---》 服務(wù)器

反向代理:客戶端 ---》 { 代理服務(wù)器 ---》 服務(wù)器 }

{} 表示局域網(wǎng)

nginx既可以做正向妥衣,也可以做反向皂吮。

$ yum -y install nginx

啟動 nginx 服務(wù)

$ service nginx start

停止 nginx 服務(wù)

$ service nginx stop

重啟 nginx 服務(wù)

$ service nginx restart

平滑重啟

nginx配置改動了,可以重新加載而不用先關(guān)閉再打開

$ nginx -s reload

啟動后 税手,在瀏覽器中 輸入服務(wù)器的 ip 地址蜂筹,就可以看到nginx歡迎頁,到這里 yum 安裝 nginx 就完成了芦倒。

添加配置

nginx的配置文件為: /data/web/nginx/conf/nginx.conf(默認(rèn):/etc/nginx/nginx.conf)

server {

????listen 80;

????server_name adisonhyh.com;

????location / {

????????proxy_pass http://127.0.0.1:8000;

????????proxy_set_header Host $host;

????????proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

????}

}

監(jiān)聽http默認(rèn)的端口號80

server_name:個人網(wǎng)站域名

把請求代理到本機(jī)的8000端口(gunicorn啟動服務(wù)指定的端口) 剩下proxy_set_header照抄

重啟nginx服務(wù)器:/data/web/nginx/sbin/nginx -s reload

gunicorn和nginx關(guān)系:

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

nginx 的作用就是彌補(bǔ)以上問題津坑,首先作為前端服務(wù)器它可以處理一切靜態(tài)文件請求,此時 gunicorn 作為后端服務(wù)器傲霸,nginx 將會把動態(tài)請求轉(zhuǎn)發(fā)給后端服務(wù)器疆瑰,因此我們可以起多個 gunicorn 進(jìn)程,然后讓 nginx 作均衡負(fù)載轉(zhuǎn)發(fā)請求給多個 gunicorn 進(jìn)程從而提升服務(wù)器處理效率與處理能力昙啄。最后穆役,nginx 還可以配置很多安全相關(guān)、認(rèn)證相關(guān)等很多處理跟衅,可以讓你的網(wǎng)站更專注業(yè)務(wù)的編寫孵睬,把一些轉(zhuǎn)發(fā)規(guī)則等其它業(yè)務(wù)無關(guān)的事情交給 nginx 做。

配置好后打開本地瀏覽器伶跷,輸入域名掰读,應(yīng)該就能訪問了秘狞。

gunicorn進(jìn)程控制

啟動Gunicorn之后,會發(fā)現(xiàn)gunicorn啟動的web服務(wù)蹈集,無論怎么使用kill -9 進(jìn)程號都是無法殺死gunicorn烁试,因為是預(yù)先fork,只要一個進(jìn)程死掉就會重新拉起另一個進(jìn)程拢肆,這時候就需要找到父進(jìn)程减响,發(fā)送kill信號。

1郭怪、獲取進(jìn)程樹

pstree -ap|grep gunicorn

2支示、重啟進(jìn)程

kill -HUP 8326(子進(jìn)程PID)

#重啟之后可以看到父進(jìn)程PID是不變的,子進(jìn)程會生成新的PID

3鄙才、關(guān)閉進(jìn)程

kill -9 8137(父進(jìn)程PID)

6.supervisor

如果你需要進(jìn)程一直執(zhí)行颂鸿,若該進(jìn)程因各種原因中斷,也會自動重啟的話攒庵,supervisor是一個很好的選擇嘴纺。 supervisor管理進(jìn)程,是通過fork/exec的方式將這些被管理的進(jìn)程當(dāng)作supervisor的子進(jìn)程來啟動浓冒,所以我們只需要將要管理進(jìn)程的可執(zhí)行文件的路徑添加到supervisor的配置文件中就好了栽渴。此時被管理進(jìn)程被視為supervisor的子進(jìn)程,若該子進(jìn)程異常終端稳懒,則父進(jìn)程可以準(zhǔn)確的獲取子進(jìn)程異常終端的信息闲擦,通過在配置文件中設(shè)置autostart=true,可以實現(xiàn)對異常中斷的子進(jìn)程的自動重啟僚祷。

安裝 supervisor

$ pip install supervisor

$ echo_supervisord_conf > supervisor.conf? # 生成 supervisor 默認(rèn)配置文件

$ vim supervisor.conf??????????? # 修改 supervisor 配置文件佛致,添加 gunicorn 進(jìn)程管理

在項目目錄 supervisor.conf 配置文件底部添加 (注意我的工作路徑是 www/home/blog/ )

[program:blog]

command=/home/www/blog/venv/bin/gunicorn -w4 -b0.0.0.0:8000 wsgi:application? ;supervisor啟動命令

directory=/home/www/blog???????????????????????? ; 項目的文件夾路徑

startsecs=0??????????????????????????????? ; 啟動時間

stopwaitsecs=0????????????????????????????? ; 終止等待時間

autostart=false????????????????????????????? ; 是否自動啟動

autorestart=false???????????????????????????? ; 是否自動重啟

stdout_logfile=/home/www/blog/logs/gunicorn.log????????????? ; log 日志

stderr_logfile=/home/www/blog/logs/gunicorn.err????????????? ; 錯誤日志

使用 supervsior 啟動 gunicorn

$ sudosupervisord -c supervisor.conf

$ sudosupervisorctl start blog

在瀏覽器地址欄輸入配置的地址即可訪問網(wǎng)站。

7. fabric

我們使用fabric實現(xiàn)遠(yuǎn)程操作和部署辙谜。Fabric 是一個 Python 下類似于 Makefiles 的工具俺榆,但是能夠在遠(yuǎn)程服務(wù)器上執(zhí)行命令。

安裝 fabric

pip install fabric

在項目目錄下新建一個fabfile.py文件

importos

fromfabric.api importlocal, env, run, cd, sudo, prefix, settings, execute, task, put

fromfabric.contrib.files importexists

fromcontextlib importcontextmanager


env.hosts =['204.152.201.69']

env.user ='root'

env.password ='****'#密碼

env.group ="root"


DEPLOY_DIR ='/home/www/blog'

VENV_DIR =os.path.join(DEPLOY_DIR, 'venv')

VENV_PATH =os.path.join(VENV_DIR, 'bin/activate')


@contextmanager

defsource_virtualenv():

??with prefix("source {}".format(VENV_PATH)):

????yield


defupdate():

??with cd('/home/www/blog/'):

????sudo('git pull')


defrestart():

??with cd(DEPLOY_DIR):

????ifnotexists(VENV_DIR):

??????run("virtualenv {}".format(VENV_DIR))

????with settings(warn_only=True):

??????with source_virtualenv():

????????run("pip install -r {}/requirements.txt".format(DEPLOY_DIR))

????????with settings(warn_only=True):

??????????stop_result =sudo("supervisorctl -c {}/supervisor.conf stop all".format(DEPLOY_DIR))

??????????ifnotstop_result.failed:

????????????kill_result =sudo("pkill supervisor")

????????????ifnotkill_result:

??????????????sudo("supervisord -c {}/supervisor.conf".format(DEPLOY_DIR))

??????????????sudo("supervisorctl -c {}/supervisor.conf reload".format(DEPLOY_DIR))

??????????????sudo("supervisorctl -c {}/supervisor.conf status".format(DEPLOY_DIR))

??????????????sudo("supervisorctl -c {}/supervisor.conf start all".format(DEPLOY_DIR))


@task

defdeploy():

??execute(update)

??execute(restart)

現(xiàn)在代碼如果更新了装哆,可以直接在本地執(zhí)行遠(yuǎn)程部署了

fab deploy

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罐脊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蜕琴,更是在濱河造成了極大的恐慌萍桌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凌简,死亡現(xiàn)場離奇詭異上炎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門藕施,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寇损,“玉大人,你說我怎么就攤上這事裳食∶校” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵诲祸,是天一觀的道長浊吏。 經(jīng)常有香客問我,道長救氯,這世上最難降的妖魔是什么找田? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮着憨,結(jié)果婚禮上午阵,老公的妹妹穿的比我還像新娘。我一直安慰自己享扔,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布植袍。 她就那樣靜靜地躺著惧眠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪于个。 梳的紋絲不亂的頭發(fā)上氛魁,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機(jī)與錄音厅篓,去河邊找鬼秀存。 笑死,一個胖子當(dāng)著我的面吹牛羽氮,可吹牛的內(nèi)容都是我干的或链。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼档押,長吁一口氣:“原來是場噩夢啊……” “哼澳盐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起令宿,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤叼耙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后粒没,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筛婉,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年癞松,在試婚紗的時候發(fā)現(xiàn)自己被綠了爽撒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片入蛆。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖匆浙,靈堂內(nèi)的尸體忽然破棺而出安寺,到底是詐尸還是另有隱情,我是刑警寧澤首尼,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布挑庶,位于F島的核電站,受9級特大地震影響软能,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜查排,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一跋核、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砂代,春花似錦、人聲如沸露戒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荠锭。三九已至悦屏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間础爬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工叫搁, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疾党。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓惨奕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親梨撞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容