我想让 2 个 mosquitto 代理在 Debian 11 上运行,每个代理都有自己的配置。我安装并运行了一个实例,但不知道如何启动第二个实例。我是新手,所以请尽可能简单清楚地回答
答案1
首先:网络基础知识:只有一台服务器可以侦听单个 IP 地址上的同一 TCP 端口。
因此,您需要使用两个不同的IP地址,或者配置不同的端口。
顺便说一下:整个 Linux 容器世界主要用于您所描述的用途:在一台 Linux 机器上运行任意数量的相同类型的服务,执行不同的操作。你可能听说过 Docker、LXC、Kubernetes……这些东西。
因此,为您的用例做同样的事情并不难!特别是因为你似乎已经知道如何设置蚊子(我对此一无所知)。
您需要在您的 debian 上安装某种容器运行程序。 Debian 11 附带了开箱即用的 podman,不会引入新的守护进程或奇怪的依赖项,所以让我们继续吧。
sudo apt install -y podman
这并不是很痛苦:)所以,让我们确保您的本地用户(而不仅仅是 root)可以运行容器:
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 YOURUSERNAMEHERE
伟大的!注销并重新登录,让我们测试一下它的魔力:
podman run -it --rm debian:11
这会从“debian:11”镜像运行一个新容器,我交互式地,附带terminal,并在退出后将其删除。
尝试一下!这是一个干净的 debian-in-a-container,你那里有。你可以apt update
在里面运行,尝试在里面安装一些软件等等,而根本不需要接触你的“外部”debian。好的。输入exit
,所有的惊扰都结束了——您在该容器内所做的一切都没有留下任何痕迹。
您可能知道这将走向何方:您将 mosquitto 安装在这样的容器内,根据需要进行设置,然后将其连接到您的网络。
为了实现这一目标,我们将
- 构建一个包含您需要的软件的容器,
- 但将配置文件放在外面,这样您就可以在容器内更改它们
- 并获取该 MQTT 端口并将其公开到您的网络。
让我们首先确定一个网络端口 - 我假设您将使用 4444。任何其他 65536 > 端口 > 1024 也可以。
因此,首先创建一个新目录(我假设您的主目录是 /home/marek,如有必要请进行调整):
mkdir -p /home/marek/mosquitto-container/config
接下来,我们将让 mosquitto 进行全新安装,并将默认配置文件放在那里。为此,我们只需创建一个 debian 容器,让它安装 mosquitto,并将其保存到容器映像中,以便稍后可以随时重新启动。我们在那里使用一个“卷”,它将“外部”debian 上的目录(/home/marek/mosquitto-container/config)映射到“内部”debian 上的(可能不同的)目录(/etc/mosquitto) ):
podman run --name mareksmosquitto --rm -v /home/marek/mosquitto-container/config:/etc/mosquitto debian:11
[root@124578]# apt-get update; apt-get install -y mosquitto'
[root@124578]# apt-get install -y mosquitto
在单独的终端中,将该容器的状态提交到图像:
podman commit mareksmosquitto mareksmosquittoimage
伟大的!我们刚刚所做的是创建一个可以使用podman run …
安装了 mosquitto 的 debian 系统运行的映像。我们可以将任何我们想要的蚊子配置放入其中 - 只需指向-v /path/on/outer/:/etc/mosquitto
运行时使用的配置目录即可!
我们现在可以返回第一个终端并结束容器:
[root@124578]# exit
查看您的 /home/marek/mosquitto-container/config 内部!那里应该有一堆配置文件,包括 mosquitto.conf;按照您的意愿修改它。特别是,将端口设置为 4444(而不是 1883 或 8883)!
修改 mosquitto.conf 来执行您想要的操作后,测试整个过程:
podman run -it --rm -v /home/marek/mosquitto-container/config:/etc/mosquitto -p 4444:4444 mareksmosquittoimage /usr/sbin/mosquitto
与之前相比有什么变化:
- 现在,我们将容器内部的端口 4444 暴露到容器外部的端口 4444;
-p 4444:4444
这样做! - 我们运行一个容器
mareksmosquittoimage
,而不是官方debian:11
镜像。 - 我们没有在容器内启动 shell,而是直接在新容器内运行 /usr/sbin/mosquitto。所以,我们运行蚊子。
猜猜你需要做什么才能再运行 20 个经纪人?是的,您只需运行上述命令 20 次,但-v
每次都使用该选项指定不同的配置目录,并使用不同的端口-p
。
答案2
我只是通过将这两行添加到/etc/rc.local
:
/path/to/mosquitto -d -c config1
/path/to/mosquitto -d -c config2
因此,每次我的系统重新启动时,它都会运行两种 mosquitto 配置。