介绍
服务器自动化现在在系统管理中起着至关重要的作用,因为现代应用环境的可调用性质。 配置管理 工具如 Ansible 通常用于通过为新服务器建立标准程序来简化服务器设置的自动化过程,同时也减少了与手动设置相关的人为错误。
Ansible提供了一个简单的架构,不需要在节点上安装特殊软件,它还提供了一组强大的功能和内置模块,可方便编写自动化脚本。
本指南解释了如何使用 Ansible 来自动化我们在 Ubuntu 18.04 上安装 Apache Web Server 的步骤(https://andsky.com/tech/tutorials/how-to-install-the-apache-web-server-on-ubuntu-18-04)。Apache HTTP 服务器是世界上使用最广泛的 Web 服务器,它提供了许多强大的功能,包括动态可加载的模块,强大的媒体支持和与其他流行的软件的广泛集成。
前提条件
为了执行我们在本指南中讨论的播放簿提供的自动设置,您将需要:
- One Ansible 控制节点:安装并配置为使用 SSH 键连接您的 Ansible 主机的 Ubuntu 18.04 机器,请确保控制节点具有具有 sudo 权限的常规用户和启用防火墙,如我们在 初始服务器设置指南中所解释的那样。 为了设置 Ansible,请遵循我们在 如何在 Ubuntu 18.04 上安装和配置 Ansible上的指南。
<$>[注] 在继续之前,您需要先确保您的 Ansible 控制节点能够在您的 Ansible 主机(s)上连接和执行命令。
这个 Playbook 能做什么?
此 Ansible 播放本提供了通过我们关于 [如何在 Ubuntu 18.04 上安装 Apache Web Server 的指南中描述的程序手动运行的替代方案(https://andsky.com/tech/tutorials/how-to-install-the-apache-web-server-on-ubuntu-18-04)。
运行此播放簿将在您的 Ansible 主机上执行以下操作:
- 安裝「aptitude」,這是 Ansible 選擇的「apt」包管理器的替代方案.
- 安裝 Apache.
- 為新的 Apache VirtualHost 創建自訂文件根文件夾,並設定測試頁面.
- 啟用新的 Apache VirtualHost.
- 在變量「disable_default」設定為「true」時,禁用預設的 Apache 網站。
一旦播放簿完成运行,您将在目标节点上运行 Web 服务器,基于您在配置变量中定义的选项。
如何使用这个 Playbook
我们需要做的第一件事是从 do-community/ansible-playbooks 存储库中获取 Apache 播放簿及其依赖性,我们需要将此存储库克隆到 Ansible 控制节点内的本地文件夹。
如果您之前在遵循不同的指南时克隆了此存储库,请访问现有的ansible-playbooks
副本并运行一个git pull
命令,以确保您更新了内容:
1[environment local]
2cd ~/ansible-playbooks
3git pull
如果这是你第一次使用Do-community/ansible-playbooks
存储库,你应该开始将存储库克隆到你的主文件夹:
1[environment local]
2cd ~
3git clone https://github.com/do-community/ansible-playbooks.git
4cd ansible-playbooks
我们感兴趣的文件位于apache_ubuntu1804
文件夹中,其结构如下:
1apache_ubuntu1804
2├── files
3│ ├── apache.conf.j2
4│ └── index.html.j2
5├── vars
6│ └── default.yml
7├── playbook.yml
8└── readme.md
以下是这些文件中的每一个是什么:
files/apache.conf.j2
: 用于设置 Apache 虚拟主机的模板文件files/index.html.j2
: 用于在 Web 服务器根目录上设置测试页面的模板文件vars/default.yml
: 用于自定义播放书设置的变量文件playbook.yml
: 播放书文件,包含在远程服务器(s)上执行的任务。
我们将编辑播放簿的变量文件以定制几个选项。 访问 apache_ubuntu1804
目录,并使用您所选择的命令行编辑器打开 vars/default.yml
文件:
1[environment local]
2cd apache_ubuntu1804
3nano vars/default.yml
此文件包含一些需要您的注意的变量:
1[label vars/default.yml]
2[environment local]
3---
4app_user: "sammy"
5http_host: "your_domain"
6http_conf: "your_domain.conf"
7http_port: "80"
8disable_default: true
下列列表包含每个变量的简要解释,以及您可能想要如何更改它们:
app_user
: Ansible 主机上的远程非根用户将被设置为应用程序文件的所有者http_host
:您的域名http_conf
:在 Apache 中创建的配置文件的名称http_port
:此虚拟主机的 HTTP 端口,其中80
是默认值disable_default
:是否要禁用与 Apache 一起提供的默认网站
一旦您完成了vars/default.yml
中的变量更新,请保存并关闭此文件. 如果您使用了nano
,请按CTRL + X
,Y
,然后按ENTER
。
您现在已经准备好在一个或多个服务器上运行此播放簿. 大多数播放簿已配置为在您的库存中的每个服务器上执行,默认情况下. 我们可以使用 -l
旗帜来确保只有一个服务器子集或单个服务器受到播放簿的影响。
要只在「server1」上執行播放簿,以「sammy」方式連接,您可以使用以下命令:
1[environment local]
2ansible-playbook playbook.yml -l server1 -u sammy
你会得到类似于此的输出:
1[secondary_label Output]
2
3PLAY [all] *****************************************************************************************************************************
4
5TASK [Gathering Facts] *****************************************************************************************************************
6ok: [server1]
7
8TASK [Install prerequisites] ***********************************************************************************************************
9ok: [server1] => (item=aptitude)
10
11TASK [Install Apache] ******************************************************************************************************************
12changed: [server1]
13
14TASK [Create document root] ************************************************************************************************************
15changed: [server1]
16
17TASK [Copy index test page] ************************************************************************************************************
18changed: [server1]
19
20TASK [Set up Apache virtualhost] *******************************************************************************************************
21changed: [server1]
22
23TASK [Enable new site] *****************************************************************************************************************
24changed: [server1]
25
26TASK [Disable default Apache site] *****************************************************************************************************
27changed: [server1]
28
29TASK [UFW - Allow HTTP on port 80] *****************************************************************************************************
30changed: [server1]
31
32RUNNING HANDLER [Reload Apache] ********************************************************************************************************
33changed: [server1]
34
35PLAY RECAP *****************************************************************************************************************************
36server1 : ok=10 changed=8 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
<$>[注] 注:有关如何运行 Ansible 播放本的更多信息,请参阅我们的 Ansible Cheat Sheet Guide。
当播放簿完成运行时,进入您的 Web 浏览器并访问服务器的主机或 IP 地址,如播放簿变量配置:
1http://server_host_or_IP
你会看到这样的页面:
这意味着自动化已经在您的服务器上完全执行,Apache现在已经准备好为您在播放簿配置变量中设置的文档根目录中放置的静态HTML页面和资产提供服务。
剧本内容
您可以在 DigitalOcean Community Playbooks存储库中的 apache_ubuntu1804
文件夹中找到本教程中的Apache服务器设置。
播放书的完整内容以及相关文件也包括在这里,以便您方便。
首选 / 默认.yml
Default.yml
变量文件包含在播放簿任务中使用的值,例如在Apache VirtualHost中配置的HTTP端口和域名。
1[label vars/default.yml]
2[environment local]
3---
4app_user: "sammy"
5http_host: "your_domain"
6http_conf: "your_domain.conf"
7http_port: "80"
8disable_default: true
檔案/apache.conf.j2
apache.conf.j2
文件是一个 Jinja 2 模板文件,它配置了一个新的 Apache VirtualHost. 该模板内使用的变量在vars/default.yml
变量文件中定义。
1[environment local]
2[label files/apache.conf.j2]
3<VirtualHost *:{{ http_port }}>
4 ServerAdmin webmaster@localhost
5 ServerName {{ http_host }}
6 ServerAlias www.{{ http_host }}
7 DocumentRoot /var/www/{{ http_host }}
8 ErrorLog ${APACHE_LOG_DIR}/error.log
9 CustomLog ${APACHE_LOG_DIR}/access.log combined
10</VirtualHost>
文件 / 索引.html.j2
index.html.j2
文件是另一个Jinja模板,用于在新配置的Apache服务器的文档根中设置测试HTML页面。
1[environment local]
2[label files/index.html.j2]
3<html>
4 <head>
5 <title>Welcome to {{ http_host }} !</title>
6 </head>
7 <body>
8 <h1>Success! The {{ http_host }} virtual host is working!</h1>
9 </body>
10</html>
图书馆.yml
该playbook.yml
文件定义了此设置中的所有任务,它从定义该设置的目标服务器组(所有
)开始,然后它使用become: true
来定义任务应该默认执行的特权升级(sudo
)然后,它包括vars/default.yml
变量文件来加载配置选项。
1[label playbook.yml]
2[environment local]
3---
4- hosts: all
5 become: true
6 vars_files:
7 - vars/default.yml
8
9 tasks:
10 - name: Install prerequisites
11 apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes
12 loop: [ 'aptitude' ]
13
14 - name: Install Apache
15 apt: name=apache2 update_cache=yes state=latest
16
17 - name: Create document root
18 file:
19 path: "/var/www/{{ http_host }}"
20 state: directory
21 owner: "{{ app_user }}"
22 mode: '0755'
23
24 - name: Copy index test page
25 template:
26 src: "files/index.html.j2"
27 dest: "/var/www/{{ http_host }}/index.html"
28
29 - name: Set up Apache virtuahHost
30 template:
31 src: "files/apache.conf.j2"
32 dest: "/etc/apache2/sites-available/{{ http_conf }}"
33
34 - name: Enable new site
35 shell: /usr/sbin/a2ensite {{ http_conf }}
36 notify: Reload Apache
37
38 - name: Disable default Apache site
39 shell: /usr/sbin/a2dissite 000-default.conf
40 when: disable_default
41 notify: Reload Apache
42
43 - name: "UFW - Allow HTTP on port {{ http_port }}"
44 ufw:
45 rule: allow
46 port: "{{ http_port }}"
47 proto: tcp
48
49 handlers:
50 - name: Reload Apache
51 service:
52 name: apache2
53 state: reloaded
54
55 - name: Restart Apache
56 service:
57 name: apache2
58 state: restarted
您可以自由地修改这些文件,以便在您自己的工作流中最适合您的个人需求。
结论
在本指南中,我们使用 Ansible 来自动化 Ubuntu 18.04 上安装和配置 Apache 的过程。
如果您想在本演示本中包含其他任务,以进一步定制服务器设置,请参阅我们介绍的 Ansible 指南 配置管理 101:编写 Ansible 演示本。