大改,整理项目结构,完成rust ffi调用,写好tcp接口
This commit is contained in:
1 parent
df6d348995
commit
9758439b82
118 files changed
+8103
-6321
No files matched your search
+56
-19
@@ -1,34 +1,43 @@
|
||||
# 架构与组件
|
||||
|
||||
ChuSQL 由三个可执行文件组成,共用同一份配置:
|
||||
ChuSQL 由三个面向用户的程序、几个共享库与一份配置组成:
|
||||
|
||||
| 组件 | 作用 |
|
||||
| ------------------ | ------------------------------------------------------- |
|
||||
| `chusql-storage` | 存储进程:页面与索引、WAL、崩溃恢复 |
|
||||
| `chusql-web` | Web 管理端:REST 接口 + 浏览器里的数据库 IDE |
|
||||
| `csql` | 命令行客户端 |
|
||||
| 组件 | 作用 |
|
||||
| ------------------------------- | -------------------------------------------------------------------- |
|
||||
| `chusql-server` | 数据库服务:进程内装入引擎与存储动态库、独占数据目录,对外只开一个 TCP 端口 |
|
||||
| `chusql-web` | Web 管理端:浏览器里的数据库 IDE,自己开 HTTP 端口,后端经 TCP 连 `chusql-server` |
|
||||
| `csql` | 命令行客户端,经 TCP 连 `chusql-server` |
|
||||
| `chusql-core/engine`(库) | SQL 解析、语义检查、优化与执行,链进 `chusql-server` |
|
||||
| `chusql-core/storage`(动态库) | 存储:页面与索引、WAL、崩溃恢复 |
|
||||
| `chusql-interface`(库) | 接口层:线上协议、配置与设置、口令与限流、语句构造、TCP 客户端与会话,`chusql-web` 与 `csql` 共用 |
|
||||
| `chusql-core/model`(库) | 共享类型:表与列、结果集、权限枚举 |
|
||||
|
||||
安装时把可执行文件与存储动态库(`libchusql_core_storage.so` / `chusql_core_storage.dll`)放进同一个目录,
|
||||
进程按 exe 所在目录就能找到库。
|
||||
|
||||
## 数据流
|
||||
|
||||
SQL → 前端(`chusql-web` 或 `csql`)→ 本地端点 → `chusql-storage` → 磁盘。
|
||||
浏览器、`csql` 或别的程序 → TCP → `chusql-server` → 同一进程里调 `chusql-core/engine`
|
||||
(经 FFI 再调 `chusql-core/storage` 动态库)→ 磁盘。
|
||||
|
||||
Web 与命令行是两个并列的前端:Web 走 HTTP,命令行直连本地端点,两者共用同一份
|
||||
[`chusql.toml`](config.md)、同一个管理员账号与同一张账号表——任意一端改的账号与权限,
|
||||
另一端立刻生效。
|
||||
**数据目录只有 `chusql-server` 一个进程碰**:`chusql-web` 与 `csql` 自己不开存储,它们把 SQL 与数据字典请求
|
||||
交给 TCP 服务执行,拿到结果再渲染。因此库文件同一时刻只有一个持有者;进程内的并发先用一把锁串起来,
|
||||
完整事务与 MVCC 见后续计划。
|
||||
|
||||
`chusql-web` 是「自己开 HTTP 服务、同时又是 `chusql-server` 的 TCP 客户端」:浏览器只跟 Web 说话,
|
||||
Web 后端在需要认证、鉴权、读数据或改数据的时候,才把请求发给 `chusql-server`。
|
||||
|
||||
三种用法共用同一份 [`chusql.toml`](config.md)、同一个管理员账号与同一张账号表——任意一端改的账号与权限,
|
||||
另外两端立刻生效。
|
||||
|
||||
## 一次请求经过什么
|
||||
|
||||
1. 浏览器或命令行发起 SQL;
|
||||
2. 解析与语义检查(表/列是否存在、类型是否匹配、权限是否足够)在这里完成,不合格的语句不会落到磁盘;
|
||||
3. 合格语句通过本地端点交给 `chusql-storage`;
|
||||
4. 存储进程读写页面与索引,写之前先记 WAL;
|
||||
1. 浏览器、命令行或别的程序发起 SQL;
|
||||
2. 解析与语义检查(表/列是否存在、类型是否匹配、权限是否足够)在 `chusql-server` 里完成,不合格的语句不会落到磁盘;
|
||||
3. 合格语句经 FFI 交给同一进程里的存储库;
|
||||
4. 存储库读写页面与索引,写之前先记 WAL;
|
||||
5. 结果原路返回。
|
||||
|
||||
## 本地端点
|
||||
|
||||
前端与存储进程之间只有一个端点,由 `[server] pipe_name` 决定:Windows 是具名管道,
|
||||
Linux / macOS 是套接字文件(规则见 [config.md](config.md) 的「端点」一节)。
|
||||
|
||||
## 数据在哪里
|
||||
|
||||
数据都在 `[storage] data_dir` 下。不写这个键就按平台惯例:Windows `%LOCALAPPDATA%\ChuSQL\data`,
|
||||
@@ -40,3 +49,31 @@ Linux / macOS `${XDG_DATA_HOME:-~/.local/share}/chusql/data`。
|
||||
| `databases/<库名>/` | 各自建的库 |
|
||||
|
||||
服务启动后只建 `system`,**没有默认工作库**;其余库由你自己 `CREATE DATABASE` 创建。
|
||||
|
||||
## TCP 数据库服务(`chusql-server`)
|
||||
|
||||
给别的程序用的接口:一条 TCP 连接一条 SQL 会话,请求和应答都是**一行一个 JSON 对象**,编码 UTF-8。
|
||||
|
||||
| 请求 | 字段 | 应答 `status` |
|
||||
| --------------- | --------------------------- | ---------------------------------------------------------------- |
|
||||
| `hello` | `protocol`(可选,默认 1) | `hello`:带 `protocol`、`server` |
|
||||
| `login` | `user`、`password` | `ok`:带 `user`、`admin` |
|
||||
| `query` | `sql` | `result`:带 `columns`、`rows`、`rowCount`、`truncated`、`database` |
|
||||
| `catalog` | — | `catalog`:带 `schemas`(表与列) |
|
||||
| `databases` | — | `databases`:带库名列表 |
|
||||
| `roles` | — | `roles`:带角色与授权视图 |
|
||||
| `accounts` | — | `accounts`:带账号表(仅管理员) |
|
||||
| `policy` | — | `policy`:带 `minLength`、`classes`(仅管理员) |
|
||||
| `reload-policy` | — | `policy`:重新读设置里的口令策略(仅管理员) |
|
||||
| `storage` | `request`(存储层的原始请求) | `storage`:带 `response`(存储层的原始应答,仅管理员) |
|
||||
| `ping` | — | `pong` |
|
||||
| `quit` | — | `bye`,随后连接关闭 |
|
||||
|
||||
方法名大小写不敏感,认不出的字段忽略。任何一端出错都回 `{"status":"error","code":...,"message":...}`
|
||||
且**连接不断**,客户端可以接着发下一条;`code` 取值有 `bad_request`(协议号不符、SQL 为空、行太长)、
|
||||
`unauthorized`(没登录就查询、口令不对)、`forbidden`、`too_many_attempts`(登录失败被限流)、
|
||||
`too_large`、`no_database`、`not_found`、`query_error`、`conflict`、`storage_error`。
|
||||
|
||||
登录之前只能 `hello` / `ping` / `quit`;`storage`、`accounts`、`policy`、`reload-policy` 与系统库只对管理员开放。
|
||||
每条连接各有一份会话,数据库选择(`USE <库>`)不跨连接。监听参数在 `[server]` 分区(见 [config.md](config.md)),
|
||||
默认只听本机 `127.0.0.1:7777`。
|
||||
+30
-7
@@ -4,10 +4,10 @@
|
||||
|
||||
| 命令 | 作用 | 选项 |
|
||||
| ---- | ---- | ---- |
|
||||
| `chusql-storage` | 存储进程:页面与索引、WAL | 只有 `--config <path>` |
|
||||
| `chusql-server` | 数据库服务:装入引擎与存储动态库、独占数据目录,对外是 TCP | 见「`chusql-server` 选项」 |
|
||||
| `chusql-web` | Web 管理端:REST 接口 + 浏览器里的数据库 IDE | 见「`chusql-web` 选项」 |
|
||||
| `csql` | 命令行客户端,直连存储进程,不经过 HTTP | 见「`csql` 选项」 |
|
||||
| `csql-web` | 一键启动器:按配置拉起存储进程 + Web,日志写 `<install-dir>/logs` | 无选项(`host`/`port` 从配置读) |
|
||||
| `csql` | 命令行客户端,连数据库服务的 TCP 端点 | 见「`csql` 选项」 |
|
||||
| `csql-web` | 一键启动器:按配置拉起 Web 服务,日志写 `<install-dir>/logs` | 无选项(`host`/`port` 从配置读) |
|
||||
|
||||
四个命令共用同一份 [`chusql.toml`](config.md);`--config` 都是用来临时读另一份配置的。
|
||||
|
||||
@@ -23,8 +23,6 @@
|
||||
| `-f, --format FORMAT` | `table` | 输出格式:`table` / `json` / `csv` |
|
||||
| `-e, --execute SQL` | — | 跑一条语句就退出(脚本化用) |
|
||||
| `--history FILE` | `~/.chusql_history` | 历史文件位置 |
|
||||
| `--pipe NAME` | 配置 `[server] pipe_name` | 端点名(Windows 具名管道 / Unix 套接字文件) |
|
||||
| `--storage SERVER` | — | 端点没人应答时,拉起这个存储进程可执行文件 |
|
||||
| `--config FILE` | 固定位置的 `chusql.toml` | 读另一份配置 |
|
||||
| `-h, --help` | — | 帮助 |
|
||||
|
||||
@@ -105,10 +103,9 @@ Web 端对应的接口是 `/api/roles` 系列(`GET` 列表、`POST` 建角色
|
||||
| ---- | ---------- | ---- |
|
||||
| `--config FILE` | — | 固定位置的 `chusql.toml` |
|
||||
| `--host H` | `[web] host` | `127.0.0.1` |
|
||||
| `--port N` | `[web] port` | `7777` |
|
||||
| `--port N` | `[web] port` | `7778` |
|
||||
| `--static DIR` | `[web] static_dir` | `static` |
|
||||
| `--user NAME` | `[web] user` | `root` |
|
||||
| `--storage SERVER` | `[web] storage_server` | — |
|
||||
| `--cookie-secure BOOL` | `[web] cookie_secure` | `false` |
|
||||
| `--body-limit N` | `[web] body_limit` | `65536` |
|
||||
| `--session-idle N` | `[web] session_idle` | `28800` |
|
||||
@@ -140,3 +137,29 @@ REST 接口(界面的一键操作全走结构化接口):
|
||||
除探活、登录和首页(`GET /`、`GET /static/:file`)外都要带会话 Cookie。选库用 `X-ChuSQL-Database` 头:
|
||||
**不带这个头就是"没选库"**,此时只有限定名语句(`db.table`)能跑,裸表名会得到 400 `no_database`;
|
||||
`GET /api/databases` 和 `POST`/`DELETE /api/databases/:name` 不需要选库。普通身份碰 `system` 库一律 403。
|
||||
|
||||
## `chusql-server` 选项
|
||||
|
||||
chusql-server [options]
|
||||
|
||||
| 选项 | 对应配置键 | 默认 |
|
||||
| ---- | ---------- | ---- |
|
||||
| `--config FILE` | — | 固定位置的 `chusql.toml` |
|
||||
| `--host H` | `[server] host` | `127.0.0.1` |
|
||||
| `--port N` | `[server] port` | `7777` |
|
||||
| `--user NAME` | `[web] user` | `root` |
|
||||
| `--max-message N` | `[server] max_message` | `1048576` |
|
||||
| `--max-rows N` | `[server] max_rows` | `1000` |
|
||||
| `-h, --help` | — | 帮助 |
|
||||
|
||||
启动后打印实际监听地址,它同时是数据目录的唯一持有者:Web 与 `csql` 不开存储,把存储请求交给它转发。
|
||||
客户端按**一行一个 JSON** 说话,方法与错误码见
|
||||
[architecture.md](architecture.md) 的「TCP 数据库服务」;用 `nc` 手敲一个会话是这样:
|
||||
|
||||
{"method":"hello","protocol":1}
|
||||
{"method":"login","user":"root","password":"..."}
|
||||
{"method":"query","sql":"USE test"}
|
||||
{"method":"query","sql":"SELECT * FROM users"}
|
||||
{"method":"quit"}
|
||||
|
||||
对话里每条 SQL 走的是和 Web、`csql` 同一套解析与权限检查,账号与库选择互不共享。
|
||||
+19
-21
@@ -2,7 +2,7 @@
|
||||
|
||||
## 文件在哪
|
||||
|
||||
整条链路(存储进程 / Web / 命令行)共用一份 `chusql.toml`,位置固定,**没有环境变量可以覆盖**:
|
||||
整条链路(数据库服务 / Web / 命令行)共用一份 `chusql.toml`,位置固定,**没有环境变量可以覆盖**:
|
||||
|
||||
| 平台 | 路径 |
|
||||
| ------------ | ---- |
|
||||
@@ -10,7 +10,7 @@
|
||||
| Linux / macOS | `$XDG_CONFIG_HOME/ChuSQL/chusql.toml`,没设就是 `~/.config/ChuSQL/chusql.toml`(`HOME` 也没有才退相对路径 `ChuSQL/chusql.toml`) |
|
||||
|
||||
安装脚本就是把 [`scripts/chusql.toml`](../scripts/chusql.toml) 这份模板写到上面的位置,并把安装时给的
|
||||
`user` / `password` / `data_dir` 填进去。想临时读另一份文件,`chusql-storage`、`chusql-web`、`csql`
|
||||
`user` / `password` / `data_dir` 填进去。想临时读另一份文件,`chusql-server`、`chusql-web`、`csql`
|
||||
都认 `--config <path>`(启动器 `csql-web` 没有选项,只读固定路径)。
|
||||
|
||||
优先级:**命令行选项 > 配置文件 > 内置默认**,也就是配置文件写什么,命令行随时能盖掉
|
||||
@@ -20,12 +20,13 @@
|
||||
|
||||
| 分区 | 谁读 |
|
||||
| ---- | ---- |
|
||||
| `[page]` `[btree]` `[buffer]` `[storage]` `[server]` `[log]` | 存储进程 `chusql-storage` |
|
||||
| `[web]` | Web 服务 `chusql-web` 与命令行 `csql`(账号、会话、限流、分页上限、静态目录、存储进程路径) |
|
||||
| `[page]` `[btree]` `[buffer]` `[storage]` `[log]` | 存储层 `chusql-core/storage`(由 `chusql-server` 装入的动态库) |
|
||||
| `[server]` | TCP 数据库服务 `chusql-server`(监听地址、端口、单行上限、结果行数上限) |
|
||||
| `[web]` | Web 服务 `chusql-web` 与命令行 `csql`(账号、会话、限流、分页上限、静态目录) |
|
||||
|
||||
端点与数据目录只有一份配置:前端读它来决定怎么连,存储进程读它来监听与落盘。
|
||||
数据目录只有一份配置:`chusql-server` 读它来落盘,别的进程不碰。
|
||||
|
||||
## 存储进程的分区
|
||||
## 存储的分区
|
||||
|
||||
| 键 | 默认 | 说明 |
|
||||
| -- | ---- | ---- |
|
||||
@@ -33,25 +34,23 @@
|
||||
| `[btree] order` | `4` | B+ 树阶 |
|
||||
| `[buffer] pool_size` | `1024` | 缓冲池页数 |
|
||||
| `[storage] data_dir` | Windows `%LOCALAPPDATA%\ChuSQL\data`,Linux / macOS `${XDG_DATA_HOME:-~/.local/share}/chusql/data` | 数据落哪(模板里那行是安装时替换的占位) |
|
||||
| `[server] pipe_name` | `chusql-joint` | 端点名(见下) |
|
||||
| `[log] level` | `info` | 日志级别 |
|
||||
|
||||
数据目录跟着平台惯例走,跟安装脚本装的位置是同一处(Windows 装到 `%LOCALAPPDATA%\ChuSQL`、Unix 装到
|
||||
`~/.local/share/chusql`,数据放在它下面的 `data/`);`LOCALAPPDATA`/`XDG_DATA_HOME`/`HOME` 都没有时才退相对路径。
|
||||
要固定就写绝对路径。
|
||||
|
||||
存储进程只认一个命令行开关:`--config <path>`(`--help` 看帮助)。
|
||||
存储层没有自己的命令行选项:它是 `chusql-server` 进程内装入的动态库。
|
||||
|
||||
## `[web]` 分区
|
||||
|
||||
| 键 | 命令行(`chusql-web`) | 默认 | 说明 |
|
||||
| -- | ---------------------- | ---- | ---- |
|
||||
| `host` | `--host` | `127.0.0.1` | 监听地址 |
|
||||
| `port` | `--port` | `7777` | 监听端口 |
|
||||
| `port` | `--port` | `7778` | 监听端口 |
|
||||
| `static_dir` | `--static` | `static` | 静态资源目录(候选:给定值、`static`、`chusql-web/static`、`../chusql-web/static`、`../static`,取第一个存在的) |
|
||||
| `user` | `--user` | 配置文件缺失时 `root` | 管理员账号名 |
|
||||
| `password` | — | 文件里**没有**这一项时用内置演示口令 `root` / `chusql` | 管理员口令(明文,启动时哈希;见「口令与安全」) |
|
||||
| `storage_server` | `--storage` | 空 | 存储进程可执行文件;留空=存储已在别处运行,只按 `[server] pipe_name` 去连 |
|
||||
| `cookie_secure` | `--cookie-secure` | `false` | 给会话 Cookie 加 `Secure`(HTTPS 部署时开) |
|
||||
| `body_limit` | `--body-limit` | `65536` | 请求体上限(字节) |
|
||||
| `session_idle` | `--session-idle` | `28800` | 会话空闲超时(秒) |
|
||||
@@ -77,23 +76,22 @@
|
||||
对应关系:`static_dir`→`static-dir`、`session_idle`→`session-idle`、`session_max`→`session-max`、
|
||||
`login_max_attempts`→`login-max-attempts`、`login_window`→`login-window`、`body_limit`→`body-limit`、
|
||||
`rows_per_page`→`rows-per-page`、`max_page_size`→`max-page-size`、`max_rows`→`max-rows`、
|
||||
`max_sql_length`→`max-sql-length`、`storage_server`→`storage-server`、
|
||||
`max_sql_length`→`max-sql-length`、
|
||||
`password_min_length`→`password-min-length`、`password_classes`→`password-classes`。
|
||||
`host`、`port`、`user`、`password`、`seed` 只有一种写法。
|
||||
|
||||
## 端点(`pipe_name`)
|
||||
## `[server]` 分区
|
||||
|
||||
端点只有 `pipe_name` 一个配置,两个平台各一条规则:
|
||||
TCP 数据库服务 `chusql-server` 的监听参数。单独一段:别层的进程不认这一段,也不需要认。
|
||||
|
||||
| 平台 | 实际地址 |
|
||||
| ---- | -------- |
|
||||
| Windows | `\\.\pipe\<pipe_name>`(具名管道) |
|
||||
| Linux / macOS | `<socket_dir>/<pipe_name>.sock`(文件系统套接字) |
|
||||
| 键 | 命令行(`chusql-server`) | 默认 | 说明 |
|
||||
| -- | ------------------------- | ---- | ---- |
|
||||
| `host` | `--host` | `127.0.0.1` | 监听地址 |
|
||||
| `port` | `--port` | `7777` | 监听端口;写 `0` 让系统分配,实际端口打在启动横幅里 |
|
||||
| `max_message` | `--max-message` | `1048576` | 单行请求上限(字节),超了回 `too_large` |
|
||||
| `max_rows` | `--max-rows` | `1000` | 单次查询返回行数上限,超了截断并置 `truncated` |
|
||||
|
||||
`socket_dir` 按 `$XDG_RUNTIME_DIR` → `$TMPDIR` → `/tmp` 依次取。**前端和存储进程必须在同一套环境变量
|
||||
下启动**,否则两边算出来的路径不一样。Unix 套接字路径上限约 100 字节,`$XDG_RUNTIME_DIR` 太长时会退到
|
||||
`/tmp`;上一次崩溃残留的 `.sock` 会被下次启动清掉,若还有进程在听同一个端点,启动会报
|
||||
`another storage server already listens on ...`。
|
||||
这四项改完要重启 `chusql-server` 才生效(Web 设置页也把它们标成需要重启)。
|
||||
|
||||
## 口令与安全
|
||||
|
||||
|
||||
+61
-20
@@ -11,18 +11,28 @@
|
||||
| 包内安装 | 手里已有归档(离线、内网) | 解压后在包根跑 `./install.sh --component web` |
|
||||
| 源码安装 | 没有对应平台资源,或要改代码 | `./install.sh --component web --from-source` |
|
||||
|
||||
`--component web` 装 Web 管理端,`--component cli` 装命令行客户端 `csql`;两种都会带上存储进程
|
||||
`chusql-storage`,因为它是后端。
|
||||
Linux / macOS 用 `install.sh`,Windows 用 `install.ps1`;一个平台的发行包里 Web 管理端和命令行
|
||||
客户端 `csql` 都有。`--component web` / `cli` / `both` 直接指定装哪几个;不写就**逐个问**
|
||||
(英文提示,回答 `y` / `n`,直接回车取方括号里的默认值):
|
||||
|
||||
Install the command line client (csql)? [Y/n]
|
||||
Install the web front end (browser UI)? [y/N]
|
||||
|
||||
默认装 `csql`、不装 Web;可以都装、可以只装一个,也可以两个都不选(那就只装存储库
|
||||
`libchusql_core_storage.so` / `chusql_core_storage.dll` 和 `chusql-server`)。**没选的组件一个文件都不会释放**。选完再提示设置管理员的初始口令
|
||||
(`--password` / `-RootPassword` 给了就不问)。没有终端、又在跑脚本(比如 `curl | sh`)时问不了,
|
||||
那时必须显式给 `--component`。
|
||||
|
||||
## 一、发行包
|
||||
|
||||
归档由项目在打 tag 时按平台构建上传,名字是 `<component>-<os>-<arch>`,并附 `.sha256`:
|
||||
归档由项目在打 tag 时按平台构建上传,名字是 `chusql-<os>-<arch>`,并附 `.sha256`。一个归档里
|
||||
Web 和 cli 两部分都有,装哪几个由包内脚本当场问:
|
||||
|
||||
| 平台 | 资源名 |
|
||||
| ------------ | ------------------------------------------------------------------------- |
|
||||
| Linux x86_64 | `chusql-web-linux-x86_64.tar.gz`、`chusql-cli-linux-x86_64.tar.gz` |
|
||||
| Windows x86_64 | `chusql-web-windows-x86_64.zip`、`chusql-cli-windows-x86_64.zip` |
|
||||
| macOS | `chusql-web-macos-x86_64.tar.gz`、`chusql-web-macos-arm64.tar.gz`(cli 同理) |
|
||||
| 平台 | 资源名 |
|
||||
| -------------- | ---------------------------------------------------------- |
|
||||
| Linux x86_64 | `chusql-linux-x86_64.tar.gz` |
|
||||
| Windows x86_64 | `chusql-windows-x86_64.zip` |
|
||||
| macOS | `chusql-macos-x86_64.tar.gz`、`chusql-macos-arm64.tar.gz` |
|
||||
|
||||
### 在线安装
|
||||
|
||||
@@ -35,12 +45,35 @@
|
||||
|
||||
sh -s -- --component cli --repo OWNER/NAME --version v0.3.0
|
||||
|
||||
`--version` 不写就是 `latest`:脚本先问 GitHub API 要 release 列表,挑**最新的、正式版、且确实带本平台归档**
|
||||
的那个;列表里一个都不合适就不猜。预发布版(prerelease)不会自动选中——要装就显式写 tag。先看有哪些版本:
|
||||
|
||||
sh -s -- --list-versions
|
||||
|
||||
自建站点(GitHub Enterprise、镜像)用环境变量换基地址,取包和查版本都跟着走:
|
||||
|
||||
CHUSQL_GITHUB_BASE=https://git.example.com sh -s -- --component web
|
||||
|
||||
查版本用的接口未认证时限制 60 次/小时,超了会自动退回 GitHub 的 `latest` 重定向(还能装,但挑不了"最新正式版")。
|
||||
CI 里或装得频繁时给个 token,两个脚本都认(`GITHUB_TOKEN` 也可以):
|
||||
|
||||
CHUSQL_GITHUB_TOKEN=ghp_xxx sh -s -- --list-versions
|
||||
|
||||
Windows 是同一套玩法,`install.ps1` 自己下 zip、校验 sha256、解包:
|
||||
|
||||
irm https://raw.githubusercontent.com/TheBadRoger/ChuSQL/main/scripts/install.ps1 -OutFile install.ps1
|
||||
.\install.ps1 -Component web
|
||||
.\install.ps1 -ListVersions
|
||||
.\install.ps1 -Component cli -Repo OWNER/NAME -Version v0.3.0
|
||||
|
||||
在线模式只在脚本旁边没有包时才走:`bin\chusql_core_storage.dll` 在脚本旁边就是包内安装,不碰网络。
|
||||
|
||||
### 指定归档
|
||||
|
||||
不碰网络下载逻辑,直接指一个归档(本地路径、`file://` 或任意 URL):
|
||||
|
||||
./install.sh --component web --url dist/chusql-web-linux-x86_64.tar.gz
|
||||
./install.sh --component cli --url https://example.com/chusql-cli-linux-x86_64.tar.gz
|
||||
./install.sh --component web --url dist/chusql-linux-x86_64.tar.gz
|
||||
./install.sh --component cli --url https://example.com/chusql-linux-x86_64.tar.gz
|
||||
|
||||
### 包内安装
|
||||
|
||||
@@ -49,21 +82,28 @@
|
||||
./install.sh --component web --user root --password '...' # Linux / macOS
|
||||
./install.ps1 -Component web -RootUser root -RootPassword '...' # Windows
|
||||
|
||||
Windows 的 `install.ps1` **只支持包内安装**(没有在线 / 源码模式);要在线装就先手动下载归档。
|
||||
不给 `--component` 就是交互模式,脚本一个个问:
|
||||
|
||||
./install.sh
|
||||
.\install.ps1
|
||||
|
||||
Windows 的 `install.ps1` 两种模式都支持(包内 + 在线),只有源码模式没有——要改代码就在仓库里编。
|
||||
|
||||
## 二、安装选项
|
||||
|
||||
| `install.sh` | `install.ps1` | 默认 | 说明 |
|
||||
| ----------------------- | ---------------- | --------------- | ---- |
|
||||
| `--component web\|cli` | `-Component` | 必填 | 装哪个前端 |
|
||||
| `--component web\|cli\|both` | `-Component` | 逐个问(没有终端时必填) | 装哪个前端 |
|
||||
| `--interactive` | `-Interactive` | 有终端就问 | 强制从标准输入收答案(`curl \| sh`、自动化里用) |
|
||||
| `--install-dir DIR` | `-InstallDir` | Linux/macOS `$HOME/.local/share/chusql`;Windows `%LOCALAPPDATA%\ChuSQL` | 程序装到哪 |
|
||||
| `--data-dir DIR` | `-DataDir` | `<install-dir>/data` | 数据落哪 |
|
||||
| `--user NAME` | `-RootUser` | `root` | 管理员账号名 |
|
||||
| `--password PW` | `-RootPassword` | 空 | 管理员口令;留空=只允许管理员免密登录 |
|
||||
| `--keep-package` | `-KeepPackage` | 否 | 装完不删安装包 |
|
||||
| `--url URL\|PATH` | — | — | 从这个归档装 |
|
||||
| `--repo OWNER/NAME` | — | `TheBadRoger/ChuSQL` | 从哪个仓库取发行包 |
|
||||
| `--version TAG` | — | `latest` | 下载模式是 release tag,源码模式是 git ref |
|
||||
| `--url URL\|PATH` | — | — | 从这个归档装(只有 `install.sh` 有;Windows 直接解压 zip 走包内安装) |
|
||||
| `--repo OWNER/NAME` | `-Repo` | `TheBadRoger/ChuSQL` | 从哪个仓库取发行包 |
|
||||
| `--version TAG` | `-Version` | `latest` | 下载模式是 release tag(`latest`=最新的、带本平台包的正式版),源码模式是 git ref |
|
||||
| `--list-versions` | `-ListVersions` | — | 列出仓库里的发行 tag(预发布带标记),然后退出 |
|
||||
| `--from-source` | — | — | 从源码编译安装 |
|
||||
| `--source-dir DIR` | — | — | 用本地 checkout 编译,不克隆 |
|
||||
|
||||
@@ -78,13 +118,13 @@ Windows 的 `install.ps1` **只支持包内安装**(没有在线 / 源码模
|
||||
|
||||
## 四、装完是什么样
|
||||
|
||||
以 Linux、`--component web`、默认目录为例:
|
||||
以 Linux、`--component web`、默认目录为例(选了 cli 就多一份 `bin/csql` 和一个 `csql` 命令入口):
|
||||
|
||||
| 位置 | 内容 |
|
||||
| ---- | ---- |
|
||||
| `~/.local/share/chusql/bin/` | `chusql-storage`、`chusql-web` |
|
||||
| `~/.local/share/chusql/static/` | Web 前端静态资源 |
|
||||
| `~/.local/share/chusql/csql-web`、`csql-web.sh` | 启动器与命令入口(`cli` 组件则是 `csql`) |
|
||||
| `~/.local/share/chusql/bin/` | `libchusql_core_storage.so`(一定装)、`chusql-server`(一定装,TCP 数据库服务)、`chusql-web`(选了 Web 才有)、`csql`(选了 cli 才有) |
|
||||
| `~/.local/share/chusql/static/` | Web 前端静态资源(选 Web 才有) |
|
||||
| `~/.local/share/chusql/csql-web`、`csql-web.sh` | 启动器与命令入口(选 Web 才有;cli 则是 `csql`) |
|
||||
| `~/.local/share/chusql/init.sql` | 初始化脚本 |
|
||||
| `~/.local/share/chusql/logs/` | 日志 |
|
||||
| `~/.local/share/chusql/data/` | 数据目录(Windows 是 `%LOCALAPPDATA%\ChuSQL\data`;可在 `[storage] data_dir` 改) |
|
||||
@@ -93,8 +133,9 @@ Windows 的 `install.ps1` **只支持包内安装**(没有在线 / 源码模
|
||||
|
||||
装完开新终端:
|
||||
|
||||
csql-web # 起 Web 前端,默认 http://127.0.0.1:7777
|
||||
csql-web # 起 Web 前端,默认 http://127.0.0.1:7778
|
||||
csql # 进命令行
|
||||
chusql-server # 起 TCP 数据库服务,默认 127.0.0.1:7777(客户端连接方式见 commands.md)
|
||||
|
||||
口令留空时只有管理员能进。账号与权限见 [commands.md](commands.md),配置项见 [config.md](config.md)。
|
||||
|
||||
|
||||
Reference in new issue
Block a user