diff --git a/.docker/.data/.gitignore b/.docker/.data/.gitignore index c96a04f..0377233 100644 --- a/.docker/.data/.gitignore +++ b/.docker/.data/.gitignore @@ -1,2 +1,3 @@ * -!.gitignore \ No newline at end of file +!.gitignore +!redis \ No newline at end of file diff --git a/.docker/.data/redis/.gitignore b/.docker/.data/redis/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/.docker/.data/redis/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/.docker/services/redis/Dockerfile b/.docker/services/redis/Dockerfile new file mode 100644 index 0000000..8220abe --- /dev/null +++ b/.docker/services/redis/Dockerfile @@ -0,0 +1,5 @@ +FROM redis:7-alpine + +RUN mkdir -p /run/redis-socket && chmod 777 /run/redis-socket +COPY ./redis.conf /etc/redis.conf +CMD ["redis-server", "/etc/redis.conf"] diff --git a/.docker/services/redis/redis.conf b/.docker/services/redis/redis.conf new file mode 100644 index 0000000..c7115b6 --- /dev/null +++ b/.docker/services/redis/redis.conf @@ -0,0 +1,3 @@ +unixsocket /run/redis-socket/redis.sock +unixsocketperm 777 +port 0 \ No newline at end of file diff --git a/.env.example b/.env.example index a5306a8..9ce2626 100755 --- a/.env.example +++ b/.env.example @@ -45,6 +45,7 @@ MAILGUN_DOMAIN= MAILGUN_SECRET= # google cloud stoage +ENABLE_AUTO_BACKUP_AND_UPDATE=false GOOGLE_CLOUD_KEY_FILE=config/googleCloudStorageKey.json GOOGLE_CLOUD_STORAGE_BUCKET= diff --git a/README.md b/README.md new file mode 100644 index 0000000..2ff9215 --- /dev/null +++ b/README.md @@ -0,0 +1,61 @@ +# 关于Xboard +Xborad是基于V2board二次开发,在性能上和功能上都有大部分增强的**面板 + +# 免责声明 +本项目只是本人个人开发维护,本人不保证任何可用性,也不对使用本软件造成的任何后果负责。 +# 捐赠 +> 如果本项目帮助到了你,你可以对作者进行捐赠,感谢你的支持 + +TRC20: TLypStEWsVrj6Wz9mCxbXffqgt5yz3Y4XB +# Xborad 特点 +基于V2board 二次开发,增加了以下特性 +- 升级Laravel10 +- 适配Laravels (提升至10+倍并发) +- 适配Webman (比laravels快50%左右) +- 修改配置从数据库中获取 +- 支持Docker部署、分布式部署 +- 支持根据用户IP归属地来下发订阅 +- 增加Hy2支持 +- 增加sing-box下发 +- 支持直接从cloudflare获取访问者真实IP +- 支持根据客户端版本自动下发新协议 +- 支持线路筛选(订阅地址后面增加 &filter=香港|美国) +- 支持Sqlite安装(代替Mysql,自用用户福音) +- 使用Vue3 + TypeScript + NaiveUI + Unocss + Pinia重构用户前端 +- 修复大量BUG + +# **系统架构** + +- PHP8.1+ +- Composer +- MySQL5.7+ +- Redis +- Laravel + +## 性能对比 [查看详情](./docs/性能对比.md) +> xboard 无论前端还是后端性能都有巨大的提升 + +|场景 | php-fpm(传统) | php-fpm(传统开启opcache) | laravels | webman(docker)| +|---- | ---- |---- |----| ---| +|首页 | 6请求/秒 | 157请求/秒 | 477请求/秒 | 803请求/秒 | +|用户订阅 | 6请求/秒 | 196请求/秒 | 586请求/秒 | 1064请求/秒 | +|用户首页延迟| 308ms | 110ms | 101ms | 98ms | + +## 页面展示 +![示例图片](./docs/images/dashboard.png) + +## 安装 / 更新 / 回滚 +你可以点击查看下列方式的**安装、更新**步骤 +- [Docker Compose 纯命令行快速部署](./docs/docker-compose安装指南.md) +- [aapanel + Docker Compose](./docs/aapanel+docker安装指南.md) +- [aapanel 部署](./docs/) +### 从其他版本迁移 +#### 数据库迁移 +1. 先导入原的数据库。(不要走安装步骤) +2. 手动写好.env 数据库账号密码 +3. 根据你的版本查看对应的迁移指南进行迁移 +- v2board dev 23/10/27的版本 [点击跳转迁移指南](./docs/v2b_dev迁移指南.md) +- v2board 1.7.4 [点击跳转迁移指南](./docs/v2b_1.7.4迁移指南.md) +- v2board 1.7.3 [点击跳转迁移指南](./docs/v2b_1.7.3迁移指南.md) +- v2board wyx2685 [点击跳转迁移指南](./docs/v2b_wyx2685迁移指南.md) + diff --git a/app/Console/Commands/BackupDatabase.php b/app/Console/Commands/BackupDatabase.php index 36d7be5..4bb4803 100644 --- a/app/Console/Commands/BackupDatabase.php +++ b/app/Console/Commands/BackupDatabase.php @@ -7,17 +7,20 @@ use Google\Cloud\Storage\StorageClient; class BackupDatabase extends Command { - protected $signature = 'backup:upload-cloud'; + protected $signature = 'backup:database {upload?}'; protected $description = '备份数据库并上传到 Google Cloud Storage'; public function handle() { - // 判断是否存在必要配置 - $requiredConfigs = ['database.connections.mysql', 'cloud_storage.google_cloud.key_file', 'cloud_storage.google_cloud.storage_bucket']; - foreach ($requiredConfigs as $config) { - if (config($config) === null) { - $this->error("❌:缺少必要配置项: $config , 取消备份"); - return; + $isUpload = $this->argument('upload'); + // 如果是上传到云端则判断是否存在必要配置 + if($isUpload){ + $requiredConfigs = ['database.connections.mysql', 'cloud_storage.google_cloud.key_file', 'cloud_storage.google_cloud.storage_bucket']; + foreach ($requiredConfigs as $config) { + if (blank(config($config))) { + $this->error("❌:缺少必要配置项: $config , 取消备份"); + return; + } } } @@ -39,27 +42,31 @@ class BackupDatabase extends Command ->dumpToFile($databaseBackupPath); $this->info("2️⃣:Sqlite备份完成"); } - $this->info("3️⃣:开始将备份上传到Google Cloud"); - // Google Cloud Storage 配置 - $storage = new StorageClient([ - 'keyFilePath' => config('cloud_storage.google_cloud.key_file'), - ]); - $bucket = $storage->bucket(config('cloud_storage.google_cloud.storage_bucket')); - $objectName = 'backup/' . now()->format('Y-m-d_H-i-s') . '_database_backup.sql'; - // 上传文件 - $bucket->upload(fopen($databaseBackupPath, 'r'), [ - 'name' => $objectName, - ]); - - // 输出文件链接 - - \Log::channel('backup')->info("🎉:数据库备份已上传到 Google Cloud Storage: $objectName"); - $this->info("🎉:数据库备份已上传到 Google Cloud Storage: $objectName"); + if (!$isUpload){ + $this->info("🎉:数据库成功备份到:$databaseBackupPath"); + }else{ + // 传到云盘 + $this->info("3️⃣:开始将备份上传到Google Cloud"); + // Google Cloud Storage 配置 + $storage = new StorageClient([ + 'keyFilePath' => config('cloud_storage.google_cloud.key_file'), + ]); + $bucket = $storage->bucket(config('cloud_storage.google_cloud.storage_bucket')); + $objectName = 'backup/' . now()->format('Y-m-d_H-i-s') . '_database_backup.sql'; + // 上传文件 + $bucket->upload(fopen($databaseBackupPath, 'r'), [ + 'name' => $objectName, + ]); + + // 输出文件链接 + \Log::channel('backup')->info("🎉:数据库备份已上传到 Google Cloud Storage: $objectName"); + $this->info("🎉:数据库备份已上传到 Google Cloud Storage: $objectName"); + \File::delete($databaseBackupPath); + } }catch(\Exception $e){ - \Log::channel('backup')->error("😔:数据库备份失败" . $e->getMessage()); - $this->error("😔:数据库备份失败" . $e->getMessage()); + \Log::channel('backup')->error("😔:数据库备份失败 \n" . $e); + $this->error("😔:数据库备份失败\n" . $e); + \File::delete($databaseBackupPath); } - // 开始删除本地备份 - \File::delete($databaseBackupPath); } } diff --git a/app/Console/Commands/XboardInstall.php b/app/Console/Commands/XboardInstall.php index b09465d..369ba59 100644 --- a/app/Console/Commands/XboardInstall.php +++ b/app/Console/Commands/XboardInstall.php @@ -52,20 +52,21 @@ class XboardInstall extends Command if (\File::exists(base_path() . '/.env') && $this->getEnvValue('INSTALLED')) { $securePath = admin_setting('secure_path', admin_setting('frontend_admin_path', hash('crc32b', config('app.key')))); $this->info("访问 http(s)://你的站点/{$securePath} 进入管理面板,你可以在用户中心修改你的密码。"); - abort(500, '如需重新安装请清空目录下 .env 文件的内容(Docker安装方式不可以删除此文件)'); + $this->warn("如需重新安装请清空目录下 .env 文件的内容(Docker安装方式不可以删除此文件)"); + $this->warn("快捷清空.env命令: \"rm .env && touch .env\""); \Artisan::call('config:cache'); + return ; } // 选择是否使用Sqlite - $isSqlite = $this->ask('是否启用Sqlite代替Mysql(默认不启动 y/n)','n'); - if( $isSqlite == 'y' ) { + if( $this->ask('是否启用Sqlite(无需额外安装)代替Mysql(默认不启用 y/n)','n') == 'y' ) { $sqliteFile = '.docker/.data/database.sqlite'; if (!file_exists(base_path($sqliteFile))) { // 创建空文件 if (touch(base_path($sqliteFile))) { echo "sqlite创建成功: $sqliteFile"; } else { - echo "sqlite创建成功"; + echo "sqlite创建失败"; } } $envConfig = [ @@ -75,15 +76,7 @@ class XboardInstall extends Command 'DB_HOST' => '', 'DB_USERNAME' => '', 'DB_PASSWORD' => '', - 'REDIS_HOST' => $this->ask('请输入redis地址(默认: 127.0.0.1)', '127.0.0.1'), - 'REDIS_PORT'=> $this->ask('请输入redis端口(默认: 6379)', '6379'), - 'REDIS_PASSWORD' => $this->ask('请输入redis密码(默认: null)', null), - 'INSTALLED' => 'true' ]; - if (!copy(base_path() . '/.env.example', base_path() . '/.env')) { - abort(500, '复制环境文件失败,请检查目录权限'); - } - $this->saveToEnv($envConfig); }else{ $envConfig = [ 'APP_KEY' => 'base64:' . base64_encode(Encrypter::generateKey('AES-256-CBC')), @@ -93,17 +86,27 @@ class XboardInstall extends Command 'DB_DATABASE' => $this->ask('请输入数据库名', 'xboard'), 'DB_USERNAME' => $this->ask('请输入数据库用户名'), 'DB_PASSWORD' => $this->ask('请输入数据库密码'), - 'REDIS_HOST' => $this->ask('请输入redis地址(默认: 127.0.0.1)', '127.0.0.1'), - 'REDIS_PORT'=> $this->ask('请输入redis端口(默认: 6379)', '6379'), - 'REDIS_PASSWORD' => $this->ask('请输入redis密码(默认: null)', null), - 'INSTALLED' => 'true' ]; - if (!copy(base_path() . '/.env.example', base_path() . '/.env')) { - abort(500, '复制环境文件失败,请检查目录权限'); - } - $this->saveToEnv($envConfig); + } + $envConfig['INSTALLED'] = 'true'; + // 判断是否为Docker环境 + if (env('docker', false) == 'true' && $this->ask('是否启用Docker内置的Redis(默认启用 y/n)','y') === 'y'){ + $envConfig['REDIS_HOST'] = '/run/redis-socket'; + $envConfig['REDIS_PORT'] = 0; + $envConfig['REDIS_PASSWORD'] = null; + }else{ + $envConfig['REDIS_HOST'] = $this->ask('请输入redis地址(默认: 127.0.0.1)', '127.0.0.1'); + $envConfig['REDIS_PORT'] = $this->ask('请输入redis端口(默认: 6379)', '6379'); + $envConfig['REDIS_PASSWORD'] = $this->ask('请输入redis密码(默认: null)', null); + } + + if (!copy(base_path() . '/.env.example', base_path() . '/.env')) { + abort(500, '复制环境文件失败,请检查目录权限'); + } + $this->saveToEnv($envConfig); + \Artisan::call('config:clear'); \Artisan::call('config:cache'); \Artisan::call('cache:clear'); @@ -132,7 +135,7 @@ class XboardInstall extends Command $defaultSecurePath = hash('crc32b', config('app.key')); $this->info("访问 http(s)://你的站点/{$defaultSecurePath} 进入管理面板,你可以在用户中心修改你的密码。"); } catch (\Exception $e) { - $this->error($e->getMessage()); + $this->error($e); } } diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 46e7f15..337c961 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -41,7 +41,9 @@ class Kernel extends ConsoleKernel // horizon metrics $schedule->command('horizon:snapshot')->everyFiveMinutes(); // backup Timing - $schedule->command('backup:upload-cloud')->daily(); + if(env('ENABLE_AUTO_BACKUP_AND_UPDATE', false)){ + $schedule->command('backup:database',['true'])->daily(); + } } /** diff --git a/composer.json b/composer.json index f246752..8caaa0f 100755 --- a/composer.json +++ b/composer.json @@ -26,6 +26,7 @@ "nunomaduro/collision": "^7.10", "paragonie/sodium_compat": "^1.20", "php-curl-class/php-curl-class": "^8.6", + "spatie/db-dumper": "^3.4", "stripe/stripe-php": "^7.36.1", "symfony/yaml": "*", "zoujingli/ip2region": "^2.0" diff --git a/docker-compose.yaml b/docker-compose.yaml index 2850437..d419bae 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,11 +1,23 @@ version: '3' services: xboard: - build: - context: . + # build: + # context: . + image: ghcr.io/cedar2025/xboard:latest volumes: - ./:/www/ - # - ./.env:/www/.env - # - ./.docker/.data/:/www/.docker/.data/ - # - ./config/v2board.php:/www/config/v2board.php - network_mode: host \ No newline at end of file + - redis-socket:/run/redis-socket # 挂载socket + environment: + - docker=true #用于给安装脚本判断是否为docker环境 + depends_on: + - redis + ports: + - 7001:7001 + redis: + build: + context: .docker/services/redis + volumes: + - ./.docker/.data/redis:/data/ # 挂载redis持久化数据 + - redis-socket:/run/redis-socket # 挂载socket +volumes: + redis-socket: \ No newline at end of file diff --git a/docs/aapanel+docker安装指南.md b/docs/aapanel+docker安装指南.md new file mode 100644 index 0000000..c0061c4 --- /dev/null +++ b/docs/aapanel+docker安装指南.md @@ -0,0 +1,81 @@ +## Docker-Compose 部署教程 +本文教你如何在命令行使用aapanel + docker-compose来快速Xboard + +### 部署 +1. 安装aaPanel + +如果是Centos系统 +``` +yum install -y wget && wget -O install.sh http://www.aapanel.com/script/install_6.0_en.sh && bash install.sh aapanel +``` +如果是Ubuntu/Deepin系统 +``` +wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && sudo bash install.sh aapanel +``` +如果是Debian 系统 +``` +wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && bash install.sh aapanel +``` + +安装完成后我们登陆 aaPanel 进行环境的安装。 +2. 选择使用LNMP的环境安装方式勾选如下信息 +☑️ Nginx 任意版本 +☑️ MySQL 5.7 +选择 Fast 快速编译后进行安装。 +⚠️ :无需安装php 与 redis + +3. 添加站点 +>aaPanel 面板 > Website > Add site。 +>>在 Domain 填入你指向服务器的域名 +>>在 Database 选择MySQL +>>在 PHP Verison 选择纯静态 + +4. 修改 Mysql访问权限 +> 不做这一步会导致连不上数据库 +- aaPanel 面板 > Database 找到你的站点数据库 +- 点击 Permission +- 将访问权限改为ALL(所有人) + +5. 安装 Xborad +>通过SSH登录到服务器后访问站点路径如:/www/wwwroot/你的站点域名。 +>以下命令都需要在站点目录进行执行。 +``` +# 删除目录下文件 +chattr -i .user.ini +rm -rf .htaccess 404.html index.html .user.ini +``` +> 执行命令从 Github 克隆到当前目录。 +``` +git clone https://github.com/cedar2025/Xboard.git ./ +``` +> 执行命令安装依赖包以及Xboard +``` +docker compose run -it --rm xboard sh init.sh +``` +> 根据提示完成安装 +> 执行这条命令之后,会返回你的后台地址和管理员账号密码(你需要记录下来) +> 你需要执行下面的 **启动xborad** 步骤之后才能访问后台 + +6. 启动xboard +``` +docker compose up -d +``` +7. 设置反向代理 +> 站点设置 > 反向代理 > 添加反向代理 +>> 在 **代理名称** 填入 Xboard +>> 在 **目标URL** 填入 ```http://127.0.0.1:7001``` + +🎉: 到这里,你可以已经可以通过域名访问你的站点了 + +### 更新 +1. 更新代码 +>通过SSH登录到服务器后访问站点路径如:/www/wwwroot/你的站点域名。 +>以下命令都需要在站点目录进行执行。 +``` +sh update.sh +``` +2. 重启Xboard +``` +docker compose restart +``` +🎉: 在此你已完成Xboard的更新 \ No newline at end of file diff --git a/docs/aapanel安装指南.md b/docs/aapanel安装指南.md new file mode 100644 index 0000000..f8351f3 --- /dev/null +++ b/docs/aapanel安装指南.md @@ -0,0 +1,169 @@ +## aapanel部署指南 +> 本文将教你如何使用aapanel进行部署 +### 安装 +1. 安装aaPanel + +如果是Centos系统 +``` +yum install -y wget && wget -O install.sh http://www.aapanel.com/script/install_6.0_en.sh && bash install.sh aapanel +``` +如果是Ubuntu/Deepin系统 +``` +wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && sudo bash install.sh aapanel +``` +如果是Debian 系统 +``` +wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && bash install.sh aapanel +``` + +安装完成后我们登陆 aaPanel 进行环境的安装。 +2. 选择使用LNMP的环境安装方式勾选如下信息 +☑️ Nginx 任意版本 +☑️ MySQL 5.7 +☑️ PHP 8.1 (如果没看到8.1先不选,去App Store安装) +选择 Fast 快速编译后进行安装。 + +3. 安装扩展 +> aaPanel 面板 > App Store > 找到PHP 8.1点击Setting > Install extentions选择以下扩展进行安装 +- redis +- fileinfo +- swoole4 +- readline +- event + +4. 解除被禁止函数 +> aaPanel 面板 > App Store > 找到PHP 8.1点击Setting > Disabled functions 将以下函数从列表中删除 +- putenv +- proc_open +- pcntl_alarm +- pcntl_signal + +5. 添加站点 +>aaPanel 面板 > Website > Add site。 +>>在 Domain 填入你指向服务器的域名 +>>在 Database 选择MySQL +>>在 PHP Verison 选择PHP-81 + +6. 安装 Xborad +>通过SSH登录到服务器后访问站点路径如:/www/wwwroot/你的站点域名。 +>以下命令都需要在站点目录进行执行。 +``` +# 删除目录下文件 +chattr -i .user.ini +rm -rf .htaccess 404.html index.html .user.ini +``` +> 执行命令从 Github 克隆到当前目录。 +``` +git clone https://github.com/cedar2025/Xboard.git ./ +``` +> 执行命令安装依赖包以及V2board +``` +sh init.sh +``` +> 根据提示完成安装 +7. 配置站点目录及伪静态 +> 添加完成后编辑添加的站点 > Site directory > Running directory 选择 /public 保存。 +> 添加完成后编辑添加的站点 > URL rewrite 填入伪静态信息。 +``` +location /downloads { +} + +location / { + try_files $uri $uri/ /index.php$is_args$query_string; +} + +location ~ .*\.(js|css)?$ +{ + expires 1h; + error_log off; + access_log /dev/null; +} +``` +8. 配置守护进程 +>Xboard的系统强依赖队列服务,正常使用XBoard必须启动队列服务。下面以aaPanel中supervisor服务来守护队列服务作为演示。 +- 1️⃣. aaPanel 面板 > App Store > Tools +- 2️⃣. 找到Supervisor进行安装,安装完成后点击设置 > Add Daemon按照如下填写 +- - 在 Name 填写 Xboard +- - 在 Run User 选择 www +- - 在 Run Dir 选择 站点目录 在 Start Command 填写 php artisan horizon 在 Processes 填写 1 + +>填写后点击Confirm添加即可运行。 + +9. 配置定时任务# +aaPanel 面板 > Cron。 +- 在 Type of Task 选择 Shell Script +- 在 Name of Task 填写 v2board +- 在 Period 选择 N Minutes 1 Minute +- 在 Script content 填写 php /www/wwwroot/路径/artisan schedule:run + +根据上述信息添加每1分钟执行一次的定时任务。 + + +### 开启webman +> 在上述安装的基础上开启webman提高性能 + +1. 配置php.ini +> 通过SSH登录到服务器后访问站点路径如:/www/wwwroot/你的站点域名。 +``` +cp /www/server/php/81/etc/php-cli.ini cli-php.ini + +sed -i '' 's/^disable_functions=.*/disable_functions=header,header_remove,headers_sent,http_response_code,setcookie,session_create_id,session_id,session_name,session_save_path,session_status,session_start,session_write_close,session_regenerate_id,set_time_limit/' cli-php.ini +``` +2. 添加守护进程 +>下面以aaPanel中supervisor服务来守护队列服务作为演示。 +- 1️⃣. aaPanel 面板 > App Store > Tools +- 2️⃣. 找到Supervisor进行安装,安装完成后点击设置 > Add Daemon按照如下填写 +- - 在 Name 填写 webman +- - 在 Run User 选择 www +- - 在 Run Dir 选择 站点目录 在 Start Command 填写 /www/server/php/81/bin/php -c cli-php.ini webman start 在 Processes 填写 1 +>填写后点击Confirm添加即可运行。 + +3. 添加反向代理 +> 站点设置 > 反向代理 > 添加反向代理 +>> 在 **代理名称** 填入 Xboard +>> 在 **目标URL** 填入 ```http://127.0.0.1:7010``` +> 添加添加后 需要点击该反向代理的```配置文件```编辑反向代理规则做以下修改 + +``` +location ~* \.(jpg|jpeg|png|gif|js|css|svg|woff2|woff|ttf|eot|wasm|json|ico)$ {} +location ^~ / +{ + proxy_pass http://127.0.0.1:8000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header REMOTE-HOST $remote_addr; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_http_version 1.1; + # proxy_hide_header Upgrade; + add_header X-Cache $upstream_cache_status; + + #Set Nginx Cache + set $static_filetmMCG7Tk 0; + if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" ) + { + set $static_filetmMCG7Tk 1; + expires 1m; + } + if ( $static_filetmMCG7Tk = 0 ) + { + add_header Cache-Control no-cache; + } +} +``` + +> 在此你的webman已经成功部署了 + +### 更新 + +1. 更新代码 +> 通过SSH登录到服务器后访问站点路径如:/www/wwwroot/你的站点域名。 +``` +sh update.sh +``` +2. 重启webman 守护进程(如果启用了webman) +- 1️⃣. aaPanel 面板 > App Store > Tools +- 2️⃣. 找到Supervisor点击设置,找到名为webman的守护进程点击重启即可 + + diff --git a/docs/config迁移指南.md b/docs/config迁移指南.md new file mode 100644 index 0000000..0dc9ec5 --- /dev/null +++ b/docs/config迁移指南.md @@ -0,0 +1,29 @@ +#### config/v2board.php 迁移 +> xboard将配置储存到数据库了, 不再使用file进行储存,你需要对配置文件进行迁移。 +#### docker-compose 环境 +1. 在xboard 目录下创建 config文件夹 +2. 复制旧项目的 v2board.php 到config目录 +3. 修改docker-compose.yaml 取消下面代码的注释(删除 "#") +``` + # - ./config/v2board.php:/www/config/v2board.php +``` +4. 执行下面的命令即可完成迁移 +``` +docker compose down +docker compose run -it --rm xboard php artisan migrateFromV2b config +docker compose up -d +``` +#### aapanel 环境 +1. 将旧的 ```config/v2board.php``` 文件复制到 xboard的 ```config/v2board.php``` 下 +2. 执行下面的命令,即可完成迁移 +``` +php artisan migrateFromV2b config +``` +### aapanel + docker 环境 +1. 将旧的 ```config/v2board.php``` 文件复制到 xboard的 ```config/v2board.php``` 下 +2. 执行下面的命令,即可完成迁移 +``` +docker compose down +docker compose run -it --rm xboard php artisan migrateFromV2b config +docker compose up -d +``` diff --git a/docs/docker-compose安装指南.md b/docs/docker-compose安装指南.md new file mode 100644 index 0000000..c0e18a4 --- /dev/null +++ b/docs/docker-compose安装指南.md @@ -0,0 +1,66 @@ +## Docker-Compose 部署教程 +本文教你如何在命令行使用docker-compose + sqlite来快速部署Xboard +如果你需要使用Mysql,你需要自行处理好Mysql的安装。 +### 部署 (使用docker-compose 2分钟部署) +> 在此提供Xboard安装、快速体验Xboard的步骤。 +使用docker compose + sqlite 快速部署站点(**无需安装Mysql以及redis**) +1. 安装docker +``` +curl -sSL https://get.docker.com | bash +systemctl enable docker +systemctl start docker +``` +2. 获取Docker compose 文件 +``` +git clone -b docker-compose --depth 1 https://github.com/cedar2025/Xboard +cd Xboard +``` +3. 执行数据库安装命令 +> 选择 **启用sqlite** 和 **Docker内置的Redis** +``` +docker compose run -it --rm xboard php artisan xboard:install +``` +> 执行这条命令之后,会返回你的后台地址和管理员账号密码(你需要记录下来) +> 你需要执行下面的 **启动xborad** 步骤之后才能访问后台 + +4. 启动Xboard +``` +docker compose up -d +``` +> 安装完成之后即可访问你的站点 +5. 访问站点 +> 启动之后网站端口默认为7001, 你可以配置nginx反向代理使用80端口 + +网站地址: http://你的IP:7001/ +在此你已经成功部署了, 你可以访问网址体验Xboard的完整功能, + +> 如果你需要使用mysql,请自行安装Mysql后重新部署 + +### **更新** +1. 修改版本 +``` +cd Xboard +vi docker-compose.yaml +``` +> 修改docker-compose.yaml 当中image后面的版本号为你需要的版本 + +2. 更新数据库(可以执行多次都是安全的) +``` +docker compose pull +docker compose down +docker compose run -it --rm xboard php artisan xboard:update +docker compose up -d +``` +> 即可更新成功 + +### **回滚** +> 此回滚不回滚数据库,是否回滚数据库请查看相关文档 +1. 回退版本 +``` +vi docker-compose.yaml +``` +> 修改docker-compose.yaml 当中image后面的版本号为更新前的版本号 +2. 启动 +``` +dockcer compose up -d +``` \ No newline at end of file diff --git a/docs/v2b_1.7.3迁移指南.md b/docs/v2b_1.7.3迁移指南.md index ef1243f..0290def 100644 --- a/docs/v2b_1.7.3迁移指南.md +++ b/docs/v2b_1.7.3迁移指南.md @@ -14,14 +14,40 @@ - 添加 v2_server_hysteria 数据表 - 添加 v2_server_vless 数据表 -### 迁移命令 +## 迁移之前 +迁移之前你需要执行正常安装步骤(记得不可选择Sqlite) +> sqlite迁移请自行学习相关知识 +- [Docker Compose 纯命令行快速部署](./docs/docker-compose安装指南.md) +- [aapanel + Docker Compose](./docs/aapanel+docker安装指南.md) +- [aapanel 部署](./docs/) + +## 开始迁移 +> 针对docker与非docker用户提供不同的迁移步骤,你根据你的安装环境选择其一即可。 + +### docker 环境 +> 以下命令需要你打开SSH进入到项目目录进行执行 +1. 停止Xboard +``` +docker compose down +``` +2. 清空数据库 +``` +docker compose run -it --rm xboard php artisan db:wipe +``` +3. 执行迁移命令 +``` +docker compose run -it --rm xboard php artisan migratefromv2b 1.7.3 +``` +## aapanel 环境 +1. 清空数据库 +``` +php artisan db:wipe +``` +2. 执行迁移命令 ``` php artisan migratefromv2b 1.7.3 ``` ->如果你是docker-compose 部署 -``` -docker compose down -docker compose run -it --rm xboard php artisan migratefromv2b 1.7.3 -docker compose up -d -``` \ No newline at end of file +> 上述迁移完成之后你需要进行 配置文件迁移 +## config/v2board.php 配置文件迁移 [点击查看步骤](./config迁移指南.md) +> xboard将配置储存到数据库, 不再使用file进行储存,你需要对配置文件进行迁移。 diff --git a/docs/v2b_1.7.4迁移指南.md b/docs/v2b_1.7.4迁移指南.md index 697d172..aa3c246 100644 --- a/docs/v2b_1.7.4迁移指南.md +++ b/docs/v2b_1.7.4迁移指南.md @@ -3,17 +3,40 @@ ### 迁移脚本会对你的数据库做以下更改 - 添加 v2_server_vless 数据表 -### 迁移命令 -#### 手动部署(aapanel) -> 如果你是手动(aapanel)部署的,执行以下命令 +## 迁移之前 +迁移之前你需要执行正常安装步骤(记得不可选择Sqlite) +> sqlite迁移请自行学习相关知识 +- [Docker Compose 纯命令行快速部署](./docs/docker-compose安装指南.md) +- [aapanel + Docker Compose](./docs/aapanel+docker安装指南.md) +- [aapanel 部署](./docs/) + +## 开始迁移 +> 针对docker与非docker用户提供不同的迁移步骤,你根据你的安装环境选择其一即可。 + +### docker 环境 +> 以下命令需要你打开SSH进入到项目目录进行执行 +1. 停止Xboard +``` +docker compose down +``` +2. 清空数据库 +``` +docker compose run -it --rm xboard php artisan db:wipe +``` +3. 执行迁移命令 +``` +docker compose run -it --rm xboard php artisan migratefromv2b 1.7.4 +``` +## aapanel 环境 +1. 清空数据库 +``` +php artisan db:wipe +``` +2. 执行迁移命令 ``` php artisan migratefromv2b 1.7.4 ``` -#### docker部署 -> 如果你是使用的docker 部署,清执行以下命令 -``` -docker compose down -docker compose run -it --rm xboard php artisan migratefromv2b 1.7.4 -docker compose up -d -``` \ No newline at end of file +> 上述迁移完成之后你需要进行 配置文件迁移 +## config/v2board.php 配置文件迁移 [点击查看步骤](./config迁移指南.md) +> xboard将配置储存到数据库, 不再使用file进行储存,你需要对配置文件进行迁移。 \ No newline at end of file diff --git a/docs/v2b_dev迁移指南.md b/docs/v2b_dev迁移指南.md index 966b012..c735ae4 100644 --- a/docs/v2b_dev迁移指南.md +++ b/docs/v2b_dev迁移指南.md @@ -11,17 +11,40 @@ - 删除 `ignore_client_bandwidth` 字段 - 删除 `obfs_type` 字段 -### 迁移命令 -#### 手动部署(aapanel) -> 如果你是手动(aapanel)部署的,执行以下命令 +## 迁移之前 +迁移之前你需要执行正常安装步骤(记得不可选择Sqlite) +> sqlite迁移请自行学习相关知识 +- [Docker Compose 纯命令行快速部署](./docs/docker-compose安装指南.md) +- [aapanel + Docker Compose](./docs/aapanel+docker安装指南.md) +- [aapanel 部署](./docs/) + +## 开始迁移 +> 针对docker与非docker用户提供不同的迁移步骤,你根据你的安装环境选择其一即可。 + +### docker 环境 +> 以下命令需要你打开SSH进入到项目目录进行执行 +1. 停止Xboard +``` +docker compose down +``` +2. 清空数据库 +``` +docker compose run -it --rm xboard php artisan db:wipe +``` +3. 执行迁移命令 +``` +docker compose run -it --rm xboard php artisan migratefromv2b dev231027 +``` +## aapanel 环境 +1. 清空数据库 +``` +php artisan db:wipe +``` +2. 执行迁移命令 ``` php artisan migratefromv2b dev231027 ``` -#### docker部署 -> 如果你是使用的docker 部署,清执行以下命令 -``` -docker compose down -docker compose run -it --rm xboard php artisan migratefromv2b dev231027 -docker compose up -d -``` \ No newline at end of file +> 上述迁移完成之后你需要进行 配置文件迁移 +## config/v2board.php 配置文件迁移 [点击查看步骤](./config迁移指南.md) +> xboard将配置储存到数据库, 不再使用file进行储存,你需要对配置文件进行迁移。 \ No newline at end of file diff --git a/docs/v2b_wyx2685迁移指南.md b/docs/v2b_wyx2685迁移指南.md index 97eb78d..a9da8f6 100644 --- a/docs/v2b_wyx2685迁移指南.md +++ b/docs/v2b_wyx2685迁移指南.md @@ -17,13 +17,40 @@ - v2_user - 删除字段 `device_limit` -### 迁移命令 +## 迁移之前 +迁移之前你需要执行正常安装步骤(记得不可选择Sqlite) +> sqlite迁移请自行学习相关知识 +- [Docker Compose 纯命令行快速部署](./docs/docker-compose安装指南.md) +- [aapanel + Docker Compose](./docs/aapanel+docker安装指南.md) +- [aapanel 部署](./docs/) + +## 开始迁移 +> 针对docker与非docker用户提供不同的迁移步骤,你根据你的安装环境选择其一即可。 + +### docker 环境 +> 以下命令需要你打开SSH进入到项目目录进行执行 +1. 停止Xboard +``` +docker compose down +``` +2. 清空数据库 +``` +docker compose run -it --rm xboard php artisan db:wipe +``` +3. 执行迁移命令 +``` +docker compose run -it --rm xboard php artisan migratefromv2b wyx2685 +``` +## aapanel 环境 +1. 清空数据库 +``` +php artisan db:wipe +``` +2. 执行迁移命令 ``` php artisan migratefromv2b wyx2685 ``` ->如果你是docker-compose 部署 -``` -docker compose down -docker compose run -it --rm xboard php artisan migratefromv2b wyx2685 -docker compose up -d -``` \ No newline at end of file + +> 上述迁移完成之后你需要进行 配置文件迁移 +## config/v2board.php 配置文件迁移 [点击查看步骤](./config迁移指南.md) +> xboard将配置储存到数据库, 不再使用file进行储存,你需要对配置文件进行迁移。 \ No newline at end of file diff --git a/readme.md b/readme.md index 7bca318..2ff9215 100755 --- a/readme.md +++ b/readme.md @@ -32,82 +32,23 @@ TRC20: TLypStEWsVrj6Wz9mCxbXffqgt5yz3Y4XB - Redis - Laravel -## 性能评测 [点击查看](./docs/性能对比.md) +## 性能对比 [查看详情](./docs/性能对比.md) +> xboard 无论前端还是后端性能都有巨大的提升 + +|场景 | php-fpm(传统) | php-fpm(传统开启opcache) | laravels | webman(docker)| +|---- | ---- |---- |----| ---| +|首页 | 6请求/秒 | 157请求/秒 | 477请求/秒 | 803请求/秒 | +|用户订阅 | 6请求/秒 | 196请求/秒 | 586请求/秒 | 1064请求/秒 | +|用户首页延迟| 308ms | 110ms | 101ms | 98ms | ## 页面展示 ![示例图片](./docs/images/dashboard.png) ## 安装 / 更新 / 回滚 -> 这里将给你介绍不同方式的 安装、更新、回滚步骤 -### 安装前准备 -- 安装前你需要自行安装好Mysql数据库(用户量小的可以忽略,使用Sqlite) -- 安装前你需要自行安装好redis (必须) -### Docker Compose 方式(推荐) -#### **安装部署** -1. 安装docker -``` -curl -sSL https://get.docker.com | bash -systemctl enable docker -systemctl start docker -``` -2. 获取Docker compose 文件 -``` -git clone -b docker-compose --depth 1 https://github.com/cedar2025/Xboard -cd Xboard -``` -3. 执行数据库安装命令 -``` -docker compose run -it --rm xboard php artisan xboard:install -``` -> 执行这条命令之后,会返回你的后台地址和管理员账号密码(你需要记录下来) -> 你需要执行下面的 ‘**启动xborad**’ 之后才能访问后台 - -4. 启动xboard -``` -docker compose up -d -``` -> 安装完成之后即可访问你的站点 -5. 配置nginx代理 -> 启动之后网站端口为7001, 你可以配置nginx分流使用80端口 -``` -location ~ .* { - proxy_pass http://127.0.0.1:7001; -} -``` - -#### **更新** -1、 修改版本 -``` -cd Xboard -vi docker-compose.yaml -``` -> 修改docker-compose.yaml 当中image后面的版本号为你需要的版本 - -2、 更新数据库(可以执行多次都是安全的) -``` -docker compose down -docker compose run -it --rm xboard php artisan xboard:update -docker compose up -d -``` -> 即可更新成功 - -### **回滚** -> 需要回滚旧的版本时 -1、回滚数据库(不可回滚多次,每一次指定都会回滚到上一个版本) -``` -docker compose down -docker compose run -it --rm xboard php artisan xboard:rollback -``` -2、回退版本 -``` -vi docker-compose.yaml -``` -> 修改docker-compose.yaml 当中image后面的版本号为更新前的版本号 -3、启动 -``` -dockcer compose up -d -``` - +你可以点击查看下列方式的**安装、更新**步骤 +- [Docker Compose 纯命令行快速部署](./docs/docker-compose安装指南.md) +- [aapanel + Docker Compose](./docs/aapanel+docker安装指南.md) +- [aapanel 部署](./docs/) ### 从其他版本迁移 #### 数据库迁移 1. 先导入原的数据库。(不要走安装步骤) @@ -118,124 +59,3 @@ dockcer compose up -d - v2board 1.7.3 [点击跳转迁移指南](./docs/v2b_1.7.3迁移指南.md) - v2board wyx2685 [点击跳转迁移指南](./docs/v2b_wyx2685迁移指南.md) -#### config/v2board.php 迁移 -> xboard将配置储存到数据库了, 不再使用file进行储存,你需要对配置文件进行迁移。 -#### docker-compose 环境 -1. 在xboard 目录下创建 config文件夹 -2. 复制旧项目的 v2board.php 到config目录 -3. 修改docker-compose.yaml 取消下面代码的注释(删除 "#") -``` - # - ./config/v2board.php:/www/config/v2board.php -``` -4. 执行下面的命令即可完成迁移 -``` -docker compose down -docker compose run -it --rm php artisan migrateFromV2b config -docker compose up -d -``` -#### aapanel 环境 -1. 将旧的 ```config/v2board.php``` 文件复制到 xboard的 ```config/v2board.php``` 下 -2. 执行下面的命令,即可完成迁移 -``` -php artisan migrateFromV2b config -``` - - - -### 宝塔方式(aaPanel) (不推荐,太麻烦了) -1. 安装aaPanel - -如果是Centos系统 -``` -yum install -y wget && wget -O install.sh http://www.aapanel.com/script/install_6.0_en.sh && bash install.sh aapanel -``` -如果是Ubuntu/Deepin系统 -``` -wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && sudo bash install.sh aapanel -``` -如果是Debian 系统 -``` -wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && bash install.sh aapanel -``` - -安装完成后我们登陆 aaPanel 进行环境的安装。 -2. 选择使用LNMP的环境安装方式勾选如下信息 -☑️ Nginx 任意版本 -☑️ MySQL 5.7 -☑️ PHP 8.1 -选择 Fast 快速编译后进行安装。 - -3. 安装扩展 -> aaPanel 面板 > App Store > 找到PHP 8.1点击Setting > Install extentions选择以下扩展进行安装 -- redis -- fileinfo -- swoole4 -- readline -- event - -4. 解除被禁止函数 -> aaPanel 面板 > App Store > 找到PHP 7.4点击Setting > Disabled functions 将以下函数从列表中删除 -- putenv -- proc_open -- pcntl_alarm -- pcntl_signal - -5. 添加站点 ->aaPanel 面板 > Website > Add site。 ->>在 Domain 填入你指向服务器的域名 ->>在 Database 选择MySQL ->>在 PHP Verison 选择PHP-81 - -6. 安装 Xborad ->通过SSH登录到服务器后访问站点路径如:/www/wwwroot/你的站点域名。 ->以下命令都需要在站点目录进行执行。 -``` -# 删除目录下文件 -chattr -i .user.ini -rm -rf .htaccess 404.html index.html .user.ini -``` -> 执行命令从 Github 克隆到当前目录。 -``` -git clone https://github.com/cedar2025/Xboard.git ./ -``` -> 执行命令安装依赖包以及V2board -``` -sh init.sh -``` -> 根据提示完成安装 -7. 配置站点目录及伪静态 -> 添加完成后编辑添加的站点 > Site directory > Running directory 选择 /public 保存。 -> 添加完成后编辑添加的站点 > URL rewrite 填入伪静态信息。 -``` -location /downloads { -} - -location / { - try_files $uri $uri/ /index.php$is_args$query_string; -} - -location ~ .*\.(js|css)?$ -{ - expires 1h; - error_log off; - access_log /dev/null; -} -``` -8. 配置守护进程 ->V2board的系统强依赖队列服务,正常使用V2Board必须启动队列服务。下面以aaPanel中supervisor服务来守护队列服务作为演示。 -1. aaPanel 面板 > App Store > Tools -2. 找到Supervisor进行安装,安装完成后点击设置 > Add Daemon按照如下填写 -- 在 Name 填写 Xboard -- 在 Run User 选择 www -- 在 Run Dir 选择 站点目录 在 Start Command 填写 php artisan horizon 在 Processes 填写 1 - ->填写后点击Confirm添加即可运行。 - -9. 配置定时任务# -aaPanel 面板 > Cron。 -- 在 Type of Task 选择 Shell Script -- 在 Name of Task 填写 v2board -- 在 Period 选择 N Minutes 1 Minute -- 在 Script content 填写 php /www/wwwroot/路径/artisan schedule:run - -根据上述信息添加每1分钟执行一次的定时任务。