如何使用 Ansible 在 Ubuntu 18.04 上安装和设置 Apache

介绍

服务器自动化现在在系统管理中起着至关重要的作用,因为现代应用环境的可调用性质。 配置管理 工具如 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 主机上执行以下操作:

  1. 安裝「aptitude」,這是 Ansible 選擇的「apt」包管理器的替代方案.
  2. 安裝 Apache.
  3. 為新的 Apache VirtualHost 創建自訂文件根文件夾,並設定測試頁面.
  4. 啟用新的 Apache VirtualHost.
  5. 在變量「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

你会看到这样的页面:

it works page

这意味着自动化已经在您的服务器上完全执行,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 演示本

Published At
Categories with 技术
comments powered by Disqus