余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

如何配置自动化工具-Ansible?

xiyangw 2023-05-14 11:33 16 浏览 0 评论



什么是Ansible?

Ansible是一个开源软件工具,可实现自动执行软件安装及配置,配置管理和应用程序部署。

如何配置自动化工具-Ansible?

Ansible的优点

  • 无代理

客户端上没有要与服务器通信的软件或代理。直接通过SSH机制连接服务器

  • 重复部署

无论你调用该操作多少次,结果都是一样的。

  • 简单且可扩展

Ansible是用Python编写的,并将YAML用于编写playbook,这两门语言都被认为是相对其他开发语言最容易学习和入门的。

Ansible安装配置

#Ubuntu/Debian
sudo apt-get install ansible 
# CentOS
sudo yum install ansible 
#Mac-OS 
brew install ansible

Ansible架构和组件

  • 模块(Modules)

在服务器上执行程序安装,例如,

一般是运行此命令,手动安装:

sudo apt-get install htop

而我们可以通过使用apt模块来安装htop

- name:Install htop 
 apt:name = htop

使用模块可以让你知道是否已安装。

  • 插件(Plugins)

插件是增强Ansible的核心功能。Ansible自带了很多非常方便的插件,你可以很轻松的编写自己的插件。

  • 主机列表(Host Inventories)

要提供主机列表,我们需要提供 inventory 。这是配置主机文件的方式。

以最简单的方式,我们的主机文件可以包含以下这一行:

35.178.45.231 ansible_ssh_user = ubuntu
  • 剧本(Playbook)

Ansible playbook是一种以脚本方式将命令发送到远程服务器的方法。你可以通过将脚本传递到一个或多个服务器来配置整个复杂的环境,而不必单独使用Ansible命令经过命令行远程配置服务器。

  • 组变量(group_vars)

该文件包含一组或多组变量,例如db用户名和密码。

db_user: ubuntu
db_password: 123456
  • 角色(roles)

roles是将多个tasks合并一起执行的方式,可以通过干净清晰的目录结构以非常有效的方式进行自动化,也有利于配置管理

  • 处理者(handlers)

handlers是tasks的列表,与常规tasks没有什么实质的不同,它们由全局唯一名称引用,并由通知程序通知。如果没有任何通知处理程序,它将不会运行。无论有多少个tasks通知handlers,在特定playbook中完成所有tasks后,它将仅运行一次。

  • Tags

如果有大型playbook,则可以在不运行整个playbook的情况下运行特定部分的配置可能会很有用。增加了很大的灵活性。

实例:安装程序,运行的步骤

  1. 构建主机和ansible.cfg
  2. 在Ansible中定义Roles
  3. 在Ansible中定义Handlers
  4. 安装PHP模块
  5. 安装Nginx
  6. 添加Nginx默认配置文件
  7. 添加vars以管理变量
  8. 创建MySql数据库,用户名和密码
  9. 创建playbook
  10. 执行playbook安装部署
  • 构建主机和ansible.cfg

hosts.ini

[test] 
#your instance IP 
127.0.0.39 

ansible.cfg

[defaults] 
hostfile = hosts.ini 
# configure log dir 
log_path= logs/ansible-log.log 
  • 在Ansible中定义Roles

使用Ping模块来验证主机是否正常工作,然后我将更新所有软件包并安装两个模块git和htop

--- 
- ping: ~ 
### 
- name: Update apt packages 
apt: 
update_cache: yes 
## 
- name: Install GIT VCS 
apt: 
name: git 
state: latest 
## 
- name: Install htop 
apt: name=htop 
  • 在Ansible中定义Handlers
--- 
- name: Restart PHP-FPM 
service: 
name: php{{php_version}}-fpm 
state: restarted 
#### 
- name: Restart Nginx 
service: 
name: nginx 
state: restarted
  • 安装Php模块
  • 要在ansible中触发handlers,我们必须使用notify:重新启动PHP-FPM,handlers名称应该是唯一的,例如,如果您想仅从playbook中运行此任务,则只能通过使用 --tags =“ php”运行命令,它将仅执行此任务
