部署到Heroku
该子生成器允许将您的JHipster应用程序部署到Heroku云。
Heroku通过两种方式帮助JHipster:
- Heroku的Joe Kutner目前正在维护此子生成器
- Heroku提供了免费的信用额度,使我们能够使用复杂的高端设置来测试生成的应用程序,以确保所有普通用户都能正常使用
运行子生成器
在运行子生成器之前,您必须安装Heroku CLI,并创建一个Heroku帐户。
您还必须创建一个Heroku帐户并通过运行以下命令使用CLI登录:
**$ heroku login** Enter your Heroku credentials. Email: YOUR_EMAIL Password (typing will be hidden): YOUR_PASSWORD Authentication successful.
Heroku子生成器使用free dynos 创建一个应用程序,并与您选择的配置相匹配 。
我们支持以下附加组件:
- Heroku Postgres 使用PostgreSQL
- JawsDB 使用MySQL or MariaDB
- Heroku Redis 使用Redis
- MemCachier 使用Memcached
- Bonsai Elasticsearch 使用 Elasticsearch
- Okta 使用 OAuth2/OIDC (可选)
要将应用程序部署到Heroku,请运行以下命令:
jhipster heroku
这应该以”production”模式打包您的应用程序,使用数据库创建一个Heroku应用程序,上传您的代码,然后启动该应用程序。
更改Java版本
您可以在执行Heroku子生成器时选择Java版本。 默认情况下,它将是Java 11。 您可以在Heroku上找到所有内容官方文档中支持的Java版本。
如果您想更改Java版本,例如 从11到14之后,您需要在项目根文件夹的system.properties中对其进行更改:
java.runtime.version = 14
重新部署应用程序时,它将使用Java 14。
部署您的应用程序
默认情况下,该应用程序将通过git部署 。 这意味着您推送代码,Heroku将在其服务器上构建并将其部署。 如果您不能或不想将代码推送到其他人的服务器,则可以使用jar选项并部署可执行的jar。 Heroku还支持部署docker映像, 但是子生成器确实支持 目前尚不支持此选项。
更新已部署的应用程序
使用git选项
通过git部署时,已创建一个名为heroku的新远程服务器。 要部署新代码,您需要将更改推送到heroku远程服务器:
git push heroku master
使用jar选项
选择部署可执行jar时,需要创建更新的jar并将新文件部署到Heroku。
准备一个新的Jar
在部署了应用程序之后,可以通过输入以下方式准备新的部署:
./mvnw package -Pprod -DskipTests
使用gradle:
./gradlew -Pprod bootJar -x test
推送到生产
要推送生产,请输入:
heroku deploy:jar target/*.jar
使用gradle:
heroku deploy:jar build/libs/*jar
将Docker部署到Heroku
您也可以将应用程序作为Docker容器部署到Heroku。 在这种情况下,不会发生任何Heroku设置和配置,因此您必须手动进行。 本文档假定您已经运行jhipster heroku
来部署您的应用程序,因此可以利用此过程执行的集成和附加配置。
注意:如果您使用的是v6.10.2之前的JHipster版本,则需要在src/main/resources/config/application-heroku.yml
中添加以下内容:
server:
port: ${PORT:8080}
构建您的Docker映像:
./mvnw package -Pprod verify jib:dockerBuild
如果您使用的是Gradle:
./gradlew -Pprod bootJar jibDockerBuild
您可以使用Docker Compose在本地对其进行测试。
docker-compose -f src/main/docker/app.yml up
确认一切正常后,在Heroku上创建一个新应用,并将其添加为remote。
heroku apps:create
git remote add docker https://git.heroku.com/<your-new-app>.git
然后运行以下命令以将您的JHipster应用程序部署为Docker映像。
确保使用您的Heroku应用名称替换<...>
占位符。 如果您不知道自己的应用名称,请运行heroku apps
。
heroku container:login
docker tag space registry.heroku.com/<heroku-app>/web
docker push registry.heroku.com/<heroku-app>/web
例如:
heroku container:login
docker tag space registry.heroku.com/fast-peak-70014/web
docker push registry.heroku.com/fast-peak-70014/web
此时,您可以使用已经配置的PostgreSQL和Okta插件。 运行以下命令,从首次部署到的heroku
远程获取附件的标识符。
heroku addons --remote heroku
然后,您可以将这些实例附加到新的应用程序。
heroku addons:attach <postgresql-addon-name> --remote docker
heroku addons:attach <okta-addon-name> --remote docker
当您使用jhipster heroku
部署应用程序时,它会为您正确配置数据库。 但是,将其部署为Docker容器时,这些都不会发生。 因此,您需要设置一些配置变量,以便您的Docker容器可以与PostgreSQL通讯。 首先,运行以下命令以获取PostgreSQL URL。
heroku config:get DATABASE_URL --remote docker
此命令将使用以下语法检索值:
postgres://username:password@address
然后,设置数据库环境变量以匹配application-heroku.yml
中的键:
heroku config:set JDBC_DATABASE_URL=jdbc:postgresql://<address> --remote docker
heroku config:set JDBC_DATABASE_USERNAME=<username> --remote docker
heroku config:set JDBC_DATABASE_PASSWORD=<password> --remote docker
设置要使用的最大Java内存量,并指定Spring配置文件。
heroku config:set JAVA_OPTS=-Xmx256m
heroku config:set SPRING_PROFILES_ACTIVE=prod,heroku
运行以下命令以打开浏览器并导航至您的应用。
heroku open --remote docker
复制应用程序的URL,然后登录到Okta开发人员帐户。 转到Applications > Web > General,然后将URL添加到“登录和注销”重定向URI中。 确保登录重定向URI以/login/oauth2/code/oidc
结尾。
现在,您应该可以发布容器并启动应用程序了。
heroku container:release web --remote docker
您可以查看日志以查看容器是否成功启动。
heroku logs --tail --remote docker
现在您应该可以打开您的应用程序,单击sign in链接并进行身份验证!
heroku open --remote docker
注意:您不能使用Okta附加条款的管理员帐户登录到您的JHipster应用程序。 为了确保您没有使用该帐户登录,我们建议您使用新的私有窗口登录。
如果您在securityheaders.com上测试了Dockerized JHipster应用,您将看到它的得分为 A !
部署微服务
JHipster微服务需要使用JHipster进行微服务文档中所述的JHipster Registry。您可以通过单击以下按钮将registry部署到Heroku:
部署registry后,您可以对微服务或网关运行jhipster heroku
命令。Heroku子生成器将提示您输入registry的URL,其格式为https://[appname].herokuapp.com
。
在Heroku上运行的registry有一些限制,包括:
- registry仅适用于本机配置(不适用于Git配置)。
- registry服务不能扩展多个dyno以提供冗余。您必须部署多个应用程序(即多次单击按钮)。这是因为Eureka需要不同的URL才能在实例之间同步内存中状态。
在Heroku上使用JHipster Registry的安全性
要在JHipster Registry上获取自动生成的管理员密码,请输入:
heroku config:get JHIPSTER_PASSWORD
要使用此密码,请通过运行以下命令来更新所有微服务和网关,以使用registry的凭据:
heroku config:set JHIPSTER_REGISTRY_URL="https://admin:[password]@[appname].herokuapp.com"
故障排除
如果在应用Liquibase变更日志时您的应用程序被Heroku终止,则Liquibase将数据库标记为”locked”。您将需要手动清理锁定表。在Postgres上,请确保已安装本地Postgres客户端,然后运行以下命令:
heroku pg:psql -c "update databasechangeloglock set locked=false;"
Heroku的默认启动超时限制为90秒。如果您的应用花费的时间超过此时间,Heroku将终止该进程,这可能会使数据库处于锁定状态。如果问题仍然存在,请尝试与Heroku支持联系,以请求为您的应用设置更长的启动限制。
使用 Elasticsearch
带有免费沙盒计划的Bonsai附加组件确实仅支持最新的Elasticsearch版本。 这可能会导致某些不兼容,具体取决于您使用的Spring Data和JHipster版本使用。
6.5.4
或 6.6.2
适用于所有JHipster 6.x版本。
使用Okta
当您选择Okta时,子生成器将创建一个bash脚本,该脚本将创建所需的所有组和角色由JHipster。
当您使用创建过程中提供的用户和凭据登录时,您将需要选择一个新密码,因为脚本确保将密码直接过期,因为该密码存储在.yo-rc.json
中。
./provision-okta-addon.sh
免费dynos
免费dynos是有限的,不应用于生产部署,因为
- 他们在30分钟的空闲时间之后就休眠了。
- 他们有每月有限的动态小时数。当这些被消耗掉时,您的测功机要等到下个月才能运行!
您可以直接从Heroku管理员界面升级dyno配置。 如果您意识到数据库计划太小了,你可以从管理页面选择一个新的计划。