当前位置: 首页 > news >正文

阿里云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 :设置为域名(如果有的话)或者公网IP
  • SetHandler :根据服务器上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
http://www.dtcms.com/a/348697.html

相关文章:

  • 互联网大厂AI/大模型应用开发工程师面试剧本与解析
  • 阿里云云数据库RDS PostgreSQL管控功能使用
  • 基于SpringBoot的婚纱影楼服务预约平台【2026最新】
  • Spring AI 学习笔记(2)
  • GitHub 热榜项目 - 日榜(2025-08-24)
  • Wireshark USRP联合波形捕获(下)
  • windows上如何实现把指定网段的流量转发到指定的端口,有哪些界面化的软件用来配置完成,类似于 Linux中的iptables规则实现
  • 6.1Element UI布局容器
  • 【Luogu】P2602 [ZJOI2010] 数字计数 (数位DP)
  • 基于大模型的对话式推荐系统技术架构设计-- 大数据平台层
  • 07 - spring security基于数据库的账号密码
  • window11无法连接Fortinet SSL VPN
  • Elasticsearch如何确保数据一致性?
  • 『深度编码』操作系统-进程之间的通信方法
  • 记录一下TVT投稿过程
  • 阿里云大模型应用实战:从技术落地到业务提效
  • Dify 从入门到精通(第 53/100 篇):Dify 的分布式架构(进阶篇)
  • 兑换汽水瓶
  • 关于并查集
  • 数字营销岗位需要具备的能力有哪
  • Java 内存模型(JMM)与并发可见性:深入理解多线程编程的基石
  • Flink session cluster与Flink per-job cluster区别
  • Zynq开发实践(Verilog、仿真、FPGA和芯片设计)
  • Linux-函数的使用-编写监控脚本
  • 栈的创建和基本操作
  • Arbess V1.1.4版本发布,支持Mysql数据库,Ubuntu系统,新增SSH及Hadess上传下载任务
  • week4-[字符数组]月份
  • TCP连接与UDP协议
  • 构建现代前端工程:Webpack/Vite/Rollup配置解析与最佳实践
  • C++20: std::span