
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
ManagementPortal 是一个用于管理 RADAR-base 试点研究的应用程序。它提供了一个集中式平台,用于管理研究项目、参与者、数据收集和相关配置,是RADAR-base生态系统的重要组成部分。
ManagementPortal 主要适用于以下场景:
使用Docker-Compose
使用Docker-Compose是在生产模式下快速启动ManagementPortal的推荐方式:
shellkeytool -genkeypair -alias radarbase-managementportal-ec -keyalg EC -validity 3650 -keysize 256 -sigalg SHA256withECDSA -storetype PKCS12 -keystore src/main/docker/etc/config/keystore.p12 -storepass radarbase -keypass radarbase
shelldocker-compose -f src/main/docker/management-portal.yml up -d
这将启动Postgres数据库和ManagementPortal应用。默认管理员账户admin的密码为admin。
从源码构建
要从源码构建,需在机器上安装并配置以下依赖:
构建步骤:
生成JWT签名密钥对:
shellkeytool -genkeypair -alias radarbase-managementportal-ec -keyalg EC -validity 3650 -keysize 256 -sigalg SHA256withECDSA -storetype PKCS12 -keystore src/main/resources/config/keystore.p12 -storepass radarbase -keypass radarbase
注意: 确保密钥密码和存储密码相同!这是Spring Security的要求。
使用以下命令运行ManagementPortal:
shell# 生产模式 ./gradlew bootRun -Pprod # 开发模式 ./gradlew bootRun -Pdev
使用admin:admin登录应用。生产环境中请务必更改管理员密码。
开发和生产环境差异:
| 特性 | 开发环境 | 生产环境 |
|---|---|---|
| 数据库类型 | 内存数据库 | Postgres |
| 加载演示数据 | 是 | 否 |
| 应用上下文路径 | / | /managementportal |
可以通过以下命令拉取Docker镜像:
shelldocker pull radarbase/management-portal
ManagementPortal提供了一组默认配置值。您可以在构建应用前修改application.yml和application-prod.yml(或开发环境的application-dev.yml),或使用环境变量覆盖默认值。
环境变量
以下是部署时最可能需要修改的环境变量列表。完整配置可在application.yml和application-prod.yml文件中找到。
| 变量 | 默认值 | 描述 |
|---|---|---|
SPRING_DATASOURCE_URL | jdbc:postgresql://localhost:5432/managementportal | 数据库连接URL |
SPRING_DATASOURCE_USERNAME | <username> | 数据库访问用户名 |
SPRING_DATASOURCE_PASSWORD | <password> | 数据库访问密码 |
SPRING_APPLICATION_JSON | None | 用于覆盖所有类型应用设置的通用环境变量 |
MANAGEMENTPORTAL_MAIL_FROM | None(必须覆盖) | 电子邮件发件人地址 |
MANAGEMENTPORTAL_FRONTEND_CLIENT_SECRET | None(必须覆盖) | 前端OAuth客户端密钥 |
MANAGEMENTPORTAL_FRONTEND_ACCESS_TOKEN_VALIDITY_SECONDS | 14400 | 前端访问令牌有效期(秒) |
MANAGEMENTPORTAL_FRONTEND_REFRESH_TOKEN_VALIDITY_SECONDS | 259200 | 前端刷新令牌有效期(秒) |
MANAGEMENTPORTAL_OAUTH_CLIENTS_FILE | /mp-includes/config/oauth_client_details.csv | OAuth客户端文件位置 |
MANAGEMENTPORTAL_OAUTH_KEY_STORE_PASSWORD | radarbase | JWT密钥库密码 |
MANAGEMENTPORTAL_OAUTH_SIGNING_KEY_ALIAS | radarbase-managementportal-ec | 用于签名的密钥对别名 |
MANAGEMENTPORTAL_OAUTH_ENABLE_PUBLIC_KEY_VERIFIERS | false | 是否使用公钥验证器 |
MANAGEMENTPORTAL_CATALOGUE_SERVER_ENABLE_AUTO_IMPORT | false | 是否启用从目录服务器自动导入源 |
MANAGEMENTPORTAL_CATALOGUE_SERVER_SERVER_URL | None | 目录服务器URL |
MANAGEMENTPORTAL_COMMON_BASE_URL | None | 托管平台的可解析基础URL |
MANAGEMENTPORTAL_COMMON_MANAGEMENT_PORTAL_BASE_URL | None | 本ManagementPortal实例的可解析基础URL |
MANAGEMENTPORTAL_COMMON_PRIVACY_POLICY_URL | None | 通用隐私政策URL |
MANAGEMENTPORTAL_COMMON_ADMIN_PASSWORD | None | 管理员密码 |
MANAGEMENTPORTAL_COMMON_ACTIVATION_KEY_TIMEOUT_IN_SECONDS | 86400 | 账户激活/重置超时(秒) |
RADAR_IS_CONFIG_LOCATION | 类路径中的radar-is.yml | 其他公钥配置文件位置 |
JHIPSTER_SLEEP | 10 | 应用启动等待时间(秒),用于等待数据库就绪 |
JAVA_OPTS | -Xmx512m | JVM参数 |
在此Spring版本中,环境变量不能直接编码列表。例如,OAuth检查密钥别名需要使用SPRING_APPLICATION_JSON变量进行编码:
json{"managementportal":{"oauth":{"checkingKeyAliases":["one","two"]}}}
如果未设置此列表,签名密钥也将用作检查密钥。
OAuth客户端
ManagementPortal使用OAuth2工作流提供认证和授权。您可以通过UI在运行时添加新的OAuth客户端,或添加到由MANAGEMENTPORTAL_OAUTH_CLIENTS_FILE配置选项引用的OAuth客户端文件中。
additional_information映射中设置{"dynamic_registration": true}。dynamic_registration,"Pair app"功能生成的QR码将包含一个短期URL。通过对该URL执行GET请求,可以获取refresh-token和相关元数据。additional_information映射中添加{"protected": true}。当通过Pair App对话框配对应用时,扫描的QR码包含一个短期URL,例如:https://radar-base-url.org/api/meta-token/bMUkowOmTOci
应用应访问此URL,将收到OAuth2刷新令牌以及平台的基础URL和隐私政策URL。访问此URL不需要授权。重要提示: 出于安全原因,此URL中的信息只能访问一次。
应用可以使用以下HTTP请求使用该刷新令牌获取新的访问令牌和刷新令牌,使用OAuth客户端ID作为用户名,空密码进行HTTP基本认证:
POST /oauth/token Content-Type: application/x-www-form-urlencoded grant_type=refresh_token&refresh_token=<refresh_token>
响应将至少包含访问令牌和刷新令牌:
json{ "access_token": "...", "refresh_token": "...", "expires_in": 14400 }
两个令牌都仅在有限时间内有效。当访问令牌过期时,需要执行上述类似请求,但必须使用新的refresh_token,因为刷新令牌仅一次有效。
授权码流程
OAuth2客户端的授权码流程如下:
注册一个授权类型为authorization_code的oauth-client,并为该客户端添加有效的redirect_uri(例如https://my.example.com/oauth_redirect)
请求用户授权您的应用:
GET /oauth/authorize?client_id=MyId&response_type=code&redirect_uri=https://my.example.com/oauth_redirect
将MyId替换为您的OAuth客户端ID。这需要从交互式Web视图(浏览器或Web窗口)中完成。如果用户批准,将重定向到https://my.example.com/oauth_redirect?code=abcdef。在Android中使用AppAuth库,URL可以是com.example.my://oauth_redirect。
您可以添加可选的state参数,它将与code一起返回。
通过POST请求获取应用令牌,再次使用OAuth客户端ID作为用户名,空密码进行HTTP基本认证:
POST /oauth/token Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=abcdef&redirect_uri=https://my.example.com/oauth_redirect
响应将包含访问令牌和刷新令牌:
json{ "access_token": "...", "refresh_token": "..." }
现在应用可以使用上述刷新令牌流程。
UI自定义
您可以通过替换src/main/webapp/content/images中的图像来自定义ManagementPortal Web应用:
navbar-logo.png:70x45像素(宽x高)的图像,显示在每个页面的顶部home-page-logo.png:仅显示在主页上,建议使用350x350像素的图像构建项目后,您将在build/www/assets/images中找到这些图像。
构建生产版本
要优化ManagementPortal应用以用于生产环境,请运行:
shell./gradlew -Pprod clean bootWar
生产环境托管
最新的Meta-QR码实现要求api/meta-token/*上的REST资源必须由上游服务器进行速率限制。
构建完成后,通过以下命令启动应用:
shelljava -jar build/libs/*.war
然后在浏览器中导航至http://localhost:8080。
以下是一个完整的Docker Compose配置示例,用于部署ManagementPortal:
yamlversion: '3.8' services: managementportal: image: radarbase/management-portal ports: - "8080:8080" environment: - SPRING_PROFILES_ACTIVE=prod - SPRING_DATASOURCE_URL=jdbc:postgresql://postgresql:5432/managementportal - SPRING_DATASOURCE_USERNAME=mpuser - SPRING_DATASOURCE_PASSWORD=mppassword - MANAGEMENTPORTAL_MAIL_FROM=management@example.com - MANAGEMENTPORTAL_FRONTEND_CLIENT_SECRET=your-secret-key-here - MANAGEMENTPORTAL_OAUTH_KEY_STORE_PASSWORD=radarbase - JHIPSTER_SLEEP=10 - JAVA_OPTS=-Xmx1024m depends_on: - postgresql restart: unless-stopped postgresql: image: postgres:13 environment: - POSTGRES_USER=mpuser - POSTGRES_PASSWORD=mppassword - POSTGRES_DB=managementportal volumes: - postgres_data:/var/lib/postgresql/data/ restart: unless-stopped volumes: postgres_data:
使用以下命令启动服务:
shelldocker-compose up -d
在构建项目之前,必须在机器上安装和配置以下依赖项:
smtp.env.template创建smtp.env并相应修改application.yml。安装Node后,运行以下命令安装开发工具:
shellyarn install
我们使用yarn脚本和Webpack作为构建系统。
在两个单独的终端中运行以下命令,以创建愉快的开发体验,当硬盘上的文件更改时,浏览器会自动刷新:
shell./gradlew yarn start
然后打开http://localhost:8080/启动界面并使用admin/admin登录。
例如,要将[Leaflet][]库添加为应用的运行时依赖,运行以下命令:
shellyarn add --exact leaflet
要在开发中受益于[DefinitelyTyped][]仓库的TypeScript类型定义,运行以下命令:
shellyarn add --dev --exact @types/leaflet
然后导入库安装说明中指定的JS和CSS文件,以便Webpack知道它们:
编辑src/main/webapp/app/vendor.ts文件:
typescriptimport 'leaflet/dist/leaflet.js';
编辑src/main/webapp/content/css/vendor.css文件:
css@import '~leaflet/dist/leaflet.css';
您还可以使用Angular CLI生成一些自定义客户端代码。
例如,以下命令:
shellng generate component my-component
将生成几个文件:
create src/main/webapp/app/my-component/my-component.component.html create src/main/webapp/app/my-component/my-component.component.ts update src/main/webapp/app/app.module.ts
要启动应用程序的测试,请运行:
shell./gradlew test
单元测试由Karma运行,并使用Jasmine编写。它们位于[src/test/javascript/]中,可以通过以下命令运行:
shellyarn test
UI端到端测试由Protractor提供支持,它构建在WebDriverJS之上。它们位于[src/test/javascript/e2e]中,可以通过在一个终端中启动Spring Boot(./gradlew bootRun)并在第二个终端中运行测试(yarn run e2e)来执行。
性能测试由Gatling运行并使用Scala编写。它们位于[src/test/gatling]中,可以通过以下命令运行:
shell./gradlew gatlingRunAll
或
shell./gradlew gatlingRun<SIMULATION_CLASS_NAME> # 例如 gatlingRunProjectGatlingTest
您可以使用Docker改善JHipster开发体验。src/main/docker文件夹中提供了许多docker-compose配置,用于启动所需的第三方服务。
例如,要在docker容器中启动PostgreSQL数据库,运行:
shelldocker-compose -f src/main/docker/postgresql.yml up -d
要停止并删除容器,运行:
shelldocker-compose -f src/main/docker/postgresql.yml down
您也可以将应用程序及其所有依赖的服务完全docker化。为此,首先通过运行以下命令构建应用程序的docker镜像:
shell./gradlew bootWar -Pprod buildDocker
然后运行:
shelldocker-compose -f src/main/docker/app.yml up -d
访问我们的https://radar-base.github.io/ManagementPortal%E7%BD%91%E7%AB%99%EF%BC%8C%E6%89%BE%E5%88%B0Javadoc%E5%92%8CAPI%E6%96%87%E6%A1%A3%E7%9A%84%E9%93%BE%E6%8E%A5%EF%BC%9A
该项目提供了一个Gradle任务,用于从OpenAPI规范生成客户端库:
bash./gradlew generateOpenApiSpec
运行此任务时,ManagementPortal需要运行并可通过http://localhost:8080访问。
生成的文件可以导入到[Swagger editor]中,或与[Swagger codegen]一起使用以生成客户端库。
[
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

来自真实用户的反馈,见证轩辕镜像的优质服务