linux系统Ansible自动化运维部署方法

  • Post category:Linux

Linux系统Ansible自动化运维部署方法攻略

什么是Ansible

Ansible是一款运维自动化工具,可以实现多种部署、配置和管理功能。它基于Python语言开发,在Linux系统中广泛应用。Ansible与其他自动化工具不同的地方是,它使用SSH协议与远程主机进行通信,无需在远程主机上安装任何客户端软件。这使得Ansible非常容易部署和使用。

Ansible的应用场景

  • 应用程序部署:可以将应用程序的代码和配置文件复制到目标主机上,然后在那里运行应用程序。
  • 系统配置管理:可以编写脚本来自动设置和配置Linux系统。
  • 网络配置管理:可以管理网络设备的配置信息,如路由器和防火墙。

以上只是部分应用场景,实际上Ansible的应用场景非常广泛。

Ansible部署流程

环境准备

在进行Ansible部署之前,需要准备以下环境:

  • 控制机:运行Ansible的主机。
  • 远程主机:需要管理和配置的目标主机。
  • SSH密钥:在不需要输入密码的情况下,通过SSH协议连接到远程主机。

安装Ansible

在控制机上安装Ansible:

sudo apt-get update
sudo apt-get install ansible

编写Ansible配置文件

在控制机上创建一个名为/etc/ansible/hosts的文件,并添加需要管理的远程主机的IP地址或主机名。例如:

[webservers]
192.168.1.10
192.168.1.11

运行Ansible命令

可以使用以下命令检查Ansible是否正确安装并与远程主机通信:

ansible webservers -m ping

上面的命令将发送一个ping消息到远程主机,以测试与之的通信情况。

编写Ansible Playbooks

Ansible Playbooks是一系列命令,用于自动化部署和配置远程主机。下面的示例演示如何使用Ansible Playbooks来安装Apache服务器并启动服务。

- name: Install Apache and start the service
  hosts: webservers
  become: true
  tasks:
    - name: Install Apache
      apt: name=apache2 state=present
    - name: Start Apache service
      service: name=apache2 state=started

上述Playbook中定义了一些任务:

  • 安装apache2软件包
  • 启动apache2服务

可以使用以下命令来运行Playbook:

ansible-playbook install_apache.yml

示例

示例1:使用Ansible自动化部署WordPress

WordPress是一款广泛使用的博客发布平台,本例演示如何使用Ansible来自动化部署WordPress。

以下是Ansible Playbook示例:

- name: Install LAMP stack
  hosts: webservers
  become: true
  vars:
    mysql_root_password: "root_pwd"
    wp_db_name: "wordpress"
    wp_db_user: "wpuser"
    wp_db_password: "wp_pwd"
    wp_site_url: "www.example.com"
  tasks:
    - name: Install Apache2
      apt: name=apache2 state=latest
    - name: Install MySQL
      apt: name=mysql-server state=latest
      ignore_errors: yes
      register: mysql_install
    - name: Secure MySQL installation
      shell: |
        mysql --user=root --password='' -e "UPDATE mysql.user SET authentication_string=PASSWORD('{{ mysql_root_password }}') WHERE User='root'; FLUSH PRIVILEGES;"
      when: mysql_install.failed == false
    - name: Create a new MySQL database
      mysql_db:
        name: "{{ wp_db_name }}"
        state: present
        login_user: root
        login_password: "{{ mysql_root_password }}"
    - name: Create a new MySQL user
      mysql_user:
        name: "{{ wp_db_user }}"
        password: "{{ wp_db_password }}"
        login_user: root
        login_password: "{{ mysql_root_password }}"
        priv: "{{ wp_db_name }}.*:ALL"
    - name: Download WordPress
      get_url: url=https://wordpress.org/latest.tar.gz dest=/tmp/
    - name: Extract WordPress
      unarchive:
        src: /tmp/latest.tar.gz
        dest: /var/www/html/
        remote_src: yes
    - name: Set the correct ownership and permissions for WordPress installation
      file:
        path: /var/www/html/wordpress
        owner: www-data
        group: www-data
        mode: '0775'
        recurse: yes
    - name: Update WordPress site URL
      mysql_db:
        name: "{{ wp_db_name }}"
        state: present
        login_user: root
        login_password: "{{ mysql_root_password }}"
        login_host: localhost
        login_unix_socket: /var/run/mysqld/mysqld.sock
        force_localhost: yes
        login_port: "{{ mysql_port }}"
        collation: utf8_general_ci
        encoding: utf8
        sql:
          - "UPDATE wp_options SET option_value = '{{ wp_site_url }}' WHERE option_name = 'siteurl' OR option_name = 'home';"
    - name: Configure Apache Virtualhost
      copy:
        dest: /etc/apache2/sites-available/wordpress.conf
        mode: '0644'
        content: |
          <VirtualHost *:80>
            ServerName {{ wp_site_url }}
            DocumentRoot /var/www/html/wordpress
            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined
          </VirtualHost>
    - name: Enable Apache site
      apache2_module:
        state: present
        name: rewrite
      notify:
        - Enable WordPress site
    - name: Disable default Apache site
      apache2_module:
        state: absent
        name: autoindex
      notify:
        - Disable default Apache site
  handlers:
    - name: Enable WordPress site
      copy:
        dest: /etc/apache2/sites-enabled/wordpress.conf
        mode: '0644'
        src: /etc/apache2/sites-available/wordpress.conf
      notify:
        - Restart Apache
    - name: Restart Apache
      service:
        name: apache2
        state: restarted
    - name: Disable default Apache site
      copy:
        dest: /etc/apache2/sites-enabled/000-default.conf.disabled
        src: /etc/apache2/sites-enabled/000-default.conf
      notify:
        - Restart Apache

这个Playbook在远程主机上安装整个LAMP(Linux、Apache、MySQL和PHP)堆栈,并自动化了WordPress的安装和配置。可以使用以下命令来运行该Playbook:

ansible-playbook install-wordpress.yml

示例2:使用Ansible配置Nginx负载均衡器

Nginx是一款高效的Web 服务器软件。在本例中,将使用Ansible来部署和配置Nginx作为负载均衡器。

以下是Ansible Playbook示例:

- name: Install Nginx load balancer
  hosts: lb
  become: true
  tasks:
    - name: Install Nginx
      apt: name=nginx state=latest
      notify: Restart Nginx
    - name: Configure Nginx
      copy:
        src: nginx.conf
        dest: /etc/nginx/nginx.conf
        mode: '0644'
      notify: Restart Nginx
  handlers:
    - name: Restart Nginx
      service: name=nginx state=restarted

该Playbook在远程主机上安装Nginx,并将其配置为负载均衡器。可以使用以下命令来运行该Playbook:

ansible-playbook nginx-lb.yml

总结

通过本文介绍,你已经了解了Ansible的基本概念、部署流程和示例。Ansible的使用可以极大地简化运维工作和流程,从而提高工作效率。通过学习和实践,你将更加熟悉Ansible并可以灵活使用它来满足不同场景和需求。