[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
```

>[warning] 版本更迭再正常不過,安裝界面的版本無需跟上面一致。官方在 [ThinkPHP6.0完全開發手冊](http://www.hmoore.net/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) 可以看到如下界面:

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 + 端口訪問結果:

宿主機 IP + 端口訪問結果:

>[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 路由