# laravel-admin **Repository Path**: simon8.com/laravel-admin ## Basic Information - **Project Name**: laravel-admin - **Description**: laravel9 + vue2 + element-ui - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-17 - **Last Updated**: 2025-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 基于 `Laravel 8.*` 制作, 使用vue进行前后端分离 ## Docker 快速部署 `windows`下使用`git`检出项目时, 文件换行符默认会转换为 `CRLF`, 建议导出后使用 `phpstorm`等工具将`docker`目录下所有文件换行符切换成`LF`, 能减少很多奇怪的错误. #### 安装 Docker 、 Docker-compose ``` # Windows 直接安装 Docker Desktop # Linux ## 增加可执行权限并执行安装脚本 chmod +x ./docker/install.sh ./install.sh ``` #### 构建镜像, 启动容器 ``` docker-compose up -d # 启动 ``` #### 进入 tools 容器(后续所有操作都需要在 tools 容器内执行) ``` docker-compose exec tools bash ``` #### 通过composer安装程序所需扩展 ``` composer install ``` #### 运行安装脚本 ``` php artisan admin:install ``` ---- ## 常规部署 #### 通过composer安装程序所需扩展 ``` composer install ``` #### 通过 npm 或 yarn 安装js所需扩展 ``` npm install // 或 yarn install ``` #### 修改.env配置文件 #### 运行安装脚本 ``` php artisan admin:install ``` #### 添加任务调度 注意运行cron的用户需要与 nginx php-fpm 为同一个用户, 通过 `crontab -u 用户名` 来指定用户 ``` # crontab -u www -e * * * * * cd /data/wwwroot/laravel-vue-admin && php artisan schedule:run >> /dev/null 2>&1 ``` #### 配置supervisor 程序用到了laravel-horizon队列服务, 由supervisor管理 ###### 编辑 /etc/supervisor/conf.d/app.conf ``` [program:app] user=www process_name=%(program_name)s autostart=true autorestart=true redirect_stderr=true stdout_logfile=/data/wwwlogs/supervisor/app.log directory=/data/wwwroot/laravel-vue-admin/ command=/usr/local/php/bin/php /data/wwwroot/laravel-vue-admin/artisan horizon ``` ###### 重载 supervisor 配置 ``` supervisorctl reload ``` ----- ## 其他 #### 目录权限 storage/ 和 bootstrap/cache/ 需要给予web服务器可写权限 #### mysql 主从复制(可选) ``` # 安装 cd ./docker/slave-game chmod +x ./install.sh ./install.sh # 配置 修改 .env 中从库信息 ``` #### 前端编译(建议在宿主机操作, 性能更好) ``` # 先全局安装 mix npm install -g mix # 热重载模式 npm run hot # 调试模式 npm run watch # 生产模式 npm run prod ``` #### 后台地址 http://你配置的域名/admin 账号: simon 密码: 123456 #### 重启队列 ``` # 队列会在运行结束后中止, 由supervisor将其启动 php artisan horizon:terminate ``` #### 线上部署优化 ``` # 配置缓存 + 路由缓存 + 框架缓存 php artisan optimize # 清除 php artisan optimize:clear ``` #### Admin 操作 ``` # phpstorm自动补全, 新建模型后使用 php artisan admin:helper # 备份后台菜单、权限等 php artisan admin:backup # 还原后台菜单、权限等 php artisan admin:restore # 其他 输入 php artisan 查看 ``` #### 同步API文档到Showdoc - 本地维护`docs`文档目录 - 填写 .env 中 showdoc 相关配置, 注释语法: [点击查看](https://www.showdoc.cc/page/741656402509783) ``` php artisan sync:showdoc ``` #### 支付和权益 - 配置文件(支持多商户) - configs/pay-channel.php - 管理 - 后台/支付通道对商户进行开关, 支付与权益限额 - 充值 - 支付宝沙盒模式不支持支付, 只能使用正式账号 - 内部号强制使用1分钱支付 - 权益 - 非生产模式时, 强制使用沙盒商户对指定沙盒用户进行权益 #### 与服务端数据交互 - 使用 Redis 的消息订阅广播, 服务端订阅`p2s`频道, PHP推送消息 --- ## 开发约定 #### Model ###### 特殊处理的字段, 可以使用本地作用域 ``` # App\Models\User public function scopeOfNickname($query, $data) { if (empty($data)) return $query; return $query->where('nickname', 'like', '%'.$data.'%'); } # 使用 User::ofNickname('师傅'); // 等效User::where('nickname', 'like', '%'.$data.'%'); ``` ###### 普通字段, Laravel提供了魔术方法, 可以直接使用whereField的形式, 无需单独编写 ``` # 使用 User::whereStatus(1);// 等效User::where('status', 1); ``` #### 表单验证 ###### 如果需要验证表单字段是否填写, 推荐使用Request类, 填写rules规则, 调用即可 ``` # App\Http\Requests\MenuRequest public function validateStore() { $rules = [ 'name' => 'required|unique:menus', 'url' => 'required|url', 'sort' => 'sometimes|numeric', ]; $this->validate($rules); return $this->all(); } # 使用 public function store(MenuRequest $request) { $data = $request->validateStore(); 逻辑处理... } ``` ## 单元测试 #### 指定测试文件 ``` vendor/bin/phpunit tests/Unit/Api/V1/UserTest ``` #### 指定测试方法 ``` vendor/bin/phpunit --filter "UserTest::testLogin" ``` #### 完全测试 ``` vendor/bin/phpunit ``` #### XDEBUG (php容器) 开启和关闭后需要重启php容器, 生产环境谨慎操作 ``` # 开启 docker-php-ext-enable xdebug && \ echo "xdebug.mode=debug,profile" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \ echo "xdebug.idekey=SIMON" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \ echo "xdebug.client_host=192.168.11.44" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \ echo "xdebug.client_port=9003" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \ echo "xdebug.remote_handler=dbgp" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini # 关闭 rm -rf /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini ``` #### 网站前台 每个马甲包对应 public/site_{$节点ID} 将该目录下代码拷贝到OSS中, 分配个二级域名使用CDN访问. 下载地址是通过APK所在bucket中的apk.json获得, 对应bucket需要设置跨域.