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并可以灵活使用它来满足不同场景和需求。