文章目录
环境
- 阿里云ECS服务器(CentOS 7.9)
步骤
本文使用的是CentOS操作系统,因为阿里云官方文档上说:
搭建ThinkPHP框架时,已有ECS实例必须满足以下条件:
- 操作系统必须为Alibaba Cloud Linux 3/2、CentOS 7.x。
- ...
安装PHP
安装EPEL源和Remi仓库:
powershell
sudo yum install -y epel-release
sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
启用PHP 8.0仓库:
powershell
sudo yum-config-manager --enable remi-php80
安装PHP:
powershell
sudo yum install -y php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json
查看PHP版本:
powershell
$ php -v
PHP 8.0.30 (cli) (built: Jun 4 2024 15:19:49) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.30, Copyright (c) Zend Technologies
安装composer
安装Composer所需依赖:
powershell
sudo yum install -y unzip git
安装composer:
powershell
curl -sS https://getcomposer.org/installer | php
换个位置:
powershell
sudo mv composer.phar /usr/local/bin/composer
查看composer版本:
powershell
$ composer --version
Composer version 2.8.11 2025-08-21 11:29:39
PHP version 8.0.30 (/usr/bin/php)
Run the "diagnose" command to get more detailed diagnostics output.
创建ThinkPHP项目
如果不用Apache,则可以在任意目录创建ThinkPHP项目。
如果要使用Apache,最简单的办法是直接在 /var/www/html
(Apache的网站根目录)目录下创建项目。
首先安装Apache。可参见我另一篇文档: https://blog.csdn.net/duke_ding2/article/details/150654099
注意:在下面的操作前,先看一下 /var/www/html
的属性:
powershell
$ ll -d /var/www/html
drwxrwsr-x 2 root apache 4096 Jun 3 2024 /var/www/html
确保group是 apache
。
我先安装的Apache,然后安装的PHP和composer,不知道什么原因, /var/www/html
目录的group又变回成了 root
。我只好把目录的权限重新设置了一遍。
在 /var/www/html
目录下,运行:
powershell
composer create-project topthink/think aaa
其中 aaa
是项目名称,可任意命名。
创建成功后,会多出 aaa
目录,即项目的根目录。
查看项目结构(只列出两级子目录):
powershell
$ tree -L 2
.
├── app
│ ├── AppService.php
│ ├── BaseController.php
│ ├── common.php
│ ├── controller
│ ├── event.php
│ ├── ExceptionHandle.php
│ ├── middleware.php
│ ├── provider.php
│ ├── Request.php
│ └── service.php
├── composer.json
├── composer.lock
├── config
│ ├── app.php
│ ├── cache.php
│ ├── console.php
│ ├── cookie.php
│ ├── database.php
│ ├── filesystem.php
│ ├── lang.php
│ ├── log.php
│ ├── middleware.php
│ ├── route.php
│ ├── session.php
│ ├── trace.php
│ └── view.php
├── extend
├── LICENSE.txt
├── public
│ ├── favicon.ico
│ ├── index.php
│ ├── robots.txt
│ ├── router.php
│ └── static
├── README.md
├── route
│ └── app.php
├── runtime
├── think
├── vendor
│ ├── autoload.php
│ ├── bin
│ ├── composer
│ ├── league
│ ├── psr
│ ├── services.php
│ ├── symfony
│ └── topthink
└── view
└── README.md
16 directories, 35 files
注:ThinkPHP的安装配置,参见我另一篇文档: https://blog.csdn.net/duke_ding2/article/details/150351146
验证
ThinkPHP内置服务器
在项目根目录下,运行:
powershell
php think run
打开8000端口:
powershell
sudo iptables -I INPUT -p tcp --dport 8000 -j ACCEPT
在浏览器里访问 http://<公网IP>:8000
:

Apache服务器
Apache默认使用80端口。打开80端口:
powershell
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
前面提到,可以把ThinkPHP项目部署在 /var/www/html/aaa
,其中,Apache服务器的网站根目录是 /var/www/html
,因此,浏览器访问地址是 http://<公网IP>/aaa/public
。
注:ThinkPHP的入口文件是 public/index.php
,其中 index.php
可以省略。
如果看到的是PHP文件的源码( index.php
),可能是因为 php-fpm
服务没有启动。
检查 php-fpm
服务状态:
powershell
sudo systemctl status php-fpm
如果尚未启动,则启动它:
powershell
sudo systemctl start php-fpm
并将其加入开机启动:
powershell
sudo systemctl enable php-fpm
重启Apache服务:
powershell
sudo systemctl restart httpd
刷新页面,现在就OK了。

但是,目前还有两个个问题。
- 问题1:
http://<公网IP>/aaa/public
这样的URL既不美观,也不安全 - 问题2:当访问其它目录时,比如
http://<公网IP>/aaa
,会直接列出目录结构:

解决办法:使用虚拟主机,使得 http://<ip>
直接指向 /var/www/html/aaa/public
。
在Apache的主配置文件( /etc/httpd/conf.d/httpd.conf
)里,有如下内容:
powershell
IncludeOptional conf.d/*.conf
因此,我们可以创建一个单独的配置文件 aaa.conf
,以免混淆。
在 /etc/httpd/conf.d
目录下创建文件 aaa.conf
(需要sudo权限),内容如下:
powershell
<VirtualHost *:80>
# 设置管理员邮箱,可选
ServerAdmin webmaster@localhost
# !!! 核心配置:将文档根目录设置为ThinkPHP的public目录 !!!
DocumentRoot "/var/www/html/aaa/public"
# 设置服务器域名,如果没有域名,可以用IP或留空
ServerName <公网IP>
# 定义对文档根目录的访问权限
<Directory "/var/www/html/aaa/public">
# 允许覆盖Apache配置(.htaccess文件生效所需)
AllowOverride All
# 访问权限控制
Require all granted
# 可选:设置目录索引文件,index.php优先于index.html
DirectoryIndex index.php index.html index.htm
</Directory>
# 错误日志和访问日志路径,方便排查问题
ErrorLog /var/log/httpd/aaa_error.log
CustomLog /var/log/httpd/aaa_access.log combined
# 确保Apache能正确处理PHP文件(如果全局已配置则可省略)
<FilesMatch \.php$>
# SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
</VirtualHost>
注释事项:
ServerName
:设置为域名(如果有的话)或者公网IPSetHandler
:根据服务器上PHP-FPM的实际配置,替换成正确的路径,具体可通过sudo grep -r 'listen =' /etc/php-fpm.d/www.conf
来查看。此处如果配置不正确的话,访问页面会报错"Service Unavailable":

修改配置后,要重启php-fpm和httpd服务:
powershell
sudo systemctl restart php-fpm
sudo systemctl restart httpd
现在,只需访问 http://<公网IP>
:

访问其它地址,会报错:

参考
https://help.aliyun.com/zh/ecs/use-cases/building-thinkphp-framework
https://help.aliyun.com/zh/ecs/getting-started/use-the-ecs-instance-in-the-console
https://help.aliyun.com/zh/ecs/use-cases/build-a-lamp-stack-on-a-centos-7-instance
https://blog.csdn.net/duke_ding2/article/details/150351146