Ansible 简介及常用命令 安装部署tomcat -单机版

news/2024/12/17 6:40:05/

Ansible 是一个开源的自动化配置管理工具,用于应用程序部署、任务执行和多节点管理。它的目标是简化和自动化 IT 基础设施管理和配置工作。通过使用 Ansible,系统管理员可以有效地管理数以百计的服务器,而无需依赖复杂的脚本或安装额外的代理。

Ansible 通过 SSH 协议与目标主机进行通信,无需在目标机器上安装任何代理程序,这使得它比许多传统的自动化工具更简单、轻便。Ansible 使用基于 YAML 语言的配置文件,称为 Playbooks,来定义自动化任务。

Ansible 的主要特点

  1. 无代理架构:不需要在目标机器上安装代理,所有任务通过 SSH 进行远程执行。
  2. 易于学习:基于 YAML 的配置文件,语法简洁、易懂。
  3. 高度可扩展:通过模块和插件支持各种任务,支持多种操作系统和环境。
  4. 强大的社区支持:拥有广泛的社区支持和丰富的文档资源。
  5. 灵活性:适用于配置管理、应用部署、任务自动化等多种场景。

常用命令:

命令用途常用选项示例
ansible在一台或多台主机上执行一个单独的任务-m <module>:指定模块<br> -a "<module-args>":指定模块参数<br> -i <inventory>:指定库存文件ansible all -m ping<br> ansible web_servers -m shell -a 'uptime'
ansible-playbook运行 Playbook,执行一系列自动化任务-i <inventory>:指定库存文件<br> --check:检查模式<br> --extra-vars:传递额外变量<br> --tags:只运行特定任务ansible-playbook site.yml<br> ansible-playbook site.yml --check
ansible-galaxy管理角色、集合等资源init <role-name>:初始化角色<br> install <role-name>:安装角色<br> list:列出已安装的角色ansible-galaxy install geerlingguy.apache<br> ansible-galaxy list
ansible-vault用于加密和解密敏感数据create <file>:创建加密文件<br> encrypt <file>:加密文件<br> decrypt <file>:解密文件ansible-vault create secret.yml<br> ansible-vault encrypt secret.yml
ansible-doc查看模块的文档,帮助了解模块使用方法-l:列出所有模块<br> -s:查看模块摘要<br> -d:显示模块详细文档ansible-doc ping<br> ansible-doc yum<br> ansible-doc file -d
ansible-inventory显示、验证和操作库存文件--list:列出库存<br> --host <host>:显示某主机的详细信息ansible-inventory -i hosts --list<br> ansible-inventory -i hosts --host web01
ansible-pull从 Git 仓库拉取并执行 Playbook-U <repository>:指定 Git 仓库<br> -i <inventory>:指定库存文件ansible-pull -U https://github.com/myrepo/ansible.git -i inventory
ansible-playbook (调试选项)执行 Playbook 时启用调试和调试模式-vvvv:增加调试级别<br> --start-at-task:从指定任务开始<br> --tags:仅执行特定标签的任务ansible-playbook site.yml -vvvv<br> ansible-playbook site.yml --start-at-task="Install Apache"
ansible (其他模块)各种系统管理任务的执行-m <module>:指定模块,-a <args>:指定模块参数<br> -i <inventory>:指定库存文件ansible all -m yum -a "name=httpd state=present"<br> ansible all -m service -a "name=apache state=started"

 常见模块:

模块名用途常用选项示例
ping测试与目标主机的连接无选项ansible all -m ping<br> ansible web_servers -m ping
shell执行 shell 命令-a:指定命令参数ansible all -m shell -a 'uptime'<br> ansible web -m shell -a 'echo Hello World'
command执行命令(不通过 shell)-a:指定命令参数ansible all -m command -a 'date'
copy将本地文件复制到远程主机src:源文件路径<br> dest:目标文件路径ansible all -m copy -a "src=/tmp/file dest=/tmp/file"
template从模板文件生成文件并复制到远程主机src:模板文件路径<br> dest:目标文件路径ansible all -m template -a "src=template.j2 dest=/tmp/file"
yum管理基于 RPM 的系统的软件包name:软件包名<br> state:软件包状态(如:present, latest)ansible all -m yum -a "name=httpd state=present"
apt管理基于 Debian 的系统的软件包name:软件包名<br> state:软件包状态(如:present, latest)ansible all -m apt -a "name=nginx state=latest"
service管理系统服务(启动、停止、重启等)name:服务名<br> state:服务状态(如:started, stopped)ansible all -m service -a "name=apache state=started"
user管理用户账户name:用户名<br> state:用户状态(如:present, absent)ansible all -m user -a "name=foo state=present"
group管理用户组name:组名<br> state:组状态(如:present, absent)ansible all -m group -a "name=admin state=present"
git从 Git 仓库克隆代码或拉取更新repo:仓库地址<br> dest:目标目录ansible all -m git -a "repo=https://github.com/repo.git dest=/tmp/repo"
file修改文件的属性(权限、所有者等)path:文件路径<br> mode:文件权限<br> owner:文件所有者ansible all -m file -a "path=/tmp/file mode=755 owner=root group=root"
cron配置定时任务name:任务名<br> minutehourdaymonthweekday:时间设置ansible all -m cron -a "name='backup' minute='0' hour='3' job='/usr/bin/backup.sh'"
lineinfile在文件中查找/添加/删除指定行path:文件路径<br> line:需要添加的行<br> regexp:匹配模式ansible all -m lineinfile -a "path=/etc/hosts line='127.0.0.1 myhost'"
selinux配置 SELinux 状态policy:策略(如:enforcing, permissive, disabled)ansible all -m selinux -a "policy=disabled"
firewalld配置 firewalld 防火墙zone:区域<br> service:服务(如:http, ssh)ansible all -m firewalld -a "zone=public service=http state=enabled"
wait_for等待某个条件(如端口开放、文件存在)port:端口号<br> path:文件路径ansible all -m wait_for -a "port=22 state=started"

 安装部署tomcat-练习单机版

