使用Ansible在Ubuntu/Debian系统上安装LAMP堆栈
本文介绍如何使用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堆栈实例。