阿里云ECS服务器轻松搭建ThinkPHP环境
作者:蓝黑2020
环境
- 阿里云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://www.jb51.net/server/348183pqc.htm
注意:在下面的操作前,先看一下 /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.md 16 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.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服务:
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
到此这篇关于阿里云ECS服务器轻松搭建ThinkPHP环境的文章就介绍到这了,更多相关阿里云ECS服务器搭建ThinkPHP内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!