分类
文章

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

介绍

由于现代应用程序环境具有可处理性,因此服务器自动化现在在系统管理中起着至关重要的作用。配置管理工具(例如Ansible)通常用于通过为新服务器建立标准过程来简化服务器设置自动化的过程,同时还减少了与手动设置相关的人为错误。

Ansible提供了一种简单的体系结构,不需要在节点上安装特殊软件。它还提供了一组强大的功能和内置模块,这些功能和功能有助于编写自动化脚本。

本指南说明了如何使用Ansible自动化我们的指南,该指南包含有关如何在Ubuntu 18.04上安装Linux,Apache,MySQL和PHP(LAMP)的指南。LAMP堆栈是一组开源软件,通常会一起安装以使服务器能够托管动态网站和Web应用程序。

先决条件

为了执行我们在本指南中讨论的Playbook提供的自动设置,您需要:

在继续之前,您首先需要确保Ansible控制节点能够在Ansible主机上连接并执行命令。对于连接测试,请检查如何在Ubuntu 18.04上安装和配置Ansible的步骤3 。

Playbook做什么?

这本AnsiblePlaybook提供了一种替代方法,可以手动执行我们的指南中有关如何在Ubuntu 18.04上安装Linux,Apache,MySQL和PHP(LAMP)的过程中概述的过程。

运行此Playbook将在您的Ansible主机上执行以下操作:

  1. Install aptitude,这是Ansible首选的apt软件包安装程序的替代方法。
  2. 安装所需的LAMP软件包。
  3. 创建一个新的Apache VirtualHost并为此设置专用的文档根目录。
  4. 启用新的VirtualHost
  5. disable_default变量设置为时,禁用默认的Apache网站true
  6. 设置MySQL root用户的密码。
  7. 删除匿名MySQL帐户和测试数据库。
  8. 设置UFW以允许配置的端口上的HTTP通信(80默认情况下)。
  9. 使用提供的模板设置PHP测试脚本。

Playbook运行完毕后,将根据您在配置变量中定义的选项,在Apache之上运行一个Web PHP环境。

如何使用Playbook

我们需要做的第一件事是从do-community / ansible-playbooks存储库中获取LAMPPlaybook及其依赖项。我们需要将此存储库克隆到Ansible控制节点内的本地文件夹。

如果您在遵循其他指南之前已克隆了此存储库,请访问现有ansible-playbooks副本并运行git pull命令以确保已更新内容:

  • cd ~/ansible-playbooks
  • git pull

如果这是您第一次使用do-community/ansible-playbooks存储库,则应首先使用以下命令将存储库克隆到主文件夹中:

  • cd ~
  • git clone https://github.com/do-community/ansible-playbooks.git
  • cd ansible-playbooks

我们感兴趣的文件位于lamp_ubuntu1804文件夹中,该文件夹具有以下结构:

lamp_ubuntu1804
├── files
│   ├── apache.conf.j2
│   └── info.php.j2
├── vars
│   └── default.yml
├── playbook.yml
└── readme.md

这些文件分别是:

  • files/info.php.j2:用于在Web服务器的根目录上设置PHP测试页的模板文件
  • files/apache.conf.j2:用于设置Apache VirtualHost的模板文件。
  • vars/default.yml:用于自定义Playbook设置的变量文件。
  • playbook.yml:Playbook文件,其中包含要在远程服务器上执行的任务。
  • readme.md:一个文本文件,其中包含有关此Playbook的信息。

我们将编辑Playbook的变量文件,以自定义MySQL和Apache的配置。使用您选择的命令行编辑器访问lamp_ubuntu1804目录并打开vars/default.yml文件:

  • cd lamp_ubuntu1804
  • nano vars/default.yml

该文件包含一些需要引起您注意的变量:

vars / default.yml
---
mysql_root_password: "mysql_root_password"
app_user: "sammy"
http_host: "your_domain"
http_conf: "your_domain.conf"
http_port: "80"
disable_default: true

以下列表简要说明了每个变量以及如何更改它们:

  • mysql_root_passwordrootMySQL帐户的所需密码。
  • app_user:Ansible主机上的远程非root用户,将被设置为应用程序文件的所有者。
  • http_host:您的域名。
  • http_conf:将在Apache中创建的配置文件的名称。
  • http_port:此虚拟主机的HTTP端口,80默认位置。
  • disable_default:是否禁用Apache随附的默认网站。

完成内部变量的更新后vars/default.yml,保存并关闭此文件。如果您使用的nano,按这样做CTRL + XY的话ENTER

您现在可以在一个或多个服务器上运行此Playbook。默认情况下,大多数Playbook配置为在清单中的每台服务器上执行。我们可以使用该-l标志来确保只有一部分服务器或单个服务器受该Playbook的影响。我们还可以使用该-u标志来指定用于连接和执行远程主机上的playbook命令的远程服务器上的哪个用户。

要仅在server1,连接为时执行Playbooksammy,可以使用以下命令:

  • ansible-playbook playbook.yml -l server1 -u sammy

您将获得类似于以下的输出:

