欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

企业级自动化部署方案——ansible实现tomcat自动安装和配置

程序员文章站 2022-04-15 13:41:42
==共耗时10多个小时== 思路一 总体设计 ansible playbook目录结构 入口文件 执行与结果 实现过程问题记录 tomcat应用程序是root用户启动的,root用户启动tomcat有一个严重的问题,那就是tomcat具有root权限,这意味着你的任何一个页面脚本(html/js)都 ......

共耗时10多个小时

思路一

总体设计

企业级自动化部署方案——ansible实现tomcat自动安装和配置

ansible-playbook目录结构

[root@ansible ~]# tree /etc/ansible/roles/tomcat
/etc/ansible/roles/tomcat
├── files
│   ├── catalina.sh
│   ├── context.xml
│   └── setenv.sh
├── handlers
│   └── main.yaml
├── tasks
│   ├── install_jdk.yaml
│   ├── install_tomcat.yaml
│   └── main.yaml
├── templates
│   ├── catalina.sh
│   ├── server.xml
│   ├── tomcat.service
│   └── tomcat-users.xml
└── vars
    └── main.yaml

入口文件

[root@ansible ~]# ll /etc/ansible/work_dir/tomcat.yaml
-rw-r--r-- 1 root root 55 mar 29 19:58 /etc/ansible/work_dir/tomcat.yaml

执行与结果

[root@ansible work_dir]# pwd
/etc/ansible/work_dir
[root@ansible work_dir]# ansible-playbook tomcat.yaml

企业级自动化部署方案——ansible实现tomcat自动安装和配置企业级自动化部署方案——ansible实现tomcat自动安装和配置企业级自动化部署方案——ansible实现tomcat自动安装和配置

实现过程问题记录

tomcat应用程序是root用户启动的,root用户启动tomcat有一个严重的问题,那就是tomcat具有root权限,这意味着你的任何一个页面脚本(html/js)都具有root权限,所以可以轻易地用页面脚本修改整个硬盘里的文件,非常危险。

[root@cilent apache-tomcat-8.5.53]# ll tomcat.pid
-rw-r----- 1 root root 6 mar 30 13:47 tomcat.pid

尝试解决

1.tomcat_user=tomcat

[root@cilent ~]# grep "&& tomcat_user" /usr/local/apache-tomcat-8.5.53/bin/daemon.sh
test ".$tomcat_user" = . && tomcat_user=tomcat

搜索到的文章大多都是这样解决,但在centos7+tomcat8上不适用

2.重写startup.sh和shutdown.sh脚本
思路:启动和关闭tomcat应用程序的时候切换到tomcat用户执行
报错如下:

[tomcat@cilent ~]# systemctl restart nginx
==== authenticating for org.freedesktop.systemdl.manage-units ===
authentication is required to manage system services or units.
authenticating as: root

3.解决成功
yum安装了tomcat,有系统标准启动方式,查看其配置文件找到了解决办法,tomcat一共折腾了10几个小时
在tomcat.service添加个 user=tomcat 就好了

[root@cilent apache-tomcat-8.5.53]# ll tomcat.pid
-rw-r----- 1 tomcat tomcat 6 mar 30 17:38 tomcat.pid

其他问题记录

1.linux下部署tomcat ,启动和停止分别使用startup.sh和shutdown.sh,它们都会调用catalina.sh,进而调用到setenv.sh
2.配置管理用户conf/tomcat-users.xml

<tomcat-users>
<role rolename="manager-gui"/>
<user username="tomcat" password="123456" roles="manager-gui" />
</tomcat-users>

3.访问manager app 403 access denied
搜索的文章都只提到了在tomcat-users.xml里添加上面的语句,无法解决
通过403页面的官方文档,找到解决办法

by default the host manager is only accessible from a browser running on the same machine as tomcat. if you wish to modify this restriction, you'll need to edit the manager app's context.xml file

#cat webapps/manager/meta-inf/context.xml
<context antiresourcelocking="false" privileged="true" >
  <valve classname="org.apache.catalina.valves.remoteaddrvalve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</context>

这段代码的作用是限制来访ip,127.d+.d+.d+|::1|0:0:0:0:0:0:0:1 是正则表达式,表示ipv4和ipv6的本机环回地址,所以其他主机无法访问

修改为所有人都可以访问 allow="^.*$"allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+"

思路二(失败)

yum安装了tomcat,需要配置java变量,有系统标准启动方式,所以想能不能仿照其配置文件进行ansible自动安装配置

配置了java变量,复制了配置文件/etc/tomcat,/usr/libexec/tomcat目录(按实际情况配置)
企业级自动化部署方案——ansible实现tomcat自动安装和配置报错如下:
企业级自动化部署方案——ansible实现tomcat自动安装和配置猜测是漏了配置文件


有时间再继续探索