Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。 在上一篇文章中,我们介绍了如何部署Django 应用到单一服务器上。 在本篇文章中, 我们将介绍使用Fabric 和 Ansible进行自动化部署Django 应用,并且试图解决以下问题: 1. 可扩展性:当网页应用在处理海量的日均请求时,依靠单一服务器并不是一个有效的方法。简言之, 当服务器性能趋于最大化后,过多的并发请求可能拖慢载入时间,甚至导致服务器下线(无响应)。为了克服这个问题,应用必须考虑运行到多个服务器的可能性,以便扩展服务器来有效地应对即将发生的高并发请求。 2. 冗余性:手动部署多个网页应用意味着大量的重复性工作,同时也增大了人类犯错的机会。因此自动化部署是关键。 具体来说,我们将自动化地:
设置和配置 首先启动一个新的Digital Ocean Droplet,确保使用Fedora 25镜像。不要设置预配置的SSH密钥; 我们将通过Fabric脚本自动执行此过程。 由于部署过程应该是可扩展的,因此需要创建一个单独的存储库来容纳所有部署脚本。 在本地创建一个新的项目目录,并使用Python 2.7.x 并激活一个虚拟环境。 为什么是Python 2.7? 因为Fabric不支持Python 3。 不用担心:当我们配置服务器时,我们将使用Python 3.5。 Fabric设置 Fabric是一种用于通过SSH自动执行常规shell命令的工具,我们将用它来:
开始安装Fabric: 首先,创建一个名为“prod”的新文件夹,并添加一个名为fabfile.py的新文件以保存所有Fabric脚本: 注意行内注释。 确保将远程服务器的IP地址添加到env.hosts变量中。 同样也需要更新env.full_name_user变量。 停在更新env.password这一步; 我们会很快继续。 查看所有的env变量,它们可以根据您的系统设置完全自定义。 设置SSH密钥 添加下面的代码到fabfile.py: 此函数充当Fabric脚本的切入点。 除了触发一系列功能(每个功能将在后续步骤中解释),它明确地涉及:
防止root用户的SSH访问是可选步骤,但建议您确保没有任何人拥有超级用户权限。 在项目根目录中为SSH密钥创建一个目录: 强化用户密码 此步骤将添加三个不同的功能,每个功能是为了强化SSH密码。
在这里,我们添加一个名为deployers的新组并向其授予sudo权限,以便用户可以使用root权限执行进程。 2. 创建用户 这个功能-
3. 上传SSH秘钥 这里,我们-
安装Ansible依赖项 添加以下函数以便自动化安装Ansible的依赖程序包: 请记住,这是特定于Fedora Linux发行版,因为我们将使用DNF模块来安装软件包,但它可能因发行版而异。 将SELinux设置为permissive模式 下面函数将SELinux设置为permissive模式。 这是为了克服任何潜在的Nginx 502 Bad Gateway错误 同样,这是特定于Fedora Linux发行版。 升级服务器 最后,升级服务器: 完整性检查 这样,我们就完成了Fabric脚本撰写。 不过运行它之前,请确保以root身份用SSH进入服务器并更改密码: 请务必更新env.password。 退出服务器并返回本地终端,然后执行Fabric: 如果一切顺利,将生成新的SSH密钥,您将被要求创建一个密码(确保这样做!):
将运行多个任务。 创建deployer程序用户后,系统将提示你为用户名添加密码,
此脚本成功退出后,你将无法再以root用户身份登录远程服务器。 相反,你将只能使用非root用户部署程序。 试试:
预期会得到这样的结果。 然后你运行:
你应该能够像这样登录:
Ansible Primer
Ansible是一种配置管理工具,用于通过SSH自动执行和部署任务。 你可以远程通过shell针对应用程序发出单独的Ansible任务。 任务还可以合并到Playbooks- 多个play的集合,其中每个play定义为在部署过程中需要的某些特定任务。Playbooks是用YAML编写的。 Playbooks Playbooks包含一个模块化架构,如下所示:
变量只是一种键-值配对的列表,其中每个键(一个变量)映射到一个值。这些变量可以在Playbooks中用作占位符。 Playbook示例 现在让我们看一个单文件Playbook示例:
在这里,我们定义了:
Playbook 设置 现在让我们为Django设置一个Playbook。 将deploy.yml文件添加到“prod”目录中:
上面的代码段将Ansible主机,用户和角色结合在一起。 主机 将主机(纯文本格式)文件添加到“prod”目录,并在其各自的角色名称下列出服务器。 我们在这里配置单个服务器: 在上面的代码段中,common是指角色名称。 在角色下,我们有一个需要配置的IP地址列表。 请确保添加你的远程服务器的IP地址代替: |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|