首頁php
基於 RBAC 的權限管理後臺,Dashboard 頁面統計了用戶總數、文章發佈總數、評論率、評論總數、文章支持按天、按月、按年統計、支持按分類、按標籤統計……css
登陸頁面html
註冊頁面前端
支持 GitHub 受權登陸node
支持郵箱重置密碼laravel
同時兼容 HTML 編輯器和 Markdown 編輯器git
Markdown 編輯器:支持拖拽粘貼上傳圖片、預覽、全屏、分屏預覽 github
支持代碼高亮web
本項目代碼使用 PHP 框架 laravel6.x 開發,本地開發環境使用 Laravel Homestead。redis
克隆 larablog
源代碼到本地:
// gitee git clone git@gitee.com:pudongping/larablog.git // GitHub git clone git@github.com:pudongping/larablog.git
// 先切換到 larablog 項目根目錄 cd larablog // 執行安裝命令 composer install
cp .env.example .env
你能夠根據狀況修改 .env 文件裏的內容,如數據庫鏈接、緩存、郵件設置、第三方受權登陸等:
DB_HOST=localhost DB_DATABASE=larablog DB_USERNAME=homestead DB_PASSWORD=secret
// 須要生成測試數據則執行: php artisan migrate --seed // 不須要生成測試數據則執行: php artisan migrate
php artisan key:generate
php artisan storage:link
// 建議在 Linux 系統中新建一個 www 用戶,並設置該用戶不可登陸系統 useradd -s /sbin/nologin www // 將項目目錄全部權賦予 www 用戶 chown -Rf www:www larablog // 給 storage 目錄賦權限 chmod -Rf 0755 larablog/storage/
若是開發環境沒有采用 Laravel Homestead 則 ip 映射以你實際爲主,通常爲 127.0.0.1。我這裏使用的 Laravel Homestead 虛擬機的 ip 地址爲:192.168.10.10
// Linux 或 MacOS 環境 echo "192.168.10.10 larablog.test" | sudo tee -a /etc/hosts // Windows 環境 須要打開 C:/Windows/System32/Drivers/etc/hosts 文件,而後新增一行 192.168.10.10 larablog.test
CentOS / Fedora / RHEL 環境下
文檔地址: https://yarn.bootcss.com/docs...
curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
sudo yum install yarn ## OR ## sudo dnf install yarn
Windows 環境下
直接去官網 https://nodejs.org/en 下載安裝最新版本。
請安裝最新版本的 Yarn —— http://yarnpkg.cn/zh-Hans/docs/install
npm config set registry=https://registry.npm.taobao.org yarn config set registry https://registry.npm.taobao.org
yarn install 或者 npm install
npm run watch-poll // 若是遇到報錯,嘗試先執行如下命令更新 npm 到最新版本,以後再次執行監控命令 npm install -g npm
// 運行全部 Mix 任務... npm run dev // 運行全部 Mix 任務並縮小輸出.. npm run production
管理員帳號密碼以下:
username: 1414818093@qq.com password: 123456
默認網站第一位用戶爲站長角色,第二位用戶爲管理員角色。若是填充了測試數據,則默認全部用戶的密碼爲:123456
==至此,安裝完成^_^。enjoy yourself……==
擴展包 | 簡介描述 | 本項目應用場景 |
---|---|---|
laravel/ui | laravel 6.x UI 腳手架 | 前端頁面框架 |
barryvdh/laravel-ide-helper | 能讓你的 IDE (PHPStorm, Sublime) 實現自動補全、代碼智能提示和代碼跟蹤等功能 | 代碼補全和智能提示 |
barryvdh/laravel-debugbar | 頁面調試工具欄 (對 phpdebugbar 的封裝) | 開發環境中的 DEBUG |
overtrue/laravel-lang | 支持 52 個國家的語言包 | 翻譯 Laravel 自帶模板 |
mews/captcha | 圖片驗證碼 | 註冊頁面圖片驗證碼 |
intervention/image | 圖片處理功能庫 | 用於圖片裁剪 |
summerblue/laravel-active | 方便設置 active 類 | 文章排序添加 active 類 |
mews/purifier | 用戶提交的 Html 白名單過濾 | 文章內容的 Html 安全過濾,防止 XSS 攻擊 |
guzzlehttp/guzzle | HTTP 請求套件 | 請求百度翻譯 API,翻譯文章標題,作 SEO 優化 |
overtrue/pinyin | 基於 CC-CEDICT 詞典的中文轉拼音工具 | 翻譯文章標題的備用方案 |
predis/predis | Redis 官方首推的 PHP 客戶端開發包 | 緩存驅動 Redis 基礎擴展包 |
laravel/horizon | 隊列監控 | 隊列監控命令與頁面控制檯 /horizon |
spatie/laravel-permission | 角色權限管理 | 角色和權限控制 |
viacreative/sudo-su | 用戶切換 | 調試環境中快速切換登陸帳號 |
erusev/parsedown | markdown 轉換 html 工具 | 文章模塊解析 markdown 語法 |
thephpleague/html-to-markdown | html 轉換成 markdown 工具 | 文章編輯採用 markdown 編輯器時 |
laravel/socialite | laravel 官方推薦社會化登陸 | Github 登陸 |
suin/php-rss-writer | rss 訂閱生成 | 生成 rss 訂閱代碼 |
擴展包 | 簡介描述 | 本項目應用場景 | |
---|---|---|---|
yarn add @fortawesome/fontawesome-free | Font Awesome 提供了可縮放的矢量圖標 | 字體圖標庫 | |
npm i startbootstrap-sb-admin-2 | 界面簡潔美觀的皮膚 | cms 後臺模板 | |
npm install simplemde | markdown 編輯器 | 文章編輯器 | |
npm install highlight.js | 語法高亮工具 | markdown 編輯器代碼語法高亮 | |
npm install inline-attachment | 文本框拖動上傳圖片工具 | markdown 文本框圖片拖動上傳 | |
multiselect.js | 多選下拉框 | 文章多選標籤 | |
chartjs | 圖表插件 | 後臺管理界面圖表 |
開發環境時將 .ENV
文件設置爲以下所示,將郵箱認證郵件發送至當前日誌中,以便調試
MAIL_DRIVER=log
生產環境時,建議將 .ENV
文件中相關郵件設置爲本身所需配置,如下爲默認配置
MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null
.ENV
文件設置爲# 若是是開發環境的話,就把隊列驅動改回 sync 同步模式,也就是說不使用任何隊列,實時執行: QUEUE_CONNECTION=redis REDIS_CLIENT=predis
php artisan queue:listen 或者使用 php artisan horizon
使用了百度翻譯 api,請將
.ENV
中的百度 api 相關信息換成你本身的
開發者信息
若是不採用百度翻譯翻譯文章標題的話,那麼不用配置 .ENV
文件中如下配置項
# 百度翻譯 APP ID BAIDU_TRANSLATE_APPID= # 百度翻譯密鑰 KEY BAIDU_TRANSLATE_KEY=
而且也不須要更改
QUEUE_CONNECTION=redis
默認保持爲
QUEUE_CONNECTION=sync
這樣將會每發一篇文章時,將文章標題直接翻譯成拼音達到 slug 的效果。
若是不想要,發表文章評論時有郵件通知,能夠不用配置,直接忽略,功能上沒有任何影響
若是你是使用的阿里雲 ECS,那麼必定要注意,阿里雲的 ECS 默認禁用了 25 端口,須要單獨申請解封25端口, 點我解封阿里雲 ECS 25端口,若是你不知道如何解封,請查看 解封步驟。固然替代方案,你能夠採用 465 端口,若是你打算採用 465 端口,那麼須要將如下配置中的MAIL_PORT
修改成 465,而且也須要將加密類型MAIL_ENCRYPTION
修改成 ssl 便可,這裏我才用的是 qq 郵箱,可能其餘的郵箱服務有差別,視狀況而定吧。
# 使用支持 ESMTP 的 SMTP 服務器發送郵件 MAIL_DRIVER=smtp # QQ 郵箱的 SMTP 服務器地址,必須爲此值 MAIL_HOST=smtp.qq.com # QQ 郵箱的 SMTP 服務器端口,必須爲此值 MAIL_PORT=25 # 請將此值換爲你的 QQ + @qq.com MAIL_USERNAME=xxxxxxxxxxxxxx@qq.com # 密碼是咱們第一步拿到的受權碼 MAIL_PASSWORD=xxxxxxxxx # 加密類型,選項 null 表示不使用任何加密,其餘選項還有 ssl,這裏咱們使用 tls 便可,若是出現報錯的話,多半是由於這個 smtp 主機不支持 TLS,那麼只須要將此項設置爲 null 便可。 MAIL_ENCRYPTION=tls # 此值必須同 MAIL_USERNAME 一致 MAIL_FROM_ADDRESS=xxxxxxxxxxxxxx@qq.com # 用來做爲郵件的發送者名稱 MAIL_FROM_NAME=番茄燉土豆的我的博客
.ENV
配置文件中,設置成QUEUE_CONNECTION=redis
默認只在調試模式 .ENV
文件中
APP_DEBUG=true
時啓用,且 config/sudosu.php
文件中
// 容許使用的頂級域名 'allowed_tlds' => ['dev', 'local', 'test'],
頂級域名(Top Level Domain)加入你域名的頂級域名
目前項目中只支持 github 受權登陸,由於只申請了 GitHub 的 OAuth application,若是你也須要使用 GitHub 做爲第三方受權登陸,那麼須要按照如下步驟進行:
.ENV
配置文件中填寫申請成功的 Client ID 和 Client Secret。填寫好以後,直接訪問 http://larablog.test/login/github 便可支持 GitHub 第三方受權登陸,若是不設置 .ENV
配置文件,則登陸、註冊頁面不會顯示 GitHub 第三方受權登陸入口。# Github Client ID GITHUB_CLIENT_ID= # Github Client Secret GITHUB_CLIENT_SECRET=
Socialite 目前支持 Facebook,Twitter,LinkedIn,Google,GitHub,GitLab 和 Bitbucket 的身份驗證。本項目已經對以上支持的第三方登陸作了兼容性處理,若是咱們須要支持以上除 GitHub 之外的應用(由於目前已經設置好了 GitHub 相關的配置),那麼咱們只須要按照如下的步驟配置便可。這裏以 Google 爲例子。
google
的 Client ID 和 Client Secret。.ENV
配置文件中GOOGLE_CLIENT_ID="your google client id" GOOGLE_CLIENT_SECRET="your google client secret"
'google' => [ 'client_id' => env('GOOGLE_CLIENT_ID'), // google 客戶端受權 ID 'client_secret' => env('GOOGLE_CLIENT_SECRET'), // google 客戶端受權密鑰 'redirect' => '/login/google/callback', // 受權回調連接 若是 redirect 配置項包含的是相對路徑,系統會自動將其轉化爲完整 URL ],
app/Models/Auth/User.php
=> $allowedProviders
數組中public static $allowedProviders = ['github', 'google'];
命令 | 說明 | Cron |
---|---|---|
php artisan larablog:calculate-active-user | 生成活躍用戶 | 一個小時運行一次 |
php artisan larablog:sync-user-actived-at | 從 Redis 中同步最後登陸時間到數據庫中 | 天天早上 0 點準時 |
當前計劃任務主要是計算主頁右側 「活躍用戶」
artisan
命令爲:
php artisan larablog:calculate-active-user
和同步 「用戶最後活躍時間」 到數據庫
artisan
命令爲:
php artisan larablog:sync-user-actived-at
而且已經在 調度器
中設置好了相關代碼。(調度器在 app/Console/Kernel.php 文件的 schedule 方法中定義)
使用 Linux 系統的 Cron 計劃任務需執行
export EDITOR=vi && crontab -e
而後填入如下內容(注意將項目根目錄換成你本身的)
這裏個人項目根目錄爲:/home/vagrant/Code/larablog
* * * * * php /home/vagrant/Code/larablog/artisan schedule:run >> /dev/null 2>&1
若是不設定計劃任務的話,直接執行以上 Artisan 命令的話會是以下狀況:
「活躍用戶」將每 65 分鐘從新生成一次,設定計劃任務的話,默認一個小時從新生成一次。
「用戶最後活躍時間」將不會同步到數據庫中,將會直接從 Redis 中獲取,若是 Redis 中不存在,則以用戶註冊時間替代。
文件路徑 | 說明 | 調用時機 |
---|---|---|
appNotificationsArticleReplied.php | 通知文章做者有新評論回覆 | 文章被評論之後 AppObserversPortalArticleReplyObserver@created |
appJobsTranslateSlug.php | 將文章標題翻譯爲 Slug | 文章保存時 AppObserversPortalArticleArticleObserver@saved |
遵循 PSR-2 編碼風格規範
遵循 PSR-12 編碼規範擴充
代碼中涵蓋了豐富的註釋,若是仍有不清楚之處,能夠給我留言。
若是你以爲還不錯,請幫我點一下 Star,不勝感激 !❤(❤´艸`❤)
源代碼基於 MIT 協議發佈。