# Ansible怎么部署Tomcat
## 前言
在現代DevOps實踐中,自動化部署已成為提升效率的關鍵環節。Ansible作為一款無代理的自動化工具,憑借其簡單易用的YAML語法和強大的模塊化設計,成為基礎設施即代碼(IaC)的重要解決方案。本文將詳細介紹如何使用Ansible自動化部署Apache Tomcat服務器。
---
## 一、環境準備
### 1.1 基礎環境要求
- **控制節點**:安裝Ansible的Linux主機(建議Python 3.8+)
- **目標節點**:至少1臺Linux服務器(CentOS/RHEL/Ubuntu)
- **網絡互通**:SSH免密登錄配置完成
### 1.2 軟件版本
```yaml
ansible_core: 2.14+
java: openjdk-11
tomcat: 9.0.68
建議的Ansible項目結構:
tomcat-deploy/
├── inventories/
│ └── production
├── roles/
│ └── tomcat/
│ ├── tasks/
│ ├── templates/
│ └── vars/
├── playbook.yml
└── requirements.yml
# playbook.yml
- name: Deploy Tomcat Cluster
hosts: web_servers
become: yes
roles:
- role: tomcat
tags: tomcat
# roles/tomcat/tasks/install_jdk.yml
- name: Install OpenJDK 11
package:
name: java-11-openjdk-devel
state: present
# roles/tomcat/tasks/download_tomcat.yml
- name: Download Tomcat
get_url:
url: "https://archive.apache.org/dist/tomcat/tomcat-9/v{{ tomcat_version }}/bin/apache-tomcat-{{ tomcat_version }}.tar.gz"
dest: "/tmp/apache-tomcat-{{ tomcat_version }}.tar.gz"
checksum: "sha256:{{ tomcat_checksum }}"
# roles/tomcat/tasks/extract_tomcat.yml
- name: Create Tomcat directory
file:
path: "{{ tomcat_install_dir }}"
state: directory
owner: "{{ tomcat_user }}"
group: "{{ tomcat_group }}"
- name: Extract Tomcat
unarchive:
src: "/tmp/apache-tomcat-{{ tomcat_version }}.tar.gz"
dest: "{{ tomcat_install_dir }}"
remote_src: yes
extra_opts: "--strip-components=1"
<!-- roles/tomcat/templates/server.xml.j2 -->
<Connector port="{{ tomcat_port }}"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
# roles/tomcat/tasks/configure_tomcat.yml
- name: Configure server.xml
template:
src: server.xml.j2
dest: "{{ tomcat_install_dir }}/conf/server.xml"
owner: "{{ tomcat_user }}"
group: "{{ tomcat_group }}"
notify: restart tomcat
# roles/tomcat/templates/tomcat.service.j2
[Unit]
Description=Apache Tomcat
After=syslog.target network.target
[Service]
User={{ tomcat_user }}
Group={{ tomcat_group }}
ExecStart={{ tomcat_install_dir }}/bin/startup.sh
ExecStop={{ tomcat_install_dir }}/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
- name: Install systemd service
template:
src: tomcat.service.j2
dest: /etc/systemd/system/tomcat.service
notify:
- daemon-reload
- enable tomcat
通過變量控制多實例:
# inventories/production
[web_servers]
web1 tomcat_port=8080 tomcat_instance=instance1
web2 tomcat_port=8081 tomcat_instance=instance2
建議添加的安全措施: 1. 修改默認shutdown端口 2. 禁用管理界面 3. 配置HTTPS連接
在setenv.sh.j2中添加:
export JAVA_OPTS="-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=512m"
ansible-playbook -i inventories/production playbook.yml --check
ansible-playbook -i inventories/production playbook.yml
ansible web_servers -m shell -a "systemctl status tomcat"
ansible web_servers -m wait_for -a "port={{ tomcat_port }} timeout=30"
錯誤現象:
Permission denied while trying to connect to the Docker daemon socket
解決方案:
- name: Add user to tomcat group
user:
name: "{{ ansible_user }}"
groups: "{{ tomcat_group }}"
append: yes
使用handler處理:
- name: Check port availability
shell: netstat -tuln | grep {{ tomcat_port }}
register: port_check
failed_when: port_check.rc == 0
通過本文的Ansible Playbook,我們實現了: - 自動化安裝JDK環境 - 一鍵部署Tomcat集群 - 靈活的配置管理 - 標準化的服務管控
完整的代碼示例可參考GitHub倉庫:ansible-tomcat-example
最佳實踐建議:建議結合Jenkins等CI工具實現持續部署,并通過Ansible Vault加密敏感配置。 “`
注:實際執行時需根據具體環境調整:
1. 替換變量{{ tomcat_version }}等為實際值
2. 確保inventory文件正確配置
3. 測試環境建議先使用--check模式驗證
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。