hanruo f6df4ae838
Some checks failed
release / release (push) Failing after 1h4m2s
fix
2026-05-23 23:04:47 +08:00
fix
2026-05-23 23:04:47 +08:00
fix
2026-05-11 17:19:13 +08:00
2026-05-23 21:55:11 +08:00
fix
2026-05-23 22:12:23 +08:00
fix
2026-05-11 17:19:13 +08:00
2026-04-15 13:58:22 +08:00
2026-05-23 21:55:11 +08:00
fix
2026-05-11 17:19:13 +08:00
fix
2026-05-11 17:19:13 +08:00
2026-05-23 21:55:11 +08:00
fix
2026-05-11 17:19:13 +08:00
fix
2026-05-11 17:19:13 +08:00

server-config-cli

一个用 Ink 写的交互式 TUI用来初始化服务器zsh + oh-my-zsh + nvm、openssh-server、frp 客户端及其端口穿透配置。

启动后是菜单式界面,没有传统的子命令/flag —— 所有选项、token、端口都在 TUI 里输入。

安装

npm install
npm run build     # 必须先打包bin/server-config.js 会加载 dist/app.mjs
npm link          # 可选;之后可以直接 server-config 调起

也可以不 link直接

node bin/server-config.js

要求 Node ≥ 18建议 20+并且必须在真正的终端里运行stdin 需要 TTY否则 Ink 报 "Raw mode is not supported")。

启动后界面

╭───────────────────────────────────────╮
│ server-config  zsh · ssh · frp client │
╰───────────────────────────────────────╯

Choose an action:

 Install zsh + oh-my-zsh + nvm
  Install OpenSSH server
  FRP setup ▸
  Bootstrap (zsh + ssh + frp)
  Quit

↑↓ select · Enter confirm · q quit

通用键位:

  • 移动光标,Enter 确认
  • Tab / 在表单字段间切换, 回上一项
  • Esc 返回上一屏(运行中除外)
  • 在主菜单按 q 退出

各动作做什么

Install zsh + oh-my-zsh + nvm

会依次执行:

  • apt update + apt upgrade -y
  • zsh git curl wget
  • chsh -s /bin/zsh
  • 从 gitee 镜像装 oh-my-zshRUNZSH=no CHSH=no KEEP_ZSHRC=yes
  • 装 nvmv0.40.4)并 nvm install --ltsnvm alias default lts/*
  • 安装 zsh-autosuggestionszsh-syntax-highlighting(已存在则 git pull
  • ~/.zshrcplugins=(...) 改成 git zsh-autosuggestions zsh-syntax-highlighting

完成后请 source ~/.zshrc 或重开终端。

Install OpenSSH server

apt install openssh-server -y + systemctl enable --now ssh

FRP setup

进入子菜单:

  • Install frp client + service — 下载 frp_0.58.1_linux_amd64.tar.gz,解压、放到 /opt/frp/frp_0.58.1_linux_amd64/,写 frpc.toml 和 systemd unit然后 systemctl enable --now frpc。需要输入 token也可以通过 FRP_TOKEN 环境变量预填。
  • Init / rewrite frpc.toml — 仅重写配置(保留已有代理段)。
  • Add proxy — 表单式输入名字 / 类型 / local IP / local port / remote port写入的实际 name 会带 8 位随机后缀(例如 ssh-aaa12312),避免重名。可选执行后重启 frpc。
  • List / remove proxies — 选中即生成删除计划,预览后确认执行。
  • Restart frpcsystemctl restart frpc

Bootstrap

按顺序执行 zsh + ssh + frp 三套token 走同一个输入。

计划预览和执行

任何会改系统的动作都会先停在 "Plan" 屏:列出每一步要做什么(命令或写文件),可以选 Run nowCancel

确认运行后进入实时日志屏:每一步显示状态图标(◐ 运行中 / ✓ 成功 / ✗ 失败),底部 12 行滚动展示子进程 stdout/stderr。任何一步失败立刻停止后续步骤。

默认值

  • frp 版本:0.58.1
  • 安装目录:/opt/frp/frp_<version>_linux_amd64
  • 配置文件:<install-dir>/frpc.toml
  • 服务名:frpc
  • 默认服务端:81.70.134.9:15443
  • 日志:/var/log/frpc.loglevel info,保留 7 天
  • transport.tcpMux = truetransport.tls.enable = false

serverAddr / serverPort / installDir 在 FRP 配置表单里都可以改。如果要改更深的配置log 路径、TLS 等),目前需要直接编辑 src/lib/tasks.js 里的 buildGlobalsFromOptions

开发

npm run build:watch   # 文件变了自动 rebuild
npm test              # 跑 frp-config 解析/渲染的单元测试
npm run check         # 对所有手写 .js 做 node --check

代码分三层:

  • src/lib/ — 纯逻辑CJS没有 Ink/React 依赖:frp-config.js 解析渲染,tasks.js 输出计划,runner.js 执行并发事件。
  • src/screens/ — Ink/React 组件,每个屏一个文件。
  • src/app.jsx — 入口 + screen stack。

esbuild 把 src/app.jsx 打到 dist/app.mjsESM 输出,因为 Ink 7 / yoga-layout 用了 top-level await

Description
No description provided
Readme 146 KiB
aa Latest
2026-05-30 16:57:23 +08:00
Languages
JavaScript 92.7%
Shell 7.3%