項目概述
- 產品名稱:LaraBBS
- 項目代號:larabbs
- 官方地址:https://learnku.com/laravel/t/6592
LaraBBS 是一個簡潔的論壇應用,使用 Laravel5.5 編寫而成。一步步開發此項目的教程請見 《Web 開發實戰進階 - 從零開始構建論壇系統》。
功能如下
- 用戶認證 —— 註冊、登錄、退出;
- 個人中心 —— 用戶個人中心,編輯資料;
- 用戶授權 —— 作者才能刪除自己的內容;
- 上傳圖片 —— 修改頭像和編輯話題時候上傳圖片;
- 表單驗證 —— 使用表單驗證類;
- 文章發佈時自動 Slug 翻譯,支持使用隊列方式以提高響應;
- 站點『活躍用戶』計算,一小時計算一次;
- 多角色權限管理 —— 允許站長,管理員權限的存在;
- 後臺管理 —— 後臺數據模型管理;
- 郵件通知 —— 發送新回覆郵件通知,隊列發送郵件;
- 站內通知 —— 話題有新回覆;
- 自定義 Artisan 命令行 —— 自定義活躍用戶計算命令;
- 自定義 Trait —— 活躍用戶的業務邏輯實現;
- 自定義中間件 —— 記錄用戶的最後登錄時間;
- XSS 安全防禦;
運行環境要求
- Nginx 1.8+
- PHP 7.0+
- Mysql 5.7+
- Redis 3.0+
- Memcached 1.4+
開發環境部署/安裝
本項目代碼使用 PHP 框架 Laravel 5.5 開發,本地開發環境使用 Laravel Homestead。
下文將在假定讀者已經安裝好了 Homestead 的情況下進行說明。如果您還未安裝 Homestead,可以參照 Homestead 安裝與設置 進行安裝配置。
基礎安裝
1. 克隆源代碼
克隆 larabbs
源代碼到本地:
> git clone [email protected]:summerblue/larabbs.git
2. 配置本地的 Homestead 環境
1). 運行以下命令編輯 Homestead.yaml 文件:
homestead edit
2). 加入對應修改,如下所示:
folders:
- map: ~/my-path/larabbs/ # 你本地的項目目錄地址
to: /home/vagrant/larabbs
sites:
- map: larabbs.test
to: /home/vagrant/larabbs/public
databases:
- larabbs
3). 應用修改
修改完成後保存,然後執行以下命令應用配置信息修改:
homestead provision
隨後請運行 homestead reload
進行重啓。
3. 安裝擴展包依賴
composer install
4. 生成配置文件
cp .env.example .env
你可以根據情況修改 .env
文件裏的內容,如數據庫連接、緩存、郵件設置等:
APP_URL=http://larabbs.test
...
DB_HOST=localhost
DB_DATABASE=larabbs
DB_USERNAME=homestead
DB_PASSWORD=secret
DOMAIN=.larabbs.test
5. 生成數據表及生成測試數據
在 Homestead 的網站根目錄下運行以下命令
$ php artisan migrate --seed
初始的用戶角色權限已使用數據遷移生成。
7. 生成祕鑰
php artisan key:generate
8. 配置 hosts 文件
echo "192.168.10.10 larabbs.test" | sudo tee -a /etc/hosts
前端框架安裝
1). 安裝 node.js
直接去官網 https://nodejs.org/en/ 下載安裝最新版本。
2). 安裝 Yarn
請安裝最新版本的 Yarn —— http://yarnpkg.cn/zh-Hans/docs/install
3). 安裝 Laravel Mix
yarn install
4). 編譯前端內容
// 運行所有 Mix 任務...
npm run dev
// 運行所有 Mix 任務並縮小輸出..
npm run production
5). 監控修改並自動編譯
npm run watch
// 在某些環境中,當文件更改時,Webpack 不會更新。如果系統出現這種情況,請考慮使用 watch-poll 命令:
npm run watch-poll
鏈接入口
管理員賬號密碼如下:
username: [email protected]
password: password
至此, 安裝完成 ^_^。
服務器架構說明
這裏可以放一張大大的服務器架構圖,下面是個例子:
上圖使用工具 ProcessOn 繪製。
擴展包使用情況
擴展包 | 一句話描述 | 本項目應用場景 |
---|---|---|
Intervention/image | 圖片處理功能庫 | 用於圖片裁切 |
guzzlehttp/guzzle | HTTP 請求套件 | 請求百度翻譯 API |
predis/predis | Redis 官方首推的 PHP 客戶端開發包 | 緩存驅動 Redis 基礎擴展包 |
barryvdh/laravel-debugbar | 頁面調試工具欄 (對 phpdebugbar 的封裝) | 開發環境中的 DEBUG |
spatie/laravel-permission | 角色權限管理 | 角色和權限控制 |
mewebstudio/Purifier | 用戶提交的 Html 白名單過濾 | 帖子內容的 Html 安全過濾,防止 XSS 攻擊 |
hieu-le/active | 選中狀態 | 頂部導航欄選中狀態 |
summerblue/administrator | 管理後臺 | 模型管理後臺、配置信息管理後臺 |
viacreative/sudo-su | 用戶切換 | 開發環境中快速切換登錄賬號 |
laravel/horizon | 隊列監控 | 隊列監控命令與頁面控制檯 /horizon |
自定義 Artisan 命令
命令行名字 | 說明 | Cron | 代碼調用 |
---|---|---|---|
larabbs:calculate-active-user |
生成活躍用戶 | 一小時運行一次 | 無 |
larabbs:sync-user-actived-at |
從 Redis 中同步最後登錄時間到數據庫中 | 每天早上 0 點準時 | 無 |
隊列清單
名稱 | 說明 | 調用時機 |
---|---|---|
TranslateSlug.php | 將話題標題翻譯爲 Slug | TopicObserver 事件 saved() |
TopicReplied.php | 通知作者話題有新回覆 | 話題被評論以後 |
參考 https://learnku.com/docs/laravel-specification/7.x/readme-examplemd/7614