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/

成功

相关推荐
北京华人开创公司4 分钟前
京准电钟国产信创:北斗授时服务器的应用及详细介绍
运维·服务器
半__夏4 分钟前
什么是docker,docker解决了什么问题
运维·docker·容器
Allen Bright1 小时前
Linux中的mv命令深入分析
linux·运维·服务器
基哥的奋斗历程2 小时前
解决Linux 虚拟机网段与虚拟机配置网段不一致
linux·运维·服务器
葟雪儿3 小时前
海思芯片 交叉编译curl
linux·运维·服务器·开发语言·c++·嵌入式硬件
文浩(楠搏万)3 小时前
Tomcat HTTPS配置、域名解析及Java WAR包打包
java·运维·服务器·nginx·http·https·tomcat
蜜獾云3 小时前
docker springboot 运维部署详细实例
运维·docker·容器
{⌐■_■}3 小时前
【docker】容器编排之docker swarm
运维·docker·容器