自动端口检测和标注工具PortNote

简介
什么是 PortNote ?
PortNote是一个用于跟踪和管理已使用端口的工具,旨在帮助用户清晰地了解其整个端口布局。它通过简洁的网页界面,允许用户添加服务器和虚拟机,并为各系统分配和记录端口使用情况,从而避免冲突。
主要特点
-
清晰的界面:直观的用户界面,便于管理和查看端口使用情况。
-
端口管理:允许用户为不同的服务分配端口,并记录其使用情况,避免重复分配。
-
随机端口生成器:内置功能,可以生成随机端口,便于快速分配。
-
与数据库集成:使用
PostgreSQL和Prisma ORM存储端口信息,确保数据的持久性和可靠性。 -
可扩展性:基于
Next.js和TypeScript,方便开发者进行自定义和扩展。
应用场景
-
开发环境管理:开发人员可以使用
PortNote来管理他们开发环境中的端口,确保不同服务之间不会发生冲突。 -
服务器管理:系统管理员可以利用
PortNote记录和管理生产环境中各服务器的端口使用情况。 -
团队协作:在团队开发中,
PortNote使得团队成员能够共享端口使用信息,避免不必要的混淆和冲突。

PortNote 为用户提供了一个结构化和高效的方式来管理其网络端口的使用,能在冲突发生前避免冲突。
安装
在群晖上以 Docker 方式安装。
本文写作时,
镜像
haedlessdev/portnote的latest版本对应为1.1.0;镜像
haedlessdev/portnote-agent的latest版本对应为1.1.0;

采用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件
services:
web:
image:haedlessdev/portnote:latest
container_name:portnote-web
restart:unless-stopped
ports:
-"3233:3000"
environment:
JWT_SECRET:rec320jrTkUUwrKb+xbO2QJ1+xfPr4Ds0NrvIXGxuV0=
USER_SECRET:juZg+GFe6YfJcxJWhk6pTrsQDxofGWGgDW3IZHNw3sI=
LOGIN_USERNAME:laosu
LOGIN_PASSWORD:123456
DATABASE_URL:"postgresql://postgres:postgres@db:5432/postgres"
agent:
image:haedlessdev/portnote-agent:latest
container_name:portnote-agent
restart:unless-stopped
user:root
environment:
DATABASE_URL:"postgresql://postgres:postgres@db:5432/postgres"
db:
image:postgres:17
container_name:portnote-db
restart:always
volumes:
-./data:/var/lib/postgresql/data
environment:
POSTGRES_USER:postgres
POSTGRES_PASSWORD:postgres
POSTGRES_DB:postgres关于环境变量的简单说明
web JWT_SECRET 用于生成和验证 JSON Web Token 的密钥
USER_SECRET 用户认证所需的安全密钥
LOGIN_USERNAME 登录所需的用户名。
LOGIN_PASSWORD 登录所需的密码
DATABASE_URL PostgreSQL 数据库的连接字符串,用于连接数据库
agent DATABASE_URL PostgreSQL 数据库的连接字符串,用于连接数据库
db POSTGRES_USER PostgreSQL 数据库的用户名
POSTGRES_PASSWORD PostgreSQL 数据库的密码
POSTGRES_DB PostgreSQL 数据库的名称
JWT_SECRET 和 USER_SECRET 可以用 openssl rand -base64 32 命令生成
【关键点 1 】:
agent服务中,老苏增加了user: root,否则容器可能因为报错导致启动失败
ERROR: for portnote-agent Cannot start service agent: OCI runtime create failed: container_linux.go:367: starting container process caused: chdir to cwd ("/root") set in config.json failed: permission denied: unknown
ERROR: for agent Cannot start service agent: OCI runtime create failed: container_linux.go:367: starting container process caused: chdir to cwd ("/root") set in config.json failed: permission denied: unknown
ERROR: Encountered errors while bringing up the project.然后执行下面的命令
# 新建文件夹 portnote 和 子目录
mkdir -p /volume1/docker/portnote/data
# 进入 portnote 目录
cd /volume1/docker/portnote
# 将 docker-compose.yml 放入当前目录
# 一键启动
docker-compose up -d
运行
在浏览器中输入 http://群晖IP:3233 就能看到登录界面

【关键点 2 】:在有些浏览器上会遇到问题,具体表现为停留在登录界面
浏览器的开发者工具中看到下面的错误

具体的错误可以在这里找到: https://react.dev/errors/418?args[]=HTML&args[]=

随机端口
登录成功后的主界面

点 Generate random port 按钮,可以生成现在尚未使用的随机端口

端口扫描
点 + 号添加服务器,以本机 192.168.0.197 为例

添加完成

可自动扫描所有正在使用的端口,不再需要逐个输入它们

扫描完成

点 Refresh Data

可以给端口添加备注,例如 22 是 SSH 端口

保存

参考文档
crocofied/PortNote: Keep track of used ports 地址:https://github.com/crocofied/PortNote
PortNote v1.1.0 🖥️ - Auto Port Detection & more : r/selfhosted 地址:https://www.reddit.com/r/selfhosted/comments/1kk1nwh/portnote_v110_auto_port_detection_more/
@所有人:写文不易,如果你都看到了这里,请点个赞和在看,分享给更多的朋友;为确保你能收到每一篇文章,请主页右上角设置星标。