個人部落格分享(Laravel + Vue 元件,支援全文檢索)

tsin發表於2020-06-09

寫部落格的事情拖延了好久,是時候做個總結了。感謝Laravel China社群。第一次使用Laravel開發專案,有任務問題歡迎探討、指正。以下是部落格介紹。

環境要求

Laravel 6.X
PHP 7.2+
MySQL 5.7+
Redis 5.0+

主要功能

  • 文章
    • 整合 Markdown 編輯器,支援拖拽上傳圖片
    • 多標籤選擇器
    • 支援全文檢索(Laravel Scount + TNTSearch + Jieba 分詞)
    • 可分專題釋出文章
    • 程式碼高亮
    • 文章頁面自動生成目錄
    • 支援分類、打標籤
    • 文章瀏覽量統計
    • 按年月份歸檔
    • slug 自動生成/自動翻譯
  • 評論
    • 支援多級巢狀評論
    • 收到評論 / 回覆後站內通知
  • 使用者
    • 支援 GitHub 登入
    • 站長登入前 / 後臺,同步前 / 後臺登入狀態
  • 管理後臺
    • 站點資訊可配置
  • 一些優化項
    • 文章連結新增語義化slug
    • 側邊欄資料使用 Laravel ViewComposer 統一輸出
    • 側邊欄資料Redis快取
    • 文章瀏覽量Redis快取
    • 文章建立索引使用佇列
    • Slug自動翻譯使用佇列

專案資訊

部落格部署

下載程式碼

https://github.com/HubQin/QinBlog.git blog

Laravel 配置

  • 建立 .env 檔案

    cp .env.example .env
  • 配置 .env 檔案如下:

    App_NAME=Larashop  # <-- 應用名
    App_ENV=production # <-- 執行環境
    App_KEY= # <-- 後面將執行命令生成
    App_DEBUG=false # <-- 關閉除錯(部署過程方便除錯可先設為 true)
    App_URL=xxxx.xxx #  <-- 你的網站地址
    
    LOG_CHANNEL=stack
    
    DB_CONNECTION=MySQL
    DB_HOST=MySQL # <-- MySQL 主機,注意是填 MySQL 在 docker-compose 中的服務名
    DB_PORT=3306
    DB_DATABASE=myblog # <-- 資料庫名稱
    DB_USERNAME=root   # <-- 資料庫使用者名稱
    DB_PASSWORD=xxxxxx # <-- 資料庫密碼,填寫在 docker-compse.yml 檔案中設定的密碼
    
    BROADCAST_DRIVER=log
    CACHE_DRIVER=Redis # <-- 快取驅動
    QUEUE_CONNECTION=Redis # <-- 佇列驅動
    SESSION_DRIVER=file
    SESSION_LIFETIME=120
    
    Redis_HOST=Redis # <-- Redis 主機,填寫規則同 MySQL
    Redis_PASSWORD=xxxxxx # <-- 填寫在 redis.conf 中設定的密碼(requirepass),沒設定則不用寫
    Redis_PORT=6379
    
    # 暫時沒用到郵箱,可不配置
    MAIL_DRIVER=smtp
    MAIL_HOST=smtp.qq.com
    MAIL_PORT=465
    MAIL_USERNAME=xxxxxx@qq.com # <-- 你的郵箱
    MAIL_PASSWORD=xxxxxx # <-- 從郵箱服務商獲取的密碼
    MAIL_ENCRYPTION=ssl
    MAIL_FROM_ADDRESS=xxxxxx@qq.com # <-- 你的郵箱
    MAIL_FROM_NAME=Larashop # <-- 應用名 
  • 建立資料庫,名稱與 .envDB_DATABASE 的值相同

  • 安裝依賴

    Composer install --no-dev --prefer-dist --optimize-autoloader
  • 生成 KEY

    PHP artisan key:generate
  • 建立軟連結

    PHP artisan storage:link
  • 資料表遷移

    PHP artisan migrate --force
  • 生成配置、路由、事件快取

    PHP artisan route:cache PHP artisan config:cache PHP artisan event:cache
  • 匯入後臺選單和角色資料:在資料庫執行 /database/admin-menu-and-role-data.sql 檔案

  • 釋出管理後臺資原始檔

    PHP artisan vendor:publish --provider="Encore\\Admin\\AdminServiceProvider"
  • 建立後臺管理員賬號

    執行 PHP artisan admin:create-user,依照提示輸入管理員名稱、密碼等

Nginx 配置

可參考官網配置:learnku.com/docs/laravel/7.x/deplo...

需要更完善的配置,如配置 HTTPS,更多安全配置等,可參考我的另一篇文章:部落格:docker-compose 部署 Laravel 專案全記錄

Supervisor 程式監護配置

由於應用中使用了任務佇列,所以需要對佇列程式進行監護,防止佇列意外停止,這裡使用Supervisor。關於 Supervisor 的使用,可以參考我之前寫的這篇:部落格:Supervisor 使用總結

參考配置:

[program:qin]
process_name=%(program_name) s_%(process_num) 02 d
directory=/var/www/HTML/qin
command=PHP artisan queue:work --tries=3 --sleep=3 --daemon
autostart=true
autorestart=true
numprocs=1
user=root
stopasgroup=true
killasgroup=true
redirect_stderr=true
stdout_logfile=/var/www/HTML/qin/storage/logs/queue.log

解決檔案許可權問題

  • 日誌和快取權檔案限

    sudo chown -R $USER:www-data storage
    sudo chown -R $USER:www-data Bootstrap/cache
    chmod -R 775 storage
    chmod -R 775 Bootstrap/cache
  • 全文檢索資料檔案許可權

    由於最開始你發表文章時,索引是由佇列生成的,而佇列有可能是 root 賬號生成的(比如,在docker環境中),這可能導致 Web 訪問的賬號無法修改該檔案。所以,部署完成後發表一篇文章後, 在 storage/indices 目錄會建立 posts.index 檔案,在專案根目錄下執行 chmod 0777 storage/indices/posts.index,給予最高許可權。

  • 站點配置檔案 config/site 也要給予最高許可權,因為管理後臺配置站點要修改到這個檔案。

iconfont 圖示設定

分類圖示使用了 iconfont。配置方法:登入 www.iconfont.cn/ 建立一個專案,選擇圖示到購物車後,新增到專案。進入 “我的專案”,選擇 “Symbol” 型別,複製 .js 字尾的 url,到管理後臺 – 站點配置,填入對應的輸入框,然後儲存即可。

主要功能展示

  • 文章列表

image

  • 發表文章-分類選擇

image

  • 發表文章-打標籤

image

  • Markdown編輯器

image

  • 全文檢索

image

  • 文章頁面

image

  • 管理後臺-站點設定

image

本作品採用《CC 協議》,轉載必須註明作者和本文連結

Was mich nicht umbringt, macht mich stärker

相關文章