--- 
- name: Install PHP {{php_version}} PPA Repo 
apt_repository: 
repo: 'ppa:ondrej/php' 
tags: 
- php 
## 
- name: Install PHP {{php_version}} 
apt: name=php{{php_version}} state=latest 
## 
- name: Install PHP packages 
become: true 
apt: 
name: "{{ item }}" 
state: latest 
with_items: 
- php{{php_version}}-curl 
- php{{php_version}}-fpm 
- php{{php_version}}-intl 
- php{{php_version}}-mysql 
- php{{php_version}}-xml 
- php{{php_version}}-mbstring 
notify: Restart PHP-FPM 
tags: 
- php 
  • 安装Nginx模块
- name: Install Nginx web server 
apt: 
name: nginx 
state: latest 
notify: Restart Nginx 
tags: 
- nginx 
### 
- name: Update nginx config files 
become: true 
template: 
src: templates/nginx.conf 
dest: "/etc/nginx/sites-available/default" 
tags: 
- nginx 
notify: Restart Nginx 
### 
- name: link nginx config 
become: true 
file: 
src: "/etc/nginx/sites-available/default" 
dest: "/etc/nginx/sites-enabled/default" 
state: link 
tags: 
- nginx 
notify: Restart Nginx 
  • 添加nginx默认配置文件
server { 
listen 80 default_server; 
listen [::]:80 default_server ipv6only=on; 
		server_name {{ server_name }}; 
root {{ app_work_dir }}public; 
location / { 
try_files $uri $uri/ /index.php?$args; 
index index.php index.html index.htm; 
} 
if (!-d $request_filename) { 
rewrite ^/(.*)/$ /$1 permanent; 
} 
location = /favicon.ico { 
access_log off; 
log_not_found off; 
} 
location ~ \.php$ { 
try_files $uri $uri/ /index.php?$args; 
index index.php index.html index.htm; 
fastcgi_pass unix:/var/run/php/php{{php_version}}-fpm.sock; 
fastcgi_index index.php; 
fastcgi_param SCRIPT_FILENAME {{app_work_dir}}public$fastcgi_script_name; 
fastcgi_param APPLICATION_ENV testing; 
fastcgi_param PATH /usr/bin:/bin:/usr/sbin:/sbin; 
fastcgi_intercept_errors on; 
include fastcgi_params; 
} 
} 
  • 添加vars以管理变量

vars.yml

注:可以使用ansible-vault加密和解密vars

--- 
##@ref https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#variables-and-vaults 
ansible_ssh_user: "ubuntu" 
current_user: "ubuntu" 
server_name: "app_name" 
repo_git_url: "app_github_url" 
ansible_ssh_private_key_file: "ssh_dir" 
php_version: 7.2 
app_work_dir: /var/www/app_name/ 
#mysql config 
mysql_host: "mysql_host" 
mysql_db: app_name 
mysql_user: sql_user 
mysql_pass: sql_pass 
#other config 
cache_driver: file 
session_driver: file 
app_env: production 
app_debug: false 
app_key: "your_app_key" 
app_name: "app_name" 
app_url: "your_app_url" 
  • 创建MySql数据库,用户名和密码
- mysql_user: 
name: "{{mysql_user}}" 
password: "{{mysql_pass}}" 
priv: '*.*:ALL' 
state: present 
tags: 
- mysql-db 
## 
- name: Create APP DB database 
mysql_db: name="{{mysql_db}}" state=present login_user="{{mysql_user}}" login_password="{{mysql_pass}}" 
  • 创建playbook

将test定义为该playbook的主机,而sudo yes则使您能够以sudo用户身份执行命令,我们有vars_files存储我们的vars,我们有一组roles,每个role执行特定task,最后有handlers引入所有项目的handler

--- 
- hosts: test 
#common options between modules 
sudo: yes 
gather_facts: no 
vars_files: 
- ./group_vars/vars.yml 
roles: 
- misc 
- php 
- mysql 
- redis 
- nginx 
- bootstrap-app 
- code-deploy 
### 
handlers: 
- include: handlers/main.yml 
  • 执行playbook安装部署
#ansible-playbook playbookName
ansible-playbook code-deploy.yml# run with specific tags 
ansible-playbook playbook.yml --tags="env-files,php"
  • 完整的目录结构
├── ansible.cfg
├── code-deploy.yml
├── files
│ └── dump.sql
├── group_vars
│ └── vars.yml
├── handlers
│ └── main.yml
├── hosts.ini
├── logs
│ └── ansible-log.log
├── roles
│ ├── bootstrap-app
│ │ └── tasks
│ │ └── main.yml
│ ├── code-deploy
│ │ ├── tasks
│ │ │ ├── config-files.yml
│ │ │ └── main.yml
│ │ └── templates
│ │ └── env.conf
│ ├── misc
│ │ └── tasks
│ │ └── main.yml
│ ├── mysql
│ │ └── tasks
│ │ ├── config.yml
│ │ └── main.yml
│ ├── nginx
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ │ └── nginx.conf
│ ├── php
│ │ └── tasks
│ │ └── main.yml
│ └── redis
│ └── tasks
│ └── main.yml
├── scripts
│ ├── install_composer.sh
│ └── startup.sh
└── site.yml

