开源-laravel-react-hexo(next)主题的博客系统

MrCoder技术栈博客

20190124开源声明

总花费大约一周时间,陆陆续续开发,laravel+react+next主题的博客系统日渐丰满,是时候分享成果了。喜欢的请star一下。系统会持续更新。

DEMO:

http://www.wrsee.com

GIT:

https://github.com/MrCoderStack/MrCoderStackBlog.git

Gitee:

https://gitee.com/MrCoderStack/MrCoderStackBlog.git

背景

博主一直使用git page + hexo搭建个人的博客,奈何,渐渐发现了问题

  • seo差的几乎没有
  • 访问速度慢的掉渣

于是本着不重复造轮子的前提下,github上看了开源的blog系统,发现很多都不符合个人的风格,审美,可能是博主用惯了hexo的主题,终下决心自己开发一套。

技术

完全重新开发是不可能的

  • 后台(顺带学习了一下react)
    参考 https://github.com/SadCreeper/laravel-react-blog这位兄跌的开源项目,做了很多更改&优化
  • 前端
    参照hexo的next主题,开发了一套,兼容同学们自己开发多个主题

代码部署

    BLOG_THEME = next  //指定主题
    PUSH_STATE = off   //自动推送
  • php artisan migrate (建表)
  • php artisan db:seed --class=UsersTableSeeder (填充初始密码account:admin@qq.com, pass:admin)
  • php artisan storage:link
  • 配置主题支持
cd blog
vim /blog/vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php
搜索auth.login为 env('BLOG_THEME').'.auth.login';

至此,blog已经可以访问了,后台地址为http://你的域名/mrcoderadmin/,不过搜索功能还不能使用

sphinx搜索引擎

  • 安装
yum install make gcc gcc++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel
wget http://files.opstool.com/man/coreseek-4.1-beta.tar.gz
tar -xzvf coreseek-4.1-beta.tar.gz
cd coreseek-4.1-beta
cd mmseg-3.2.14
./bootstrap
./configure --prefix=/usr/local/mmseg3
make && make install
cd ..
cd csft-4.1
sh buildconf.sh(这个地方有可能生成不了configure文件,需要修改部分文件,具体内容参考http://blog.csdn.net/jcjc918/article/details/39032689)
错误1:
解决办法:在 csft-4.1/configure.ac 文件中,查找:
AC_PROG_RANLIB 
后面加上
AM_PROG_AR 
最终格式为:AC_PROG_RANLIB AM_PROG_AR
再次执行 sh buildconf.sh 
错误2:
'automake --add-missing' can install 'ar-lib'
在命令行执行
#automake --add-missing
再次执行 sh buildconf.sh
错误3
编译的时候出现
sphinxexpr.cpp:1823:43: error: ‘ExprEval’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
T val = ExprEval ( this->m_pArg, tMatch ); // 'this' fixes gcc braindamage
处理办法:
#vim /usr/local/src/coreseek-4.1-beta/csft-4.1/src/sphinxexpr.cpp
 1746                  T val = ExprEval ( this->m_pArg, tMatch );
 形式修改为  T val = this->ExprEval ( this->m_pArg, tMatch );
 1777                  T val = ExprEval ( this->m_pArg, tMatch );
 形式修改为  T val = this->ExprEval ( this->m_pArg, tMatch );
 1823                  T val = ExprEval ( this->m_pArg, tMatch );
 形式修改为  T val = this->ExprEval ( this->m_pArg, tMatch );
 错误4
 In file included from sphinxstd.cpp:24:0:
py_layer.h:16:27: fatal error: Python.h: No such file or directory
  #include   <Python.h>  
  这是由于缺少了python环境的devel支持包
  解决办法:yum install python-devel
)
./configure --prefix=/usr/local/coreseek --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql=/usr   (which mysql_config找到安装位置)
make && make install
  • 配置
