JHipster Registry
概述
JHipster Registry 是一个运行时应用,由 JHipster 团队开发。就像 JHipster,它也是开源的,基于 Apache 2 开原协议,它的代码在 GitHub 上:jhipster/jhipster-registry.
JHipster Registry 的三个主要目标:
- 作为 Eureka 服务,作为应用的服务发现服务。这是 JHipster 处理路由、负载均衡、以及弹性伸缩的功能。
- 作为 Spring Cloud 配置中心,这提供所有应用以运行时配置的能力。
- 作为管理中心,具备一个仪表板来监控应用。
所有这些功能,都打包在同一个应用中,并具备一个潮流的 Angular 用户界面。
摘要
安装
Spring profiles
JHipster Registry 使用常规的 dev
和 prod
profile,以及标准的 Spring Cloud composite
profile。(参考 官方文档)。
由此:
- 使用
dev
profile 将会以dev
和composite
profile 运行 JHipster Registry。dev
将会从文件系统加载 Spring Cloud 配置,查找central-config
目录,这是运行目录的相对目录,定义在src/main/resources/config/bootstrap.yml
文件里。 - 使用
prod
profile 将会以prod
和composite
profile 运行 JHipster Registry。prod
将会从 Git 仓库里加载 Spring Cloud 配置,默认值是 https://github.com/jhipster/jhipster-registry-sample-config。根据真实情况修改这个仓库的地址,配置src/main/resources/config/bootstrap-prod.yml
文件,或spring.cloud.config.server.composite
参数。
一旦 JHipster Registry 运行起来了,查看菜单 Configuration > Cloud Config
下的配置项。请注意如果你无法登入,有可能是你配置里的 JWT 秘钥没有正确设置。
使用打好的 WAR 包
JHipster Registry 发布为一个可运行的 WAR 包,提供在我们的网页上:发布网页.
下载 WAR 文件,已普通 JHipster 应用的方式启动,设置你想要使用的 profile (看上面有关 profile 的章节)。例如,使用在 central-config
目录下配置的方式运行:
./jhipster-registry-<version>.war --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded --spring.cloud.config.server.composite.0.type=native --spring.cloud.config.server.composite.0.search-locations=file:./central-config (译注:windows 下不能这样运行,windows 环境应该是:`java -jar jhipster-registry-<version>.war`)
请注意这非常重要:要在启动时设置一个 JWT 秘钥,在 JHIPSTER_SECURITY_AUTHENTICATION_JWT_SECRET
环境变量上设置,或者类似上面例子里在启动命令里设置参数。还有一个可以设置的地方是 application.yml
文件,在配置中心源里(在启动时都会被应用加载上)。
请注意从 JHipster 5.3.0 开始,我们设置了一个新的 jhipster.security.authentication.jwt.base64-secret
属性,这个更安全,但你可能还在用老版本。
我们在这个文档中使用 jhipster.security.authentication.jwt.secret
。更多有关这些属性的说明参考文档 安全.
类似的,还可以运行 prod
profile,设置参数,如:
./jhipster-registry-<version>.war --spring.profiles.active=prod --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded --spring.cloud.config.server.composite.0.type=git --spring.cloud.config.server.composite.0.uri=https://github.com/jhipster/jhipster-registry-sample-config
./jhipster-registry-<version>.war --spring.profiles.active=prod --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded --spring.cloud.config.server.composite.0.type=git --spring.cloud.config.server.composite.0.uri=https://github.com/jhipster/jhipster-registry --spring.cloud.config.server.composite.0.search-paths=central-config
从源码构建
JHipster Registry 可以从 jhipster/jhipster-registry 仓库 克隆/fork/下载。因为 JHipster Registry 也是一个用 JHipster 生成的应用,你也可以像运行其他 JHipster 应用一样运行:
- 运行开发模式
./mvnw
(启动 Java server) 并且yarn start
(启动前端),将会使用默认的dev
profile,访问 http://127.0.0.1:8761/. - 使用
./mvnw -Pprod package
来打生产环境包,并且是可执行的 WAR 包。然后你可以运行 WAR 包并使用dev
或prod
profile,如:./jhipster-registry-<version>.war --spring.profiles.active=prod
请注意使用 dev
及 composite
profile 时,你还需要设置一个 central-config
目录, 所以你运行 ./jhipster-registry-<version>.war --spring.profiles.active=dev
时,需要设置那个目录.
使用 Docker
如果你希望使用 Docker 来运行 JHipster Registry,可以从 Docker Hub jhipster/jhipster-registry 下载。有个 docker-compose 文件来运行镜像连同在 src/main/docker
目录下的所有微服务:
- 执行
docker-compose -f src/main/docker/jhipster-registry.yml up
启动 JHipster Registry。他将运行在 Docker 主机的端口8761
,所以如果是在你的电脑上运行,可以访问 http://127.0.0.1:8761/。
请参阅 Docker Compose 文档来获取更多关于使用 Docker Compose 运行 JHipster Registry 的信息。
运行在云环境
将 JHipster Registry 实例部署到云里非常方便。这对于生产环境是必要的,但同时对于开发环境也是非常有用的(并不需要在你的开发工作机上运行)。
请参阅 “生产环境中的微服务” 文档 来了解更多关于如何部署 JHipster Registry 到 Cloud Foundry 或 Heroku 的信息。
使用 Eureka 服务发现
JHipster Registry 是一个 Netflix Eureka server 的应用,提供了应用的服务发现服务。
- 这对于微服务架构是非常有用的功能:这使得网关(Gateway)能知晓哪些微服务可用,哪些实例正在运行。
- 对于所有应用,包括巨石类应用,使得 Hazelcast 分布式缓存可以自动伸缩,参考 Hazelcast 缓存 文档。
使用 Spring Cloud Config 配置应用
JHipster Registry 同时也是一个 Spring Config Server 应用:当应用刚启动时他们会连接 JHipster Registry 来获取他们的配置项。对于网关和微服务都是如此。
配置是一个 Spring Boot 配置文档,就如同 JHipster 的 application-*.yml
文件,但是是存储在中央服务器中的,方便管理。
启动时,你的网关应用和微服务应用都会查询 Registry 的配置服务器并覆盖他们本地定义的配置。
支持两种配置源(定义在 spring.cloud.config.server.composite
属性中):
native
配置,这在开发环境中是默认选项(使用 JHipsterdev
profile),会使用本地文件系统。Git
配置,这在生产环境中是默认选项(使用 JHipsterprod
profile),会使用存储在 Git 服务器上的配置。这种方式下还允许使用 Tag、分支或使用 Git 工具回滚配置,这在某些场合下非常有用。- (译注:Spring Cloud Config 还支持很多配资源,传统如数据库。Git 环境如果不是作为生产环境的一部分可以考虑使用数据库方式,参考文档。)
要管理你的配置,你只需要在配置源中添加 appname-profile.yml
文件,这里的 appname 和 profile 就是应用的名称和当前你在配置的 profile。
例如:添加配置文件 gateway-prod.yml
会影响应用 gateway 并允许于 prod profile。另外,定义在 application[-dev|prod].yml
配置文件中的属性会影响你所有的应用。
由于网关应用的路由也是由 Spring Boot 配置的,它们也可以用 Spring Config Server 来管理,例如你可以配置应用 app1-v1
映射至 /app1
URL 在你的 v1
分支上,同时 app1-v2
映射至 /app1
URL 在 v2
分支。这对于升级微服务并避免停机升级很有帮助。
使用加密配置值
JHipster Registry 有一个特殊的 configuration > encryption
网页来执行加密和解密配置。
要加密配置项的值(比如,数据库密码):
- 下载 JCE 并根据下载文件中的说明安装(只在你使用的是Oracle JDK 的时候需要这一步)。
- 设置
encrypt.key
属性,在bootstrap.yml
文件里 (注意不是application.yml
) 或者设置ENCRYPT_KEY
环境变量 with your symmetric key passphrase.
所有都设置正确的话,你应该可以访问 Configuration > Encryption
页,并能提交 POST 请求到 /config/encrypt
和 /config/decrypt
并带上你希望加密或解密的文本,放在请求的 body
中。
如: curl localhost:8761/config/encrypt -d mypassword
(译注:应该还有个 -X POST)
加密的文本要放在 *.yml
配置文件里,格式为 password= '{cipher}myciphertextafterencryotion'
并在配置服务发给客户端前会被解密。这样你的配置文件(存在 Git 或 “natively” 在文件系统上)就不会有未加密文本了。
查看更多说明,访问 Spring Cloud Config 的文档 加密和解密.
管理中心
JHipster Registry 提供了一个管理面板,适用于所有类型的应用。当应用在 Eureka 上注册成功后,就可以在管理面板里看到了。
为访问应用的敏感信息,JHipster Registry 使用了一个 JWT token (这也是为什么 JHipster Registry 只能工作与使用 JWT 应用的原因)。 用于应用和 JHipster Registry 的 JWT key 应该是相同的:由于 JHipster Registry 默认使用 Spring Cloud Config,它会发送统一的 key 给所有应用,应该是原生可用。
度量面板
度量面板使用了 Dropwizard 的度量共来提供一个详细的应用性能描述。
提供了关于:
- JVM
- HTTP 请求
- Spring Beans 里的方法 (使用
@Timed
注解) - 数据库连接池
点击 JVM 线程旁边的眼睛图标,你可以查看运行中应用的堆栈记录,这对于找线程问题很有帮助。
健康度面板
健康度使用 Spring Boot Actuator 的 health 管理端点来提供应用的多方面健康信息。很多 Spring Boot Actuator 提供的健康度检查都是开箱即用的,并且也非常易于扩展添加新的健康检查。
配置面板
配置面板使用 Spring Boot Actuator 的 configuration 管理端点来获得当前应用的所有配置。
日志面板
日志面板可以用来管理运行时的 Logback 配置。修改 Java 包的日志等级只需要简单地点击一个按钮,这在开发和生产环境中都是十分有帮助的。
JHipster Registry 的安全
JHipster Registry 是默认需要认证的。可以使用默认的 “admin/admin” 账号登入。
应用也使用这个 “admin” 用户连接 JHipster Registry,但是是通过 HTTP 基础认证。所以如果你的微服务连不上 registry,并看到类如 “401 authentication error” 错误消息,说明应用里的设置有问题。
为了更安全地使用 JHipster Registry:
- 你必须修改默认的 “admin” 密码。该密码设置在 Spring Boot 标准属性
spring.security.user.password
,你可以使用常用的 Spring Boot 方式去修改之:修改项目的application-*.yml
文件,或添加SPRING_SECURITY_USER_PASSWORD
环境变量。Docker Compose sub-generator 只能使用环境变量方式。 - 应用使用 HTTP 协议连接 Registry,加密连接通道非常重要。有很多方式,比较简单是使用 HTTPS。