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