mv  /usr/local/coreseek/etc/sphinx.conf /etc/sphinx.conf
vim sphinx.conf:
(简化版的sphinx的配置)
source main_src
{
        type                    = mysql
        sql_host                = localhost 
        sql_user                = root
        sql_pass                = 123456
        sql_db                  = blog
        sql_port                = 3306  # optional, default is 3306
        sql_query_pre           = SET NAMES utf8
        sql_query               = \
                SELECT ar.id,ar.content_html,ar.title,UNIX_TIMESTAMP(ar.created_at) as created_at, ca.name  FROM articles  ar \
                        left join cates ca on ar.cate_id = ca.id;
        sql_attr_uint           = id
        sql_attr_timestamp      = created_at
        sql_ranged_throttle     = 0
        sql_query_info          = SELECT ar.*, ca.name  FROM articles ar left join cates ca\
                        on ar.cate_id = ca.id  WHERE ar.id=$id;
}
index main
{
        source                  = main_src
        path                    = /usr/local/coreseek/var/data/articles
        docinfo                 = extern
        mlock                   = 0
        morphology              = none
        min_word_len            = 1
        charset_type            = zh_cn.utf-8
        html_strip              = 0
        charset_dictpath        = /usr/local/mmseg3/etc/
        ngram_len               = 0
}
indexer
{
        mem_limit               = 32M
}
searchd
{
        listen                  = 9312
        listen                  = 9306:mysql41
        log                     = /usr/local/coreseek/var/log/searchd.log
        query_log               = /usr/local/coreseek/var/log/query.log
        read_timeout            = 5
        client_timeout          = 300
        max_children            = 30
        pid_file                = /usr/local/coreseek/var/log/searchd.pid
        max_matches             = 1000
        seamless_rotate         = 1
        preopen_indexes         = 1
        unlink_old              = 1
        mva_updates_pool        = 1M
        max_packet_size         = 8M
        max_filters             = 256
        max_filter_values       = 4096
        max_batch_queries       = 32
        workers                 = threads # for RT to work
}
建立索引命令
/usr/local/coreseek/bin/indexer -c /etc/sphinx.conf --all --rotate
启动命令
/usr/local/coreseek/bin/searchd -c /etc/sphinx.conf
搜索命令
/usr/local/coreseek/bin/search -c /etc/sphinx.conf 中国
停止命令
/usr/local/coreseek/bin/searchd -c /etc/sphinx.conf --stop
  • 索引自动化建立
    (项目下的crontab子目录已有,根据你实际情况修改)
    建立shell脚本,主要用来执行sphinx建立索引,重启服务,同时会记录日志到该目录下的sphinx.log
cd crontab
vim indexer.sh:
killall -9 searchd 
/usr/local/coreseek/bin/indexer -c /etc/sphinx.conf --all --rotate && 
/usr/local/coreseek/bin/searchd -c /etc/sphinx.conf
time=`date "+%Y-%m-%d %H:%M:%S "`
echo "${time} sphinx restart success" >> /usr/share/nginx/html/blog/crontab/sphinx.log

然后定时任务中每3小时执行一次该脚本:

crontab -e
0 */3 * * * /usr/share/nginx/html/blog/crontab/indexer.sh
service crond restart

配置完毕,搜索功能已经可以使用

关于SEO

  • 目前支持百度

  • js被动推送
    需要别人访问后会自动把链接推给百度

  • 主动推送
    需要对项目下crontab目录下的push.sh进行编辑(域名需替换为实际的):

    time=`date "+%Y-%m-%d %H:%M:%S "`
    echo "${time}" `curl http://www.wrsee.com/admin-api/push` >> push.log
    

编辑定时任务:

crontab -e:
//每天下午六点执行推送
0 18 * * * /usr/share/nginx/html/blog/crontab/push.sh
service crond restart
  • 20190124新增360搜索
    百度索引起来了,关键字跑到了首页,是时候支持更多的搜索引擎了,sitemap作为一种通用的方式很受青睐,基于此,新增sitemp生成功能
    每天下午六点定时生成sitemap.txt,访问方式路径为 域名/storage/sitemap.txt,物理路径为 项目目录下的public/storage/sitemp.txt

  • 一点建议
    seo关键字很重要,请务必在后台配置好。

关于邮件通知

配置.env:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=465
MAIL_USERNAME=你得邮箱@qq.com
MAIL_PASSWORD=xxxxxxx    //去QQ邮箱设置中开启POP3/SMTP获取秘钥
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=你的邮箱@qq.com
MAIL_FROM_NAME=MrCoder技术栈

后台开启邮件通知即可

关于后台的开发

后台使用react + antdesign开发
进行二次开发的话需要安装node.js
这里我们推荐yarn(众所周知的原因)

curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
yum install yarn
yarn -v
yarn install
npm run watch  //实时调试
npm run dev    //开发打包
npm run prod   //上线打包
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容