作为最早的云服务平台之一,经过十年的努力,Heroku 终于在 2018 年引起了我的注意(做不要脸状)。本文主要介绍在 Heroku 平台上部署运行在 Jetty 容器中的 Java Web 应用的过程以及踩的那些坑。最终的成果见 langexample。
1. 工具的安装
- The Heroku CLI
- Heroku 命令行接口工具用于在 terminal 中管理 Heroku 应用
- 通过 heroku login 来登录到 Heroku
2. 程序的部署
- 创建项目
- 在本地通过 maven 创建 Java Web 项目
- 命令行:$ mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp
- 为提升速度,使用本地原型信息创建,加上参数: -DarchetypeCatalog=internal
添加 Web 容器插件
- Jetty 是一种轻量级的 Java 应用容器
- 执行 java 代码即可启动 Jetty 服务器
$ java -jar jetty-runner.jar application.war
- 在 pom.xml 中添加 Jetty 服务器插件的代码如下
<build> ... <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.4</version> <executions> <execution> <phase>package</phase> <goals><goal>copy</goal></goals> <configuration> <artifactItems> <artifactItem> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-runner</artifactId> <version>9.4.9.v20180320</version> <destFileName>jetty-runner.jar</destFileName> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> </plugins> </build>
指定 程序运行方式
- 创建 Procfile 文件
- procfile 声明了程序运行的方式
- 添加如下代码,表示启动 Jetty 服务器运行 Java 程序
web: java $JAVA_OPTS -jar target/dependency/jetty-runner.jar —port $PORT target*.war
指定 Java 版本
- 创建 system.properties 文件
- 通过 java.runtime.version=8的形式指定 Java 版本
- 默认采用 Java 8,但是鉴于将来可能会变,还是手动指定一下吧
添加 git 忽略
- 创建 .gitignore 文件
- 由于 target 目录的文件由 mvn 编译打包产生用于本地运行,并不需要推送到 Heroku ,故将 target 写入 .gitignore 文件,在 deploy 时忽略此文件夹中的文件
- win 下直接新建 .gitignore 是不行的,在文本编辑器中选择保存或者另存为则可以
注册 Servlet
- Jetty 某个版本以后貌似就支持 @WebServlet 注解了,但还是记录在这儿吧
- 在 WEB-INF 文件夹下的 web.xml 中添加以下代码注册 Servlet
<servlet> <servlet-name>Servlet</servlet-name> <servlet-class>com.lebecca.exchangerate.Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet</servlet-name> <url-pattern>exchangerateservlet</url-pattern> </servlet-mapping>
添加本地 git 仓库
- git init
- git add .
- git commit -m “Ready to deploy”
部署到 Heroku
- 创建应用 $ heroku create [appname]
- 应用创建时,一个远程git(heroku)也会同时创建并与本地库关联
- 本地推送 $ git push heroku master
- 添加资源 $ heroku ps:scale web=1
- 打开应用 $ heroku open
- 本地运行 $ foreman start web -f Profile.windows
- localhost:500,linux系统可以省略 -f
- 创建应用 $ heroku create [appname]
3. 功能的实现
- 一个底层得不能再底层的爬虫,不添加任何框架的成分
- 从中国银行官网获得每日更新的外汇牌价
- 使用 iframe 实现了前端页面和服务器的交互
- 实现了常用及不常用的 12 种货币之间的汇率兑换