nodebbs 0.0.5 → 0.0.7
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/README.md +38 -0
- package/dist/commands/pack/index.js +0 -1
- package/dist/commands/restart/index.js +9 -4
- package/oclif.manifest.json +33 -103
- package/package.json +2 -2
- package/dist/commands/db/generate.d.ts +0 -8
- package/dist/commands/db/generate.js +0 -18
- package/dist/commands/db/migrate.d.ts +0 -8
- package/dist/commands/db/migrate.js +0 -18
package/README.md
CHANGED
|
@@ -168,6 +168,20 @@ npx nodebbs logs:db
|
|
|
168
168
|
npx nodebbs logs:redis
|
|
169
169
|
```
|
|
170
170
|
|
|
171
|
+
### 离线部署
|
|
172
|
+
|
|
173
|
+
#### `nodebbs pack`
|
|
174
|
+
生成离线部署包(包含镜像、配置文件和安装脚本)
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
npx nodebbs pack
|
|
178
|
+
npx nodebbs pack -o my-deployment.tar.gz
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**参数**:
|
|
182
|
+
- `-o, --output` - 输出文件名 (默认: nodebbs-offline.tar.gz)
|
|
183
|
+
|
|
184
|
+
|
|
171
185
|
### Shell 访问
|
|
172
186
|
|
|
173
187
|
#### `nodebbs shell`
|
|
@@ -340,6 +354,30 @@ npx nodebbs db:seed
|
|
|
340
354
|
npx nodebbs shell:db
|
|
341
355
|
```
|
|
342
356
|
|
|
357
|
+
### 场景 6:离线服务器部署
|
|
358
|
+
|
|
359
|
+
1. **在开发机打包**:
|
|
360
|
+
```bash
|
|
361
|
+
# 生成离线包
|
|
362
|
+
npx nodebbs pack
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
2. **上传到服务器**:
|
|
366
|
+
将 `nodebbs-offline.tar.gz` 上传到目标服务器。
|
|
367
|
+
|
|
368
|
+
3. **在服务器部署**:
|
|
369
|
+
```bash
|
|
370
|
+
# 解压
|
|
371
|
+
tar -xzf nodebbs-offline.tar.gz
|
|
372
|
+
|
|
373
|
+
# 配置环境变量
|
|
374
|
+
cp .env.example .env
|
|
375
|
+
vi .env
|
|
376
|
+
|
|
377
|
+
# 一键安装启动
|
|
378
|
+
./install.sh
|
|
379
|
+
```
|
|
380
|
+
|
|
343
381
|
|
|
344
382
|
|
|
345
383
|
## ⚙️ 环境配置
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Command } from '@oclif/core';
|
|
2
2
|
import { runCompose, getComposeFiles } from '../../utils/docker.js';
|
|
3
3
|
import { logger } from '../../utils/logger.js';
|
|
4
|
-
import { EnvFlag, selectEnvironment } from '../../utils/selection.js';
|
|
4
|
+
import { EnvFlag, selectEnvironment, setStoredEnv } from '../../utils/selection.js';
|
|
5
5
|
export default class Restart extends Command {
|
|
6
|
-
static description = '重启所有服务 (
|
|
6
|
+
static description = '重启所有服务 (up --force-recreate)';
|
|
7
7
|
static flags = {
|
|
8
8
|
env: EnvFlag,
|
|
9
9
|
};
|
|
@@ -11,10 +11,15 @@ export default class Restart extends Command {
|
|
|
11
11
|
const { flags } = await this.parse(Restart);
|
|
12
12
|
// 1. 选择环境
|
|
13
13
|
const env = await selectEnvironment(flags.env);
|
|
14
|
+
await setStoredEnv(env);
|
|
14
15
|
const { files, isBuiltIn } = await getComposeFiles(env);
|
|
15
|
-
logger.info('
|
|
16
|
+
logger.info('正在重启服务 (使用现有镜像)...');
|
|
16
17
|
logger.info('环境: ' + env);
|
|
17
|
-
|
|
18
|
+
// 使用 up -d --force-recreate 可以:
|
|
19
|
+
// 1. 如果服务不存在,则创建并启动
|
|
20
|
+
// 2. 如果服务已存在,则强制重启
|
|
21
|
+
// 3. 不会执行构建 (除非镜像不存在)
|
|
22
|
+
await runCompose(files, ['up', '-d', '--force-recreate'], isBuiltIn);
|
|
18
23
|
logger.success('服务已重启');
|
|
19
24
|
}
|
|
20
25
|
}
|
package/oclif.manifest.json
CHANGED
|
@@ -91,76 +91,6 @@
|
|
|
91
91
|
"backup.js"
|
|
92
92
|
]
|
|
93
93
|
},
|
|
94
|
-
"db:generate": {
|
|
95
|
-
"aliases": [],
|
|
96
|
-
"args": {},
|
|
97
|
-
"description": "生成 Prisma Client (db:generate)",
|
|
98
|
-
"flags": {
|
|
99
|
-
"env": {
|
|
100
|
-
"char": "e",
|
|
101
|
-
"description": "部署环境 (production, lowmem, basic)",
|
|
102
|
-
"name": "env",
|
|
103
|
-
"hasDynamicHelp": false,
|
|
104
|
-
"multiple": false,
|
|
105
|
-
"options": [
|
|
106
|
-
"production",
|
|
107
|
-
"lowmem",
|
|
108
|
-
"basic"
|
|
109
|
-
],
|
|
110
|
-
"type": "option"
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
"hasDynamicHelp": false,
|
|
114
|
-
"hiddenAliases": [],
|
|
115
|
-
"id": "db:generate",
|
|
116
|
-
"pluginAlias": "nodebbs",
|
|
117
|
-
"pluginName": "nodebbs",
|
|
118
|
-
"pluginType": "core",
|
|
119
|
-
"strict": true,
|
|
120
|
-
"enableJsonFlag": false,
|
|
121
|
-
"isESM": true,
|
|
122
|
-
"relativePath": [
|
|
123
|
-
"dist",
|
|
124
|
-
"commands",
|
|
125
|
-
"db",
|
|
126
|
-
"generate.js"
|
|
127
|
-
]
|
|
128
|
-
},
|
|
129
|
-
"db:migrate": {
|
|
130
|
-
"aliases": [],
|
|
131
|
-
"args": {},
|
|
132
|
-
"description": "执行数据库迁移 (db:migrate)",
|
|
133
|
-
"flags": {
|
|
134
|
-
"env": {
|
|
135
|
-
"char": "e",
|
|
136
|
-
"description": "部署环境 (production, lowmem, basic)",
|
|
137
|
-
"name": "env",
|
|
138
|
-
"hasDynamicHelp": false,
|
|
139
|
-
"multiple": false,
|
|
140
|
-
"options": [
|
|
141
|
-
"production",
|
|
142
|
-
"lowmem",
|
|
143
|
-
"basic"
|
|
144
|
-
],
|
|
145
|
-
"type": "option"
|
|
146
|
-
}
|
|
147
|
-
},
|
|
148
|
-
"hasDynamicHelp": false,
|
|
149
|
-
"hiddenAliases": [],
|
|
150
|
-
"id": "db:migrate",
|
|
151
|
-
"pluginAlias": "nodebbs",
|
|
152
|
-
"pluginName": "nodebbs",
|
|
153
|
-
"pluginType": "core",
|
|
154
|
-
"strict": true,
|
|
155
|
-
"enableJsonFlag": false,
|
|
156
|
-
"isESM": true,
|
|
157
|
-
"relativePath": [
|
|
158
|
-
"dist",
|
|
159
|
-
"commands",
|
|
160
|
-
"db",
|
|
161
|
-
"migrate.js"
|
|
162
|
-
]
|
|
163
|
-
},
|
|
164
94
|
"db:push": {
|
|
165
95
|
"aliases": [],
|
|
166
96
|
"args": {},
|
|
@@ -266,37 +196,6 @@
|
|
|
266
196
|
"seed.js"
|
|
267
197
|
]
|
|
268
198
|
},
|
|
269
|
-
"pack": {
|
|
270
|
-
"aliases": [],
|
|
271
|
-
"args": {},
|
|
272
|
-
"description": "生成离线部署包",
|
|
273
|
-
"flags": {
|
|
274
|
-
"output": {
|
|
275
|
-
"char": "o",
|
|
276
|
-
"description": "输出文件名",
|
|
277
|
-
"name": "output",
|
|
278
|
-
"default": "nodebbs-offline.tar.gz",
|
|
279
|
-
"hasDynamicHelp": false,
|
|
280
|
-
"multiple": false,
|
|
281
|
-
"type": "option"
|
|
282
|
-
}
|
|
283
|
-
},
|
|
284
|
-
"hasDynamicHelp": false,
|
|
285
|
-
"hiddenAliases": [],
|
|
286
|
-
"id": "pack",
|
|
287
|
-
"pluginAlias": "nodebbs",
|
|
288
|
-
"pluginName": "nodebbs",
|
|
289
|
-
"pluginType": "core",
|
|
290
|
-
"strict": true,
|
|
291
|
-
"enableJsonFlag": false,
|
|
292
|
-
"isESM": true,
|
|
293
|
-
"relativePath": [
|
|
294
|
-
"dist",
|
|
295
|
-
"commands",
|
|
296
|
-
"pack",
|
|
297
|
-
"index.js"
|
|
298
|
-
]
|
|
299
|
-
},
|
|
300
199
|
"logs:api": {
|
|
301
200
|
"aliases": [],
|
|
302
201
|
"args": {},
|
|
@@ -472,6 +371,37 @@
|
|
|
472
371
|
"web.js"
|
|
473
372
|
]
|
|
474
373
|
},
|
|
374
|
+
"pack": {
|
|
375
|
+
"aliases": [],
|
|
376
|
+
"args": {},
|
|
377
|
+
"description": "生成离线部署包",
|
|
378
|
+
"flags": {
|
|
379
|
+
"output": {
|
|
380
|
+
"char": "o",
|
|
381
|
+
"description": "输出文件名",
|
|
382
|
+
"name": "output",
|
|
383
|
+
"default": "nodebbs-offline.tar.gz",
|
|
384
|
+
"hasDynamicHelp": false,
|
|
385
|
+
"multiple": false,
|
|
386
|
+
"type": "option"
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
"hasDynamicHelp": false,
|
|
390
|
+
"hiddenAliases": [],
|
|
391
|
+
"id": "pack",
|
|
392
|
+
"pluginAlias": "nodebbs",
|
|
393
|
+
"pluginName": "nodebbs",
|
|
394
|
+
"pluginType": "core",
|
|
395
|
+
"strict": true,
|
|
396
|
+
"enableJsonFlag": false,
|
|
397
|
+
"isESM": true,
|
|
398
|
+
"relativePath": [
|
|
399
|
+
"dist",
|
|
400
|
+
"commands",
|
|
401
|
+
"pack",
|
|
402
|
+
"index.js"
|
|
403
|
+
]
|
|
404
|
+
},
|
|
475
405
|
"rebuild": {
|
|
476
406
|
"aliases": [],
|
|
477
407
|
"args": {},
|
|
@@ -496,7 +426,7 @@
|
|
|
496
426
|
"restart": {
|
|
497
427
|
"aliases": [],
|
|
498
428
|
"args": {},
|
|
499
|
-
"description": "重启所有服务 (
|
|
429
|
+
"description": "重启所有服务 (up --force-recreate)",
|
|
500
430
|
"flags": {
|
|
501
431
|
"env": {
|
|
502
432
|
"char": "e",
|
|
@@ -788,5 +718,5 @@
|
|
|
788
718
|
]
|
|
789
719
|
}
|
|
790
720
|
},
|
|
791
|
-
"version": "0.0.
|
|
721
|
+
"version": "0.0.7"
|
|
792
722
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nodebbs",
|
|
3
3
|
"description": "NodeBBS 论坛系统专业运维工具",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.7",
|
|
5
5
|
"author": "wengqianshan",
|
|
6
6
|
"bin": {
|
|
7
7
|
"nodebbs": "./bin/run.js"
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"description": "数据库操作 (备份, 迁移, 种子数据等)"
|
|
66
66
|
},
|
|
67
67
|
"shell": {
|
|
68
|
-
"description": "
|
|
68
|
+
"description": "进入容器终端"
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
},
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { Command } from '@oclif/core';
|
|
2
|
-
export default class DbGenerate extends Command {
|
|
3
|
-
static description: string;
|
|
4
|
-
static flags: {
|
|
5
|
-
env: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
-
};
|
|
7
|
-
run(): Promise<void>;
|
|
8
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Command } from '@oclif/core';
|
|
2
|
-
import { execCompose, getComposeFiles } from '../../utils/docker.js';
|
|
3
|
-
import { logger } from '../../utils/logger.js';
|
|
4
|
-
import { EnvFlag, selectEnvironment } from '../../utils/selection.js';
|
|
5
|
-
export default class DbGenerate extends Command {
|
|
6
|
-
static description = '生成 Prisma Client (db:generate)';
|
|
7
|
-
static flags = {
|
|
8
|
-
env: EnvFlag,
|
|
9
|
-
};
|
|
10
|
-
async run() {
|
|
11
|
-
const { flags } = await this.parse(DbGenerate);
|
|
12
|
-
const env = await selectEnvironment(flags.env);
|
|
13
|
-
const { files, isBuiltIn } = await getComposeFiles(env);
|
|
14
|
-
logger.info('正在生成 Prisma Client...');
|
|
15
|
-
await execCompose(files, 'api', ['npm', 'run', 'db:generate'], isBuiltIn);
|
|
16
|
-
logger.success('数据库迁移文件生成完成');
|
|
17
|
-
}
|
|
18
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { Command } from '@oclif/core';
|
|
2
|
-
export default class DbMigrate extends Command {
|
|
3
|
-
static description: string;
|
|
4
|
-
static flags: {
|
|
5
|
-
env: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
-
};
|
|
7
|
-
run(): Promise<void>;
|
|
8
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Command } from '@oclif/core';
|
|
2
|
-
import { execCompose, getComposeFiles } from '../../utils/docker.js';
|
|
3
|
-
import { logger } from '../../utils/logger.js';
|
|
4
|
-
import { EnvFlag, selectEnvironment } from '../../utils/selection.js';
|
|
5
|
-
export default class DbMigrate extends Command {
|
|
6
|
-
static description = '执行数据库迁移 (db:migrate)';
|
|
7
|
-
static flags = {
|
|
8
|
-
env: EnvFlag,
|
|
9
|
-
};
|
|
10
|
-
async run() {
|
|
11
|
-
const { flags } = await this.parse(DbMigrate);
|
|
12
|
-
const env = await selectEnvironment(flags.env);
|
|
13
|
-
const { files, isBuiltIn } = await getComposeFiles(env);
|
|
14
|
-
logger.info('正在执行数据库迁移...');
|
|
15
|
-
await execCompose(files, 'api', ['npm', 'run', 'db:migrate'], isBuiltIn);
|
|
16
|
-
logger.success('数据库迁移完成');
|
|
17
|
-
}
|
|
18
|
-
}
|