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分钟执行一次的定时任务。