阿里云ECS服务器搭建ThinkPHP环境

文章目录

环境

  • 阿里云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 :设置为域名(如果有的话)或者公网IP
  • SetHandler :根据服务器上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
相关推荐
晓梦.1 小时前
IPSec 安全基础
服务器·网络·安全
小李独爱秋3 小时前
UNIX发展历史与核心技术解析
服务器·操作系统·unix
佩佩(@ 。 @)3 小时前
网络编程-创建TCP协议服务器
服务器·网络·tcp/ip
时空自由民.5 小时前
linux下camera 详细驱动流程 OV02K10为例(chatgpt版本)
linux·运维·服务器
码界奇点5 小时前
Python内置函数全解析:30个核心函数语法、案例与最佳实践指南
linux·服务器·python
高能态青7 小时前
网络攻防综合实践3-4
服务器·网络·php
byte轻骑兵8 小时前
【Linux文件系统】Linux文件系统与设备驱动
linux·运维·服务器
tanxiaomi13 小时前
阿里云 OSS 前端直传实战:表单上传 + Policy 模式详解
前端·阿里云·云计算
IDIOT___IDIOT1 天前
Linux mount 命令
linux·运维·服务器