FROM CODE TO APPLICATION
使用指南。
01 / GET STARTED
激活与申请
在聊天侧栏点击“免费网站空间”,输入站长提供的激活密码。连续错误 3 次锁定 5 分钟,刷新或换设备不会清空次数。成功后权限保存到账号,以后直接进入控制台。
每个账号可申请一个 名称.ztx-chat.xyz,名称为 1–63 位字母、数字、连字符,首尾须为字母或数字。www、主站服务及其他保留名称不可使用。平台检查的是自己的域名分配与站长保留清单,不能用来注册任意公网域名。
申请成功先运行一个可修改的 Node.js 示例。站长关闭通道后不能新激活、新申请,已有应用仍可管理。
02 / DEPLOY
上传前端和后端
进入“部署”,选择项目文件夹,也可在线编辑或新建文件。支持文本、图片等资源,共 2000 个文件、上传内容最多 8 MiB。上传自动排除 node_modules、.git、.env 和 Python 虚拟环境;依赖在构建时安装,密钥放到“环境变量”。
运行环境包含 Node.js 24、npm、Python 3、venv 与基础系统命令。可以编写自己的 HTTP 路由、玩家报名、计分、鉴权、数据库逻辑与 WebSocket 服务。示例仅展示 SQLite 持久化,不强制任何业务接口或数据表。
| 项目 | 构建命令 | 启动命令 |
|---|---|---|
| Node.js | npm ci --omit=dev | npm start |
| 需要编译的前端 + Node 后端 | npm ci && npm run build | node server.mjs |
| Python / Flask | python3 -m venv /workspace/venv && /workspace/venv/bin/pip install -r requirements.txt | /workspace/venv/bin/python app.py |
填写应用端口(默认 3000),后端必须监听 0.0.0.0 和环境变量 PORT,否则域名无法连接。静态前端也要通过启动命令运行一个 HTTP 服务。需要构建工具的项目,请勿在安装依赖前省略开发依赖。
点击部署后应用会暂停,代码被替换,并在自己的资源限额内构建和启动;无零停机发布保证。构建最多 5 分钟。重启也会重新构建,原有进程内存状态清空。日志显示最近 100 行 stdout/stderr,失败时可修改代码再次部署。下载项目配置包含环境变量,请私密保存;当前网页不提供 ZIP、Git 自动部署、自定义镜像或 SSH。
03 / PERSISTENCE
存储由自己的后端决定
DATA_DIR=/workspace/data 是持久目录,重新部署、重启后保留。可以存储 SQLite、JSON、文件型数据库和上传文件;没有预设“玩家数量”“积分字段”或固定玩家接口。不要把重要数据写在 /workspace/app,该目录会被新的代码替换。
// Node.js:保存你定义的数据(示意;实际应用需自行处理并发、校验和鉴权)
import { writeFile } from 'node:fs/promises';
import { join } from 'node:path';
await writeFile(join(process.env.DATA_DIR, 'players.json'), JSON.stringify(players));整个 /workspace 持久磁盘限额 512 MiB,代码副本、依赖、缓存、虚拟环境、业务数据均计入其中。空间不足会写入或构建失败。内存配额与磁盘配额分别计算。
请在自己的后端实现鉴权、可信计分、导出与恢复接口。平台不再发放固定比赛管理密钥;你的后台密码与主站激活密码是两套独立逻辑。控制台下载的项目不包含运行后产生的数据,请自行导出业务数据并保存到服务器外。
04 / RESOURCES & NETWORK
运行范围与限额
每实例默认 300 MiB 内存,实际以控制台为准;CPU 0.25 核、最多 128 个进程/线程、512 MiB 持久磁盘、16 MiB 临时目录。构建共享相同内存和 CPU 限额,超限可能被终止。每次重启后临时目录清空。
通过受控代理访问公网 IPv4 的 443 端口,支持 npm、pip 和遵循代理设置的 HTTPS SDK。Node 内置请求通过 NODE_USE_ENV_PROXY 启用代理;其他库需要自行配置代理。HTTP 明文、UDP、任意 TCP 端口、内网、其他租户、主站和 VPS 地址的直接访问被阻止。公网 HTTPS 外部数据服务需由你自行配置密钥;原生 TCP 数据库不在支持范围。
域名入口支持普通 HTTP 方法、Cookie、WebSocket,单请求正文最多 10 MiB,普通请求超时 60 秒;WebSocket 空闲 60 秒可能断开,请发送心跳。应用必须自行提供登录、权限校验、速率限制等。主站不会替你验证业务数据。
运行环境不包含完整 VPS 的 root、系统服务、任意 Docker 镜像或宿主机文件访问权限。平台采用 gVisor、容器资源限制、隔离网络和磁盘边界,但不能承诺任何沙箱绝对不会存在漏洞。免费服务的容量和可用性取决于主 VPS,比赛前请备份并压测。
05 / LIFECYCLE
删除、停用与旧版迁移
在设置页输入完整域名确认删除后,代码、容器、持久数据全部移除,个人额度恢复为 1,域名可被其他用户申请。激活资格保留。删除中或清理失败不会提前释放额度。
站长可以强制停用某个账号,并删除其应用和数据;解除停用后需要重新输入激活密码。请始终保留独立备份。
旧版固定比赛实例不自动改写数据,已有实例继续通过原有运行程序提供服务。请先使用旧域名的 /admin 和原有管理密钥导出玩家数据,或联系站长备份整个旧数据目录,再删除、重新申请新版应用。旧 JSON 的导入逻辑由你的新后端实现;旧实例不支持部署新版任意代码。
06 / PLATFORM API
主站管理接口
以下接口位于聊天主站,需要登录 Cookie、正确的同源 Origin,并通过激活校验。项目和环境变量只返回给账号本人;不会在主站执行上传的页面或脚本。
| 方法 / 路径 | 请求与用途 |
|---|---|
| GET /api/hosting/access | 当前激活、停用及站长身份 |
| POST /api/hosting/activate | {password},一次激活 |
| GET /api/hosting/site | 本人的实例与运行状态:active、starting、failed、oom 等 |
| POST /api/hosting/sites | {label},申请实例 |
| POST /api/hosting/project | {},读取本人项目与运行配置 |
| POST /api/hosting/deploy | {files:[{path,content,encoding:"utf8"}], buildCommand:"", startCommand:"node server.mjs", port:3000, environment:{}}。二进制文件 encoding 为 base64;成功表示已提交,构建结果看日志 |
| POST /api/hosting/logs | {},读取日志 {logs} |
| POST /api/hosting/restart | {},重建并启动 |
| POST /api/hosting/delete | {hostname},永久删除 |
环境变量最多 50 项、合计 16 KiB,值必须是字符串。PORT、DATA_DIR、APP_URL、代理地址由平台注入。文件路径必须为安全的相对路径,不允许软链接、路径穿越、文件目录冲突;JSON 正文最多 16 MiB。400 为输入错误,403 为权限不足,409 为冲突,413 为过大,429 为频率限制,503 为管理服务或资源异常。
站长接口:GET /api/owner/hosting;POST /api/owner/hosting/settings {enabled,memoryMB,version,password?};POST /api/owner/hosting/access {userId,disabled}。旧 /credentials 接口对新版应用返回 APPLICATION_OWNS_AUTH。