点击展开更新日志

2026

01-09

  1. 【新增】NextTerminal 部署

nexttime

会有些什么呢(❁´◡`❁)

源起

如果只是有多台主机(内网和外网)需要一个SSH客户端方便管理,就选择客户端即可,比如termius、xterminal,mobaxterm等,因此我在家的电脑上用的也是 termius,只不过在公司,偶尔摸鱼也想要访问个别主机,如果保留一份密钥在公司电脑不太放心,所以就干脆搭建一个堡垒机,开放互联网访问方式。

或许要问,既然之前都把异地组网弄好了,干嘛不直接远程到家里电脑再SSH?问得好,真要说的话,好像确实没有必要的理由,不管了,我就要。

选择

开源堡垒机还是有很多可选的,首屈一指的自然是 JumpServer,只不过对于个人用户这种小打小闹,最低配置要求都可以做我主力机了,也就只能望而却步了,通过AI问了一嘴,最后选了 NextTerminal ,部署下来整体感受还不错。

有一点要好评的是,开源版本就已经包含了90%以上主要功能,付费的专业版和企业版更多是技术支持、SSO和自定义内容,核心的功能全部开放,非常好评,比某池强多了。不过毕竟人家提供了开源免费版本,最基本的礼貌还是要有的,随口抱怨两句而已。

部署

官方文档已经提供了详细的部署操作:

1
2
3
4
5
6
7
8
9
# 加速下载
curl -sSL https://f.typesafe.cn/next-terminal/docker-compose-aliyun.yaml > docker-compose.yaml
curl -sSL https://f.typesafe.cn/next-terminal/config.yaml > config.yaml
docker compose up -d

# 源地址
curl -sSL https://f.typesafe.cn/next-terminal/docker-compose.yaml > docker-compose.yaml
curl -sSL https://f.typesafe.cn/next-terminal/config.yaml > config.yaml
docker compose up -d

放一下我的 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
33
34
35
36
services:
guacd:
container_name: NT-guacd
image: dushixiang/guacd:latest
volumes:
- ./data:/usr/local/next-terminal/data
restart: unless-stopped # 修改了重启策略
networks: # 添加自定义网络
- next_terminal
next-terminal:
container_name: NT-next-terminal
image: dushixiang/next-terminal:latest
ports:
# - "8088:8088" # Web管理界面
- "2022:2022" # SSH Server 端口 (可选)
volumes:
- /etc/localtime:/etc/localtime:ro
- ./data:/usr/local/next-terminal/data
- ./logs:/usr/local/next-terminal/logs
- ./config.yaml:/etc/next-terminal/config.yaml
labels: # 配置 traefik 反向代理
- 'traefik.enable=true'
- 'traefik.http.routers.next-terminal.rule=Host(`next-terminal.domain.top`)'
- 'traefik.http.routers.next-terminal.entrypoints=websecure'
- 'traefik.http.routers.next-terminal.tls=true'
- 'traefik.http.routers.next-terminal.service=next-terminal-service'
- 'traefik.http.services.next-terminal-service.loadbalancer.server.port=8088'
depends_on:
- guacd
restart: unless-stopped
networks:
- next_terminal

networks:
next_terminal:
name: next_terminal

我在使用原版文件启动遇到各问题,官方说明的最小规格需求为 2核2G,我的 Docker 宿主机为 4核16G,docker compose up 之后 postgres 数据库容器会崩溃无法启动,拿日志问了AI说可能是OOM内存不够,要加内存限制。正好之前单独创了台虚拟机部署 postgres,所以就直接共用了。

因此相比官方原版,这里增加了 traefik 标签,删除了 postgresql 数据库容器,在 config.yaml 中指定使用自定义数据库。

启动之前,需要提前创建好数据库:

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE DATABASE nexterminal ENCODING 'UTF8';
-- 1. 创建用户
-- 注意:PostgreSQL 不需要 @'%',连接权限由 pg_hba.conf 文件控制
CREATE USER nexterminal WITH PASSWORD 'nexterminal';

-- 2. 授予数据库所有权限
GRANT ALL PRIVILEGES ON DATABASE nexterminal TO nexterminal;

-- 3. 授予数据库内 public schema 的所有权限
-- (这一步相当于 MySQL 的 GRANT ALL ON nexterminal.*)
GRANT ALL PRIVILEGES ON SCHEMA public TO nexterminal;
GRANT ALL PRIVILEGES ON DATABASE nexterminal TO nexterminal;

启动之后,访问 http://<IP>:8088打开 web 界面,第一次打开会要求进行初始化设置。

反向代理

官方文档也提供了详细的反代配置,我这里用的 traefik 做的服务发现,配置如上。

远程访问

既然最终的目的是要从外网访问,下一步就是把域名暴露出去,直接使用 DDNS 将域名暴露出去就可以了。因为之前已经配置过了,也就多加一个域名的事。

事实上,如果要求更加安全,可以找一台公网服务器部署堡垒机,然后在目标主机设置访问IP白名单,只允许堡垒机访问会更安全。