1、使用yum源安装 EPEL仓库 和 Ansible

sudo yum install epel-release -y
sudo yum install ansible -y

2、配置 hosts.ini 文件  添加目标主机  将192.168.153.221换成你的目标主机ip地址。

[tomcat_servers]
tomcat-server ansible_host=192.168.153.221

3、创建 deploy_tomcat.yml Playbook

vim deploy_tomcat.yml

4、添加以下内容:

---
- name: 安装 JDK 和 Tomcathosts: localhost  # 或者指定你的目标主机become: yes  # 使用 sudo 权限vars:jdk_version: "23"  # JDK 版本tomcat_version: "10.1.34"  # Tomcat 版本jdk_url: "https://download.oracle.com/java/{{ jdk_version }}/latest/jdk-{{ jdk_version }}_linux-x64_bin.rpm"  # JDK 下载链接tomcat_url: "https://dlcdn.apache.org/tomcat/tomcat-10/v{{ tomcat_version }}/bin/apache-tomcat-{{ tomcat_version }}.tar.gz"  # Tomcat 下载链接install_dir: "/opt"  # 安装目录tomcat_dir: "/usr/local/tomcat"  # Tomcat 安装后的目标目录tasks:- name: 确保 /opt 目录存在file:path: "{{ install_dir }}"state: directorymode: '0755'  # 设置目录权限- name: 检查 JDK 安装包是否已经存在stat:path: "{{ install_dir }}/jdk-{{ jdk_version }}_linux-x64_bin.rpm"  # 检查 JDK 是否已下载register: jdk_stat- name: 下载 JDK 安装包get_url:url: "{{ jdk_url }}"dest: "{{ install_dir }}/jdk-{{ jdk_version }}_linux-x64_bin.rpm"  # 下载 JDK 安装包到指定路径mode: '0644'  # 设置文件权限when: not jdk_stat.stat.exists  # 如果 JDK 安装包不存在,则下载- name: 检查 Tomcat 安装包是否已经存在stat:path: "{{ install_dir }}/apache-tomcat-{{ tomcat_version }}.tar.gz"  # 检查 Tomcat 是否已下载register: tomcat_stat- name: 下载 Tomcat 安装包get_url:url: "{{ tomcat_url }}"dest: "{{ install_dir }}/apache-tomcat-{{ tomcat_version }}.tar.gz"  # 下载 Tomcat 安装包到指定路径mode: '0644'  # 设置文件权限when: not tomcat_stat.stat.exists  # 如果 Tomcat 安装包不存在,则下载- name: 停止并禁用防火墙 (如果未禁用)systemd:name: firewalldstate: stopped  # 停止防火墙服务enabled: no  # 禁用防火墙ignore_errors: yes  # 防止防火墙没有启动时出错- name: 禁用 SELinux (修改配置)lineinfile:path: /etc/selinux/configregexp: '^SELINUX='line: 'SELINUX=disabled'  # 将 SELinux 设置为禁用create: yes  # 如果文件不存在则创建- name: 安装 JDKyum:name: "{{ install_dir }}/jdk-{{ jdk_version }}_linux-x64_bin.rpm"  # 安装 JDKstate: present  # 确保安装- name: 配置 JDK 环境变量lineinfile:path: /etc/profile.d/java.shline: "{{ item }}"  # 配置 JAVA_HOME 和 PATH 等环境变量create: yes  # 如果文件不存在则创建loop:- "export JAVA_HOME=/usr/java/jdk-{{ jdk_version }}"  # 配置 JAVA_HOME- "export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar"  # 配置 CLASSPATH- "export PATH=$JAVA_HOME/bin:$PATH"  # 配置 PATH- name: 设置 JDK 环境变量可执行权限file:path: /etc/profile.d/java.shmode: '0755'  # 设置文件执行权限- name: 加载 JDK 环境变量shell: |source /etc/profile.d/java.sh  # 加载环境变量java -version  # 验证 Java 版本become: false  # 不需要 sudo 权限ignore_errors: yes  # 如果没有安装成功,不影响脚本执行- name: 解压 Tomcat 安装包unarchive:src: "{{ install_dir }}/apache-tomcat-{{ tomcat_version }}.tar.gz"  # 解压 Tomcat 安装包dest: "{{ install_dir }}"  # 解压到安装目录remote_src: yes  # 解压远程文件- name: 检查目标目录是否已经存在stat:path: "{{ tomcat_dir }}"  # 检查 Tomcat 安装目录是否已经存在register: tomcat_dir_stat- name: 移动 Tomcat 到 /usr/local/tomcatcommand: mv "{{ install_dir }}/apache-tomcat-{{ tomcat_version }}" "{{ tomcat_dir }}"  # 将解压后的 Tomcat 移动到目标目录when: not tomcat_dir_stat.stat.exists  # 如果目标目录不存在,则移动- name: 启动 Tomcatcommand: "{{ tomcat_dir }}/bin/startup.sh"  # 启动 Tomcatignore_errors: yes  # 如果启动失败,不影响脚本执行- name: 检查 Tomcat 是否启动成功command: "curl -s -o /dev/null -w '%{http_code}' http://localhost:8080"  # 通过 curl 检查 Tomcat 是否启动成功register: tomcat_statusretries: 5  # 重试 5 次delay: 10  # 每次重试的延迟 10 秒until: tomcat_status.stdout == "200"  # 直到收到 HTTP 200 状态码- name: 输出 Tomcat 安装并启动成功信息debug:msg: "Tomcat 安装并启动成功!"  # 如果 Tomcat 启动成功,输出信息

