## 如何在虚拟机部署 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 讲解完毕!