# 1.8 設置一個虛擬主機
讓我們再次回顧一下到目前為止我們進行的工作。我們已經有了一個運行正常的LAMP系統運行在一個Vagrant的盒子中。我們可以通過SSH遠程登錄到這個系統,進行常規的的操作。同時,缺省地,我們有一個Windows下的目錄(`f:\vagrant_env\remote`)被映射到了虛擬環境中的`/home/vagrant`中。
我的設想是,我們可以在Windows中利用比較豐富的GUI資源和程序進行PHP和Web應用的編程,對目錄和文件的操作會即時反應到盒子中,然后我們在盒子中來提供這個Web應用的訪問。在這種配置下,我們能最大限度地模擬最終的生產環境。用一張圖來說明可能更好:

如果我們在Windows機器中用瀏覽器訪問Vagrant盒子:`http://192.168.2.100`,我們已經能夠看到由Vagrant盒子伺服的Web內容(現在當然只是Apache缺省的歡迎頁面)。
但是我們想做得更完善一點。我想做到的是,在Windows中可以通過`http://vagrant`這樣的方式來訪問Vagrant中的Web應用,而且這個應用是放在一個我們指定的目錄中,便于管理和分發。
## 1.8.1 設置Windows的hosts
要能在Windows中用`vagrant`這樣的“域名”來訪問遠程服務器,我們需要修改Windows的系統文件`hosts`,它位于`C:\Windows\System32\drivers\etc`目錄下。
注意:這是一個系統文件。你需要有Administrator權限才能對這個文件進行修改。
在這個文件中加入這么一行:
~~~
192.168.2.100 vagrant
~~~
保存并退出后,在Windows的命令行中輸入:`ping vagrant`應該會返回正確的PING信息。
如果我們現在用`http://vagrant`來訪問我們的Vagrant盒子,我們還是會得到同樣的Apache歡迎頁面。這是因為,我們并沒有在Vagrant中設置一個“記錄”來處理針對`vagrant`的Web訪問。
## 1.8.2 設置Vagrant的虛擬主機
我建議使用虛擬主機的方式來伺服我們的Web應用。自Apache 2.4以來,Apache對虛擬主機的設置和伺服做了一些改動,因此需要一些相關的指令來設置虛擬主機。
登錄Vagrant后,我們進入`/etc/apache2/sites-available`目錄,目前這里應該只有一個名為`000-default.conf`的站點配置文件和一個`default-ssl.conf`的文件。
要創建我們自己虛擬主機(站點)配置,我們可以從這個`000-default.conf`出發。先將這個文件做個拷貝:
`sudo cp 000-default.conf 001-vagrant.conf`
然后在終端中用文本編輯其對其進行編輯如下。
~~~
<VirtualHost *:80>
ServerName vagrant
ServerAdmin webmaster@localhost
DocumentRoot /vagrant
<Directory "/vagrant">
Options FollowSymLinks Indexes
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
~~~
說明如下:
1. `ServerName`設置為`vagrant`。這和我們在上一步中對Windows中的`hosts`文件的修改所提供的名字是一樣的。
2. `DocumentRoot /vagrant`。為了方便站點文件的同步,我簡單地將該站點的根目錄設置到了`/vagrant`這個目錄。我們應該還記得,這個目錄是映射到Windows下的`f:\vagrant_env\remote`目錄的。
3. `<Directory "/vagrant">...</Directory>`這一段基本應該按照樣本書寫。這樣才能保證我們能在遠程用`http://vagrant`來訪問這個站點。
修改完畢后,我們用如下命令使該站點成為可用:
`sudo a2ensite 001-vagrant.conf`
這個命令其實就是在`/etc/apache2/sites-enabled`中做了一個符號鏈接到`001-vagrant.conf`而已。
最后,我們重啟Apache服務。
## 1.8.3 訪問虛擬主機
一切就緒,讓我們來測試一下。
在`f:\vagrant_env\remote`中創建一個`index.php`文件,內容很簡單:
~~~
<?php
phpinfo();
~~~
保存文件,然后在瀏覽器中訪問這個地址:`http://vagrant`。瀏覽器應該顯示如下內容:

你需要花一點時間來瀏覽一下這個非常長的頁面。需要關注的地方有:
* Apache調用PHP時所使用的`php.ini`。在我的配置中,這個文件是?`/etc/php5/apache2/php.ini`。
* PHP API版本。我的是`20131106`,因為我用的是PHP 5.6.4。
* 相應的PHP擴展(模塊)是否已經被啟用,如MySQL,MySQL-PDO,GD,mcrypt等等……
## 1.8.4 可能出現的錯誤
如果你不能看到這個頁面,那么可能出錯的地方有:
* 確定`index.php`文件內容正確,也在正確的位置;
* Apache服務已經啟動;
* PHP安裝正確;
* Windows下的`hosts`文件有`vagrant`這個域名的解析;
* Apache中虛擬主機的設置正確。
到此,我們的開發環境已經搭建成功。接下來我們要開始使用Symfony來開發我們的應用。
- 引言
- 1 LAMP
- 1.1 安裝虛擬機
- 1.2 安裝Vagrant
- 1.3 安裝Ubuntu
- 1.4 安裝Apache 2
- 1.5 安裝PHP
- 1.6 安裝MySQL服務器
- 1.7 最后的微調
- 1.8 設置一個虛擬主機
- 1.9 一個趁手的IDE
- 2 Symfony 3和重要構件
- 2.1 Symfony 3
- 2.2 Doctrine
- 2.3 Twig
- 2.4 Composer
- 3 Symfony重要概念
- 3.1 MVC
- 3.2 Bundle/包
- 3.3 Route/路由
- 3.4 Controller/控制器
- 3.5 Entity/實體
- 3.6 Repository/倉庫
- 3.7 Template/模板
- 3.8 Test/測試
- 4 藏書管理程序的結構
- 5 創建應用
- 5.1 建立版本管理
- 5.2 建立數據庫
- 5.3 應用結構
- 5.4 建立數據庫實體
- 5.5 樣本數據
- 5.6 路由
- 5.7 模板
- 5.8 開始編寫首頁
- 5.9 書籍詳情頁面
- 5.10 書籍列表頁面
- 5.11 書籍搜索
- 6 用戶和后臺
- 7 結語