- 产品名称:PHPHub5
- 项目代码:PHPHub5
- 官方地址:https://phphub.org/
PHPHub Laravel 5.1 版本。
- Nginx 1.8+
- PHP 5.6+
- Mysql 5.7+
- Redis 3.0+
- Memcached 1.4+
本项目代码使用 PHP 框架 Laravel 5.1 开发,本地开发环境使用 Laravel Homestead。
下文将在假定读者已经安装好了 Homestead 的情况下进行说明。如果您还未安装 Homestead,可以参照 Homestead 安装与设置 进行安装配置。
克隆源代码到本地:
> git clone https://github.com/summerblue/phphub5.git
1). 运行以下命令编辑 Homestead.yaml 文件:
homestead edit
2). 加入对应修改,如下所示:
folders:
- map: ~/my-path/phphub5/ # 你本地的项目目录地址
to: /home/vagrant/phphub5
sites:
- map: phphub5.app
to: /home/vagrant/phphub5/public
databases:
- phphub5
3). 应用修改
修改完成后保存,然后执行以下命令应用配置信息修改:
homestead provision
注意:有时候你需要重启才能看到应用。运行
homestead halt
然后是homestead up
进行重启。
> composer install
> cp .env.example .env
虚拟机里面:
php artisan est:install
更多信息,请查阅 ESTInstallCommand
主机里:
echo "192.168.10.10 phphub5.app" | sudo tee -a /etc/hosts
代码里自带编译后的前端代码,如果你不想开发前端样式的话,你是不需要配置前端工具集的,可直接跳过直达
链接入口
部分。
1). 安装 node.js
直接去官网 https://nodejs.org/en/ 下载安装最新版本。
2). 安装 Gulp
npm install --global gulp
3). 安装 Laravel Elixir
npm install
4). 直接 Gulp 编译前端内容
gulp
5). 监控修改并自动编译
gulp watch
- 首页地址:http://phphub5.app/
- 管理后台:http://phphub5.app/admin
在开发环境下,直接访问后台地址即可登录 1 号用户。
至此, 安装完成。
| 扩展包 | 一句话描述 | 在本项目中的使用案例 | | --- | --- | --- | --- | --- | --- | --- | --- | |infyomlabs/laravel-generator| Laravel 代码生成器 | 开发时的 Migration、Model、Controller 都使用此扩展包生成。 | | orangehill/iseed | 将数据表里的数据以 seed 的方式导出 | BannersTableSeeder, LinksTableSeeder, CategoriesTableSeeder 和 TipsTableSeeder 使用此扩展包生成。 | | barryvdh/laravel-debugbar | 调试工具栏 | 开发时必备调试工具。 | |rap2hpoutre/laravel-logviewer| Log 查看工具 | 生产环境下,使用此扩展包快速查看 Log,已做权限控制。 | | laracasts/presenter | Presenter 机制 | 以下 Model: User、Topic、Notification 都使用到了 Presenter。 | |league/html-to-markdown| 将 HTML 转换成 Markdown| 用户发帖、回复帖子时使用了此扩展包。 | |erusev/parsedown| 将 Markdown 转换成 HTML| 用户发帖、回复帖子时使用了此扩展包。 | | laravel/socialite | 官方社会化登录组件 | GitHub 登录逻辑使用了此扩展包。 | |NauxLiu/auto-correct| 自动给中英文之间加入合理的空格,纠正专用名词大小写| 用户发帖时用此扩展包过滤标题。 | | Intervention/image | 图片处理功能库 | 用发帖和回复帖子时,图片上传的逻辑使用了此扩展包。 | | zizaco/entrust | 用户组权限系统 | 整站的权限系统基于此扩展包开发。 | | VentureCraft/revisionable | 记录 Model 的变更日志 | 以下 Model: User, Topic, Reply, Category, Banner 都用此扩展包记录删除日志。| | mews/purifier | HTML 白名单过滤器 | 用户发帖、回复时防止 XSS 过滤。 | |oumen/sitemap| Sitemap 生成工具| 本项目的 sitemap 使用此扩展包生成。 | |spatie/laravel-backup| 数据库备份解决方案 | 本项目的数据库备份使用此扩展包完成。 | |summerblue/administrator| 管理后台解决方案| 本项目的后台使用此扩展包开发。 | |laracasts/flash| 简单的 flash messages | 用户登录成功、发帖成功后的提示使用此扩展包开发 |
命令 | 说明 |
---|---|
est:install | 安装命令,仅支持开发环境下运行,在初次安装才有必要运行。 |
est:reinstall | 重装命令,仅支持开发环境下运行,调用此命令会重置数据库、重置用户身份。 |
此项目的计划任务都以 Laravel 的 任务调度 方式执行。
命令 | 说明 | 调用 |
---|---|---|
backup:run --only-db |
数据库备份,每 4 小时运行一次,属于 spatie/laravel-backup 的逻辑 | php artisan backup:run --only-db |
backup:clean |
清理过期的数据库备份,每日 1:20 运行,属于 spatie/laravel-backup 的逻辑 | php artisan backup:clean |
本项目使用 infyomlabs/laravel-generator 快速构建项目, 记录这些日志目的为了方便后续开发可以借鉴。
php artisan make:scaffold Appends --schema="content:text,topic_id:integer:unsigned:default(0):index"
php artisan make:scaffold Attentions --schema="topic_id:integer:unsigned:default(0):index,user_id:integer:unsigned:default(0):index"
php artisan make:scaffold Links --schema="title:string:index,link:string:index,cover:text:nullable"
php artisan make:scaffold Replies --schema="topic_id:integer:unsigned:default(0):index,user_id:integer:unsigned:default(0):index,is_block:tinyInteger:unsigned:default(0):index,vote_count:integer:unsigned:default(0):index,body:text,body_original:text:nullable"
php artisan make:scaffold SiteStatuses --schema="day:string:index,register_count:integer:unsigned:default(0),topic_count:tinyInteger:unsigned:default(0),reply_count:integer:unsigned:default(0),image_count:integer:unsigned:default(0)"
php artisan make:scaffold Tips --schema="body:text:nullable"
php artisan make:scaffold Topics --schema="title:string:index,body:text,user_id:tinyInteger:unsigned:default(0),category_id:integer:unsigned:default(0),reply_count:integer:unsigned:default(0),view_count:integer:unsigned:default(0),vote_count:integer:unsigned:default(0),last_reply_user_id:integer:unsigned:default(0),order:integer:unsigned:default(0),is_excellent:tinyInteger:unsigned:default(0),is_wiki:tinyInteger:unsigned:default(0),is_blocked:tinyInteger:unsigned:default(0),body_original:text:nullable,excerpt:text:nullable"
php artisan make:scaffold Topics --schema="user_id:integer:unsigned:default(0),votable_id:integer:unsigned:default(0),votable_type:string:index,is:string:index"
php artisan make:scaffold Users --schema="github_id:integer:unsigned:default(0):index,github_url:string:index,email:string:index:index,name:string:index:index"
php artisan make:scaffold Votes --schema="user_id:integer:unsigned:default(0),votable_id:integer:unsigned:default(0),votable_type:string:index,is:string:index"
php artisan make:scaffold Banners --schema="position:string:index,order:integer:unsigned:default(0):index,image_url:string,title:string:index,description:text:nullable"
php artisan make:scaffold NotificationMailLogs --schema="from_user_id:integer:unsigned:default(0):index,user_id:integer:unsigned:default(0):index,type:string:index,body:text:nullable"