更新升级 专属应用 系统故障 硬件故障 电脑汽车 鸿蒙刷机 鸿蒙开发Linux教程 鸿蒙开发Linux命令
当前位置:HMXT之家 > 鸿蒙开发Linux教程 > 使用Ansible在Ubuntu/Debian系统上安装LAMP堆栈

使用Ansible在Ubuntu/Debian系统上安装LAMP堆栈

更新时间:2022-12-22 10:17:27浏览次数:258+次

本文介绍如何使用Ansible在Ubuntu/Debian Linux操作系统上设置LAMP堆栈的方法。前提条件是:有一个Ubuntu 20.04或Debian 10/11主机、具有sudo权限的远程用户、为远程执行设置SSH密钥身份验证、Ansible安装在控制节点上。

使用Ansible在Ubuntu/Debian系统上安装LAMP堆栈的步骤

一、环境准备工作

在本文中,我们将使用Ansible Playbook和Roles。这些模块使Ansible更易于使用。

如果您的计算机上没有安装Ansible,可以使用以下命令进行安装。请记住,这不应该在我们打算部署LAMP堆栈的服务器上完成,而应该在您将用于运行ansible命令的机器上完成。

对于Ubuntu/Debian:

sudo apt install ansible -y

对于基于RPM的操作系统:

sudo yum install ansible -y

配置远程服务器的SSH密钥身份验证:

ssh-copy-id username@remote-server

在工作站上创建一个目录,该目录将用作此设置的工作目录:

mkdir ansible_playbook && cd $_

二、配置Ansible Playbook和Roles

我们将配置Ansible Playbook和Roles以执行以下任务:

为Ansible安装Aptitude,预先定义的包管理器。

将安装Apache、MariaDB服务器和PHP。

为Apache创建并启用VirtualHost。

禁用Apache的默认VirtualHost。

配置MariaDB的根密码。

配置PHP测试文件。

允许HTTP流量通过防火墙。

我们将为Apache和PHP安装创建一个可负责的角色,为MariaDB安装创建另一个角色。

1、创建默认变量

创建包含域名、MariaDB根密码等信息的默认变量文件。

在我们的工作目录中,创建一个名为vars的子目录,并添加一个变量配置文件:

mkdir vars && cd vars

vim default.yml

在default.yml文件中,添加以下信息,用您的详细信息替换变量:

mysql_root_password: "P@ssw0rd"

app_user: "apache"

http_host: "lamp.example.com"

http_conf: "lamp.example.com.conf"

http_port: "80"

disable_default: true

在默认工作目录中创建主机清单文件。在这里,我们添加要设置LAMP堆栈的远程服务器的IP:

vim hosts

[lampstack]

192.168.100.227

2、创建Apache Role

从工作目录和Apache的另一个子目录创建角色子目录:

mkdir -p roles/apache

这里,我们需要为Apache和PHP创建角色,该角色应包含Apache服务所需的所有步骤、模块和模板。

3、创建Apache和PHP任务

在Apache目录中创建Apache和PHP的主执行任务:

mkdir tasks && cd tasks

vim main.yml

在main.yml文件中添加以下内容:

- name: Install prerequisites

  apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes

  loop: [ 'aptitude' ]

  #Apache Configuration

- name: Install Apache and PHP Packages

  apt: name={{ item }} update_cache=yes state=latest

  loop: [ 'apache2', '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 }}" 

- name: Enable new site

  shell: /usr/sbin/a2ensite {{ http_conf }}

- name: Disable default Apache site

  shell: /usr/sbin/a2dissite 000-default.conf

  when: disable_default

  notify: Reload Apache

# 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"

- name: Reload Apache

  service:

    name: apache2

    state: reloaded

- name: Restart Apache

  service:

    name: apache2

    state: restarted

4、创建Apache处理程序

添加Apache的处理程序。这应该在Apache角色目录下完成:

mkdir handlers && cd handlers

vim main.yml

为Apache处理程序添加以下内容:

- name: Reload Apache

  service:

    name: apache2

    state: reloaded

- name: Restart Apache

  service:

    name: apache2

    state: restarted

5、添加Apache文件

创建将用于生成VirtualHost和info.php索引文件的文件。这也在Apache角色目录中完成:

mkdir files && cd files

创建VirtualHost文件:

vim 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>

创建PHP测试文件:

$ vim info.php.j2

<?php

phpinfo();

确保目录树如下所示:

../apache$ tree

\

6、创建MariaDB角色

为MariaDB创建角色。在roles目录中为MariaDB任务创建一个目录:

mkdir -p mariadb/tasks && cd mariadb/tasks

为MariaDB任务创建配置文件:

vim main.yml

- name: Install prerequisites

  apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes

  loop: [ 'aptitude' ]

 #Install MariaDB server

- name: Install MariaDB Packages

  apt: name={{ item }} update_cache=yes state=latest

  loop: [ 'mariadb-server', 'python3-pymysql' ]

# Start MariaDB Service

- name: Start MariaDB service

  service:

    name: mariadb

    state: started

  become: true

 # MariaDB 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 }}"

确认Ansible roles的结构如下:

../roles$ tree

\

7、创建Ansible Playbook

在父工作目录中创建一个Playbook,该剧本利用了我们刚刚创建的角色:

$ vim lampstack.yml

- name: configure lamp

  hosts: lampstack

  become: yes

  become_method: sudo

  vars_files:

    - vars/default.yml

  roles:

    - apache

    - mariadb

工作目录中的整个配置树应符合以下要求:

../ansible_playbook$ tree

\

8、运行Ansible Playbook在Ubuntu/Debian上安装LAMP Stack

在我们的环境准备就绪后,我们需要运行playbook在Debian/Uubuntu上安装LAMP堆栈:

$ ansible-playbook -i hosts lampstack.yml -u <remote-user>

用为SSH配置的用户替换<remoteuser>选项。

应启动配置。成功执行后,应获得如下输出:

\

这表示安装成功。我们现在可以检查是否可以从浏览器访问服务器。

导航到http://server-IP/info.php,如下图所示:

\

至此,表示我们已经成功地用Ansible在Debian/Uuntu上建立了LAMP堆栈。如您所见,使用Ansible配置LAMP堆栈其实很容易。我们还可以重用我们创建的playbook,以便按需配置更多LAMP堆栈实例。