本文介绍如何在腾讯云轻量应用服务器上部署 Web Terminal Gateway,并通过电脑或手机浏览器使用 Linux 终端和 Codex CLI。
部署过程不修改项目源码,只需要安装软件、克隆仓库并填写环境配置。浏览器关闭或网络断开后,服务器上的终端进程仍会继续运行,重新打开网页即可连接原会话。
一、准备服务器和域名
1. 购买轻量应用服务器
进入腾讯云轻量应用服务器购买页面,按下面的配置购买:
- 地域选择海外,首选首尔一区或首尔二区;
- 系统选择 Ubuntu 24.04 LTS 64 位;
- 个人使用选择 2 核 2GB 即可;
- 购买时长选择一年;
- 登录方式优先选择 SSH 密钥。
我购买时的活动价格是 199 元一年。活动价格和续费价格可能变化,以购买页面为准。腾讯云当前提供首尔一区和首尔二区,详细说明见地域与网络连通性。
购买完成后,在服务器防火墙中添加以下规则:
22/TCP:SSH 登录,来源尽量限制为自己的公网 IP;80/TCP:申请 HTTPS 证书;443/TCP:浏览器访问。
不需要开放 8787 端口。Web Terminal Gateway 只在服务器本机监听该端口,由 Caddy 负责公网访问。
2. 购买并解析域名
购买一个价格合适的域名。首年价格较低的域名通常只需要几元,下单时同时查看续费价格。
在腾讯云云解析 DNS 中添加 A 记录:
- 主机记录:
terminal; - 记录类型:
A; - 记录值:轻量应用服务器的公网 IP。
例如域名是 example.com,完成后使用的地址就是 terminal.example.com。本文使用首尔服务器,不需要进行中国内地 ICP 备案。腾讯云域名解析步骤可参考添加域名解析。
二、安装基础环境
下面的命令假设服务器登录用户为 ubuntu。如果实际用户名不同,需要同时修改后续服务文件中的用户和家目录。
通过 SSH 登录服务器:
ssh ubuntu@服务器公网IP
安装 Git、Node.js 和编译工具:
sudo apt update
sudo apt install -y git curl build-essential python3 nodejs npm openssl
node --version
npm --version
Node.js 版本需要为 18 或更高。如果版本低于 18,先升级到当前 LTS 版本再继续。
三、安装并登录 Codex CLI
安装 Codex CLI:
sudo npm install -g @openai/codex@latest
codex --version
服务器没有桌面环境,使用设备码登录:
codex login --device-auth
根据终端提示,在电脑或手机上打开登录网址并输入一次性代码。完成后检查登录状态:
codex login status
设备码登录方式和其他认证选项见 Codex 认证文档。Codex 登录信息保存在当前 Linux 用户的 ~/.codex 目录中,因此后面的网关服务也要使用同一个用户运行。
四、克隆 Web Terminal Gateway
直接从 GitHub 克隆项目:
sudo git clone https://github.com/yutianxiao6/web-terminal-gateway.git /opt/web-terminal-gateway
sudo chown -R ubuntu:ubuntu /opt/web-terminal-gateway
cd /opt/web-terminal-gateway
npm ci
npm test
npm test 通过后再启动服务。如果安装 node-pty 时出现编译错误,检查 build-essential 和 python3 是否已经安装。
五、配置运行环境
创建用于存放项目的目录:
mkdir -p /home/ubuntu/projects
生成访问令牌:
openssl rand -hex 32
复制输出,然后基于项目示例创建配置文件:
sudo cp /opt/web-terminal-gateway/.env.example /etc/web-terminal-gateway.env
sudo nano /etc/web-terminal-gateway.env
只需要确认或修改以下配置:
HOST=127.0.0.1;PORT=8787;WEB_AUTH_TOKEN填写刚才生成的随机令牌;DEFAULT_WORKSPACE=/home/ubuntu/projects;ALLOWED_WORKSPACE_ROOT=/home/ubuntu/projects;TERMINAL_MODE=codex;TERMINAL_BIN=codex;CODEX_HOME=/home/ubuntu/.codex;MAX_TERMINAL_SESSIONS=4。
保存后设置文件权限:
sudo chown root:root /etc/web-terminal-gateway.env
sudo chmod 600 /etc/web-terminal-gateway.env
ALLOWED_WORKSPACE_ROOT 决定网页终端可以访问的目录范围。不要设置为 /,需要操作的 Git 仓库统一放在 /home/ubuntu/projects 中。
六、启动 Web Terminal Gateway
项目已经提供 systemd 服务文件,直接复制并启动:
sudo cp /opt/web-terminal-gateway/web-terminal-gateway.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now web-terminal-gateway
sudo systemctl status web-terminal-gateway --no-pager
服务文件默认使用:
- 运行用户:
ubuntu; - 应用目录:
/opt/web-terminal-gateway; - 配置文件:
/etc/web-terminal-gateway.env; - Codex 配置目录:
/home/ubuntu/.codex。
如果服务器用户名不是 ubuntu,执行 sudo nano /etc/systemd/system/web-terminal-gateway.service,修改 User、Group 和 HOME 后重新启动服务。
查看运行日志:
sudo journalctl -u web-terminal-gateway -n 100 --no-pager
七、配置域名和 HTTPS
安装 Caddy:
sudo apt install -y caddy
编辑配置文件:
sudo nano /etc/caddy/Caddyfile
写入下面两行,并替换成自己的域名:
terminal.example.com {
reverse_proxy 127.0.0.1:8787
}
检查并重新加载配置:
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
sudo systemctl status caddy --no-pager
域名解析正确,且 80、443 端口已经开放时,Caddy 会自动申请并续期 HTTPS 证书。
八、打开浏览器终端
第一次访问时,在地址后添加网关令牌:
https://terminal.example.com/?token=你的WEB_AUTH_TOKEN
页面会把令牌保存在当前浏览器中,并从地址栏删除。不要把带令牌的地址发送给其他人。
进入页面后按下面的步骤使用:
- 在“模式”中选择 Codex 或 Linux 终端;
- 在“起始目录”中选择
/home/ubuntu/projects下的项目; - 点击“启动终端”;
- 在电脑上直接使用终端输入,在手机上使用页面底部的移动端输入框;
- 另一台设备打开同一会话时,点击“接管输入”即可切换控制设备。
九、会话恢复
刷新网页、关闭浏览器或临时断网不会关闭服务器上的终端进程。重新打开网页后,可以从会话列表连接原来的终端。
以下操作会结束正在运行的终端:
- 点击网页中的“关闭会话”;
- 重启 Web Terminal Gateway 服务;
- 重启或关闭服务器。
如果服务或服务器已经重启,重新创建 Codex 终端,然后执行:
codex resume
该命令可以继续之前保存的 Codex 对话。
十、更新项目
更新前先结束正在运行的任务。更新命令如下:
cd /opt/web-terminal-gateway
git pull --ff-only
npm ci
npm test
sudo systemctl restart web-terminal-gateway
更新 Codex CLI:
sudo npm install -g @openai/codex@latest
常见问题
页面显示 502
执行 sudo systemctl status web-terminal-gateway 和 sudo journalctl -u web-terminal-gateway -n 100,检查网关是否启动成功。
启动 Codex 时提示未登录
执行 codex login status。确认登录 Codex 的 Linux 用户和 systemd 服务中的 User 相同,并确认 CODEX_HOME 指向该用户的 .codex 目录。
HTTPS 证书申请失败
检查域名 A 记录是否指向当前服务器公网 IP,并确认腾讯云防火墙已经开放 80 和 443 端口。
更换电脑后提示未授权
新浏览器没有保存网关令牌。重新访问一次 https://域名/?token=WEB_AUTH_TOKEN 即可。
评论
登录后即可评论