从源码构建安装Landoop kafka-connect-ui

背景

部署Landoop kafka-connect-ui最简单的办法还是通过docker来部署,我们之前的kafka-connect-ui就是通过docker部署的,但是,最近发现个问题:当使用docker部署且防火墙使用的是firewalld的情况下,就会出现端口冲突。

部署完kafka-connect-ui后,它是没有访问控制的,这样就会有安全问题,当我准备去通过nginx在前面加上基础验证时,我发现当我取消掉kafka-connect-ui端口的开放后它仍然可以被访问到。这样就无法只通过nginx访问kafka-connect-ui了。于是,本着改动最小的原则:直接通过原码构建安装kafka-connect-ui。

项目原地址
项目镜像地址

一、准备

如果在有外网的服务器上部署的话会方便很多,这里就主要以纯离线的方式部署。以及Landoop kafka-connect-ui也是一个比较老的项目了,安装过程中需要有一些注意的地方,写下这篇文章以作记录。

我们准备一台有外网的服务器以及需要部署kafka-connect-ui的应用服务器,为了后续表述方便有外网的服务器称为001服务器,应用服务器称为002服务器(可以通过虚拟机创建一个测试环境作为001服务器)。这里001服务器主要是用于下载资源,打包依赖。

二、安装

以下操作默认root权限操作,bower install 这里需要在项目目录中执行或者使用对应用户权限以免影响全局依赖

1、下载所需安装包

下载nodejs(只能下载14.x版本,其它版本启动kafka-connect-ui会有适配报错问题)

shell 复制代码
weget https://nodejs.org/dist/v14.21.3/node-v14.21.3-linux-x64.tar.xz

下载bower

shell 复制代码
weget https://registry.npmjs.org/bower/-/bower-1.8.12.tgz

安装git(bower 下载依赖项也需要用到git)

shell 复制代码
yum install -y git

下载源码

shell 复制代码
git clone https://github.com/Landoop/kafka-connect-ui.git
# 或
git clone https://gitcode.com/gh_mirrors/ka/kafka-connect-ui.git

将nodejs、bower安装包发送到002上

2、安装nodejs

在两台服务器上都安装nodejs

解压

shell 复制代码
tar -xvf node-v14.21.3-linux-x64 -C /usr/local/nodejs

配置环境变量

shell 复制代码
export NODE_HOME=/usr/local/nodejs
export PATH=$PATH:$NODE_HOME/bin
# 使生效
source /etc/profile

检查是否安装完成

shell 复制代码
node -v
npm -v

在001上设置npm镜像

shell 复制代码
npm config set registry https://mirrors.huaweicloud.com/repository/npm/

3、安装bower

在两台服务器上都安装bower

shell 复制代码
# 全局安装
npm install -g bower-1.8.12.tgz
# 检查是否安装完成
bower -v

4、安装http-server

bower也可以通过此种方式进行离线安装

在001上执行

shell 复制代码
# 全局安装
npm install -g http-server
# 检查是否安装成功
http-server -v

将http-server打包发送到002并安装

shell 复制代码
cd /usr/local/nodejs/lib/node_modules
# 压缩
tar -zcvf http-server.tar.gz ./http-server

将http-server.tar.gz上传到002

shell 复制代码
# 解压
tar -zxvf http-server.tar.gz -C /usr/local/nodejs/lib/node_modules/
# 创建软链接
ln -s /usr/local/nodejs/lib/node_modules/http-server/bin/http-server /usr/local/bin/http-server
# 检查是否安装成功
http-server -v

5、安装kafka-connect-ui依赖

在001上执行

shell 复制代码
cd kafka-connect-ui
npm install
bower install
# 安装完成后返回到上一层目录进行压缩
cd ../
tar -zcvf kafka-connect-ui.tar.gz ./kafka-connect-ui

6、配置并启动

将kafka-connect-ui.tar.gz传到002

shell 复制代码
# 解压到指定目录 如:
tar -zxvf kafka-connect-ui.tar.gz -C /app/path/

配置kafka-connect地址

