@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.
- package/PUBLISHING.md +2 -0
- package/README.md +69 -47
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +98 -9
- package/dist/cli.js.map +1 -1
- package/dist/commands/config.d.ts +29 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +134 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/init.js +17 -15
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/nginx.d.ts.map +1 -1
- package/dist/commands/nginx.js +13 -11
- package/dist/commands/nginx.js.map +1 -1
- package/dist/commands/ssl-logs.d.ts.map +1 -1
- package/dist/commands/ssl-logs.js +3 -2
- package/dist/commands/ssl-logs.js.map +1 -1
- package/dist/commands/ssl.d.ts.map +1 -1
- package/dist/commands/ssl.js +22 -15
- package/dist/commands/ssl.js.map +1 -1
- package/dist/lib/config-store.d.ts +14 -0
- package/dist/lib/config-store.d.ts.map +1 -0
- package/dist/lib/config-store.js +111 -0
- package/dist/lib/config-store.js.map +1 -0
- package/dist/lib/domains.d.ts +17 -2
- package/dist/lib/domains.d.ts.map +1 -1
- package/dist/lib/domains.js +70 -6
- package/dist/lib/domains.js.map +1 -1
- package/dist/lib/logger.d.ts +6 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +19 -21
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/nginx.d.ts +2 -1
- package/dist/lib/nginx.d.ts.map +1 -1
- package/dist/lib/nginx.js +15 -42
- package/dist/lib/nginx.js.map +1 -1
- package/dist/lib/paths.d.ts +6 -0
- package/dist/lib/paths.d.ts.map +1 -1
- package/dist/lib/paths.js +14 -0
- package/dist/lib/paths.js.map +1 -1
- package/package.json +3 -2
- package/src/cli.ts +124 -13
- package/src/commands/config.ts +195 -0
- package/src/commands/init.ts +17 -17
- package/src/commands/nginx.ts +13 -13
- package/src/commands/ssl-logs.ts +3 -2
- package/src/commands/ssl.ts +27 -18
- package/src/lib/config-store.ts +146 -0
- package/src/lib/domains.ts +79 -5
- package/src/lib/logger.ts +21 -24
- package/src/lib/nginx.ts +19 -43
- 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
|
-
| `
|
|
10
|
-
| `
|
|
11
|
-
| `
|
|
12
|
-
| `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
|
-
|
|
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
|
-
|
|
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
|
-
- `
|
|
71
|
-
-
|
|
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
|
-
|
|
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>` |
|
|
97
|
-
| `--scripts-dir <path>` | 见下方
|
|
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
|
-
|
|
128
|
+
# 使用默认配置 ~/.deploy/config.yaml
|
|
129
|
+
n2-deploy init
|
|
110
130
|
|
|
111
|
-
#
|
|
112
|
-
sudo n2-deploy init --config /etc/n2/
|
|
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>` |
|
|
130
|
-
| `-o, --output <path>` | `nginx/n2.conf`
|
|
131
|
-
| `-i, --install` | —
|
|
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 --
|
|
156
|
+
# 使用默认配置,仅生成到当前目录
|
|
157
|
+
n2-deploy nginx --output ./n2.conf
|
|
138
158
|
|
|
139
159
|
# 生成并安装到系统(需在服务器上且有相应权限)
|
|
140
|
-
sudo n2-deploy nginx --config /
|
|
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>` |
|
|
158
|
-
| `--ali-key <key>` |
|
|
159
|
-
| `--ali-secret <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
|
|
195
|
+
sudo n2-deploy ssl
|
|
173
196
|
|
|
174
|
-
#
|
|
175
|
-
sudo n2-deploy ssl --config
|
|
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
|
-
-
|
|
233
|
-
- 执行:`sudo n2-deploy init
|
|
234
|
-
- 执行:`sudo n2-deploy ssl
|
|
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
|
-
- 修改
|
|
239
|
-
`sudo n2-deploy nginx --
|
|
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
|
|
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
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA
|
|
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("
|
|
18
|
-
.option("-c, --config <path>", "
|
|
19
|
-
.option("--scripts-dir <path>", "
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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":";AACA
|
|
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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"}
|