Output
PLAY [all] ********************************************************************************************************* TASK [Gathering Facts] *********************************************************************************************************ok: [server1] TASK [Install prerequisites] *********************************************************************************************************ok: [server1] => (item=aptitude) ... TASK [UFW - Allow HTTP on port 80] ********************************************************************************************************* changed: [server1] TASK [Sets Up PHP Info Page] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Reload Apache] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Restart Apache] ********************************************************************************************************* changed: [server1] PLAY RECAP ********************************************************************************************************* server1 : ok=15 changed=11 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

Note:有关如何运行AnsiblePlaybook的更多信息,请参阅《 Ansible备忘单指南》

当Playbook完成运行后,请转到您的网络浏览器并按照Playbook变量中的配置访问服务器的主机或IP地址,然后输入/info.php

http://server_host_or_IP/info.php

您将看到如下页面:

phpinfo页面

因为此页面包含有关您的PHP环境的敏感信息,所以建议rm -f /var/www/info.php您在完成设置后通过运行命令将其从服务器中删除。

Playbook内容

您可以lamp_ubuntu1804DigitalOcean Community Playbooks存储库内的文件夹中找到本教程中介绍的LAMP服务器设置。要直接复制或下载脚本内容,请单击Raw每个脚本顶部的按钮。

为方便起见,此处也包含了Playbook的完整内容及其相关文件。

vars / default.yml

default.yml变量文件包含将Playbook任务中使用,如密码为MySQL值root帐户和域名中配置Apache。

vars / default.yml
---
mysql_root_password: "mysql_root_password"
app_user: "sammy"
http_host: "your_domain"
http_conf: "your_domain.conf"
http_port: "80"
disable_default: true
文件/apache.conf.j2

apache.conf.j2文件是Jinja 2模板文件,用于配置新的Apache VirtualHost。该模板中使用的vars/default.yml变量在变量文件中定义。

文件/apache.conf.j2
<VirtualHost *:{{ http_port }}>
   ServerAdmin webmaster@localhost
   ServerName {{ http_host }}
   ServerAlias www.{{ http_host }}
   DocumentRoot /var/www/{{ http_host }}
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined

   <Directory /var/www/{{ http_host }}>
         Options -Indexes
   </Directory>

   <IfModule mod_dir.c>
       DirectoryIndex index.php index.html index.cgi index.pl  index.xhtml index.htm
   </IfModule>

</VirtualHost>
文件/ info.php.j2

info.php.j2文件是另一个Jinja模板,用于在新配置的LAMP服务器的文档根目录中设置测试PHP脚本。

文件/ info.php.j2
<?php
phpinfo();

playbook.yml

在此playbook.yml文件中定义了此设置中的所有任务。它首先定义应作为此设置目标的服务器组(all),然后become: true用于定义sudo默认情况下应以特权提升()执行任务。然后,它包含vars/default.yml要加载配置选项的变量文件。

playbook.yml

---
- hosts: all
  become: true
  vars_files:
    - vars/default.yml

  tasks:
    - name: Install prerequisites
      apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes
      loop: [ 'aptitude' ]

  #Apache Configuration
    - name: Install LAMP Packages
      apt: name={{ item }} update_cache=yes state=latest
      loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ]

    - name: Create document root
      file:
        path: "/var/www/{{ http_host }}"
        state: directory
        owner: "{{ app_user }}"
        mode: '0755'

    - name: Set up Apache virtualhost
      template:
        src: "files/apache.conf.j2"
        dest: "/etc/apache2/sites-available/{{ http_conf }}"
      notify: Reload Apache

    - name: Enable new site
      shell: /usr/sbin/a2ensite {{ http_conf }}
      notify: Reload Apache

    - name: Disable default Apache site
      shell: /usr/sbin/a2dissite 000-default.conf
      when: disable_default
      notify: Reload Apache

  # MySQL Configuration
    - name: Sets the root password
      mysql_user:
        name: root
        password: "{{ mysql_root_password }}"
        login_unix_socket: /var/run/mysqld/mysqld.sock

    - name: Removes all anonymous user accounts
      mysql_user:
        name: ''
        host_all: yes
        state: absent
        login_user: root
        login_password: "{{ mysql_root_password }}"

    - name: Removes the MySQL test database
      mysql_db:
        name: test
        state: absent
        login_user: root
        login_password: "{{ mysql_root_password }}"

  # UFW Configuration
    - name: "UFW - Allow HTTP on port {{ http_port }}"
      ufw:
        rule: allow
        port: "{{ http_port }}"
        proto: tcp

  # PHP Info Page
    - name: Sets Up PHP Info Page
      template:
        src: "files/info.php.j2"
        dest: "/var/www/{{ http_host }}/info.php"

  handlers:
    - name: Reload Apache
      service:
        name: apache2
        state: reloaded

    - name: Restart Apache
      service:
        name: apache2
        state: restarted

随意修改这些文件以最适合您自己的工作流程中的个性化需求。

结论

在本指南中,我们使用Ansible自动化了在远程服务器上安装和设置LAMP环境的过程。因为使用MySQL数据库和用户时每个人通常都有不同的需求,所以我们建议您查阅Ansible官方文档以获取有关mysql_userAnsible模块的更多信息和用例。

如果您想在此手册中包括其他任务以进一步自定义服务器设置,请参阅我们的Ansible入门指南Configuration Management 101:编写Ansible手册

发表评论

电子邮件地址不会被公开。 必填项已用*标注