TAK-Product-Center/Server

GitHub: TAK-Product-Center/Server

TAK服务器是一款基于Java的高安全性网络平台,提供插件管理、用户管理和模式管理功能。

Stars: 647 | Forks: 183

# TAK 服务器开发 *需要 Java 17* *推荐使用 Linux 或 MacOS 进行开发。如果使用 Windows,请在以下命令中将 "gradlew" 替换为 "gradlew.bat"。 链接: * [测试执行](src/takserver-takcl-core/docs/testing.md) * [测试架构和开发](src/takserver-takcl-core/docs/Development.md) * [发布](src/docs/publishing.md) 清理和构建 TAK 服务器,包括 war、保留服务、插件管理器、用户管理器和模式管理器。 ``` cd src ./gradlew clean bootWar bootJar shadowJar ``` 在 Eclipse 中,选择文件 -> 导入 -> Gradle -> 已存在的 Gradle 项目 导航到 `takserver/src` 选择完成。TAK 服务器父项目和所有子项目将被导入到 Eclipse。 在您的工作站上本地安装 PostgreSQL + PostGIS 扩展,或按照以下说明运行 docker 容器。如果本地安装,请使用 启动 Postres 服务器。 要运行本地 PostgreSQL + PostGIS 容器,请使用以下命令,使用官方 PostGIS 数据库 docker 容器,并根据需要更改提供给容器的环境变量。注意 '--rm' 表示容器在停止时将被销毁。 ``` docker run -it -d --rm --name TakserverServer0DB \ --env POSTGRES_PASSWORD=e815f795745e \ --env POSTGRES_HOST_AUTH_METHOD=trust \ --env POSTGRES_USER=martiuser \ --env POSTGRES_DB=cot \ -p 5432 postgis/postgis:15-3.3 echo SQL SERVER IP: `docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' TakserverServer0DB` ``` 设置本地数据库。如果使用了 postgis 容器,则只需最后两行是必要的。 ``` - cd src/takserver-schemamanager - psql -d postgres -c "CREATE ROLE martiuser LOGIN ENCRYPTED PASSWORD 'md564d5850dcafc6b4ddd03040ad1260bc2' SUPERUSER INHERIT CREATEDB NOCREATEROLE;" - createdb --owner=martiuser cot - ../gradlew shadowJar - java -jar build/libs/schemamanager--uber.jar upgrade # Make sure that the CoreConfig.xml is in the current directory ``` 配置本地 CoreConfig 和 Certs ``` cd takserver-core/example ``` 这是 takserver war 在从 takserver-core/example 目录运行时将查找的 CoreConfig。从这一点开始,只需按照 takserver/src/docs/TAK_Server_Configuration_Guide.pdf 中的说明设置 CoreConfig 和 Certs。确保 CoreConfig 现在指向本地生成证书的目录。 参见 src/docs/TAK_Server_Configuration_Guide.pdf 的附录 B,以获取证书生成说明。 ### 构建本地运行的 TAK 服务器 请注意,由于 Java 17,JDK_JAVA_OPTIONS 中有很多 '--add-opens' 参数。 ``` cd takserver-core ../gradlew clean bootWar bootJar cd example export IGNITE_HOME="$PWD/ignite" export JDK_JAVA_OPTIONS="-Dloader.path=WEB-INF/lib-provided,WEB-INF/lib,WEB-INF/classes,file:lib/ -Djava.net.preferIPv4Stack=true -Djava.security.egd=file:/dev/./urandom -DIGNITE_UPDATE_NOTIFIER=false -DIGNITE_QUIET=true -Dio.netty.tmpdir=$PWD -Djava.io.tmpdir=$PWD -Dio.netty.native.workdir=$PWD -Djdk.tls.client.protocols=TLSv1.2 --add-opens=java.base/sun.security.pkcs=ALL-UNNAMED --add-opens=java.base/sun.security.pkcs10=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED --add-opens=java.base/sun.security.x509=ALL-UNNAMED --add-opens=java.base/sun.security.tools.keytool=ALL-UNNAMED --add-opens=java.base/jdk.internal.misc=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED --add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED --add-opens=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.math=ALL-UNNAMED --add-opens=java.sql/java.sql=ALL-UNNAMED --add-opens=java.base/javax.net.ssl=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=jdk.unsupported/sun.misc=ALL-UNNAMED --add-opens=java.base/java.lang.ref=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.security.ssl=ALL-UNNAMED --add-opens=java.base/java.security.cert=ALL-UNNAMED --add-opens=java.base/sun.security.rsa=ALL-UNNAMED --add-opens=java.base/sun.security.ssl=ALL-UNNAMED --add-opens=java.base/sun.security.x500=ALL-UNNAMED --add-opens=java.base/sun.security.pkcs12=ALL-UNNAMED --add-opens=java.base/sun.security.provider=ALL-UNNAMED --add-opens=java.base/javax.security.auth.x500=ALL-UNNAMED" ``` ### 本地开发运行 TAK 服务器 TAK 服务器由三个进程组成:配置、消息和 API。 配置进程需要首先运行,以便消息、API 或其他服务可以检索集中式配置。这与使用默认值或 TAKIgniteConfig.xml 中覆盖的值加载的 TAKIgniteConfiguration 是分开的。 消息进程可以独立运行,但如果 API 进程没有配置为运行自己的 Ignite 服务器,则可能需要连接到作为消息进程一部分运行的 ignite 服务器。对于这两个进程,-Xmx 应始终指定。 注意 - 这些命令包括 **duplicatelogs** 配置文件。这会关闭阻止导致 TAK 服务器操作部署中日志垃圾邮件的重复日志消息的过滤器。 #### 运行配置微服务 ``` java -server -XX:+AlwaysPreTouch -XX:+UseG1GC -XX:+ScavengeBeforeFullGC -XX:+DisableExplicitGC -Xmx -Dspring.profiles.active=config,duplicatelogs -jar ../build/libs/takserver-core-xyz.war ``` #### 运行消息微服务 ``` java -server -XX:+AlwaysPreTouch -XX:+UseG1GC -XX:+ScavengeBeforeFullGC -XX:+DisableExplicitGC -Xmx -Dspring.profiles.active=messaging,duplicatelogs -jar ../build/libs/takserver-core-xyz.war ``` #### 运行 API 微服务 ``` java -server -XX:+AlwaysPreTouch -XX:+UseG1GC -XX:+ScavengeBeforeFullGC -XX:+DisableExplicitGC -Xmx -Dspring.profiles.active=api,duplicatelogs -Dkeystore.pkcs12.legacy -jar ../build/libs/takserver-core-xyz.war ``` #### 运行插件管理器微服务(可选 - 当处理插件功能时很有用) ``` java -server -XX:+AlwaysPreTouch -XX:+UseG1GC -XX:+ScavengeBeforeFullGC -XX:+DisableExplicitGC -Xmx -jar ../../takserver-plugin-manager/build/libs/takserver-plugin-manager-xyz.jar ``` ### RPM 生成 为安装以下 TAK 服务器组件生成单独的 RPM: * api * messaging * 数据库 要构建所有 RPM: ``` cd /src ./gradlew clean buildRpm ``` 可以使用以下命令单独构建子项目 RPM: * takserver-package:api:buildRpm * takserver-package:messaging:buildRpm * takserver-package:database:buildRpm * takserver-package:launcher:buildRpm * takserver-package:takserver:buildRpm ## 证书 TAK 服务器使用客户端和服务器证书、TLS 和 X.509 互信认证以及通道加密。生成私有安全区域(包括证书颁发机构(CA))和 TAK 服务器及客户端使用的证书的脚本位于 /utils/misc/certs。 有关 TAK 服务器功能的更多信息,请参阅 TAK 服务器配置指南(docs/TAK_Server_Configuration_Guide.pdf)。 ## 日志记录 可以在启动时设置类或包级别的日志记录器日志级别: ``` java -Xmx -Dspring.profiles.active=messaging -jar ../build/libs/takserver-core-1.3.13-DEV-xyz.war --logging.level.com.bbn.marti.sync=DEBUG --logging.level.marti_data_access_audit_log=OFF ``` 降低所有日志的日志级别: ``` java -jar takserver.war $@ --logging.level.root=ERROR ``` 降低订阅的日志级别: ``` java -jar takserver.war $@ --logging.level.com.bbn.marti.service.Subscription=ERROR ``` 仅关闭订阅的日志: ``` java -jar takserver.war $@ --logging.level.com.bbn.marti.service.Subscription=OFF ``` 完全禁用大多数日志: ``` java -jar takserver.war $@ --logging.level.root=OFF ``` 大多数事物的默认日志级别是 INFO。可能的级别按日志频率递减顺序为 INFO、WARN、ERROR、OFF。 这些级别可以通过此选项全局应用 ```--logging.level.root=``` 例如: ```--logging.level.root=ERROR``` TAK 服务器日志文件位于 _logs_ 子目录: 1. _takserver-config.log_ - 配置过程的执行级信息,包括设置、错误消息和警告。 2. _takserver-messaging.log_ - 消息过程的执行级信息,包括客户端连接事件、错误消息和警告。 3. _takserver-api.log_ - API 过程的执行级信息,包括错误消息和警告。 4. _takserver-config-console.log_ - Java 虚拟机(JVM)信息消息和错误,用于配置过程。 5. _takserver-messaging-console.log_ - Java 虚拟机(JVM)信息消息和错误,用于消息过程。 6. _takserver-api-console.log_ - Java 虚拟机(JVM)信息消息和错误,用于 API 过程。 ## Swagger https://localhost:8443/swagger-ui.html ## TAK 服务器 CI ### 集成测试 集成测试每晚在 master 上执行。除了这个之外,还可以在任何分支上执行如下: 1. 导航到 [TAKServer 仪表板](https://git.tak.gov/core/takserver). 2. 在侧边栏中,将鼠标悬停在 'CI/CD' 上并选择 'Pipelines'。 3. 从列表中找到您的提交,然后点击右侧的播放按钮,并选择您要执行的测试套件。主套件是每晚执行的,并执行所有测试。 构建 takserver 和插件管理器 ``` cd /src ./gradlew clean build bootWar bootJar ``` ## TAK 服务器文档 TAK 服务器文档包含在 [config-guide 仓库](https://git.tak.gov/core/tak-docs/takserver/config-guide). 此仓库包含一个 README,其中包含有关如何更新文档的说明,以及配置指南仓库分支与该仓库分支之间的关系。
标签:JS文件枚举, 域名枚举, 测试用例, 请求拦截