一、准备工作
在实现LAMP(Linux、Apache、MySQL、PHP)自动化部署前,需完成以下基础准备:
- 控制节点:选择一台Linux服务器作为管理机(如Ubuntu 22.04、CentOS Stream 9),用于执行自动化任务;
- 托管节点:需要部署LAMP环境的Linux服务器(如Ubuntu 22.04、CentOS 8),确保控制节点与托管节点之间SSH免密登录已配置(通过
ssh-keygen生成密钥并复制到托管节点); - 时钟同步:使用
ntpdate或chrony确保控制节点与托管节点时间同步,避免因时间差异导致部署失败。
二、使用Ansible实现LAMP自动化部署(推荐)
Ansible是基于YAML的开源配置管理工具,无需在托管节点安装客户端,通过SSH实现远程操作,适合LAMP环境的快速部署。
1. 在控制节点安装Ansible
以Ubuntu为例,执行以下命令安装Ansible:
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:ansible/ansible
sudo apt update
sudo apt install ansible
安装完成后,通过ansible --version验证是否安装成功。
2. 配置Ansible Inventory文件
Inventory文件用于定义托管节点(目标服务器),创建inventory文件(如/etc/ansible/inventory),内容如下:
[lamp_servers]
web1 ansible_host=192.168.1.100 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa
web2 ansible_host=192.168.1.101 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa
[lamp_servers]:主机组名称,可自定义;ansible_host:托管节点IP地址;ansible_user:登录托管节点的用户名;ansible_ssh_private_key_file:SSH私钥路径(若使用密码登录,可省略此项)。
3. 编写Ansible Playbook
Playbook是Ansible的核心,通过YAML语法定义LAMP部署步骤。创建lamp_deploy.yml文件,内容如下:
---
- name: Deploy LAMP stack on multiple servers
hosts: lamp_servers
become: yes # 使用sudo权限执行任务
vars:
apache_port: 80
mysql_root_password: "YourSecurePassword123!" # 生产环境建议使用Vault加密
tasks:
# 更新系统软件包
- name: Update apt cache (Ubuntu/Debian)
apt:
update_cache: yes
when: ansible_os_family == 'Debian'
- name: Update yum cache (CentOS/RHEL)
yum:
update_cache: yes
when: ansible_os_family == 'RedHat'
# 安装Apache
- name: Install Apache
package:
name:
- apache2 # Debian/Ubuntu
- httpd # CentOS/RHEL
state: present
notify: Restart Apache
# 安装MySQL
- name: Install MySQL server
package:
name:
- mysql-server # Debian/Ubuntu
- mariadb-server # CentOS/RHEL
state: present
notify: Restart MySQL
- name: Secure MySQL installation
mysql_secure_installation:
login_unix_socket: /var/run/mysqld/mysqld.sock
remove_anonymous_users: yes
remove_test_database: yes
root_password: "{{ mysql_root_password }}"
root_password_update: yes
# 安装PHP及常用扩展
- name: Install PHP and extensions
package:
name:
- php
- libapache2-mod-php # Debian/Ubuntu
- php-mysqlnd
- php-cli
- php-curl
- php-gd
state: present
notify: Restart Apache
# 启动服务并设置开机自启
- name: Enable and start Apache
service:
name: "{{ 'apache2' if ansible_os_family == 'Debian' else 'httpd' }}"
state: started
enabled: yes
- name: Enable and start MySQL
service:
name: "{{ 'mysql' if ansible_os_family == 'Debian' else 'mariadb' }}"
state: started
enabled: yes
handlers:
- name: Restart Apache
service:
name: "{{ 'apache2' if ansible_os_family == 'Debian' else 'httpd' }}"
state: restarted
- name: Restart MySQL
service:
name: "{{ 'mysql' if ansible_os_family == 'Debian' else 'mariadb' }}"
state: restarted
- 变量定义:
apache_port、mysql_root_password可根据需求调整; - 条件判断:
when语句用于区分Ubuntu/Debian(使用apt)和CentOS/RHEL(使用yum)系统; - Handlers:当任务修改配置文件后,触发服务重启(如Apache、MySQL)。
4. 运行Ansible Playbook
执行以下命令启动部署:
ansible-playbook -i inventory lamp_deploy.yml
-i inventory:指定Inventory文件路径;- 若托管节点使用密码登录,需添加
-k参数(提示输入密码)。
三、使用Shell脚本实现一键部署(简单场景适用)
若服务器数量较少或需求简单,可通过Shell脚本自动化执行安装命令。创建lamp_deploy.sh文件,内容如下:
#!/bin/bash
# 更新系统
echo "Updating system packages..."
sudo apt update && sudo apt upgrade -y # Ubuntu/Debian
# sudo yum update -y # CentOS/RHEL(取消注释适配)
# 安装Apache
echo "Installing Apache..."
sudo apt install -y apache2 # Ubuntu/Debian
# sudo yum install -y httpd # CentOS/RHEL(取消注释适配)
sudo systemctl enable apache2
sudo systemctl start apache2
# 安装MySQL
echo "Installing MySQL..."
sudo apt install -y mysql-server # Ubuntu/Debian
# sudo yum install -y mariadb-server # CentOS/RHEL(取消注释适配)
sudo systemctl enable mysql
sudo systemctl start mysql
# 安全配置MySQL
echo "Securing MySQL..."
sudo mysql_secure_installation <<EOF
y
YourSecurePassword123!
y
y
y
y
EOF
# 安装PHP
echo "Installing PHP..."
sudo apt install -y php libapache2-mod-php php-mysql # Ubuntu/Debian
# sudo yum install -y php php-mysqlnd # CentOS/RHEL(取消注释适配)
sudo systemctl restart apache2
echo "LAMP deployment completed successfully!"
赋予执行权限并运行:
chmod +x lamp_deploy.sh
./lamp_deploy.sh
- 脚本中
<用于交互式输入MySQL root密码,生产环境建议使用 expect工具或Ansible替代。
四、扩展:结合CI/CD实现自动化(进阶)
若需要代码更新后自动部署,可结合Jenkins、GitLab CI等工具:
- 代码托管:将PHP项目代码托管在Git仓库(如GitHub、GitLab);
- CI/CD配置:在Jenkins中创建Pipeline,监听代码推送事件;
- 自动化流程:代码推送后,Jenkins自动拉取最新代码,通过Ansible将代码同步到托管节点,并重启Apache服务(如
ansible-playbook -i inventory sync_code.yml)。
通过以上方法,可实现LAMP环境的快速、一致部署,减少人工操作错误,提升运维效率。
以上就是关于“怎样在LAMP中实现自动化部署”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm