@aaricchen1991/deploy 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/PUBLISHING.md +2 -0
  2. package/README.md +69 -47
  3. package/dist/cli.d.ts +1 -0
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +98 -9
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/config.d.ts +29 -0
  8. package/dist/commands/config.d.ts.map +1 -0
  9. package/dist/commands/config.js +134 -0
  10. package/dist/commands/config.js.map +1 -0
  11. package/dist/commands/init.js +17 -15
  12. package/dist/commands/init.js.map +1 -1
  13. package/dist/commands/nginx.d.ts.map +1 -1
  14. package/dist/commands/nginx.js +13 -11
  15. package/dist/commands/nginx.js.map +1 -1
  16. package/dist/commands/ssl-logs.d.ts.map +1 -1
  17. package/dist/commands/ssl-logs.js +3 -2
  18. package/dist/commands/ssl-logs.js.map +1 -1
  19. package/dist/commands/ssl.d.ts.map +1 -1
  20. package/dist/commands/ssl.js +22 -15
  21. package/dist/commands/ssl.js.map +1 -1
  22. package/dist/lib/config-store.d.ts +14 -0
  23. package/dist/lib/config-store.d.ts.map +1 -0
  24. package/dist/lib/config-store.js +111 -0
  25. package/dist/lib/config-store.js.map +1 -0
  26. package/dist/lib/domains.d.ts +17 -2
  27. package/dist/lib/domains.d.ts.map +1 -1
  28. package/dist/lib/domains.js +70 -6
  29. package/dist/lib/domains.js.map +1 -1
  30. package/dist/lib/logger.d.ts +6 -1
  31. package/dist/lib/logger.d.ts.map +1 -1
  32. package/dist/lib/logger.js +19 -21
  33. package/dist/lib/logger.js.map +1 -1
  34. package/dist/lib/nginx.d.ts +2 -1
  35. package/dist/lib/nginx.d.ts.map +1 -1
  36. package/dist/lib/nginx.js +15 -42
  37. package/dist/lib/nginx.js.map +1 -1
  38. package/dist/lib/paths.d.ts +6 -0
  39. package/dist/lib/paths.d.ts.map +1 -1
  40. package/dist/lib/paths.js +14 -0
  41. package/dist/lib/paths.js.map +1 -1
  42. package/package.json +3 -2
  43. package/src/cli.ts +124 -13
  44. package/src/commands/config.ts +195 -0
  45. package/src/commands/init.ts +17 -17
  46. package/src/commands/nginx.ts +13 -13
  47. package/src/commands/ssl-logs.ts +3 -2
  48. package/src/commands/ssl.ts +27 -18
  49. package/src/lib/config-store.ts +146 -0
  50. package/src/lib/domains.ts +79 -5
  51. package/src/lib/logger.ts +21 -24
  52. package/src/lib/nginx.ts +19 -43
  53. package/src/lib/paths.ts +19 -0
package/PUBLISHING.md CHANGED
@@ -11,9 +11,11 @@
11
11
  - 包名为 `@aaricchen1991/deploy`,使用 npm 用户名(或组织)`aaricchen1991` 作为 scope。个人包无需创建 Organization,使用当前登录账号即可发布到 `@aaricchen1991`。
12
12
 
13
13
  3. **登录 npm**
14
+
14
15
  ```bash
15
16
  npm login
16
17
  ```
18
+
17
19
  按提示输入用户名、密码与邮箱/OTP。
18
20
 
19
21
  4. **双因素认证(2FA)或 Granular Access Token**
package/README.md CHANGED
@@ -4,12 +4,13 @@
4
4
 
5
5
  ## 功能概览
6
6
 
