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

简介

什么是 PortNote ?

PortNote 是一个用于跟踪和管理已使用端口的工具,旨在帮助用户清晰地了解其整个端口布局。它通过简洁的网页界面,允许用户添加服务器和虚拟机,并为各系统分配和记录端口使用情况,从而避免冲突。

主要特点

  1. 清晰的界面:直观的用户界面,便于管理和查看端口使用情况。
  2. 端口管理:允许用户为不同的服务分配端口,并记录其使用情况,避免重复分配。
  3. 随机端口生成器:内置功能,可以生成随机端口,便于快速分配。
  4. 与数据库集成:使用 PostgreSQLPrisma ORM 存储端口信息,确保数据的持久性和可靠性。
  5. 可扩展性:基于 Next.jsTypeScript,方便开发者进行自定义和扩展。

应用场景

  • 开发环境管理:开发人员可以使用 PortNote 来管理他们开发环境中的端口,确保不同服务之间不会发生冲突。
  • 服务器管理:系统管理员可以利用 PortNote 记录和管理生产环境中各服务器的端口使用情况。
  • 团队协作:在团队开发中,PortNote 使得团队成员能够共享端口使用信息,避免不必要的混淆和冲突。

PortNote 为用户提供了一个结构化和高效的方式来管理其网络端口的使用,能在冲突发生前避免冲突。

安装

在群晖上以 Docker 方式安装。

本文写作时,

  • 镜像 haedlessdev/portnotelatest 版本对应为 1.1.0
  • 镜像 haedlessdev/portnote-agentlatest 版本对应为 1.1.0

采用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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_SECRETUSER_SECRET 可以用 openssl rand -base64 32 命令生成

【关键点 1 】:agent 服务中,老苏增加了 user: root,否则容器可能因为报错导致启动失败

1
2
3
4
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.

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 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

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

保存

参考文档

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/