介绍
Apache是目前Internet上使用最流行的Web服务器之一。 它很容易在像Ubuntu和Debian这样的Linux发行版上进行设置和配置,因为它在软件包存储库中,并且包含一个可用的开箱即用的默认配置。
Ansible是一个自动化工具,可让您远程配置系统,安装软件,并且无需手动登录到每个执行跨大Fleet的服务器复杂的任务。 与其他替代方案不同,Ansible安装在单个主机上,甚至可以是本地计算机,并使用SSH与每个远程主机通信。 这允许它在配置新服务器时非常快速,因为在每个新服务器上没有要安装的必备软件包。 这是非常容易使用和理解,因为它使用的剧本在yaml
使用一个简单的模块基础的语法格式。
先决条件
对于本教程,我们将在新的Ubuntu 14.04主Droplet上安装Ansible,并使用它在第二个Droplet上配置Apache。 也就是说,请记住,Ansible的好处是,你可以将它安装在本地机器上,并管理其他主机,而不需要手动ssh进入他们。
对于本教程,您将需要:
- 两个Ubuntu 14.04 Droplet:一个主Droplet与Ansible和一个辅助Droplet将运行Apache配置通过Ansible
- Sudo非root用户为Droplet。
- Ansible安装在主Droplet上。 按照本教程中 (直至设置SSH密钥部分)。 尽管该教程是为Ubuntu 12.04编写的,但它仍然与Ubuntu 14.04相关。
- 对于主DropletSSH密钥授权的二级Droplet,你可以做以下登录上的主Droplet。
- 主动DNS记录,或者手动设置一个本地hosts文件在本地计算机上(使用二次Droplet的IP地址),以设置和使用将要配置的虚拟主机。
注 :本教程后面的概念在现有的教程中解释说:
如何配置的Ubuntu或Debian的VPS在Apache Web服务器 。 如果您想了解更多信息,或者想在Ansible流程旁边查看手动流程,请查看该教程。
第1步 - 配置Ansible
在本节中,我们将配置Ansible以便能够管理您的服务器。
第一步,一旦Ansible安装,是告诉Ansible哪些主机要谈。 为此,我们需要创建一个Ansible主机文件。 Ansible主机文件包含主机组,我们在运行Ansible命令时引用它们。 默认情况下这个位于/etc/ansible/hosts
。 但是,这是应用于整个系统的全局,通常需要管理员权限。 相反,为了使事情更简单,我们需要告诉Ansible使用本地hosts文件。
Ansible总是寻找一个ansible.cfg
,它正在从运行本地目录下的文件,如果发现将覆盖全局配置与当地值。 考虑到这一点,我们需要做的是告诉Ansible我们要在本地目录中使用hosts文件,而不是全局文件。
创建一个新目录(我们将在本教程的其余部分使用)。
mkdir ansible-apache
移动到新目录。
cd ~/ansible-apache/
创建一个新的文件名为ansible.cfg
并打开它进行编辑。
nano ansible.cfg
在该文件中,我们要在增加hostfile
与价值配置选项hosts
中,内[defaults]
组。 复制下面的进ansible.cfg
文件,然后保存并关闭它。
[defaults]
hostfile = hosts
接下来, hosts
文件需要被写入。 有很多选项可用于hosts文件。 但是,我们可以从一个非常简单的开始。
创建一个hosts
文件并打开它进行编辑。
nano hosts
复制以下到hosts
文件。
[apache]
secondary_server_ip ansible_ssh_user=username
这被称为指定的主机组apache
包含一个主机。 更换secondary_server_ip
与从服务器的主机名或IP地址, username
与您的SSH用户名。 现在Ansible应该能够连接到您的服务器。
注 : ansible_ssh_user= username
组件是可选的,如果你正在运行Ansible相同的用户作为目标主机。
为了测试Ansible是工作,可以谈谈你的主机,可以运行基本ansible
命令。 Ansible自带了很多的默认模块 ,而是一个良好的开端是平的模块。 它会检查它可以连接到每台主机上,这让检查hosts
的正确性便于文件。
的基本用法ansible
命令接受主机组,模块名称: ansible <group> -m <module>
。 要运行ping
命令,输入以下命令。
ansible apache -m ping
输出应如下所示:
111.111.111.111 | success >> {
"changed": false,
"ping": "pong"
}
另一个Ansible模块是用于测试的是命令模块。 它在主机上运行自定义命令并返回结果。 要运行command
使用命令echo
,呼应一个字符串到终端的Unix命令,输入以下命令。
ansible apache -m command -a "/bin/echo hello sammy"
输出应如下所示:
111.111.111.111 | success | rc=0 >>
hello sammy
这是Ansible的基本用法。 真正的力量来自于创建包含多个Ansible任务的剧本。 我们将覆盖下一个。
第2步 - 创建手册
在本节中,我们将创建一个基本的Ansible playbook,以便您可以轻松运行更复杂的模块。
一个非常基本的Ansible Playbook是一个yaml
文件,该文件指定要在指定的组内的主机上运行的主机组和一个或多个任务。 他们是相当简单和容易阅读,这是为什么Ansible如此强大的原因之一。
让我们创建一个基本的剧本版本hello sammy
上面的命令。
创建一个名为apache.yml
并打开它进行编辑。
nano apache.yml
将以下文本复制到文件中,然后保存并关闭它。
---
- hosts: apache
tasks:
- name: run echo command
command: /bin/echo hello sammy
该hosts: apache
声明是在顶部,它告诉我们使用的是Ansible apache
主机组。 这是通过传递给它的等效ansible
命令。 接下来是任务列表。 在这个例子中,我们有一个名为一个任务run echo command
。 这仅仅是用于用户理解任务正在做什么的描述。 最后,该command: /bin/echo hello sammy
线运行command
与参数模块/bin/echo hello sammy
。
该ansible-playbook
命令用于运行剧本,和最简单的用法是: ansible-playbook your-playbook.yml
。 我们可以运行我们刚刚创建的playbook,使用以下命令。
ansible-playbook apache.yml
输出应该看起来像这样。
PLAY [apache] *****************************************************************
GATHERING FACTS ***************************************************************
ok: [111.111.111.111]
TASK: [run echo command] ******************************************************
changed: [111.111.111.111]
PLAY RECAP ********************************************************************
111.111.111.111 : ok=2 changed=1 unreachable=0 failed=0
在这里需要注意的最重要的事情是剧本不返回模块的输出,所以不像我们在第1步中使用的直接指挥下,我们看不到,如果hello sammy
竟是打印。 这意味着,剧本更适合于您不需要看到输出的任务。 Ansible会告诉你,如果在执行模块期间有错误,所以你一般只需要依靠它来知道是否有什么问题。
第3步 - 安装Apache
现在我们已经介绍了playbooks,我们将编写任务来安装Apache web服务器。
通常在Ubuntu上,安装Apache是安装一个简单的情况下apache2
通过包apt-get
。 要通过Ansible做到这一点,我们使用Ansible的贴切模块。 该apt
模块包含了一些专门的选项apt-get
功能。 我们感兴趣的选项是:
- 名 :要安装的包的名称,或者是单个包名称或包的列表。
- 状态 :可以接受
latest
,absent
或present
。 最新版本确保安装了最新版本,现在简单地检查它是否已安装,如果安装,则将删除它。 - update_cache:更新缓存(通过
apt-get update
)如果已启用,以确保它是最新的。
注 :比其他包经理apt
有太多的模块 。 每个模块页面都有一些例子,通常涵盖所有的主要用例,使得很容易了解如何使用每个模块。 它是很少见到别处的使用说明。
现在,让我们更新apache.yml
与剧本apt
模块,而不是command
模块。 打开apache.yml
文件再次编辑。
nano apache.yml
删除当前文本,并将以下文本复制到其中。
---
- hosts: apache
sudo: yes
tasks:
- name: install apache2
apt: name=apache2 update_cache=yes state=latest
本apt
行安装apache2
包( name=apache2
),并确保我们已经更新了缓存( update_cache=yes
)。 虽然是可选的,包括state=latest
要明确,它应该安装是一个好主意。
除非你的剧本正在运行的root
在每个主机上, sudo
将需要确保正确的权限。 Ansible支持sudo
的剧本中一个简单的选择的一部分。 它也可以通过施加ansible-playbook
命令并在每个任务的水平。
现在运行剧本。
ansible-playbook apache.yml --ask-sudo-pass
该--ask-sudo-pass
标志会提示你在次级Dropletsudo的密码。 这是必要的,因为安装需要root权限; 我们到目前为止运行的其他命令没有。
输出应该看起来像这样。
PLAY [apache] *****************************************************************
GATHERING FACTS ***************************************************************
ok: [111.111.111.111]
TASK: [install apache2] *******************************************************
changed: [111.111.111.111]
PLAY RECAP ********************************************************************
111.111.111.111 : ok=2 changed=1 unreachable=0 failed=0
如果您访问您的辅助服务器的主机名或IP地址,在浏览器中,你现在应该得到一个Apache2的Ubuntu的默认页面迎接你。 这意味着您的服务器上有一个有效的Apache安装,并且您尚未手动连接到它以运行命令。
在这一点要注意的一个重要概念是幂等 ,这underlies Ansible模块应该如何表现。 想法是,您可以重复运行相同的命令,但如果一切都在第一次运行时配置,则所有后续运行不进行更改。 几乎所有的Ansible模块支持,包括apt
模块。
例如,再次运行相同的playbook命令。
ansible-playbook apache.yml --ask-sudo-pass
输出应该看起来像这样。 注意changed=0
一节。
PLAY [apache] *****************************************************************
GATHERING FACTS ***************************************************************
ok: [111.111.111.111]
TASK: [install apache2] *******************************************************
ok: [111.111.111.111]
PLAY RECAP ********************************************************************
111.111.111.111 : ok=2 changed=0 unreachable=0 failed=0
这告诉你, apache2
包已经安装,因此没有改变。 当在许多主机上处理复杂的剧本时,能够识别不同的主机变得非常有用。 例如,如果发现主机总是需要更新一个特定的配置,则有可能是主机正在改变其在用户或进程。 没有idempotence,这可能永远不会被注意到。
第4步 - 配置Apache模块
现在Apache已经安装,我们需要启用Apache使用的模块。
让我们确认mod_rewrite
模块为Apache启用。 通过ssh,这可以很容易地通过做a2enmod
和重启动Apache。 然而,我们也可以使用Ansible在做很容易apache2_module模块和任务处理器重新启动apache2
。
该apache2_module
模块有两个选项:
- 名称 -使该模块的名称,如
rewrite
。 - 状态 -无论是
present
或absent
,这取决于是否需要启用或禁用该模块。
打开apache.yml
进行编辑。
nano apache.yml
更新文件以包括此任务。 该文件现在应该看起来像这样:
---
- hosts: apache
sudo: yes
tasks:
- name: install apache2
apt: name=apache2 update_cache=yes state=latest
- name: enabled mod_rewrite
apache2_module: name=rewrite state=present
但是,我们需要重新启动apache2
启用模块之后。 一种选择是在重新启动一个任务添加apache2
,但我们不希望这样的运行每次我们应用我们的剧本的时间。 为了解决这个问题,我们需要使用一个任务处理程序 。 处理程序的工作方式是,任务可以被告知通知处理程序已更改,并且处理程序只有在任务已更改时运行。
要做到这一点,我们需要添加notify
选项进入apache2_module
任务,然后我们可以使用的服务模块重新启动apache2
中的处理程序。
这将导致一个剧本,看起来像这样:
---
- hosts: apache
sudo: yes
tasks:
- name: install apache2
apt: name=apache2 update_cache=yes state=latest
- name: enabled mod_rewrite
apache2_module: name=rewrite state=present
notify:
- restart apache2
handlers:
- name: restart apache2
service: name=apache2 state=restarted
现在,重新运行剧本。
ansible-playbook apache.yml --ask-sudo-pass
输出应如下所示:
PLAY [apache] *****************************************************************
GATHERING FACTS ***************************************************************
ok: [111.111.111.111]
TASK: [install apache2] *******************************************************
ok: [111.111.111.111]
TASK: [enabled mod_rewrite] ***************************************************
changed: [111.111.111.111]
NOTIFIED: [restart apache2] ***************************************************
changed: [111.111.111.111]
PLAY RECAP ********************************************************************
111.111.111.111 : ok=4 changed=2 unreachable=0 failed=0
到目前为止看起来不错。 现在,再次运行命令,应该没有任何更改,并且不会列出重新启动任务。
第5步 - 配置Apache选项
现在我们有一个工作的Apache安装,我们需要的模块打开,我们需要配置Apache。
默认情况下,Apache在端口80上侦听所有HTTP流量。 为了教程的目的,让我们假设我们希望Apache在端口8081上侦听。 使用Ubuntu 14.04 x64上的默认Apache配置,有两个文件需要更新:
/etc/apache2/ports.conf
Listen 80
/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
要做到这一点,我们可以使用lineinfile模块。 这个模块是非常强大的,通过使用它的许多不同的配置选项,它允许您对主机上的现有文件执行各种更改。 对于此示例,我们将使用以下选项:
- DEST -文件将要更新的命令的一部分。
- 正则表达式 -正则表达式以用于匹配现有线路被替换。
- 线 -线被插入到该文件,要么在更换
regexp
线或作为末尾的新线。 - 状态 -无论是
present
或absent
。
注意 : lineinfile
模块将附加在该文件的末尾的行,如果它不匹配与现有行regexp
。 选项insertbefore
和insertafter
可以指定行之前或之后,而不是在月底添加它,如果需要的话。
我们需要做的,从更新端口是什么80
到8081
是认准它定义端口现有生产线80
,并改变它们定义端口8081
。
打开apache.yml
文件进行编辑。
nano apache.yml
修改额外的行,使文件看起来像这样:
---
- hosts: apache
sudo: yes
tasks:
- name: install apache2
apt: name=apache2 update_cache=yes state=latest
- name: enabled mod_rewrite
apache2_module: name=rewrite state=present
notify:
- restart apache2
- name: apache2 listen on port 8081
lineinfile: dest=/etc/apache2/ports.conf regexp="^Listen 80" line="Listen 8081" state=present
notify:
- restart apache2
- name: apache2 virtualhost on port 8081
lineinfile: dest=/etc/apache2/sites-available/000-default.conf regexp="^<VirtualHost \*:80>" line="<VirtualHost *:8081>" state=present
notify:
- restart apache2
handlers:
- name: restart apache2
service: name=apache2 state=restarted
此外还需要注意,我们还需要重新启动是重要apache2
作为这个过程的一部分,我们可以重复使用相同的处理,但hanlder只会尽管多次改变任务触发一次。
现在运行剧本。
ansible-playbook apache.yml --ask-sudo-pass
一旦Ansible完成后,你应该能够访问你的主机在你的浏览器,它会在响应端口8081
,而非端口80
。 在大多数Web浏览器,这可以很容易地通过增加实现的:port
到URL的末尾: http://111.111.111.111: 8081 /
。
该lineinfile
模块是非常强大的,而且使重整现有配置很容易。 唯一的吸引力是,你需要知道在你改变它的文件中期望什么,但它支持各种各样的选项,支持最简单的用例。
第6步 - 配置虚拟主机
Ansible提供了几个模块,可以将本地(到Ansible)模板文件复制到主机上。 用于此目的的最常用的两个模块是复制模块和模板模块。 在copy
模块复制文件原样并不会更改它,而更强大的template
跨模板模块复制并应用变量替换你通过使用双大括号中指定的区域(即{{ variable }}
在本节中,我们将使用模板模块配置您的服务器上创建新的虚拟主机。 会有一个很大的变化,所以我们将一块解释它们一块,并包括整个更新apache.yml
在这一步的最后文件。
创建虚拟主机配置
第一步是创建一个新的虚拟主机配置。 我们将在主Droplet上创建虚拟主机配置文件,并使用Ansible将其上传到辅助Droplet。
下面是一个基本虚拟主机配置的示例,我们可以将它用作我们自己配置的起点。 请注意,端口号和域名(如下所示)将被硬编码到配置中。
<VirtualHost *:8081>
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
创建一个名为新文件virtualhost.conf
。
nano virtualhost.conf
以下内容粘贴到virtualhost.conf
。 因为我们使用模板,所以最好将上面的硬编码值更改为变量,以使它们在将来易于更改。
<VirtualHost *:{{ http_port }}>
ServerAdmin webmaster@{{ domain }}
ServerName {{ domain }}
ServerAlias www.{{ domain }}
DocumentRoot /var/www/{{ domain }}
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
使用模板变量
接下来,我们需要更新我们的剧本,推出模板并使用变量。
第一步是在变量的剧本中添加一个部分。 它被称为vars
和推移的水平相同hosts
, sudo
, tasks
,和handlers
。 我们需要把在上述模板中使用这两个变量,并且我们将改变端口回80
中的过程。
---
- hosts: apache
sudo: yes
vars:
http_port: 80
domain: example.com
tasks:
- name: install apache2
...
变量可以在任务和模板使用,所以我们可以更新我们现有的lineinfile
模块使用指定的http_port
,而不是硬编码的8081
,我们之前指定。 变量需要被添加进线,和regexp
的选择需要更新,所以它不是寻找一个特定端口。 更改将如下所示:
lineinfile: dest=/etc/apache2/ports.conf regexp="^Listen" line="Listen {{ http_port }}" state=present
lineinfile: dest=/etc/apache2/sites-available/000-default.conf regexp="^<VirtualHost \*:" line="<VirtualHost *:{{ http_port }}>"
添加模板模块
下一步是在模板模块中添加将配置文件推送到主机上。 我们将使用这些选项来实现:
- DEST -目标文件路径保存在主机上,即在更新的模板
/etc/apache2/sites-available/{{ domain }}.conf
。 - src -源模板文件,即
virtualhost.conf
。
将这些应用到您的剧本将导致如下的任务:
- name: create virtual host file
template: src=virtualhost.conf dest=/etc/apache2/sites-available/{{ domain }}.conf
启用虚拟主机
几乎完成! 我们现在需要做的是在Apache中启用虚拟主机。 这可以通过两种方式来完成:通过运行sudo a2ensite example.com
命令或手动配置文件符号链接到/etc/apache2/sites-enabled/
。 前一个选项更安全,因为它允许Apache控制进程。 为此, command
模块来使用一次。
使用非常简单,正如我们上面发现的:
- name: a2ensite {{ domain }}
command: a2ensite {{ domain }}
notify:
- restart apache2
防止额外工作
最后,该command
模块需要知道何时它应该和不运行,因此,如果剧本被多次运行模块不会不必要地运行。 在我们的情况下,只需要如果要运行.conf
文件尚未在主机上创建呢。
这样做是通过creates
选项,这允许你告诉模块执行过程中正在创建哪些文件模块。 如果文件存在,模块将不会运行。 因为Apache在启用站点时创建一个符号链接,检查是否解决了问题。
更改将如下所示:
- name: a2ensite {{ domain }}
command: a2ensite {{ domain }}
args:
creates: /etc/apache2/sites-enabled/{{ domain }}.conf
notify:
- restart apache2
要注意的使用是很重要的args
在任务部分。 这是一个列出模块选项的可选方法,在这种情况下,删除什么是模块选项和什么是命令本身之间的任何混淆。
最终apache.yml
剧本
现在让我们应用这些更改。 打开apache.yml
。
nano apache.yml
随着上述所有的变化,改变你的apache.yml
剧本到这个样子。
---
- hosts: apache
sudo: yes
vars:
http_port: 80
domain: example.com
tasks:
- name: install apache2
apt: name=apache2 update_cache=yes state=latest
- name: enabled mod_rewrite
apache2_module: name=rewrite state=present
notify:
- restart apache2
- name: apache2 listen on port {{ http_port }}
lineinfile: dest=/etc/apache2/ports.conf regexp="^Listen " line="Listen {{ http_port }}" state=present
notify:
- restart apache2
- name: apache2 virtualhost on port {{ http_port }}
lineinfile: dest=/etc/apache2/sites-available/000-default.conf regexp="^<VirtualHost \*:" line="<VirtualHost *:{{ http_port }}>"
notify:
- restart apache2
- name: create virtual host file
template: src=virtualhost.conf dest=/etc/apache2/sites-available/{{ domain }}.conf
- name: a2ensite {{ domain }}
command: a2ensite {{ domain }}
args:
creates: /etc/apache2/sites-enabled/{{ domain }}.conf
notify:
- restart apache2
handlers:
- name: restart apache2
service: name=apache2 state=restarted
保存并关闭文件,然后运行剧本。
ansible-playbook apache.yml --ask-sudo-pass
如果你现在访问您的二次Droplet的主机名或IP地址,在浏览器中,你会看到它在端口响应80
再次,没有端口8081
。 接下来,请访问(即域名example.com
),我们为新的虚拟主机指定。 因为我们还没有被添加任何文件,它应该显示Apache的404
错误页面,而不是Apache的欢迎页面。 如果是这样,您的虚拟主机运行正常,您仍然没有SSH到您的辅助Droplet中运行单个命令。
第7步 - 使用Git存储库为您的网站
在本节中,我们将使用Ansible克隆Git存储库,以设置您的网站内容。
每个网站都需要内容,虽然它是正常的SSH和手动克隆Git存储库设置一个新的网站,Ansible为我们提供了我们需要的工具自动完成。 对于这个例子,在GIT中模块将执行的操作是必需的。
该git
模块有很多的选择,相关的人本教程之中:
- DEST -在存储库将被检查出在主机上的路径。
- 回购 -库的URL将被克隆。 这必须可由主机访问。
- 更新 -当设置为
no
,这样可以防止Ansible不能更新资料库时,它已经存在。 - accept_hostkey -告诉SSH通过SSH连接时接受任何未知的主机密钥。 这非常有用,因为它节省了通过SSH登录以接受第一次登录尝试的需要,但是它不能手动检查主机签名。 根据您的存储库,您可能需要此选项。
对于本教程的目的,有一个简单的Git仓库与单一index.html
,可以克隆到你的主页。 如果你已经有另一个公共存储库包含类似,请随意替换它。 考虑到这一点,对git
任务将是这样的:
- name: clone basic html template
git: repo=https://github.com/do-community/ansible-apache-tutorial.git dest=/var/www/example.com update=no
但是,如果现在运行Playbook,您可能会收到错误。 我们首先需要安装git
包,以便Ansible可以用它来克隆库。 在apt
任务需要更新,同时安装apache2
包和git
包。 检查贴切文件告诉我们, name
选项只需要一个单一的包,这样就不会有所帮助。 相反,我们需要使用的项目的列表 。
Ansible提供了指定要循环的项目列表并将任务应用到每个项目的能力。 他们正在使用指定的with_items
选项作为任务的一部分,而我们apt
的任务将更新为如下所示:
- name: install packages
apt: name={{ item }} update_cache=yes state=latest
with_items:
- apache2
- git
项目列表中使用item
变量,将执行任务列表中的每个项目。
打开apache.yml
一次。
nano apache.yml
更新剧本以匹配以下内容:
---
- hosts: apache
sudo: yes
vars:
http_port: 80
domain: example.com
tasks:
- name: install packages
apt: name={{ item }} update_cache=yes state=latest
with_items:
- apache2
- git
- name: enabled mod_rewrite
apache2_module: name=rewrite state=present
notify:
- restart apache2
- name: apache2 listen on port {{ http_port }}
lineinfile: dest=/etc/apache2/ports.conf regexp="^Listen " line="Listen {{ http_port }}" state=present
notify:
- restart apache2
- name: apache2 virtualhost on port {{ http_port }}
lineinfile: dest=/etc/apache2/sites-available/000-default.conf regexp="^<VirtualHost \*:" line="<VirtualHost *:{{ http_port }}>"
notify:
- restart apache2
- name: create virtual host file
template: src=virtualhost.conf dest=/etc/apache2/sites-available/{{ domain }}.conf
- name: a2ensite {{ domain }}
command: a2ensite {{ domain }}
args:
creates: /etc/apache2/sites-enabled/{{ domain }}.conf
notify:
- restart apache2
- name: clone basic html template
git: repo=https://github.com/do-community/ansible-apache-tutorial.git dest=/var/www/example.com update=no
handlers:
- name: restart apache2
service: name=apache2 state=restarted
保存文件并运行剧本。
ansible-playbook apache.yml --ask-sudo-pass
它应该安装git
并成功克隆库。 当您访问从第6步的虚拟主机时,您现在应该看到一个除了404错误以外的东西。不要忘记检查非虚拟主机仍然返回默认页面。
总之,您现在已经安装了Git,并且已经通过Git将基本HTML页面克隆到您的新虚拟主机上。 仍然没有手动SSH命令需要。 如果你只是在一个基本的HTML网站,它在一个公共的Git仓库,然后你就完成了!
结论
我们刚刚创建了一个Ansible Playbook,以自动化配置主机以运行Apache Web服务器,虚拟主机和Git存储库的整个过程。 所有这些都已经实现,而不需要直接登录到服务器,最好的部分是,你可以运行你的新Playbook对大多数Ubuntu服务器来实现相同的结果。
注意 :如果您的主机已经具备的Apache设置和修改,你最有可能需要处理每一个修改,使其恢复到需要的状态。 在积极的一面,Ansible只会修复这些修改,如果它们存在,所以它是安全的,他们在主Playbook!
Ansible是非常强大的,也有一个非常容易的学习曲线。 您可以从本教程中介绍的基本概念开始,并保持在此级别或学习更多,以获得真正复杂的部分。 无论如何,您将能够配置和管理您的服务器,而不需要手动登录大多数(如果不是全部)任务。
您可以浏览Ansible模块列表 ,看看还有什么Ansible是可以胜任的。