123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- #!/usr/bin/env node
- /**
- * 系统初始化和配置脚本
- */
- const fs = require('fs').promises;
- const path = require('path');
- const logger = require('../logger');
- // 颜色输出
- const chalk = require('chalk');
- async function initializeSystem() {
- console.log(chalk.blue('🚀 正在初始化 HubCmdUI 系统...\n'));
- try {
- // 1. 检查并创建必要目录
- console.log(chalk.yellow('📁 创建必要目录...'));
- await createDirectories();
- // 2. 检查数据库是否已初始化
- const database = require('../database/database');
- try {
- await database.connect();
- const isInitialized = await database.isInitialized();
-
- if (isInitialized) {
- console.log(chalk.green(' ✓ 数据库已初始化,跳过初始化步骤'));
- console.log(chalk.green('\n✅ 系统检查完成!'));
- console.log(chalk.cyan('💡 使用 npm start 启动服务'));
- console.log(chalk.cyan('🌐 默认访问地址: http://localhost:3000'));
- return;
- }
- } catch (error) {
- // 数据库连接失败,继续初始化流程
- }
- // 3. 检查配置文件
- console.log(chalk.yellow('⚙️ 检查配置文件...'));
- await checkConfigFiles();
- // 4. 询问用户是否要启用SQLite
- const useDatabase = await askUserChoice();
- if (useDatabase) {
- // 5. 迁移数据到SQLite
- console.log(chalk.yellow('📊 初始化SQLite数据库...'));
- await initializeSQLite();
- // 6. 设置环境变量
- console.log(chalk.yellow('🔧 配置数据库模式...'));
- await setDatabaseMode(true);
- } else {
- console.log(chalk.yellow('📁 使用文件存储模式...'));
- await setDatabaseMode(false);
- }
- // 7. 创建默认用户
- console.log(chalk.yellow('👤 创建默认用户...'));
- await createDefaultUser();
- // 8. 配置HTTP代理
- console.log(chalk.yellow('🌐 配置HTTP代理服务...'));
- await configureHttpProxy();
- console.log(chalk.green('\n✅ 系统初始化完成!'));
- console.log(chalk.cyan('💡 使用 npm start 启动服务'));
- console.log(chalk.cyan('🌐 默认访问地址: http://localhost:3000'));
- console.log(chalk.cyan('👤 默认用户: root / admin@123'));
- } catch (error) {
- console.error(chalk.red('❌ 初始化失败:'), error.message);
- process.exit(1);
- }
- }
- /**
- * 创建必要目录
- */
- async function createDirectories() {
- const dirs = [
- 'data', // 数据库文件目录
- 'documentation', // 文档目录(静态文件)
- 'logs', // 日志目录
- 'temp' // 临时文件目录
- ];
- for (const dir of dirs) {
- const dirPath = path.join(__dirname, '..', dir);
- try {
- await fs.mkdir(dirPath, { recursive: true });
- } catch (error) {
- if (error.code !== 'EEXIST') {
- throw error;
- }
- }
- }
- console.log(chalk.green(' ✓ 目录创建完成'));
- }
- /**
- * 检查配置文件 - 简化版,不再创建config.json
- */
- async function checkConfigFiles() {
- console.log(chalk.green(' ✓ 使用SQLite数据库存储配置'));
- }
- /**
- * 询问用户选择
- */
- async function askUserChoice() {
- // 简化处理,默认使用SQLite
- const useDatabase = process.env.USE_SQLITE !== 'false';
-
- if (useDatabase) {
- console.log(chalk.green(' ✓ 将使用SQLite数据库存储'));
- } else {
- console.log(chalk.yellow(' ⚠ 将使用文件存储模式'));
- }
-
- return useDatabase;
- }
- /**
- * 初始化SQLite数据库
- */
- async function initializeSQLite() {
- try {
- const database = require('../database/database');
- await database.connect();
- await database.createTables();
-
- // 初始化数据库(创建默认数据)
- await database.createDefaultAdmin();
- await database.createDefaultDocuments();
- await database.createDefaultMenuItems();
-
- // 初始化默认配置
- const configServiceDB = require('../services/configServiceDB');
- await configServiceDB.initializeDefaultConfig();
-
- // 标记数据库已初始化
- await database.markAsInitialized();
-
- console.log(chalk.green(' ✓ SQLite数据库初始化完成'));
- } catch (error) {
- console.log(chalk.red(' ❌ SQLite初始化失败:'), error.message);
- throw error;
- }
- }
- /**
- * 设置数据库模式
- */
- async function setDatabaseMode(useDatabase) {
- const envPath = path.join(__dirname, '../.env');
- const envContent = `# 数据库配置
- USE_DATABASE=${useDatabase}
- AUTO_MIGRATE=true
- # HTTP代理配置
- PROXY_PORT=8080
- PROXY_HOST=0.0.0.0
- `;
- await fs.writeFile(envPath, envContent);
- console.log(chalk.green(` ✓ 数据库模式已设置为: ${useDatabase ? 'SQLite' : '文件存储'}`));
- }
- /**
- * 创建默认用户 - 简化版,数据库已处理
- */
- async function createDefaultUser() {
- console.log(chalk.green(' ✓ 默认管理员用户由数据库处理 (root/admin@123)'));
- }
- /**
- * 配置HTTP代理服务信息
- */
- async function configureHttpProxy() {
- try {
- console.log(chalk.green(' ✓ HTTP代理服务需要通过环境变量配置'));
- console.log(chalk.cyan(' 配置方式: 设置 PROXY_PORT 和 PROXY_HOST 环境变量'));
- console.log(chalk.cyan(' 示例: PROXY_PORT=8080 PROXY_HOST=0.0.0.0 npm start'));
- } catch (error) {
- console.log(chalk.yellow(' ⚠ HTTP代理服务配置提示显示失败'));
- }
- }
- // 如果直接运行此脚本
- if (require.main === module) {
- initializeSystem().then(() => {
- process.exit(0);
- }).catch((error) => {
- console.error(chalk.red('初始化失败:'), error);
- process.exit(1);
- });
- }
- module.exports = { initializeSystem };
|