7
- | 命令 | 说明 |
8
- | ---------- | ------------------------------------------------------------------------------------ |
9
- | `init` | 服务器初始化(幂等):安装 Nginx、创建目录、安装 `deploy.sh`、占位证书。可重复执行。 |
10
- | `nginx` | 根据域名配置文件生成 Nginx 配置;可选安装到系统并 reload。 |
11
- | `ssl` | 为配置中的全部域名申请/续期 SSL 证书(acme.sh + 阿里云 DNS),并写入统一日志。 |
12
- | `ssl-logs` | 查看 SSL 操作日志(创建、续期、成功、失败),支持行数、跟随、按动作/结果过滤。 |
7
+ | 命令 / 子命令 | 说明 |
8
+ | -------------- | ------------------------------------------------------------------------------------ |
9
+ | `config` | 配置管理:初始化、查看、设置、删除配置项(见下方「配置管理」)。 |
10
+ | `init` | 服务器初始化(幂等):安装 Nginx、创建目录、安装 `deploy.sh`、占位证书。可重复执行。 |
11
+ | `nginx` | 根据域名配置文件生成 Nginx 配置;可选安装到系统并 reload。 |
12
+ | `ssl` | 为配置中的全部域名申请/续期 SSL 证书(acme.sh + 阿里云 DNS),并写入统一日志。 |
13
+ | `ssl-logs` | 查看 SSL 操作日志(创建、续期、成功、失败),支持行数、跟随、按动作/结果过滤。 |
13
14
 
14
15
  ## 安装
15
16
 
@@ -22,7 +23,7 @@ pnpm install
22
23
  pnpm --filter @aaricchen1991/deploy build
23
24
  ```
24
25
 
25
- 执行时需在**仓库根目录**或通过 `--config` 指定域名配置路径:
26
+ 执行时默认从 **~/.deploy/config.yaml** 读取配置(含阿里云凭证与域名),也可通过 `-c, --config` 指定路径:
26
27
 
27
28
  ```bash
28
29
  node apps/deploy/dist/cli.js <command> [options]
@@ -44,15 +45,19 @@ npx @aaricchen1991/deploy --help
44
45
 
45
46
  如何将本包发布到 npm,见 [PUBLISHING.md](./PUBLISHING.md)。
46
47
 
47
- ## 域名配置文件
48
+ ## 配置文件
48
49
 
49
- 域名与端口以 **domains.yaml** 为唯一数据源,格式与仓库内 `scripts/deploy/domains.yaml` 一致:
50
+ 所有命令默认从 **~/.deploy/config.yaml** 读取配置。该文件可包含阿里云凭证(用于 `ssl` 命令)与域名配置,格式与仓库内 `scripts/deploy/domains.yaml` 兼容。**后端与前端同域**:各应用域名下 `/api` 由 Nginx 反向代理到后端,不再为 API 单独配置域名与 SSL。
51
+
52
+ **示例 ~/.deploy/config.yaml:**
50
53
 
51
54
  ```yaml
55
+ # 可选:阿里云 Access Key(用于 ssl 命令申请/续期证书)
56
+ aliyun_access_key_id: "your_key"
57
+ aliyun_access_key_secret: "your_secret"
58
+
52
59
  api:
53
60
  backend_port: 3000
54
- domains:
55
- - n2-api.example.com
56
61
 
57
62
  admin:
58
63
  domains:
@@ -67,10 +72,25 @@ client:
67
72
  - n2-client.example.com
68
73
  ```
69
74
 
70
- - `api.backend_port`:API 后端端口(Nginx 反向代理目标)。
71
- - 各应用的 `domains`:该应用对外提供服务的域名列表。
75
+ - `aliyun_access_key_id` / `aliyun_access_key_secret`:可选;未设置时 `ssl` 命令会使用环境变量或 `--ali-key` / `--ali-secret`。
76
+ - `api.backend_port`:API 后端端口(各应用域名下 `location /api` 的代理目标)。
77
+ - 各应用的 `domains`:该应用对外提供服务的域名列表;**仅这些域名会申请 SSL 证书**。
78
+ - 生产环境前端默认请求**同域 `/api`**(如 `n2-admin.example.com/api`),与 Nginx 的 `location /api` 一致,无需额外配置;可经 `VITE_API_BASE_URL` 覆盖。
79
+
80
+ 默认路径为 `~/.deploy/config.yaml`,可通过 `-c, --config <path>` 指定其它路径(支持 `~` 展开为用户目录)。
72
81
 
73
- 默认读取当前工作目录下的 `domains.yaml`,可通过 `-c, --config <path>` 指定路径。
82
+ ### 配置管理(config
83
+
84
+ | 子命令 | 说明 |
85
+ | -------- | ---- |
86
+ | `config init` | 初始化配置文件(创建默认模板)。`-f, --force` 覆盖已存在文件。 |
87
+ | `config list` | 列出所有配置项。 |
88
+ | `config get [key]` | 查看单个配置项;不传 `key` 则列出全部。 |
89
+ | `config set <key> [values...]` | 设置配置项。`domains` 类可传多个值,如:`config set admin.domains a.com b.com`。 |
90
+ | `config delete <key>` | 删除/清空配置项(domains 清空列表,密钥置空)。 |
91
+
92
+ 支持的配置项 key:`aliyun_access_key_id`、`aliyun_access_key_secret`、`api.backend_port`、`api.domains`、`admin.domains`、`tenant.domains`、`client.domains`。
93
+ 使用自定义配置文件时可在父命令或子命令上指定 `-c`,例如:`n2-deploy config -c ./config.yaml init` 或 `n2-deploy config init -c ./config.yaml`。
74
94
 
75
95
  ---
76
96
 
@@ -91,10 +111,10 @@ client:
91
111
  n2-deploy init [options]
92
112
  ```
93
113
 
94
- | 选项 | 默认值 | 说明 |
95
- | ---------------------- | -------------- | ----------------------------------------------------------- |
96
- | `-c, --config <path>` | `domains.yaml` | 域名配置文件路径 |
97
- | `--scripts-dir <path>` | 见下方 | 部署脚本目录(含 deploy.sh、server-setup.sh、ssl/_、lib/_) |
114
+ | 选项 | 默认值 | 说明 |
115
+ | ---------------------- | ----------------------- | ----------------------------------------------------------- |
116
+ | `-c, --config <path>` | `~/.deploy/config.yaml` | 部署配置文件路径(含域名与可选阿里云凭证) |
117
+ | `--scripts-dir <path>` | 见下方 | 部署脚本目录(含 deploy.sh、server-setup.sh、ssl/_、lib/_) |
98
118
 
99
119
  **脚本目录解析顺序:**
100
120
 
@@ -105,11 +125,11 @@ n2-deploy init [options]
105
125
  **示例:**
106
126
 
107
127
  ```bash
108
- # 在仓库根目录执行
109
- node apps/deploy/dist/cli.js init --config scripts/deploy/domains.yaml
128
+ # 使用默认配置 ~/.deploy/config.yaml
129
+ n2-deploy init
110
130
 
111
- # 指定脚本目录(例如在服务器上单独拷贝了脚本)
112
- sudo n2-deploy init --config /etc/n2/domains.yaml --scripts-dir /opt/n2-scripts
131
+ # 指定配置文件与脚本目录(例如在服务器上单独拷贝了脚本)
132
+ sudo n2-deploy init --config /etc/n2/config.yaml --scripts-dir /opt/n2-scripts
113
133
  ```
114
134
 
115
135
  ---
@@ -124,20 +144,20 @@ sudo n2-deploy init --config /etc/n2/domains.yaml --scripts-dir /opt/n2-scripts
124
144
  n2-deploy nginx [options]
125
145
  ```
126
146
 
127
- | 选项 | 默认值 | 说明 |
128
- | --------------------- | --------------- | ------------------------------------------------------------------ |
129
- | `-c, --config <path>` | `domains.yaml` | 域名配置文件路径 |
130
- | `-o, --output <path>` | `nginx/n2.conf` | 生成的配置文件输出路径 |
131
- | `-i, --install` | — | 安装到系统 Nginx 目录并执行 `nginx -t` 与 `systemctl reload nginx` |
147
+ | 选项 | 默认值 | 说明 |
148
+ | --------------------- | ----------------------- | ------------------------------------------------------------------ |
149
+ | `-c, --config <path>` | `~/.deploy/config.yaml` | 部署配置文件路径 |
150
+ | `-o, --output <path>` | `nginx/n2.conf` | 生成的配置文件输出路径 |
151
+ | `-i, --install` | — | 安装到系统 Nginx 目录并执行 `nginx -t` 与 `systemctl reload nginx` |
132
152
 
133
153
  **示例:**
134
154
 
135
155
  ```bash
136
- # 仅生成到当前目录
137
- n2-deploy nginx --config scripts/deploy/domains.yaml --output ./n2.conf
156
+ # 使用默认配置,仅生成到当前目录
157
+ n2-deploy nginx --output ./n2.conf
138
158
 
139
159
  # 生成并安装到系统(需在服务器上且有相应权限)
140
- sudo n2-deploy nginx --config /etc/n2/domains.yaml --install
160
+ sudo n2-deploy nginx --config ~/.deploy/config.yaml --install
141
161
  ```
142
162
 
143
163
  ---
@@ -154,26 +174,28 @@ n2-deploy ssl [options]
154
174
 
155
175
  | 选项 | 默认值 | 说明 |
156
176
  | ----------------------- | -------------------------- | ------------------------ |
157
- | `-c, --config <path>` | `domains.yaml` | 域名配置文件路径 |
158
- | `--ali-key <key>` | 环境变量 | 阿里云 Access Key ID |
159
- | `--ali-secret <secret>` | 环境变量 | 阿里云 Access Key Secret |
177
+ | `-c, --config <path>` | `~/.deploy/config.yaml` | 部署配置文件路径 |
178
+ | `--ali-key <key>` | 见下方 | 阿里云 Access Key ID |
179
+ | `--ali-secret <secret>` | 见下方 | 阿里云 Access Key Secret |
160
180
  | `--log-file <path>` | `/opt/deploy/logs/ssl.log` | SSL 日志文件路径 |
161
181
  | `--scripts-dir <path>` | 同 init | 部署脚本目录 |
162
182
 
163
183
  **凭证来源(按优先级):**
164
- `--ali-key` / `--ali-secret` → 环境变量 `ALIYUN_ACCESS_KEY_ID` / `ALIYUN_ACCESS_KEY_SECRET` → 环境变量 `Ali_Key` / `Ali_Secret`。
184
+ `--ali-key` / `--ali-secret` → 配置文件中的 `aliyun_access_key_id` / `aliyun_access_key_secret` → 环境变量 `ALIYUN_ACCESS_KEY_ID` / `ALIYUN_ACCESS_KEY_SECRET` → 环境变量 `Ali_Key` / `Ali_Secret`。
165
185
 
166
186
  **示例:**
167
187
 
168
188
  ```bash
169
- # 使用环境变量
189
+ # 使用默认 ~/.deploy/config.yaml(其中可配置 aliyun_access_key_id / aliyun_access_key_secret)
190
+ sudo n2-deploy ssl
191
+
192
+ # 使用环境变量覆盖
170
193
  export ALIYUN_ACCESS_KEY_ID="your_key"
171
194
  export ALIYUN_ACCESS_KEY_SECRET="your_secret"
172
- sudo n2-deploy ssl --config /etc/n2/domains.yaml
195
+ sudo n2-deploy ssl
173
196
 
174
- # 使用命令行参数(注意 shell 历史中可能暴露密钥)
175
- sudo n2-deploy ssl --config scripts/deploy/domains.yaml \
176
- --ali-key "your_key" --ali-secret "your_secret"
197
+ # 指定配置文件
198
+ sudo n2-deploy ssl --config /etc/n2/config.yaml
177
199
  ```
178
200
 
179
201
  **说明:**
@@ -222,26 +244,26 @@ n2-deploy ssl-logs --follow
222
244
  | 变量 | 说明 |
223
245
  | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
224
246
  | `N2_DEPLOY_SCRIPTS_DIR` | 部署脚本根目录(含 deploy.sh、server-setup.sh、ssl/、lib/)。未设置时使用 `cwd/scripts/deploy` 或包内 assets。 |
225
- | `ALIYUN_ACCESS_KEY_ID` / `Ali_Key` | 阿里云 Access Key ID(ssl 命令)。 |
226
- | `ALIYUN_ACCESS_KEY_SECRET` / `Ali_Secret` | 阿里云 Access Key Secret(ssl 命令)。 |
247
+ | `ALIYUN_ACCESS_KEY_ID` / `Ali_Key` | 阿里云 Access Key ID(ssl 命令);也可写在 ~/.deploy/config.yaml 的 `aliyun_access_key_id`)。 |
248
+ | `ALIYUN_ACCESS_KEY_SECRET` / `Ali_Secret` | 阿里云 Access Key Secret(ssl 命令);也可写在 ~/.deploy/config.yaml 的 `aliyun_access_key_secret`)。 |
227
249
 
228
250
  ## 典型流程
229
251
 
230
252
  1. **首次部署服务器**
231
253
  - 将本仓库或 `scripts/deploy` 拷贝到服务器(或设置 `N2_DEPLOY_SCRIPTS_DIR`)。
232
- - 准备 `domains.yaml`(可放在 `/etc/n2/domains.yaml`)。
233
- - 执行:`sudo n2-deploy init --config /etc/n2/domains.yaml`。
234
- - 执行:`sudo n2-deploy ssl --config /etc/n2/domains.yaml` 并配置阿里云凭证。
254
+ - 在服务器或本机创建 `~/.deploy/config.yaml`,填入域名与(可选)阿里云 `aliyun_access_key_id` / `aliyun_access_key_secret`。
255
+ - 执行:`sudo n2-deploy init`(默认读取 ~/.deploy/config.yaml)。
256
+ - 执行:`sudo n2-deploy ssl` 申请证书(凭证可从配置文件或环境变量读取)。
235
257
  - 之后由 CI 通过 SSH 执行 `/opt/deploy/deploy.sh` 完成应用部署。
236
258
 
237
259
  2. **仅更新 Nginx 配置(如新增域名)**
238
- - 修改 `domains.yaml` 后执行:
239
- `sudo n2-deploy nginx --config /etc/n2/domains.yaml --install`
260
+ - 修改 `~/.deploy/config.yaml` 后执行:
261
+ `sudo n2-deploy nginx --install`
240
262
  - 若新增了域名,再执行一次 `n2-deploy ssl` 为新域名申请证书。
241
263
 
242
264
  3. **定期续期证书**
243
265
  - 使用 cron:例如每月执行一次
244
- `0 3 1 * * /usr/bin/n2-deploy ssl --config /etc/n2/domains.yaml`
266
+ `0 3 1 * * /usr/bin/n2-deploy ssl`
245
267
  - 或使用 systemd timer 调用同一命令。
246
268
 
247
269
  4. **排查 SSL 问题**
package/dist/cli.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * n2-deploy CLI: server init, nginx config, SSL management.
4
+ * Config: default ~/.deploy/config.yaml (ALIYUN keys + domains).
4
5
  */
5
6
  export {};
6
7
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;GAEG"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG"}
package/dist/cli.js CHANGED
@@ -1,35 +1,124 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * n2-deploy CLI: server init, nginx config, SSL management.
4
+ * Config: default ~/.deploy/config.yaml (ALIYUN keys + domains).
4
5
  */
5
6
  import { Command } from "commander";
7
+ import consola from "consola";
8
+ import { runConfigDelete, runConfigGet, runConfigInit, runConfigList, runConfigSet } from "./commands/config.js";
6
9
  import { runInit } from "./commands/init.js";
7
10
  import { runNginx } from "./commands/nginx.js";
8
11
  import { runSslLogs } from "./commands/ssl-logs.js";
9
12
  import { runSsl } from "./commands/ssl.js";
13
+ import { getDefaultConfigPath } from "./lib/paths.js";
14
+ const defaultConfig = getDefaultConfigPath();
10
15
  const program = new Command();
11
16
  program
12
17
  .name("n2-deploy")
13
18
  .description("Server init, nginx config generation, and SSL certificate management")
14
19
  .version("0.1.0");
20
+ const configCmd = program
21
+ .command("config")
22
+ .description("配置管理:初始化、查看、设置、删除配置项")
23
+ .option("-c, --config <path>", "配置文件路径(默认 ~/.deploy/config.yaml)", defaultConfig);
24
+ function configPathFromCmd(cmd) {
25
+ const selfOpts = cmd.opts?.() ?? {};
26
+ const parentOpts = cmd.parent?.opts?.() ?? {};
27
+ return selfOpts.config ?? parentOpts.config ?? defaultConfig;
28
+ }
29
+ configCmd
30
+ .command("init")
31
+ .description("初始化配置文件(创建 ~/.deploy/config.yaml 默认模板)")
32
+ .option("-c, --config <path>", "配置文件路径", defaultConfig)
33
+ .option("-f, --force", "已存在时覆盖")
34
+ .action(async (opts, cmd) => {
35
+ const configPath = opts.config ?? configPathFromCmd(cmd);
36
+ try {
37
+ await runConfigInit({ config: configPath, force: opts.force });
38
+ }
39
+ catch (e) {
40
+ consola.error(e);
41
+ process.exit(1);
42
+ }
43
+ });
44
+ configCmd
45
+ .command("list")
46
+ .description("列出所有配置项")
47
+ .option("-c, --config <path>", "配置文件路径", defaultConfig)
48
+ .action(async (opts, cmd) => {
49
+ const configPath = opts?.config ?? configPathFromCmd(cmd);
50
+ try {
51
+ await runConfigList({ config: configPath });
52
+ }
53
+ catch (e) {
54
+ consola.error(e);
55
+ process.exit(1);
56
+ }
57
+ });
58
+ configCmd
59
+ .command("get [key]")
60
+ .description("查看配置项(不传 key 则列出全部)。key: aliyun_access_key_id, api.backend_port, admin.domains 等")
61
+ .option("-c, --config <path>", "配置文件路径", defaultConfig)
62
+ .action(async (key, opts, cmd) => {
63
+ const configPath = opts?.config ?? configPathFromCmd(cmd);
64
+ try {
65
+ await runConfigGet({ config: configPath, key });
66
+ }
67
+ catch (e) {
68
+ consola.error(e);
69
+ process.exit(1);
70
+ }
71
+ });
72
+ configCmd
73
+ .command("set <key> [values...]")
74
+ .description("设置配置项。domains 类可传多个值,如: config set admin.domains a.com b.com")
75
+ .option("-c, --config <path>", "配置文件路径", defaultConfig)
76
+ .action(async (key, values, opts, cmd) => {
77
+ const configPath = opts?.config ?? configPathFromCmd(cmd);
78
+ try {
79
+ await runConfigSet({
80
+ config: configPath,
81
+ key,
82
+ values: Array.isArray(values) ? values : values ? [values] : [],
83
+ });
84
+ }
85
+ catch (e) {
86
+ consola.error(e);
87
+ process.exit(1);
88
+ }
89
+ });
90
+ configCmd
91
+ .command("delete <key>")
92
+ .description("删除/清空配置项(domains 清空列表,密钥置空)")
93
+ .option("-c, --config <path>", "配置文件路径", defaultConfig)
94
+ .action(async (key, opts, cmd) => {
95
+ const configPath = opts?.config ?? configPathFromCmd(cmd);
96
+ try {
97
+ await runConfigDelete({ config: configPath, key });
98
+ }
99
+ catch (e) {
100
+ consola.error(e);
101
+ process.exit(1);
102
+ }
103
+ });
15
104
  program
16
105
  .command("init")
17
- .description("Initialize server (idempotent): nginx, dirs, deploy.sh, placeholder certs")
18
- .option("-c, --config <path>", "Path to domains.yaml", "domains.yaml")
19
- .option("--scripts-dir <path>", "Path to deploy scripts (default: cwd/scripts/deploy or N2_DEPLOY_SCRIPTS_DIR)")
106
+ .description("初始化服务器(幂等):nginx、目录、deploy.sh、占位证书")
107
+ .option("-c, --config <path>", "配置文件路径(默认 ~/.deploy/config.yaml", defaultConfig)
108
+ .option("--scripts-dir <path>", "部署脚本目录(默认 cwd/scripts/deploy N2_DEPLOY_SCRIPTS_DIR")
20
109
  .action(async (opts) => {
21
110
  try {
22
111
  await runInit({ config: opts.config, scriptsDir: opts.scriptsDir });
23
112
  }
24
113
  catch (e) {
25
- console.error(e);
114
+ consola.error(e);
26
115
  process.exit(1);
27
116
  }
28
117
  });
29
118
  program
30
119
  .command("nginx")
31
120
  .description("Generate nginx config from domains config; optionally install and reload")
32
- .option("-c, --config <path>", "Path to domains.yaml", "domains.yaml")
121
+ .option("-c, --config <path>", "Path to deploy config (default: ~/.deploy/config.yaml)", defaultConfig)
33
122
  .option("-o, --output <path>", "Output path for nginx config", "nginx/n2.conf")
34
123
  .option("-i, --install", "Install to system nginx dir and reload")
35
124
  .action(async (opts) => {
@@ -41,14 +130,14 @@ program
41
130
  });
42
131
  }
43
132
  catch (e) {
44
- console.error(e);
133
+ consola.error(e);
45
134
  process.exit(1);
46
135
  }
47
136
  });
