5.3.10.3. 部署容器至 Heroku

按照使用 Docker 部署章节介绍的内容配置单一 UberJAR。创建 Heroku 账号然后安装 Heroku CLI,可以参考部署 WAR 至 Heroku 章节。

用以下命令创建应用程序并且连接数据库

  1. heroku create cuba-sales-docker --addons heroku-postgresql:hobby-dev

等这个任务完成之后需要在 jetty-env.xml 文件中配置 Heroku 创建的数据库连接的用户名和密码。

  1. 浏览器打开 https://dashboard.heroku.com

  2. 选择创建的项目,打开 Resources 标签页,选择数据库。

  3. 在新打开的窗口中,打开 Settings 标签页并且点击 View Credentials 按钮。

Db

切换到 IDE 打开 jetty-env.xml 文件。修改 URL(host 和数据库名称),用户名和密码。从网页拷贝用户名和密码到这个文件。

  1. <?xml version="1.0"?>
  2. <!DOCTYPE Configure PUBLIC "-" "http://www.eclipse.org/jetty/configure_9_0.dtd">
  3. <Configure id='wac' class="org.eclipse.jetty.webapp.WebAppContext">
  4. <New id="CubaDS" class="org.eclipse.jetty.plus.jndi.Resource">
  5. <Arg/>
  6. <Arg>jdbc/CubaDS</Arg>
  7. <Arg>
  8. <New class="org.apache.commons.dbcp2.BasicDataSource">
  9. <Set name="driverClassName">org.postgresql.Driver</Set>
  10. <Set name="url">jdbc:postgresql://<Host>/<Database></Set>
  11. <Set name="username"><User></Set>
  12. <Set name="password"><Password></Set>
  13. <Set name="maxIdle">2</Set>
  14. <Set name="maxTotal">20</Set>
  15. <Set name="maxWaitMillis">5000</Set>
  16. </New>
  17. </Arg>
  18. </New>
  19. </Configure>

执行以下 Gradle 任务创建单一 Uber JAR:

  1. gradle buldUberJar

另外,需要对 Dockerfile 进行一些修改。首先,如果使用的是 Heroku 的免费账号,需要限制应用程序使用的内存大小;然后需要从 Heroku 获得应用程序的端口号并添加到镜像中。

修改后的 Dockerfile 示例:

  1. ### Dockerfile
  2. FROM openjdk:8
  3. COPY . /usr/src/cuba-sales
  4. CMD java -Xmx512m -Dapp.home=/usr/src/cuba-sales/home -jar /usr/src/cuba-sales/app.jar -port $PORT

通过下面的命令设置 Git:

  1. git init
  2. heroku git:remote -a cuba-sales-docker
  3. git add .
  4. git commit -am "Initial commit"

登录容器仓库,是 Heroku 存储镜像的地址:

  1. heroku container:login

接下来,构建镜像并推送到容器仓库:

  1. heroku container:push web

这里 web 是应用程序的处理类型(process type)。当执行这个命令的时候,Heroku 默认会使用当前目录的 Dockerfile 来构建镜像,然后把镜像推送到 Heroku。

当部署流程完成后,可以通过浏览器打开类似这样的 URL https://cuba-sales-docker.herokuapp.com/app 访问应用。

或者可以通过 Heroku dashboard 的 Open app 按钮打开应用。

打开运行中应用的第三种方式是使用如下命令(链接最后需要添加 apphttps://cuba-sales-docker.herokuapp.com/app ):

  1. heroku open