[TOC]
## 简介
在本节里,我们介绍如何使用 Homestead 来创建 ThinkBBS 这个项目,并完成 Git 仓库创建。
## 做好准备
由于我们接下来的开发都会在 Homestead 上进行,因此,在开始本章教程之前,请保证你的 Homestead 虚拟机已成功开启并登录。使用下面命令来启动和登录 Homestead :
```shell
> cd ~/Homestead && vagrant up
> vagrant ssh
```
在虚拟机中进入Code文件夹(注意:Code 文件夹是我们按照 [开发环境搭建](https://learnku.com/docs/laravel-development-environment/5.8/development-environment-macos/4372) 配置的共享文件夹):
```
$ cd ~/Code
```
>[info] 注意:本书中因为虚拟机的存在,我们会有两个运行命令行的环境,一个是 **宿主机**,另一个是 **Homestead** 虚拟机。我们会在命令的前面使用『命令行提示符』来区分宿主机和 Homestead 。请记住以 **\>** 开头的命令是运行在宿主机里,以 **$** 开头的命令是运行在 Homestead 虚拟机里。详见 [写作约定 - 命令行提示符](../c1_base/01050_写作约定.md) 。
## Composer 加速
在创建项目之前,我们先在虚拟机中运行以下命令来实现 [Composer 安装加速](https://learnku.com/composer/wikis/30594) :
```shell
$ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
```
## 创建 ThinkBBS 项目
下面让我们来使用 Composer 创建一个名为 ThinkBBS 的应用,后面我们将基于这个应用做更多的功能完善:
```shell
$ cd ~/Code
$ composer create-project topthink/think ThinkBBS --prefer-dist "6.0.*"
```
创建完后,进入项目根目录使用下面这行命令可以查看创建项目使用的 thinkphp 版本:
```shell
$ cd ~/Code/ThinkBBS/
$ php think version
v6.0.0
```
![Create Project](http://tbs.zhanghong.info/images/chapters/02/040_create_project_60.png)
>[warning] 版本更迭再正常不过,安装界面的版本无需跟上面一致。官方在 [ThinkPHP6.0完全开发手册](https://www.kancloud.cn/manual/thinkphp6_0/1037481) 里创建项目时并没有指定 ThinkPHP 版本(参数--prefer-dist),但考虑到如果不指定版本 composer 会使用最新版本框架创建项目,为了避免大家学习过程中使用的框架版本和本教程版本差别过大,所以我们在这里用参数 `--prefer-dist "6.0.*"` 指定用 ThinkPHP6.0 版本创建项目。
## 修改 hosts
使用 Homestead 开发时,我们在每个项目创建完成的第一步是设置项目的 Homestead 配置,让应用能在 Homestead 的开发环境上跑起来。
为了方便记忆,一般我们都会将 IP 映射为域名,然后通过设置宿主机的 `hosts` 文件来指定 IP 与域名之间的映射关系。由于我们在 Homestead 上默认使用 `192.168.10.10` 来作为虚拟机的 IP 的地址,因此我们需要在宿主机的 hosts 文件中将域名指向该 IP :
Mac 下打开 hosts 文件:
```shell
> subl /etc/hosts
```
Windows 下打开 hosts 文件:
```shell
subl C:/Windows/System32/Drivers/etc/hosts
```
>[info] Windows 下,如果你没有集成 subl 命令的话, 请使用编辑器直接打开文件,Hosts 文件路径是 C:\\Windows\\System32\\Drivers\\etc\\hosts 。如果你不懂怎样修改系统的 host 文件的话,请参考 [如何修改windows系统的host文件](https://www.cnblogs.com/MLing/p/8036371.html) 。
文件成功打开后,在 hosts 文件最后面新增下面一行以完成设置:
```shell
192.168.10.10 bbs.test
```
## 新增站点
如果你安装了 Sublime Text,可通过运行下面命令打开 `Homestead.yaml` 文件:
```shell
> subl ~/Homestead/Homestead.yaml
```
在 Homestead.yaml 文件中新增 ThinkBBS 项目的 `sites` 、 `databases` 和 `ports` 的相关设置:
```
---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
- map: ~/Code
to: /home/vagrant/Code
sites:
- map: homestead.test
to: /home/vagrant/Code/Laravel/public
- map: bbs.test # <--- 这里
to: /home/vagrant/Code/ThinkBBS/public # <--- 这里
databases:
- homestead
- think_bbs # <--- 这里
variables:
- key: APP_ENV
value: local
# blackfire:
# - id: foo
# token: bar
# client-id: foo
# client-token: bar
ports:
- send: 58000 # <--- 这里
to: 8000
```
我们主要设置了 `sites` 、 `databases` 和 `ports` 这三项。 `sites` 会将域名 `bbs.test` 映射到虚拟机的 `/home/vagrant/Code/ThinkBBS/public` 目录, `databases` 则为新创建的项目指定数据库名,而 `ports` 是为我们使用 ThinkPHP 内置服务( Built-in Server )启动项目时指定的端口映射。
## 重启虚拟机
在我们每次对 `Homestead.yaml` 文件进行了更改之后,都需要运行下面命令来使其更改生效:
```shell
> cd ~/Homestead && vagrant provision && vagrant reload
```
命令说明:
* `vagrant provision` 是命令 Vagrant 重新加载 `Homestead.yaml` 配置;
* `vagrant reload` 是重启虚拟机使更改生效。
## 访问应用
1. 我们在浏览器中打开 [http://bbs.test](http://bbs.test) 可以看到如下界面:
![Site Home](http://tbs.zhanghong.info/images/chapters/02/040_vhost_port_perview_60.png)
2. 除使用域名 [http://bbs.test](http://bbs.test) 访问外,我们还可以使用框架自带的内置服务器查看运行结果,详细步骤如下:
1)进入项目根目录启动内置服务器:
```shell
# 内置服务器默认监听的是 8000 端口
$ php think run
ThinkPHP Development server is started On <http://127.0.0.1:8000/>
You can exit with `CTRL-C`
Document root is: /home/vagrant/Code/ThinkBBS/public
```
2) 在浏览器中打开 [http://192.168.10.10:8000](http://192.168.10.10:8000) 或 [http://localhost:58000](http://localhost:58000) ,可以看到以下结果。
虚拟机 IP + 端口访问结果:
![Preview By VM](http://tbs.zhanghong.info/images/chapters/02/040_vm_port_perview_60.png)
宿主机 IP + 端口访问结果:
![Preview By Host](http://tbs.zhanghong.info/images/chapters/02/040_host_port_perview_60.png)
>[info] 我们启动内置服务器后之所以使用 [http://192.168.10.10:8000](http://192.168.10.10:8000) 和 [http://localhost:58000](http://localhost:58000) 两个地址可以浏览项目是因为此处使用了 VirtualBox 虚拟机的『端口转发』功能,Homestead 脚本默认将本机端口 58000 转发到虚拟机里的 8000 端口。
>
> 到这里我们知道项目创建成功后,我们可以使用 Nginx 虚拟域名和框架内置服务器查看项目运行结果。因为这两种查看方式的运行结果相同,所以在本教程里我们统一使用 **Nginx 虚拟域名** 这种方式查看运行结果。
## Git 代码版本控制
为了在接下来更好的追踪项目代码的更改,我们还需要将新建的 ThinkPHP 项目纳入到 Git 版本管理中。不过在把代码文件纳入版本管理之前我们需要设置一下 Git 的忽略文件规则。
`.gitignore` 是 Git 用来存储忽略文件规则的文件,每次当把文件纳入到版本控制时 Git 会根据该文件里的模式规则来判断是否将提交文件添加到版本控制中。ThinkPHP 框架为我们生成项目时也在项目根目录创建了一个 `.gitignore` ,以下是该文件内设置的忽略文件规则:
*.gitignore*
```
/.idea
/.vscode
/vendor
*.log
.env
```
在提交代码之前,我们需要把 `.gitignore` 文件修改成以下内容:
*.gitignore*
```
/.idea
/.vscode
/vendor
*.log
.env
# 忽略 mac 系统的隐藏文件
.DS_Store
# 忽略 vi/vim 非正常关闭文件
*.swp
```
接下来,我们初始化版本库并把所有文件纳入到版本控制里:
```shell
$ cd ~/Code/ThinkBBS
$ git init
$ git add -A
$ git commit -m "初始化"
```
我们前面已讨论过关于使用 GitHub 的种种好处,而现在是我们开始正式应用它的时候了。熟悉一个东西最快的方法就是不断训练,不断重复,因此本教程接下来项目构建的代码都将统一托管到 GitHub 上,以便让你对 GitHub 的使用更加熟悉。现在,我们需要在 GitHub 上新建一个名为 thinkbbs 的项目 [点击创建新项目](https://github.com/new),并将代码推送上去:
注意请把下面的 <username> 替换为你的用户名。
```shell
$ git remote add origin git@github.com:<username>/thinkbbs.git
$ git push -u origin master
```
- 第一章 基础信息
- 序言
- 关于作者
- PHP和ThinkPHP
- 如何正确阅读本书
- 写作约定
- 开发规范
- 章节体例
- 本书源码
- 第二章 舞台布置
- 开发环境
- 产品分解
- Git和GitHub
- 创建项目
- 数据库视图管理工具
- 统一代码风格
- 目录结构
- 配置信息
- 后台应用搭建
- 助手函数
- 前台布局模板
- 基础控制器
- 小结
- 第三章 注册登录
- 数据迁移
- 表单提交
- 表单验证
- 模型验证
- 短信提供商
- 发送短信
- 手机验证
- 注册提醒
- 登录与退出
- 重置密码
- 数据填充
- 小结
- 第四章 用户相关
- 个人中心
- 编辑个人资料
- 上传图片
- 上传头像
- 显示头像
- 限制头像分辨率
- 裁剪头像
- 显示注册时间
- 授权访问
- 小结
- 第五章 帖子列表
- 话题分类
- 话题模型
- 话题列表
- 性能优化
- 分类话题列表
- 话题列表排序
- 用户发布的话题
- 分页器美化
- 小结
- 第六章_帖子CURD
- 创建话题
- 生成摘要
- 编辑器优化
- 上传图片
- 显示话题
- 编辑话题
- 删除话题
- 小结
- 第七章 帖子回复
- 回复模型
- 回复列表
- 发表回复
- 删除回复
- XSS 安全漏洞
- 小结
- 第八章 角色权限和管理后台
- 多角色用户权限
- 用户管理
- 话题管理
- 回复管理
- 小结
- 第九章 杂项
- 边栏活跃用户
- 用户最后登录时间
- 边栏资源推荐
- 站点首页
- 小结
- 第十章 总结
- 全书总结
- 附录
- 浅谈ThinkPHP6.0 路由