## 如何在虛擬機部署 ThinkCMF5.1?
在 public/index.php 文件中有個常量CMF_ROOT;
```
// 定義CMF根目錄,可更改此目錄
define('CMF_ROOT', __DIR__ . '/../');
```
這個常量定義了 ThinkCMF根目錄的地址,public目錄是個例外,它是程序的 web 根目錄,也就說這個目錄可以隨意調整,對有自己服務器的同學,可以直接把 public 目錄當網站根目錄,但對于虛擬機可能無法直接把 public 當網站根目錄。
今天我們來說一下怎么在虛擬機部署 ThinkCMF5.1 ?
一般空間目錄結構基本是這樣:
```
wwwroot(或 www)
logs
data
...
```
這時thinkcmf 默認的結構并不適用空間目錄結構,因為空間的網站根目錄是 wwwroot 或 www,這時我們就要對默認的 cmf 進行改造了,其實很簡單。
我們可以 thinkcmf 放到 wwwroot 之外,比如放在空間根目錄的 thinkcmf 目錄里
```
wwwroot(或 www)
logs
data
...
thinkcmf
app
data
public
index.php
...
vendor
...
```
然后把 public 目錄的所有文件都移動到 wwwroot 目錄下
```
wwwroot(或 www)
static
upload
index.php
...
logs
data
...
thinkcmf
app
data
public
vendor
...
```
這時我們再改一下 index.php
```
// 定義CMF根目錄,可更改此目錄
define('CMF_ROOT', __DIR__ . '/../thinkcmf/');//NOTE 我改過了
```
下在完整 index.php 下如:
~~~
<?php
// +----------------------------------------------------------------------
// | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013-2019 http://www.thinkcmf.com All rights reserved.
// +----------------------------------------------------------------------
// | Author: 老貓 <zxxjjforever@163.com>
// +----------------------------------------------------------------------
namespace think;
// [ 入口文件 ]
// 調試模式開關
define('APP_DEBUG', true);
// 定義CMF根目錄,可更改此目錄
define('CMF_ROOT', __DIR__ . '/../thinkcmf/');//NOTE 我改過了
// 定義CMF數據目錄,可更改此目錄
define('CMF_DATA', CMF_ROOT . 'data/');
// 定義應用目錄
define('APP_PATH', CMF_ROOT . 'app/');
// 定義網站入口目錄
define('WEB_ROOT', __DIR__ . '/');
// 加載基礎文件
require CMF_ROOT . 'vendor/thinkphp/base.php';
// 執行應用并響應
Container::get('app', [APP_PATH])->run()->send();
~~~
最后更改`vendor/thinkphp/library/think/Loader.php`的`getRootPath`方法為:
~~~
// 獲取應用根目錄
public static function getRootPath()
{
return CMF_ROOT;
}
~~~
虛擬機部署 ThinkCMF5.1 講解完畢!