位置:首页 > SQL > LAMP环境中如何实现自动化部署方案

LAMP环境中如何实现自动化部署方案

时间:2026-08-18  |  作者:冻月看渠  |  阅读:0

在开始动手部署之前,先把基础条件理清楚。目标很明确:在Linux服务器上自动化搭建LAMP(Linux、Apache、MySQL、PHP)环境。

但别急着敲命令。准备工作做扎实,后面的部署才更稳。

一、准备工作

实现LAMP自动化部署前,先确认基础条件已经就绪。

怎样在LAMP中实现自动化部署

  • 控制节点:选一台Linux服务器作为管理机,比如Ubuntu 22.04、CentOS Stream 9,用来执行自动化任务。
  • 托管节点:需要部署LAMP环境的Linux服务器,比如Ubuntu 22.04、CentOS 8。控制节点和托管节点之间必须配好SSH免密登录,用ssh-keygen生成密钥,再复制到托管节点上。
  • 时钟同步:用ntpdatechrony确保控制节点和托管节点时间一致。否则因为时间差导致部署失败,会影响整个流程。

二、使用Ansible实现LAMP自动化部署(推荐)

Ansible是基于YAML的配置管理工具。托管节点不需要安装客户端,全靠SSH远程操作。

如果你希望快速、统一地部署LAMP环境,Ansible是更合适的选择。

1. 在控制节点安装Ansible

以Ubuntu为例,安装命令如下:

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

给脚本执行权限后再运行:

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环境的快速、一致部署就不再是难题。

自动化不仅减少了人工操作失误,也大大提升了运维效率。这才是持续交付应有的节奏。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

精选合集

更多

大家都在玩