mirror of
https://github.com/didi/KnowStreaming.git
synced 2026-01-03 19:38:20 +08:00
94
docs/install_guide/install_guide_nginx_cn.md
Normal file
94
docs/install_guide/install_guide_nginx_cn.md
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**一站式`Apache Kafka`集群指标监控与运维管控平台**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## nginx配置-安装手册
|
||||||
|
|
||||||
|
# 一、独立部署
|
||||||
|
|
||||||
|
请参考参考:[kafka-manager 安装手册](install_guide_cn.md)
|
||||||
|
|
||||||
|
# 二、nginx配置
|
||||||
|
|
||||||
|
## 1、独立部署配置
|
||||||
|
|
||||||
|
```
|
||||||
|
#nginx 根目录访问配置如下
|
||||||
|
location / {
|
||||||
|
proxy_pass http://ip:port;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2、前后端分离&配置多个静态资源
|
||||||
|
|
||||||
|
以下配置解决`nginx代理多个静态资源`,实现项目前后端分离,版本更新迭代。
|
||||||
|
|
||||||
|
### 1、源码下载
|
||||||
|
|
||||||
|
根据所需版本下载对应代码,下载地址:[Github 下载地址](https://github.com/didi/Logi-KafkaManager)
|
||||||
|
|
||||||
|
### 2、修改webpack.config.js 配置文件
|
||||||
|
|
||||||
|
修改`kafka-manager-console`模块 `webpack.config.js`
|
||||||
|
以下所有<font color='red'>xxxx</font>为nginx代理路径和打包静态文件加载前缀,<font color='red'>xxxx</font>可根据需求自行更改。
|
||||||
|
|
||||||
|
```
|
||||||
|
cd kafka-manager-console
|
||||||
|
vi webpack.config.js
|
||||||
|
|
||||||
|
# publicPath默认打包方式根目录下,修改为nginx代理访问路径。
|
||||||
|
let publicPath = '/xxxx';
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3、打包
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
npm cache clean --force && npm install
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
ps:如果打包过程中报错,运行`npm install clipboard@2.0.6`,相反请忽略!
|
||||||
|
|
||||||
|
### 4、部署
|
||||||
|
|
||||||
|
#### 1、前段静态文件部署
|
||||||
|
|
||||||
|
静态资源 `../kafka-manager-web/src/main/resources/templates`
|
||||||
|
|
||||||
|
上传到指定目录,目前以`root目录`做demo
|
||||||
|
|
||||||
|
#### 2、上传jar包并启动,请参考:[kafka-manager 安装手册](install_guide_cn.md)
|
||||||
|
|
||||||
|
#### 3、修改nginx 配置
|
||||||
|
|
||||||
|
```
|
||||||
|
location /xxxx {
|
||||||
|
# 静态文件存放位置
|
||||||
|
alias /root/templates;
|
||||||
|
try_files $uri $uri/ /xxxx/index.html;
|
||||||
|
index index.html;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /api {
|
||||||
|
proxy_pass http://ip:port;
|
||||||
|
}
|
||||||
|
#后代端口建议使用/api,如果冲突可以使用以下配置
|
||||||
|
#location /api/v2 {
|
||||||
|
# proxy_pass http://ip:port;
|
||||||
|
#}
|
||||||
|
#location /api/v1 {
|
||||||
|
# proxy_pass http://ip:port;
|
||||||
|
#}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -8,10 +8,13 @@ package com.xiaojukeji.kafka.manager.common.constant;
|
|||||||
public class ApiPrefix {
|
public class ApiPrefix {
|
||||||
public static final String API_PREFIX = "/api/";
|
public static final String API_PREFIX = "/api/";
|
||||||
private static final String API_V1_PREFIX = API_PREFIX + "v1/";
|
private static final String API_V1_PREFIX = API_PREFIX + "v1/";
|
||||||
private static final String API_V2_PREFIX = API_PREFIX + "v2/";
|
|
||||||
|
// login
|
||||||
|
public static final String API_V1_SSO_PREFIX = API_V1_PREFIX + "sso/";
|
||||||
|
public static final String API_V1_SSO_LOGIN = API_V1_SSO_PREFIX + "login";
|
||||||
|
public static final String API_V1_SSO_LOGOUT = API_V1_SSO_PREFIX + "logout";
|
||||||
|
|
||||||
// console
|
// console
|
||||||
public static final String API_V1_SSO_PREFIX = API_V1_PREFIX + "sso/";
|
|
||||||
public static final String API_V1_NORMAL_PREFIX = API_V1_PREFIX + "normal/";
|
public static final String API_V1_NORMAL_PREFIX = API_V1_PREFIX + "normal/";
|
||||||
public static final String API_V1_RD_PREFIX = API_V1_PREFIX + "rd/";
|
public static final String API_V1_RD_PREFIX = API_V1_PREFIX + "rd/";
|
||||||
public static final String API_V1_OP_PREFIX = API_V1_PREFIX + "op/";
|
public static final String API_V1_OP_PREFIX = API_V1_PREFIX + "op/";
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import com.xiaojukeji.kafka.manager.common.entity.Result;
|
|||||||
import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
|
import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
|
||||||
import com.xiaojukeji.kafka.manager.common.entity.ao.ClusterDetailDTO;
|
import com.xiaojukeji.kafka.manager.common.entity.ao.ClusterDetailDTO;
|
||||||
import com.xiaojukeji.kafka.manager.common.entity.ao.cluster.ControllerPreferredCandidate;
|
import com.xiaojukeji.kafka.manager.common.entity.ao.cluster.ControllerPreferredCandidate;
|
||||||
import com.xiaojukeji.kafka.manager.common.entity.dto.op.ControllerPreferredCandidateDTO;
|
|
||||||
import com.xiaojukeji.kafka.manager.common.entity.vo.normal.cluster.ClusterNameDTO;
|
import com.xiaojukeji.kafka.manager.common.entity.vo.normal.cluster.ClusterNameDTO;
|
||||||
import com.xiaojukeji.kafka.manager.common.entity.pojo.ClusterDO;
|
import com.xiaojukeji.kafka.manager.common.entity.pojo.ClusterDO;
|
||||||
import com.xiaojukeji.kafka.manager.common.entity.pojo.ClusterMetricsDO;
|
import com.xiaojukeji.kafka.manager.common.entity.pojo.ClusterMetricsDO;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.xiaojukeji.kafka.manager.service.service;
|
package com.xiaojukeji.kafka.manager.service.service;
|
||||||
|
|
||||||
import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
|
import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
|
||||||
import com.xiaojukeji.kafka.manager.common.entity.dto.rd.RegionDTO;
|
|
||||||
import com.xiaojukeji.kafka.manager.common.entity.pojo.RegionDO;
|
import com.xiaojukeji.kafka.manager.common.entity.pojo.RegionDO;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -340,10 +340,6 @@ public class AdminServiceImpl implements AdminService {
|
|||||||
@Override
|
@Override
|
||||||
public ResultStatus modifyTopicConfig(ClusterDO clusterDO, String topicName, Properties properties, String operator) {
|
public ResultStatus modifyTopicConfig(ClusterDO clusterDO, String topicName, Properties properties, String operator) {
|
||||||
ResultStatus rs = TopicCommands.modifyTopicConfig(clusterDO, topicName, properties);
|
ResultStatus rs = TopicCommands.modifyTopicConfig(clusterDO, topicName, properties);
|
||||||
if (!ResultStatus.SUCCESS.equals(rs)) {
|
|
||||||
return rs;
|
|
||||||
}
|
|
||||||
|
|
||||||
return rs;
|
return rs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import com.xiaojukeji.kafka.manager.common.entity.ao.consumer.ConsumeDetailDTO;
|
|||||||
import com.xiaojukeji.kafka.manager.common.entity.ao.consumer.ConsumerGroup;
|
import com.xiaojukeji.kafka.manager.common.entity.ao.consumer.ConsumerGroup;
|
||||||
import com.xiaojukeji.kafka.manager.common.entity.ao.consumer.ConsumerGroupSummary;
|
import com.xiaojukeji.kafka.manager.common.entity.ao.consumer.ConsumerGroupSummary;
|
||||||
import com.xiaojukeji.kafka.manager.common.entity.pojo.ClusterDO;
|
import com.xiaojukeji.kafka.manager.common.entity.pojo.ClusterDO;
|
||||||
import com.xiaojukeji.kafka.manager.common.utils.ListUtils;
|
|
||||||
import com.xiaojukeji.kafka.manager.common.zookeeper.znode.brokers.TopicMetadata;
|
import com.xiaojukeji.kafka.manager.common.zookeeper.znode.brokers.TopicMetadata;
|
||||||
import com.xiaojukeji.kafka.manager.common.entity.ao.PartitionOffsetDTO;
|
import com.xiaojukeji.kafka.manager.common.entity.ao.PartitionOffsetDTO;
|
||||||
import com.xiaojukeji.kafka.manager.common.exception.ConfigException;
|
import com.xiaojukeji.kafka.manager.common.exception.ConfigException;
|
||||||
|
|||||||
@@ -65,14 +65,15 @@ public class LoginServiceImpl implements LoginService {
|
|||||||
@Override
|
@Override
|
||||||
public boolean checkLogin(HttpServletRequest request, HttpServletResponse response) {
|
public boolean checkLogin(HttpServletRequest request, HttpServletResponse response) {
|
||||||
String uri = request.getRequestURI();
|
String uri = request.getRequestURI();
|
||||||
if (uri.contains("./") || uri.contains("///")) {
|
if (uri.contains("..") || uri.contains("./") || uri.contains("///")) {
|
||||||
LOGGER.error("class=LoginServiceImpl||method=checkLogin||msg=uri illegal, contains ../ or ./ or ///||uri={}", uri);
|
LOGGER.error("class=LoginServiceImpl||method=checkLogin||msg=uri illegal, contains .. or ./ or ///||uri={}", uri);
|
||||||
singleSignOn.setRedirectToLoginPage(response);
|
singleSignOn.setRedirectToLoginPage(response);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
uri = uri.replaceAll("//", "/");
|
uri = uri.replaceAll("//", "/");
|
||||||
|
|
||||||
if (uri.startsWith(ApiPrefix.API_V1_SSO_PREFIX)
|
if (uri.equals(ApiPrefix.API_V1_SSO_LOGIN)
|
||||||
|
|| uri.equals(ApiPrefix.API_V1_SSO_LOGOUT)
|
||||||
|| uri.startsWith(ApiPrefix.API_V1_THIRD_PART_PREFIX)
|
|| uri.startsWith(ApiPrefix.API_V1_THIRD_PART_PREFIX)
|
||||||
|| uri.startsWith(ApiPrefix.GATEWAY_API_V1_PREFIX)) {
|
|| uri.startsWith(ApiPrefix.GATEWAY_API_V1_PREFIX)) {
|
||||||
// 白名单接口直接true
|
// 白名单接口直接true
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import com.xiaojukeji.kafka.manager.common.entity.vo.common.AccountSummaryVO;
|
|||||||
import com.xiaojukeji.kafka.manager.common.utils.ValidateUtils;
|
import com.xiaojukeji.kafka.manager.common.utils.ValidateUtils;
|
||||||
import com.xiaojukeji.kafka.manager.common.utils.SpringTool;
|
import com.xiaojukeji.kafka.manager.common.utils.SpringTool;
|
||||||
import com.xiaojukeji.kafka.manager.common.constant.ApiPrefix;
|
import com.xiaojukeji.kafka.manager.common.constant.ApiPrefix;
|
||||||
import com.xiaojukeji.kafka.manager.web.api.versionone.gateway.GatewayHeartbeatController;
|
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -62,4 +61,4 @@ public class NormalAccountController {
|
|||||||
AccountRoleEnum accountRoleEnum = accountService.getAccountRoleFromCache(username);
|
AccountRoleEnum accountRoleEnum = accountService.getAccountRoleFromCache(username);
|
||||||
return new Result<>(new AccountRoleVO(username, accountRoleEnum.getRole()));
|
return new Result<>(new AccountRoleVO(username, accountRoleEnum.getRole()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
|
|||||||
import com.xiaojukeji.kafka.manager.common.entity.metrics.BrokerMetrics;
|
import com.xiaojukeji.kafka.manager.common.entity.metrics.BrokerMetrics;
|
||||||
import com.xiaojukeji.kafka.manager.common.utils.ValidateUtils;
|
import com.xiaojukeji.kafka.manager.common.utils.ValidateUtils;
|
||||||
import com.xiaojukeji.kafka.manager.common.zookeeper.znode.brokers.BrokerMetadata;
|
import com.xiaojukeji.kafka.manager.common.zookeeper.znode.brokers.BrokerMetadata;
|
||||||
import com.xiaojukeji.kafka.manager.openapi.common.vo.ThirdPartBrokerOverviewVO;
|
|
||||||
import com.xiaojukeji.kafka.manager.service.cache.PhysicalClusterMetadataManager;
|
import com.xiaojukeji.kafka.manager.service.cache.PhysicalClusterMetadataManager;
|
||||||
import com.xiaojukeji.kafka.manager.service.service.BrokerService;
|
import com.xiaojukeji.kafka.manager.service.service.BrokerService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
@@ -52,4 +51,4 @@ public class ThirdPartClusterController {
|
|||||||
|
|
||||||
return new Result<>(underReplicated.equals(0));
|
return new Result<>(underReplicated.equals(0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user