Python随着机器学习的东风越来越火了,名副其实的万能语言,web开发是Python其中一项应用,这个系列来自《Full stack python guide to deployments》,为大家带来Python应用部署的最佳实践。
下面这幅图显示了我们Python应用的整体抽象架构,
而这幅图显示了每个组件的具体实现,比如web server服务器我们用的就是Nginx,最流行的现代Http服务器。
这个系列的特点是先带大家熟悉手动的操作,再通过fabric和Ansible自动化所有的任务。Github地址:
https://github.com/mattmakai/fsp-deployment-guide。将要部署的App的代码地址:https://github.com/mattmakai/choose-your-own-adventure-presentations。
第一章 服务器
我们开发的应用必须部署在生产环境的服务器上,而不是你的开发笔记本,本章我们将使用VPS部署应用,你可以使用Linode或者阿里云。你需要申请购买安装了Ubuntu 14.04 LTS系统的虚拟服务器。
创建公钥和私钥:
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
接下来启动服务器,通过ssh root@{ip.address.here}连接到你的服务器,登录服务器第一件事,对系统包管理进行更新:
apt-get update
apt-get upgrade
打开/etc/ssh/sshd_config文件,
将#PasswordAuthentication yes改为PasswordAuthentication no,UsePAM yes改为UsePAM no,这样服务器不能通过密码登录。
#PermitRootLogin yes改为PermitRootLogin no,root用户不能登录。
现在我们用创建非root用户组合用户,把用户加入用户组并且设置密码:
/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中完成的,现在先别断开这个root连接,还需要上传key:
scp prod_key.pub authorized_keys deployer@{your.server.ip.address}:~/.ssh
接着重启ssh服务:
service ssh reload
现在我们不用输入密码,可以直接用公钥登录服务器啦
ssh -i ./prod_key deployer@{your.server.ip.address}