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

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> minute, hour, day, month, weekday:时间设置 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

bash 复制代码
sudo yum install epel-release -y
sudo yum install ansible -y

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

bash 复制代码
[tomcat_servers]
tomcat-server ansible_host=192.168.153.221

3、创建 deploy_tomcat.yml Playbook

bash 复制代码
vim deploy_tomcat.yml

4、添加以下内容:

bash 复制代码
---
- name: 安装 JDK 和 Tomcat
  hosts: 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: directory
        mode: '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: firewalld
        state: stopped  # 停止防火墙服务
        enabled: no  # 禁用防火墙
      ignore_errors: yes  # 防止防火墙没有启动时出错

    - name: 禁用 SELinux (修改配置)
      lineinfile:
        path: /etc/selinux/config
        regexp: '^SELINUX='
        line: 'SELINUX=disabled'  # 将 SELinux 设置为禁用
        create: yes  # 如果文件不存在则创建
     
    - name: 安装 JDK
      yum:
        name: "{{ install_dir }}/jdk-{{ jdk_version }}_linux-x64_bin.rpm"  # 安装 JDK
        state: present  # 确保安装

    - name: 配置 JDK 环境变量
      lineinfile:
        path: /etc/profile.d/java.sh
        line: "{{ 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.sh
        mode: '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/tomcat
      command: mv "{{ install_dir }}/apache-tomcat-{{ tomcat_version }}" "{{ tomcat_dir }}"  # 将解压后的 Tomcat 移动到目标目录
      when: not tomcat_dir_stat.stat.exists  # 如果目标目录不存在,则移动

    - name: 启动 Tomcat
      command: "{{ tomcat_dir }}/bin/startup.sh"  # 启动 Tomcat
      ignore_errors: yes  # 如果启动失败,不影响脚本执行

    - name: 检查 Tomcat 是否启动成功
      command: "curl -s -o /dev/null -w '%{http_code}' http://localhost:8080"  # 通过 curl 检查 Tomcat 是否启动成功
      register: tomcat_status
      retries: 5  # 重试 5 次
      delay: 10  # 每次重试的延迟 10 秒
      until: tomcat_status.stdout == "200"  # 直到收到 HTTP 200 状态码

    - name: 输出 Tomcat 安装并启动成功信息
      debug:
        msg: "Tomcat 安装并启动成功!"  # 如果 Tomcat 启动成功,输出信息

5、运行 Ansible Playbook

bash 复制代码
ansible-playbook -i /root/hosts.ini deploy_tomcat.yml

6、运行结果

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

成功

相关推荐
Avan_菜菜1 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB2 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220704 天前
如何搭建本地yum源(上)
运维
大树887 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠7 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质7 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工7 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智7 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_7 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化