shell 复制代码
cd /app/path/kafka-connect-ui
vim ./env.js

配置完成后通过http-server启动

shell 复制代码
# 指定端口启动
http-server -p 8000 .

7、解决跨域问题

我这里kafka-connect-ui和kafka-connect是在同一台机器,但端口不一样,启动kafka-connect-ui后,发现kafka-connect-ui访问不了kafka-connect,这是因为发生了跨域。由于我这里最后还需要通过nginx在kafka-connect-ui前加入基础验证,这里也通过nginx去解决跨域问题,以下是nginx和env.js部分配置的参考

nginx配置

shell 复制代码
location /kafka-connect-ui/ {
           add_header Access-Control-Allow-Origin $http_origin;
           add_header Access-Control-Allow-Credentials true;
           add_header Access-Control-Allow-Methods *;
           add_header Access-Control-Allow-Headers 'loginToken,nonce,randomStr,timeStamp,Content-Type,Authorization,User-Agent,Accept,Referer';
           add_header Access-Control-Expose-Headers 'loginToken';

		   auth_basic "请输入用户名密码";  # 提示框中的标题
           auth_basic_user_file /usr/local/nginx/kafka_pwd/.htpasswd;  # 指向密码文件

           if ($request_method = 'OPTIONS') {
               return 204;
           }

           proxy_set_header Host $http_host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-Proto $scheme;
           proxy_set_header X-Forwarded-Port $server_port;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Cookie $http_cookie;
           proxy_pass http://002ip:8000/;
       }

        location /kafka-connect/ {
           add_header Access-Control-Allow-Origin $http_origin;
           add_header Access-Control-Allow-Credentials true;
           add_header Access-Control-Allow-Methods *;
           add_header Access-Control-Allow-Headers 'loginToken,nonce,randomStr,timeStamp,Content-Type,Authorization,User-Agent,Accept,Referer';
           add_header Access-Control-Expose-Headers 'loginToken';

           if ($request_method = 'OPTIONS') {
               return 204;
           }

           proxy_set_header Host $http_host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-Proto $scheme;
           proxy_set_header X-Forwarded-Port $server_port;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Cookie $http_cookie;
           proxy_pass http://002ip:8083/;
       }

env.js

shell 复制代码
//Change the URLs of the endpoints here
var clusters = [
   {
     NAME:"prod",
     KAFKA_CONNECT: "http://192.168.5.135/kafka-connect/",
     KAFKA_TOPICS_UI: "http://kafka-topics-ui.url",
     KAFKA_TOPICS_UI_ENABLED: false ,
     COLOR: "#141414"
   }
]

配置完成后再重启下kafka-connect-ui即可

相关推荐
Wnq10072几秒前
具身机器人中AI(DEEPSEEK)与PLC、驱动器协同发展研究:突破数据困境与指令精确控制(3)
大数据·人工智能·程序员·机器人·aigc·ai编程·智能电视
Pitayafruit3 分钟前
【📕分布式锁通关指南 09】源码剖析redisson之公平锁的实现
redis·分布式·后端
Pitayafruit5 分钟前
【📕分布式锁通关指南 10】源码剖析redisson之MultiLock的实现
redis·分布式·后端
爱的叹息6 分钟前
Spring Boot 集成 MongoDB 时自动创建的核心 Bean 的详细说明及表格总结
spring boot·后端·mongodb
开发小能手-roy16 分钟前
linux Ubuntu 用户权限设置
linux·运维·ubuntu
开心猴爷30 分钟前
《Flutter从入门到实战:手把手构建跨平台应用(万字深度解析)》
后端
开心就好202530 分钟前
Flutter组件/插件开发及发布流程
后端
bcbnb33 分钟前
Flutter plugin插件制作详细过程以及发布到pub.dev的步骤
后端
小白探索世界欧耶!~37 分钟前
【踩坑】GitHub Actions 运行的 Linux 环境中,文件名是大小写敏感的
linux·运维·服务器·前端·vue.js·笔记·github
lyingcloud39 分钟前
debian系统中文输入法失效解决
linux·运维·debian