48
137
  program
49
138
  .command("ssl")
50
139
  .description("Setup/renew SSL certificates for all domains (acme.sh + Aliyun DNS)")
51
- .option("-c, --config <path>", "Path to domains.yaml", "domains.yaml")
140
+ .option("-c, --config <path>", "Path to deploy config (default: ~/.deploy/config.yaml)", defaultConfig)
52
141
  .option("--ali-key <key>", "Aliyun Access Key ID (or set ALIYUN_ACCESS_KEY_ID)")
53
142
  .option("--ali-secret <secret>", "Aliyun Access Key Secret (or set ALIYUN_ACCESS_KEY_SECRET)")
54
143
  .option("--log-file <path>", "SSL log file path", "/opt/deploy/logs/ssl.log")
@@ -64,7 +153,7 @@ program
64
153
  });
65
154
  }
66
155
  catch (e) {
67
- console.error(e);
156
+ consola.error(e);
68
157
  process.exit(1);
69
158
  }
70
159
  });
@@ -87,7 +176,7 @@ program
87
176
  });
88
177
  }
89
178
  catch (e) {
90
- console.error(e);
179
+ consola.error(e);
91
180
  process.exit(1);
92
181
  }
93
182
  });
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Config management: init, get, set, delete, list.
3
+ */
4
+ export interface ConfigInitOptions {
5
+ config?: string;
6
+ force?: boolean;
7
+ }
8
+ export declare function runConfigInit(opts: ConfigInitOptions): Promise<void>;
9
+ export interface ConfigGetOptions {
10
+ config: string;
11
+ key?: string;
12
+ }
13
+ export declare function runConfigGet(opts: ConfigGetOptions): Promise<void>;
14
+ export interface ConfigSetOptions {
15
+ config: string;
16
+ key: string;
17
+ values: string[];
18
+ }
19
+ export declare function runConfigSet(opts: ConfigSetOptions): Promise<void>;
20
+ export interface ConfigDeleteOptions {
21
+ config: string;
22
+ key: string;
23
+ }
24
+ export declare function runConfigDelete(opts: ConfigDeleteOptions): Promise<void>;
25
+ export interface ConfigListOptions {
26
+ config: string;
27
+ }
28
+ export declare function runConfigList(opts: ConfigListOptions): Promise<void>;
29
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmCH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAe1E;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDxE;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCxE;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB9E;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Config management: init, get, set, delete, list.
3
+ */
4
+ import fs from "node:fs";
5
+ import path from "node:path";
6
+ import consola from "consola";
7
+ import { getConfigValue, isValidConfigKey, loadConfig, saveConfig, setConfigValue, deleteConfigValue, } from "../lib/config-store.js";
8
+ import { getDefaultConfigPath, resolveConfigPath } from "../lib/paths.js";
9
+ const DEFAULT_TEMPLATE = `# n2-deploy 配置 (~/.deploy/config.yaml)
10
+ # 阿里云 DNS API(用于 ACME 申请证书)
11
+ # aliyun_access_key_id: "your-key"
12
+ # aliyun_access_key_secret: "your-secret"
13
+
14
+ api:
15
+ backend_port: 3000
16
+ domains: []
17
+
18
+ admin:
19
+ domains: []
20
+
21
+ tenant:
22
+ domains: []
23
+
24
+ client:
25
+ domains: []
26
+ `;
27
+ export async function runConfigInit(opts) {
28
+ const configPath = opts.config
29
+ ? resolveConfigPath(opts.config)
30
+ : getDefaultConfigPath();
31
+ const dir = path.dirname(configPath);
32
+ if (fs.existsSync(configPath) && !opts.force) {
33
+ consola.info(`配置文件已存在: ${configPath}`);
34
+ consola.info("使用 --force 可覆盖为默认模板");
35
+ return;
36
+ }
37
+ fs.mkdirSync(dir, { recursive: true });
38
+ fs.writeFileSync(configPath, DEFAULT_TEMPLATE, "utf8");
39
+ consola.success(`已初始化配置: ${configPath}`);
40
+ }
41
+ export async function runConfigGet(opts) {
42
+ const configPath = resolveConfigPath(opts.config);
43
+ if (!fs.existsSync(configPath)) {
44
+ consola.error(`配置文件不存在: ${configPath}`);
45
+ consola.info("请先执行: n2-deploy config init");
46
+ process.exit(1);
47
+ }
48
+ const data = loadConfig(configPath);
49
+ if (!opts.key) {
50
+ // List all
51
+ const lines = [];
52
+ if (data.aliyunAccessKeyId != null)
53
+ lines.push(`aliyun_access_key_id: ${data.aliyunAccessKeyId}`);
54
+ if (data.aliyunAccessKeySecret != null)
55
+ lines.push(`aliyun_access_key_secret: ***`);
56
+ lines.push(`api.backend_port: ${data.domainsConfig.api.backend_port}`);
57
+ lines.push(`api.domains: [${data.domainsConfig.api.domains.join(", ")}]`);
58
+ lines.push(`admin.domains: [${data.domainsConfig.admin.domains.join(", ")}]`);
59
+ lines.push(`tenant.domains: [${data.domainsConfig.tenant.domains.join(", ")}]`);
60
+ lines.push(`client.domains: [${data.domainsConfig.client.domains.join(", ")}]`);
61
+ consola.log(lines.join("\n"));
62
+ return;
63
+ }
64
+ if (!isValidConfigKey(opts.key)) {
65
+ consola.error(`无效的配置项: ${opts.key}。可选: aliyun_access_key_id, aliyun_access_key_secret, api.backend_port, api.domains, admin.domains, tenant.domains, client.domains`);
66
+ process.exit(1);
67
+ }
68
+ const value = getConfigValue(data, opts.key);
69
+ if (value === undefined || value === null) {
70
+ consola.log("");
71
+ return;
72
+ }
73
+ if (Array.isArray(value)) {
74
+ consola.log(value.join("\n"));
75
+ }
76
+ else {
77
+ consola.log(String(value));
78
+ }
79
+ }
80
+ export async function runConfigSet(opts) {
81
+ const configPath = resolveConfigPath(opts.config);
82
+ if (!fs.existsSync(configPath)) {
83
+ consola.error(`配置文件不存在: ${configPath}`);
84
+ consola.info("请先执行: n2-deploy config init");
85
+ process.exit(1);
86
+ }
87
+ if (!isValidConfigKey(opts.key)) {
88
+ consola.error(`无效的配置项: ${opts.key}。可选: aliyun_access_key_id, aliyun_access_key_secret, api.backend_port, api.domains, admin.domains, tenant.domains, client.domains`);
89
+ process.exit(1);
90
+ }
91
+ const data = loadConfig(configPath);
92
+ const isDomainsKey = opts.key === "api.domains" ||
93
+ opts.key === "admin.domains" ||
94
+ opts.key === "tenant.domains" ||
95
+ opts.key === "client.domains";
96
+ const isPortKey = opts.key === "api.backend_port";
97
+ let value;
98
+ if (isDomainsKey) {
99
+ value = opts.values.length > 0 ? opts.values : [];
100
+ }
101
+ else if (isPortKey) {
102
+ const n = opts.values[0] ? parseInt(opts.values[0], 10) : 3000;
103
+ if (Number.isNaN(n)) {
104
+ consola.error("api.backend_port 必须为数字");
105
+ process.exit(1);
106
+ }
107
+ value = n;
108
+ }
109
+ else {
110
+ value = opts.values[0] ?? "";
111
+ }
112
+ setConfigValue(data, opts.key, value);
113
+ saveConfig(configPath, data);
114
+ consola.success(`已设置 ${opts.key}`);
115
+ }
116
+ export async function runConfigDelete(opts) {
117
+ const configPath = resolveConfigPath(opts.config);
118
+ if (!fs.existsSync(configPath)) {
119
+ consola.error(`配置文件不存在: ${configPath}`);
120
+ process.exit(1);
121
+ }
122
+ if (!isValidConfigKey(opts.key)) {
123
+ consola.error(`无效的配置项: ${opts.key}`);
124
+ process.exit(1);
125
+ }
126
+ const data = loadConfig(configPath);
127
+ deleteConfigValue(data, opts.key);
128
+ saveConfig(configPath, data);
129
+ consola.success(`已清除 ${opts.key}`);
130
+ }
131
+ export async function runConfigList(opts) {
132
+ await runConfigGet({ config: opts.config });
133
+ }
134
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}