Next Terminal 主备部署操作文档
1. 架构
单机架构
text
用户
|
v
Nginx / 域名
|
v
next-terminal + guacd + postgresql主备架构
text
+-------------------+
用户 -> Nginx -> | 主节点 A |
| next-terminal |
| guacd |
+-------------------+
|
| 切换
v
+-------------------+
| 备用节点 B |
| next-terminal |
| guacd |
+-------------------+
主节点 A 和备用节点 B 共用:
- PostgreSQL
- data 目录2. 环境示例
text
主节点 A: <PRIMARY_IP>
备用节点 B: <STANDBY_IP>
PostgreSQL: <PG_HOST>:<PG_PORT>
Nginx: <NGINX_IP>
共享存储: <NFS_HOST>:<NFS_PATH>
域名: <DOMAIN>3. 准备目录
bash
mkdir -p /opt/next-terminal
cd /opt/next-terminal
mkdir -p data logs4. 挂载共享存储
bash
mount -t nfs <NFS_HOST>:<NFS_PATH> /opt/next-terminal/data
df -h | grep /opt/next-terminal/data如需开机自动挂载,在 /etc/fstab 增加:
txt
<NFS_HOST>:<NFS_PATH> /opt/next-terminal/data nfs defaults,_netdev 0 05. 下载安装文件
bash
cd /opt/next-terminal
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.yaml6. 修改 docker-compose.yaml
docker-compose.yaml:
yaml
services:
guacd:
container_name: guacd
image: registry.cn-beijing.aliyuncs.com/dushixiang/guacd:latest
volumes:
- ./data:/usr/local/next-terminal/data
restart: always
next-terminal:
container_name: next-terminal
image: registry.cn-beijing.aliyuncs.com/dushixiang/next-terminal:latest
ports:
- "8088:8088"
- "2022:2022"
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
depends_on:
- guacd
restart: always7. 修改 config.yaml
config.yaml:
yaml
Database:
Enabled: true
Type: postgres
Postgres:
Hostname: <PG_HOST>
Port: <PG_PORT>
Username: next-terminal
Password: next-terminal
Database: next-terminal
ShowSql: false
log:
Level: debug
Filename: ./logs/nt.log
Server:
Addr: "0.0.0.0:8088"
App:
Website:
AccessLog: "./logs/access.log"
Recording:
Type: "local"
Path: "/usr/local/next-terminal/data/recordings"
Guacd:
Drive: "/usr/local/next-terminal/data/drive"
Hosts:
- Hostname: <PRIMARY_IP>
Port: 4822
Weight: 1
- Hostname: <STANDBY_IP>
Port: 4822
Weight: 1
ReverseProxy:
Enabled: false
HttpEnabled: true
HttpAddr: ":80"
HttpRedirectToHttps: false
HttpsEnabled: true
HttpsAddr: ":443"
SelfProxyEnabled: false
SelfDomain: "<DOMAIN>"
Root: "http://<DOMAIN>"
IpExtractor: "x-forwarded-for"
IpTrustList:
- "<NGINX_IP>/32"8. 启动
主节点 A
bash
cd /opt/next-terminal
docker compose up -d
docker compose ps备用节点 B
bash
cd /opt/next-terminal
docker compose up -d guacd
docker compose ps9. 配置 Nginx
Nginx 配置:
nginx
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream next_terminal_backend {
server <PRIMARY_IP>:8088;
server <STANDBY_IP>:8088 backup;
}
server {
listen 80;
server_name <DOMAIN>;
client_max_body_size 100m;
location / {
proxy_pass http://next_terminal_backend;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
}加载配置:
bash
nginx -t
systemctl reload nginx10. 验证
bash
curl http://<PRIMARY_IP>:8088
curl http://<DOMAIN>页面验证:
- 登录正常
- SSH 正常
- RDP / VNC 正常
- 录屏正常
- drive 正常
11. 故障切换
bash
nc -zv <PG_HOST> <PG_PORT>
df -h | grep /opt/next-terminal/data
cd /opt/next-terminal
docker compose up -d next-terminal
docker compose ps
curl http://<STANDBY_IP>:8088如主节点 A 仍在线,在主节点 A 执行:
bash
cd /opt/next-terminal
docker compose stop next-terminal12. 回切
bash
cd /opt/next-terminal
docker compose up -d next-terminal
docker compose ps
curl http://<PRIMARY_IP>:8088备用节点 B:
bash
cd /opt/next-terminal
docker compose stop next-terminal
docker compose ps13. 检查项
config.yaml的Database.Postgres.Hostname不能写postgresqlconfig.yaml的App.Guacd.Hosts不能写guacd- A 和 B 的
./data必须是同一个共享目录 - B 平时不要启动
next-terminal