在项目中经常用到在linux系统中安装部署tomcat,一般都是复制到linux中,用root帐号启动运行,但是从安全的角度来说,这是一个非常大的隐患。因此决定用非root帐号运行tomcat,并配置成随开机启动。从网上查找了很多资料,都说的比较模糊,尤其是在配置PID文件的地方,没有说的很清晰,导致不能正常启动tomcat,经过实践,总结过程如下:
- Jdk
按照官网要求的jdk版本,在linux系统中安装并配置好。这里就不详述了。
- 创建用于运行tomcat的专用帐号
$ sudo useradd tomcat -M -d / -s /usr/sbin/nologin
该帐号不能通过交互式方式登录系统,只能用于运行tomcat服务。
- 下载tomcat
进入tomcat官网,下载最新的8.5版本。
解压到当前目录
把解压好的目录移动到系统的opt目录中,方便管理
$ sudo mv apache-tomcat-8.5.45 /opt/
改变目录所属用户为tomcat,以便能用tomat用户启动服务。
$ cd apache-tomcat-8.5.45
$ cd bin
$ sudo chmod 755 digest.sh shutdown.sh version.sh ciphers.sh configtest.sh setclasspath.sh startup.sh catalina.sh daemon.sh startup.sh tool-wrapper.sh
以上操作是将sh文件修改为可执行模式,否则tomcat启动时会报不是可执行文件。
- 创建服务文件tomcat.service
$sudo nano /usr/lib/system/system/tomcat.service
内容如下:
[Unit]
Description=Apache Tomcat 8
After=syslog.target network.target
[Service]
Type=forking
PIDFile=/opt/apache-tomcat-8.5.45/tomcat.pid
ExecStart=/opt/apache-tomcat-8.5.45/bin/catalina.sh start
ExecStop=/opt/apache-tomcat-8.5.45/bin/catalina.sh stop
ExecReload=/opt/apache-tomcat-8.5.45/catalina.sh restart
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
注意这里的PIDFile参数,需要在tomcat的启动文件catalina.sh中也要增加相应的配置
- 修改配置文件catalina.sh
在目录/opt/apache-tomcat-8.5.45/bin中,找到catalina.sh并打开。
找到# OS specific support.这一行,在这一行之前增加内容:
CATALINA_PID=/opt/apache-tomcat-8.5.45/tomcat.pid
- 启动服务
$ sudo systemctl start tomcat
看一下是否启动正常
用浏览器访问是否正常
设置开机启动服务
$ sudo systemctl enable tomcat
- 其他注意事项
如果曾经用root帐号直接在bin目录中运行过catalina.sh或startup.sh。tomcat会在work目录中创建一些root权限的目录,在用tomcat用户启动服务时,会报无法找到输出目录。解决方法就是删除work目录中的所有文件就行。