From f1238badbd44f50940cb12ae3e1a2314629f43af Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Sun, 15 Jan 2023 01:00:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=91=BD=E4=BB=A4=E8=A1=8C=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=A2=9E=E5=8A=A0tailchat=20docker=20init=E5=91=BD?= =?UTF-8?q?=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/cli/package.json | 1 + apps/cli/src/commands/docker.ts | 57 +++++++++++++++++++++++++++++++++ pnpm-lock.yaml | 9 ++---- 3 files changed, 61 insertions(+), 6 deletions(-) diff --git a/apps/cli/package.json b/apps/cli/package.json index 9d1512a1..595f1aca 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -35,6 +35,7 @@ "dependencies": { "@types/dockerode": "^3.3.10", "as-table": "^1.0.55", + "chalk": "4.1.2", "dockerode": "^3.3.4", "dotenv": "^16.0.0", "filesize": "^8.0.7", diff --git a/apps/cli/src/commands/docker.ts b/apps/cli/src/commands/docker.ts index d7c868c2..55452621 100644 --- a/apps/cli/src/commands/docker.ts +++ b/apps/cli/src/commands/docker.ts @@ -4,9 +4,32 @@ import asTable from 'as-table'; import filesize from 'filesize'; import ora from 'ora'; import Spinnies from 'spinnies'; +import fs from 'fs-extra'; +import got from 'got'; +import path from 'path'; +import chalk from 'chalk'; +import inquirer from 'inquirer'; // https://docs.docker.com/engine/api/v1.41/ +const initWelcome = chalk.green(`================ +恭喜你已经成功安装了, 你的配置文件已经准备就绪,距离成功就差一步了! + +你的tailchat配置文件都被存储在: ${chalk.underline( + path.join(process.cwd(), './tailchat') +)} + +运行以下命令以完成镜像下载与启动: +- ${chalk.bold('cd tailchat')} ${chalk.gray('# 移动到安装目录')} +- ${chalk.bold('tailchat docker update')} ${chalk.gray('# 下载/更新官方镜像')} +- ${chalk.bold('docker compose up')} ${chalk.gray('# 启动服务')} +================`); + +const envUrl = + 'https://ghproxy.com/https://raw.githubusercontent.com/msgbyte/tailchat/master/docker-compose.env'; +const configUrl = + 'https://ghproxy.com/https://raw.githubusercontent.com/msgbyte/tailchat/master/docker-compose.yml'; + const remoteImageName = 'moonrailgun/tailchat:latest'; const targetImage = { repo: 'tailchat', @@ -19,6 +42,40 @@ export const dockerCommand: CommandModule = { describe: 'Tailchat 镜像管理', builder: (yargs) => yargs + .command( + 'init', + '初始化Tailchat with docker配置', + (yargs) => {}, + async (args) => { + const spinner = ora(); + try { + spinner.start('开始下载最新的配置文件'); + const [rawEnv, rawConfig] = await Promise.all([ + got(envUrl).then((res) => res.body), + got(configUrl).then((res) => res.body), + ]); + spinner.info('配置文件下载完毕'); + + // TODO: 需要实现交互式初始化,引导用户配置SECRET,API_URL, SMTP 服务 + + spinner.info('正在创建目录 tailchat ...'); + await fs.mkdir('./tailchat'); + + spinner.info('正在写入配置文件 ...'); + + await Promise.all([ + fs.writeFile('./tailchat/docker-compose.env', rawEnv), + fs.writeFile('./tailchat/docker-compose.yml', rawConfig), + ]); + + spinner.succeed('配置初始化完毕'); + console.log(initWelcome); + } catch (err) { + spinner.fail('Tailchat with docker 初始化出现意外'); + console.error(err); + } + } + ) .command( 'doctor', 'docker环境检查', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d5d7d908..f371972f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,6 +69,7 @@ importers: '@types/spinnies': ^0.5.0 '@types/yargs': ^17.0.10 as-table: ^1.0.55 + chalk: 4.1.2 cross-env: ^7.0.3 dockerode: ^3.3.4 dotenv: ^16.0.0 @@ -97,6 +98,7 @@ importers: dependencies: '@types/dockerode': 3.3.10 as-table: 1.0.55 + chalk: 4.1.2 dockerode: 3.3.4 dotenv: 16.0.2 filesize: 8.0.7 @@ -14508,11 +14510,6 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chalk/5.0.1: - resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: false - /chalk/5.1.2: resolution: {integrity: sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} @@ -26684,7 +26681,7 @@ packages: hasBin: true dependencies: '@types/liftoff': 4.0.0 - chalk: 5.0.1 + chalk: 5.1.2 interpret: 2.2.0 liftoff: 4.0.0 minimist: 1.2.6