在生产中使用JHipster
JHipster生成了完全可用于生产,优化和安全的应用程序。本部分介绍了更重要的选项-如果您急于赶时间,请运行常规的生产版本,但不要忘记阅读安全性部分!
构建生产包
测试生产版本
这样就可以从Maven测试生产版本,而无需构建真正的程序包。
要在生产模式下使用JHipster,请使用预先配置的prod
概要文件。使用Maven,请运行:
./mvnw -Pprod
使用Gradle时,请运行:
./gradlew -Pprod
此配置文件将使用所有生产设置编译,测试和打包您的应用程序。
如果需要有关可用配置文件的更多信息,请转到标题为”开发和生产配置文件“部分。
构建可执行的JAR/WAR文件
With Maven
-
要将应用程序打包为生成JAR,请输入:
./mvnw -Pprod clean verify
这将生成一个文件
target/jhipster-0.0.1-SNAPSHOT.jar
(如果您的应用程序称为jhipster
)。 -
要将应用程序打包为生成WAR:
- 修改pom.xml,将应用程序包装更改为war,例如:
- <packaging>jar</packaging> + <packaging>war</packaging>
-
修改
pom.xml
以将spring-boot-starter-undertow
的依赖范围更改为provided
,例如:<id>prod</id> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> + <scope>provided</scope> </dependency> </dependencies>
- 要将原始
war
生成可执行文件war
,请输入命令:./mvnw -Pprod clean verify
- 这将生成以下文件(如果您的应用程序称为
jhipster
):target/jhipster-0.0.1-SNAPSHOT.war
target/jhipster-0.0.1-SNAPSHOT.war.original
- 要将原始
请注意,当使用context path
构建JAR或WAR文件时,并且React client或Vue client,则需要更新webpack.prod.js
或webpack.common.js
(使用Vue时更新两个文件)具有正确的base
属性值。
将jhipster
作为上下文路径,base
属性值应如下所示:
new HtmlWebpackPlugin({
...
base: '/jhipster/'
})
如果您前端选择了Angular
,则需要使用适当的base
”标签更新
index.html。
将
jhipster作为上下文路径,
base`标签值应如下所示:
<base href="/jhipster/"/>
请注意,当使用prod
配置文件构建JAR或WAR文件时,生成的归档文件将不包含dev
资产。
使用Gradle
要将应用程序打包为production
JAR,请输入:
./gradlew -Pprod clean bootJar
这将生成一个文件build/libs/jhipster-0.0.1-SNAPSHOT.jar
(如果您的应用程序称为jhipster
)。
要将应用程序打包为production
WAR,请输入:
./gradlew -Pprod -Pwar clean bootWar
请注意,当使用context path
构建JAR或WAR文件时,并且React client或Vue client,则需要更新webpack.prod.js
或webpack.common.js
(使用Vue时更新两个文件)具有正确的base
属性值。
将jhipster
作为上下文路径,base
属性值应如下所示:
new HtmlWebpackPlugin({
...
base: '/jhipster/'
})
如果您前端选择了Angular
,则需要使用适当的base
”标签更新
index.html。
将
jhipster作为上下文路径,
base`标签值应如下所示:
<base href="/jhipster/"/>
请注意,当使用prod
配置文件构建JAR或WAR文件时,生成的归档文件将不包含dev
资产。
在生产中运行
在没有应用程序服务器的情况下执行JAR文件
与部署到应用程序服务器相比,许多人发现拥有单个可执行的JAR文件更加容易。
使用上一步中生成的JAR文件,以生产模式运行它,您可以通过输入(在Mac OS X或Linux上):
./jhipster-0.0.1-SNAPSHOT.jar
如果您使用的是Windows,请使用:
java -jar jhipster-0.0.1-SNAPSHOT.jar
请注意 该JAR文件使用我们在构建文件时选择的配置文件。由于它是使用上一节中的prod
文件构建的,因此它将与prod
配置文件一起运行。
您可以将上下文路径指定为环境变量或命令行参数,例如:
java -jar jhipster.jar --server.servlet.context-path=/jhipster
在Docker容器中运行应用程序
JHipster对Docker具有一等公民的支持:将可执行JAR文件捆绑在Docker镜像中并在Docker中运行非常容易。
要了解如何使用Docker打包您的应用程序,请阅读我们的Docker Compose文档。
作为服务运行
也可以将Jar作为Linux服务运行,并且您可能希望在打包之前强制在pom.xml
文件指定。为此,请在spring-boot-maven-plugin
插件的<configuration>
内添加以下属性。
<embeddedLaunchScriptProperties>
<mode>service</mode>
</embeddedLaunchScriptProperties>
接下来,使用以下命令设置您的init.d:
ln -s jhipster-0.0.1-SNAPSHOT.jar /etc/init.d/jhipster
使用以下方法保护您的应用程序安全:
chown jhuser:jhuser jhipster-0.0.1-SNAPSHOT.jar
sudo chattr +i your-app.jar
考虑到jhuser
是将运行该应用程序的非root操作系统帐户,则可以通过以下方式运行该应用程序:
service jhipster start|stop|restart
您可以在Spring Boot文档中找到许多其他选项,包括更多安全步骤和Windows服务相关。
性能优化
缓存调整
如果在生成应用程序时选择了缓存提供程序,则JHipster会自动为您配置它。
但是,默认缓存值非常低,因此应用程序可以在适度的硬件上运行,所以应该根据应用程序的特定业务需求来调整这些值。
请阅读:
- JHipster“使用缓存”文档可了解有关所选缓存提供程序的更多信息,以及如何对其进行调整
- 关于最后一部分的监控,因此您可以根据应用程序的实际使用情况微调缓存
HTTP/2支持
JHipster使用jhipster.http.version
属性(在application-prod.yml
文件中配置)支持HTTP/2。
要启用HTTP/2,您需要:
- 设置
jhipster.http.version: V_2_0
- 配置HTTPS(请参阅本文档的安全性部分),因为浏览器会强制将HTTPS与HTTP/2结合使用
GZipping
在使用prod
配置文件的可执行JAR文件中,JHipster会在您的Web资源上配置GZip压缩。
默认情况下,压缩将对所有静态资源(HTML,CSS,JavaScript)和所有REST请求起作用。通过查看在application-prod.yml
文件中配置的Spring Boot应用程序属性中的server.compression.*
键,可以获取有关此配置的更多信息。
请注意 GZipping由应用程序服务器完成,因此本节仅在您使用上述“可执行的JAR”选项时适用。如果您在外部应用程序服务器上运行应用程序,则需要单独进行配置。
缓存头
使用prod
配置文件,JHipster配置了一个Servlet过滤器,该过滤器将特定的HTTP缓存头放在您的静态资源(JavaScript,CSS,字体等)上,以便浏览器和代理缓存它们。
使用Webpack生成优化的JavaScript应用程序
使用prod
配置文件构建项目时,将自动触发此步骤。如果要运行它而不想启动Maven构建,请运行:
npm run build
这将使用Webpack处理所有静态资源(CSS,TypeScript,HTML,JavaScript,图片等),以生成优化的前端应用程序。
在此过程中,Webpack会将TypeScript代码编译为JavaScript代码,还将生成源映射,因此仍可以调试前端应用程序。
这些优化后的资源,如果使用Maven,将在target/classes/static
中生成,对于Gradle,将在build/resources/main/static
中生成,并将包含在最终的生产JAR中。
当您使用prod
配置文件运行应用程序时,这些代码将被服务托管。
安全
保护默认用户和管理员帐户
JHipster会为您生成一些默认用户。在生产中,您应该更改这些用户的默认密码!
请遵循我们的安全文档,以了解如何更改这些密码并保护您的应用程序安全。
HTTPS支持
可以直接在JHipster应用程序中配置HTTPS,也可以使用特定的前端代理进行配置。
使用JHipster进行HTTPS配置
HTTPS是使用application-prod.yml
文件中的Spring Security的标准server.ssl
配置键配置的。
要启用SSL,请使用以下方法生成证书:
keytool -genkey -alias <your-application> -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
您也可以通过本教程使用Let’s Encrypt。
然后,修改server.ssl
属性,以便您的application-prod.yml
配置如下所示:
server:
port: 443
ssl:
key-store: keystore.p12
key-store-password: <your-password>
keyStoreType: PKCS12
keyAlias: <your-application>
ciphers: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
enabled-protocols: TLSv1.2
ciphers suite通过停用一些旧的和已弃用的SSL密码来增强安全性,此列表已通过SSL实验室测试
Once server.ssl.ciphers
property is enabled JHipster will force the order on Undertow with this property (true by default) : jhipster.http.useUndertowUserCipherSuitesOrder
启用server.ssl.ciphers
属性后,JHipster将使用以下属性(默认为true)在Undertow上强制执行请求:jhipster.http.useUndertowUserCipherSuitesOrder
enabled-protocols
会停用旧的SSL协议。
然后,实现完美的前向保密性的最后一步。在JVM启动时添加以下标志:
-Djdk.tls.ephemeralDHKeySize=2048
要测试您的配置,可以转到SSL Labs。
如果一切正常,您将获得A+
带有前端代理的HTTPS配置
有许多解决方案可在JHipster应用程序的前面设置前端HTTPS代理。
最常见的解决方案之一是使用Apache HTTP服务器,可以使用Let’s Encrypt来进行设置:
- 安装Apache和Let’s Encrypt:
apt-get install -y apache2 python-certbot-apache
- 配置Let’s Encrypt:
certbot --apache -d <your-domain.com> --agree-tos -m <your-email> --redirect
- 配置SSL证书的自动续订: 想您的crontab添加
10 3 * * * /usr/bin/certbot renew --quiet
监控
JHipster带有Micrometer的全面监视支持。
在开发中,可以通过JMX获得Metrics数据:启动JConsole,您将可以访问它
在生产中,您的应用程序将其指标数据公开在Prometheus服务器定期采集的服务端点上,具体取决于您配置的内容。