Python隨著機器學習的東風越來越火了,名副其實的萬能語言奇唤,web開發(fā)是Python其中一項應用,這個系列來自《Full stack?python?guide to deployments》南誊,為大家?guī)鞵ython應用部署的最佳實踐了罪。
下面這幅圖顯示了我們Python應用的整體抽象架構(gòu),
而這幅圖顯示了每個組件的具體實現(xiàn)利花,比如web server服務(wù)器我們用的就是Nginx科侈,最流行的現(xiàn)代Http服務(wù)器。
這個系列的特點是先帶大家熟悉手動的操作炒事,再通過fabric和Ansible自動化所有的任務(wù)臀栈。Github地址:
https://github.com/mattmakai/fsp-deployment-guide。將要部署的App的代碼地址:https://github.com/mattmakai/choose-your-own-adventure-presentations挠乳。
第一章 服務(wù)器
我們開發(fā)的應用必須部署在生產(chǎn)環(huán)境的服務(wù)器上权薯,而不是你的開發(fā)筆記本,本章我們將使用VPS部署應用睡扬,你可以使用Linode或者阿里云盟蚣。你需要申請購買安裝了Ubuntu 14.04 LTS系統(tǒng)的虛擬服務(wù)器。
創(chuàng)建公鑰和私鑰:
mkdir -p fsp-deployment-guide/ssh_keys
cd fsp-deployment-guide/ssh_keys
ssh-keygen -t rsa -b 2048
當提示在哪存儲公鑰對時卖怜,輸入./prod_key
之后你有了2個新文件屎开,公鑰prod_key.pub,私鑰prod_key
cp prod_key.pub authorized_keys
接下來啟動服務(wù)器马靠,通過ssh root@{ip.address.here}連接到你的服務(wù)器奄抽,登錄服務(wù)器第一件事蔼两,對系統(tǒng)包管理進行更新:
apt-get update
apt-get upgrade
打開/etc/ssh/sshd_config文件,
將#PasswordAuthentication yes改為PasswordAuthentication no如孝,UsePAM yes改為UsePAM no宪哩,這樣服務(wù)器不能通過密碼登錄。
#PermitRootLogin yes改為PermitRootLogin no第晰,root用戶不能登錄锁孟。
現(xiàn)在我們用創(chuàng)建非root用戶組合用戶,把用戶加入用戶組并且設(shè)置密碼:
/usr/sbin/groupadd deployers
mv /etc/sudoers /etc/sudoers-backup
(cat /etc/sudoers-backup ; echo "%deployers ALL=(ALL) ALL") > /etc/sudoers
chmod 0440 /etc/sudoers
/usr/sbin/useradd -c "Matt Makai" -m -g deployers deployer
/usr/bin/passwd deployer
/usr/sbin/usermod -a -G deployers deployer
mkdir /home/deployer/.ssh
chown -R deployer /home/deployer/.ssh
chgrp -R deployers /home/deployer/.ssh茁瘦。
這一切都是在第一個root登錄的shell中完成的品抽,現(xiàn)在先別斷開這個root連接,還需要上傳key:
scp prod_key.pub authorized_keys deployer@{your.server.ip.address}:~/.ssh
接著重啟ssh服務(wù):
service ssh reload
現(xiàn)在我們不用輸入密碼甜熔,可以直接用公鑰登錄服務(wù)器啦
ssh -i ./prod_key deployer@{your.server.ip.address}