用maven插件和docker实现快速部署和更新web项目

背景

部署一个web项目的常规步骤:

  • mvn 打包
  • 拷贝到服务器的tomcat目录下
  • 重启tomcat

总是这么做,一定会觉得比较繁琐。
于是在maven有款插件tomcat7-maven-plugin,把打包和部署结合一在起。
只需要运行mvn tomcat7:deploy就可以把项目打包到服务器端。免去拷贝文件与重启。
我经常要做一些 web项目验证,每次可以这么便捷,就会让自己流程上顺畅。
与docker结合在一起,一次配置多个tomcat,可以验证多个tomcat版本之前的差别,最重要的是快。

使用方法

构建镜象

1
2
3
git clone https://github.com/finghine/docker-tomcat.git
cd docker-tomcat
docker build -t ff/tomcat7 .

会输出管理员的账号与密码

运行docker

1
sudo docker run -p 80:8080 -d ff/tomcat7

创建web项目

在web项目 pom.xml文件的增加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://(serverip:port)/manager/text</url>
<server>TomcatServer</server>
<path>/</path>
<update>true</update>
<username>tomcat</username>
<password>(password)</password>
</configuration>
</plugin>
</plugins>
</build>

上面的(password)替换成之前构建镜象输出的密码
(serverip:port)替换成实际映射的ip和端口

1
mvn tomcat7:deploy

就可以把web项目部署到tomcat 上

注意事项

  • 如果不想在pom中写密码,可以写在settings文件中。
  • 如果总出现上传到一半就失败了,找找增加update参数。找找nginx是不是对上传文件大小有限制。
  • 如果工程有多个子工程,记得mvn install之后再打包,不然不会用最新的代码的。有次我就被这样坑了。

如果是nginx 转发,记得把nginx 的配置加好

1
2
3
4
5
6
7
8
9
10
 location / {

proxy_pass_header Server;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://172.17.0.2:8080;
}

  • 有时候会出现nginx 会报错client intended to send too large body,需要在加client_max_body_size 100m;

原理

这个插件就是用的tcomat的manager工程提供的上传 web应用接口操作的。