阿里云ECS服务器搭建ThinkPHP环境
文章目录
- 环境
- 步骤
- 安装PHP
- 安装composer
- 创建ThinkPHP项目
- 验证
- ThinkPHP内置服务器
- Apache服务器
- 参考
环境
- 阿里云ECS服务器(CentOS 7.9)
步骤
本文使用的是CentOS操作系统,因为阿里云官方文档上说:
搭建ThinkPHP框架时,已有ECS实例必须满足以下条件:
- 操作系统必须为Alibaba Cloud Linux 3/2、CentOS 7.x。
- …
安装PHP
安装EPEL源和Remi仓库:
sudo yum install -y epel-release
sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
启用PHP 8.0仓库:
sudo yum-config-manager --enable remi-php80
安装PHP:
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版本:
$ 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所需依赖:
sudo yum install -y unzip git
安装composer:
curl -sS https://getcomposer.org/installer | php
换个位置:
sudo mv composer.phar /usr/local/bin/composer
查看composer版本:
$ 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
的属性:
$ 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
目录下,运行:
composer create-project topthink/think aaa
其中 aaa
是项目名称,可任意命名。
创建成功后,会多出 aaa
目录,即项目的根目录。
查看项目结构(只列出两级子目录):
$ 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.md16 directories, 35 files
注:ThinkPHP的安装配置,参见我另一篇文档: https://blog.csdn.net/duke_ding2/article/details/150351146
验证
ThinkPHP内置服务器
在项目根目录下,运行:
php think run
打开8000端口:
sudo iptables -I INPUT -p tcp --dport 8000 -j ACCEPT
在浏览器里访问 http://<公网IP>:8000
:
Apache服务器
Apache默认使用80端口。打开80端口:
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
服务状态:
sudo systemctl status php-fpm
如果尚未启动,则启动它:
sudo systemctl start php-fpm
并将其加入开机启动:
sudo systemctl enable php-fpm
重启Apache服务:
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
)里,有如下内容:
IncludeOptional conf.d/*.conf
因此,我们可以创建一个单独的配置文件 aaa.conf
,以免混淆。
在 /etc/httpd/conf.d
目录下创建文件 aaa.conf
(需要sudo权限),内容如下:
<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.htmlDirectoryIndex index.php index.html index.htm</Directory># 错误日志和访问日志路径,方便排查问题ErrorLog /var/log/httpd/aaa_error.logCustomLog /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服务:
sudo systemctl restart php-fpmsudo 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