ThinkCMF阿里云虚拟主机配置

以下是ThinkCMF官方为我们提供的如何在虚拟主机中部署,本人也没有一个一个尝试过,只是有朋友让帮忙出个站,因为用过tp索性直接拉了这个cms,因为底层文件全部放在了网站目录外,不像云服务器随意我们配置网站目录,刚用个阿里云的虚拟机就出现了问题,ftp根目录不让我们创建文件夹,甚至修改原有文件夹的名字的权限都不给,所以在官方文档的基础上,遵循阿里云虚拟机的规则下来稍微修改下配置就可以了。

如何在虚拟机部署 ThinkCMF5.1

public/index.php 文件中有个常量CMF_ROOT;

1
2
// 定义CMF根目录,可更改此目录
define('CMF_ROOT', __DIR__ . '/../');

这个常量定义了 ThinkCMF根目录的地址,public目录是个例外,它是程序的 web 根目录,也就说这个目录可以随意调整,对有自己服务器的同学,可以直接把 public 目录当网站根目录,但对于虚拟机可能无法直接把 public 当网站根目录。

今天我们来说一下怎么在虚拟机部署 ThinkCMF5.1

一般空间目录结构基本是这样:

1
2
3
4
wwwroot(或 www)
logs
data
...

这时thinkcmf 默认的结构并不适用空间目录结构,因为空间的网站根目录是 wwwrootwww,这时我们就要对默认的 cmf 进行改造了,其实很简单。

我们可以 thinkcmf 放到 wwwroot 之外,比如放在空间根目录的 thinkcmf 目录里

1
2
3
4
5
6
7
8
9
10
11
12
wwwroot(或 www)
logs
data
...
thinkcmf
app
data
public
index.php
...
vendor
...

然后把 public 目录的所有文件都移动到 wwwroot 目录下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
wwwroot(或 www)
static
upload
index.php
...
logs
data
...
thinkcmf
app
data
public
vendor
...

这时我们再改一下 index.php

1
2
// 定义CMF根目录,可更改此目录
define('CMF_ROOT', __DIR__ . '/../thinkcmf/');//NOTE 我改过了

下在完整 index.php 下如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?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.phpgetRootPath方法为:

1
2
3
4
5
// 获取应用根目录
public static function getRootPath()
{
return CMF_ROOT;
}

虚拟机部署 ThinkCMF5.1 讲解完毕!

以上官方的讲解,下面说下阿里云虚拟主机的配置,有类似要求的都可以参照:

阿里云虚拟配置

因为阿里云不允许我们创建及修改目录,但是他给我们提供了几个类似datalog之类的文件夹,其中有一个文件夹myfolder明显是为我们准备的嘛,所以,我们把底层文件全部上传到这个文件夹,将public下的文件全部上传到htdocs文件夹。

修改htdocs/index.php文件

1
2
// 定义CMF根目录,可更改此目录
define('CMF_ROOT', __DIR__ . '/../myfolder/');//NOTE 我改过了

修改Loader.php文件

该文件目录为/myfoldervendor/thinkphp/library/think/Loader.php

1
2
3
4
5
// 获取应用根目录
public static function getRootPath()
{
return CMF_ROOT;
}

再次尝试,完美了吧