5、运行 Ansible Playbook

ansible-playbook -i /root/hosts.ini deploy_tomcat.yml

6、运行结果

7、浏览器访问测试:http://192.168.153.221:8080/

 成功


http://www.ppmy.cn/news/1555794.html

相关文章

ISP帳戶會記錄什麼資訊?

許多用戶並不知道ISP會記錄有關線上活動的大量資訊。從流覽歷史記錄到數據使用情況&#xff0c;ISP經常收集和保留用戶數據&#xff0c;引發一系列隱私問題。 ISP 記錄哪些數據&#xff1f; ISP可以根據其隱私政策記錄各種類型的資訊。常見的記錄數據包括&#xff1a; 1.流覽…

AJAX家政系统自营+多商家家政系统服务小程序PHP+Uniapp

一款同城预约、上门服务、到店核销家政系统&#xff0c;用户端、服务端、门店端各端相互依赖又相互独立&#xff0c;支持选择项目、选择服务人员、选择门店多种下单方式&#xff0c;支持上门服务和到店核销两种服务方式&#xff0c;支持自营和多商家联营两种运营模式&#xff0…

游戏引擎学习第51天

仓库&#xff1a; https://gitee.com/mrxiao_com/2d_game 总结 目前&#xff0c;已经实现了一个基本的碰撞检测器&#xff0c;虽然它能够让角色沿着墙壁滑动&#xff0c;但它并没有完全实现需要的功能。角色可以在空间中自由移动&#xff0c;但目前并没有交互作用&#xff0c…

试题转excel;word转excel;大风车excel

一、问题描述 一名教师朋友&#xff0c;偶尔会需要整理一些高质量的题目到excel中 以往都是手动复制搬运&#xff0c;几百道题几乎需要一个下午的时间 关键这些事&#xff0c;枯燥无聊费眼睛&#xff0c;实在是看起来就很蠢的工作 就想着做一个工具&#xff0c;可以自动处理…

Bugku---misc---隐写2

题目出处&#xff1a;首页 - Bugku CTF平台 ✨打开发现是一张图片&#xff0c;于是查看属性&#xff0c;放在010查看&#xff0c;这都是基本步骤了&#xff0c;发现里面有一个flag.rar&#xff01;&#xff01;&#xff01;拿binwalk分析也确实存在 ✨于是按照压缩包的起始位置…

ubuntu服务器木马类挖矿程序排查、及安全管理总结

版本 24.04 由于GPU多卡服务器多人使用&#xff0c;需要链接隧道ssh等&#xff0c;容易中招挖矿脚本。 总的思路是&#xff0c;顺着进程的PID回溯最终的程序运行起点&#xff0c;这里可以先看一下日志&#xff1a; journalctl -u PID 通过 PID 精确定位进程的信息&#xff0c…

(Windows系统)详细介绍Windows系统 含有英文版

在上期中小亦为大家介绍了MacOS系统&#xff0c;这期小亦就带大家继续详细介绍一下&#xff0c;大家熟知的Windows&#xff0c;话不多说~ Windows系统详细介绍 Windows操作系统&#xff0c;作为微软公司&#xff08;Microsoft&#xff09;的旗舰产品&#xff0c;自1985年问世以…

链表的应用

尾删 int tail_del (linkListPtr S) { if(NULL S || empty(S)) { printf("失败\n"); return 0; } linkListPtr q S; for(int i0 ; i<S->len-1;i) { qq->next; } free(q->next); q->n…