参考文献

https://ansible-tran.readthedocs.io/en/latest/

【特别声明】转载或以其他方式使用本网站内容,请注明出处。

相关推荐

辞旧迎新,新手使用Containerd时的几点须知

相信大家在2020年岁末都被Kubernetes即将抛弃Docker的消息刷屏了。事实上作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使...

分布式日志系统ELK+skywalking分布式链路完整搭建流程

开头在分布式系统中,日志跟踪是一件很令程序员头疼的问题,在遇到生产问题时,如果是多节点需要打开多节点服务器去跟踪问题,如果下游也是多节点且调用多个服务,那就更麻烦,再者,如果没有分布式链路,在生产日志...

Linux用户和用户组管理

1、用户账户概述-AAA介绍AAA指的是Authentication、Authorization、Accounting,即认证、授权和审计。?认证:验证用户是否可以获得权限,是3A的第一步,即验证身份...

linux查看最后N条日志

其实很简单,只需要用到tail这个命令tail-100catalina.out输入以上命令,就能列出catalina.out的最后100行。...

解决linux系统日志时间错误的问题

今天发现一台虚拟机下的系统日志:/var/log/messages,文件时间戳不对,跟正常时间差了12个小时。按网上说的执行了servicersyslogrestart重启syslog服务,还是不...

全程软件测试(六十二):软件测试工作如何运用Linux—读书笔记

从事过软件测试的小伙们就会明白会使用Linux是多么重要的一件事,工作时需要用到,面试时会被问到,简历中需要写到。对于软件测试人员来说,不需要你多么熟练使用Linux所有命令,也不需要你对Linux...

Linux运维之为Nginx添加错误日志(error_log)配置

Nginx错误日志信息介绍配置记录Nginx的错误信息是调试Nginx服务的重要手段,属于核心功能模块(nginx_core_module)的参数,该参数名字为error_log,可以放在不同的虚机主...

Linux使用swatchdog实时监控日志文件的变化

1.前言本教程主要讲解在Linux系统中如何使用swatchdog实时监控日志文件的变化。swatchdog(SimpleWATCHDOG)是一个简单的Perl脚本,用于监视类Unix系统(比如...

syslog服务详解

背景:需求来自于一个客户想将服务器的日志转发到自己的日志服务器上,所以希望我们能提供这个转发的功能,同时还要满足syslog协议。1什么是syslog服务1.1syslog标准协议如下图这里的fa...

linux日志文件的管理、备份及日志服务器的搭建

日志文件存放目录:/var/log[root@xinglog]#cd/var/log[root@xinglog]#lsmessages:系统日志secure:登录日志———————————...

运维之日志管理简介

日志简介在运维过程中,日志是必不可少的东西,通过日志可以快速发现问题所在。日志分类日志分类,对不同的日志进行不同维度的分析。操作系统日志操作系统是基础,应用都是在其之上;操作系统日志的分析,可以反馈出...

Apache Log4j 爆核弹级漏洞,Spring Boot 默认日志框架就能完美躲过

这两天沸沸扬扬的Log4j2漏洞门事件炒得热火朝天:突发!ApacheLog4j2报核弹级漏洞。。赶紧修复!!|Java技术栈|Java|SpringBoot|Spring...

Linux服务器存在大量log日志,如何快速定位错误?

来源:blog.csdn.net/nan1996jiang/articlep/details/109550303针对大量log日志快速定位错误地方tail/head简单命令使用:附加针对大量log日志...

Linux中查看日志文件的正确姿势,求你别tail走天下了!

作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了。尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于我这种小菜鸡来说,第一反应就是cat,tail,vi(或...

分享几款常用的付费日志系统,献给迷茫的你!

概述在前一篇文章中,我们分享了几款免费的日志服务器。他们各有各的特点,但是大家有不同的需求,有时免费的服务器不能满足大家的需要,下面推荐几款付费的日志服务器。1.Nagios日志服务器Nagio...

取消回复欢迎 发表评论: