个人博客分享(Laravel + Vue 组件,支持全文检索)

写博客的事情拖延了好久,是时候做个总结了。感谢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)02d
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
本帖由系统于 5个月前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 21
cc1997

可以以可以

8个月前 评论

反手,赞

8个月前 评论

帮你顶上去 :+1:

8个月前 评论

不错 简约的风格我喜欢

8个月前 评论

博客证书过期了老铁。

5个月前 评论
小李世界

推荐使用 acme.sh 全自动

5个月前 评论

@qf-Z 多谢提醒,已重新续上

5个月前 评论

@小李世界 docker版的不太好自动续,定时任务行不通,有空我改为原生的acme.sh

5个月前 评论

你好,请问创建用户是有这个错误,是什么原因,我按照提示输入了登陆账号,密码和用户名

In ChoiceQuestion.php line 36:

Choice question must have at least 1 choice available.

5个月前 评论

@barret 你是登录管理后台吧,laravel-admin roles表需要有一个角色,我是随便添加一条记录进去。

5个月前 评论

搜索已经500了 :hushed:

5个月前 评论

@tsin 好的, 谢谢了, 我去试下

5个月前 评论

@tsin 请问需要配置哪些菜单呢? 需要手动添加数据库吗

5个月前 评论

@榴莲君 奇怪,今天试了下,并不会

5个月前 评论

@L学习不停 今天试了下 没问题

5个月前 评论

@barret 执行迁移命令,还有再运行一个sql文件创建后台菜单和角色。上文有提到的。

5个月前 评论

@L学习不停 @榴莲君 发现是没登录搜索有问题,已修复

5个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!