linux

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

小樊
52
2025-09-26 23:20:38
栏目: 编程语言

一、准备工作

在实现LAMP(Linux、Apache、MySQL、PHP)自动化部署前,需完成以下基础准备:

二、使用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

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

4. 运行Ansible Playbook

执行以下命令启动部署:

ansible-playbook -i inventory lamp_deploy.yml

三、使用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

四、扩展:结合CI/CD实现自动化(进阶)

若需要代码更新后自动部署,可结合Jenkins、GitLab CI等工具:

  1. 代码托管:将PHP项目代码托管在Git仓库(如GitHub、GitLab);
  2. CI/CD配置:在Jenkins中创建Pipeline,监听代码推送事件;
  3. 自动化流程:代码推送后,Jenkins自动拉取最新代码,通过Ansible将代码同步到托管节点,并重启Apache服务(如ansible-playbook -i inventory sync_code.yml)。

通过以上方法,可实现LAMP环境的快速、一致部署,减少人工操作错误,提升运维效率。

0
看了该问题的人还看了