波波无奇 發表於 2025-8-25 14:45:09

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

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">环境</a></li><li><a href="#_label1">步骤</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_0">安装PHP</a></li><li><a href="#_lab2_1_1">安装composer</a></li><li><a href="#_lab2_1_2">创建ThinkPHP项目</a></li><li><a href="#_lab2_1_3">验证</a></li><ul class="third_class_ul"><li><a href="#_label3_1_3_0">ThinkPHP内置服务器</a></li><li><a href="#_label3_1_3_1">Apache服务器</a></li></ul></ul><li><a href="#_label2">参考资料</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>环境</h2>
<ul><li>阿里云ECS服务器(CentOS 7.9)</li></ul>
<p class="maodian"><a name="_label1"></a></p><h2>步骤</h2>
<p>本文使用的是CentOS操作系统,因为阿里云官方文档上说:</p>
<p>搭建ThinkPHP框架时,已有ECS实例必须满足以下条件:</p>
<ul><li>操作系统必须为Alibaba Cloud Linux 3/2、CentOS 7.x。</li><li>&hellip;</li></ul>
<p class="maodian"><a name="_lab2_1_0"></a></p><h3>安装PHP</h3>
<p>安装EPEL源和Remi仓库:</p>
<div class="jb51code"><pre class="brush:bash;">sudo yum install -y epel-release
sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm</pre></div>
<p>启用PHP 8.0仓库:</p>
<div class="jb51code"><pre class="brush:bash;">sudo yum-config-manager --enable remi-php80
</pre></div>
<p>安装PHP:</p>
<div class="jb51code"><pre class="brush:bash;">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
</pre></div>
<p>查看PHP版本:</p>
<div class="jb51code"><pre class="brush:php;">$ php -v
PHP 8.0.30 (cli) (built: Jun4 2024 15:19:49) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.30, Copyright (c) Zend Technologies</pre></div>
<p class="maodian"><a name="_lab2_1_1"></a></p><h3>安装composer</h3>
<p>安装Composer所需依赖:</p>
<div class="jb51code"><pre class="brush:bash;">sudo yum install -y unzip git</pre></div>
<p>安装composer:</p>
<div class="jb51code"><pre class="brush:bash;">curl -sS https://getcomposer.org/installer | php
</pre></div>
<p>换个位置:</p>
<div class="jb51code"><pre class="brush:bash;">sudo mv composer.phar /usr/local/bin/composer
</pre></div>
<p>查看composer版本:</p>
<div class="jb51code"><pre class="brush:bash;">$ 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.
</pre></div>
<p class="maodian"><a name="_lab2_1_2"></a></p><h3>创建ThinkPHP项目</h3>
<p>如果不用Apache,则可以在任意目录创建ThinkPHP项目。</p>
<p>如果要使用Apache,最简单的办法是直接在 <code>/var/www/html</code> (Apache的网站根目录)目录下创建项目。</p>
<p>首先安装Apache。可参见我另一篇文档:&nbsp;<a href="https://www.jb51.net/server/348183pqc.htm" target="_blank">https://www.jb51.nethttps://www.jb51.net/server/348183pqc.htm</a></p>
<p>注意:在下面的操作前,先看一下 <code>/var/www/html</code> 的属性:</p>
<div class="jb51code"><pre class="brush:bash;">$ ll -d /var/www/html
drwxrwsr-x 2 root apache 4096 Jun32024 /var/www/html
</pre></div>
<p>确保group是 <code>apache</code> 。</p>
<p>我先安装的Apache,然后安装的PHP和composer,不知道什么原因, <code>/var/www/html</code> 目录的group又变回成了 <code>root</code> 。我只好把目录的权限重新设置了一遍。</p>
<p>在 <code>/var/www/html</code> 目录下,运行:</p>
<div class="jb51code"><pre class="brush:bash;">composer create-project topthink/think aaa
</pre></div>
<p>其中 <code>aaa</code> 是项目名称,可任意命名。</p>
<p>创建成功后,会多出 <code>aaa</code> 目录,即项目的根目录。</p>
<p>查看项目结构(只列出两级子目录):</p>
<div class="jb51code"><pre class="brush:php;">$ 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</pre></div>
<p>注:ThinkPHP的安装配置,参见我另一篇文档: <code>https://blog.csdn.net/duke_ding2/article/details/150351146</code></p>
<p class="maodian"><a name="_lab2_1_3"></a></p><h3>验证</h3>
<p class="maodian"><a name="_label3_1_3_0"></a></p><h4>ThinkPHP内置服务器</h4>
<p>在项目根目录下,运行:</p>
<div class="jb51code"><pre class="brush:php;">php think run</pre></div>
<p>打开8000端口:</p>
<div class="jb51code"><pre class="brush:bash;">sudo iptables -I INPUT -p tcp --dport 8000 -j ACCEPT</pre></div>
<p>在浏览器里访问 <code>http://&lt;公网IP&gt;:8000</code> :</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202508/2025082509355945.png" /></p>
<p class="maodian"><a name="_label3_1_3_1"></a></p><h4>Apache服务器</h4>
<p>Apache默认使用80端口。打开80端口:</p>
<div class="jb51code"><pre class="brush:bash;">sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
</pre></div>
<p>前面提到,可以把ThinkPHP项目部署在 <code>/var/www/html/aaa</code> ,其中,Apache服务器的网站根目录是 <code>/var/www/html</code> ,因此,浏览器访问地址是 <code>http://&lt;公网IP&gt;/aaa/public</code> 。</p>
<p>注:ThinkPHP的入口文件是 <code>public/index.php</code> ,其中 <code>index.php</code> 可以省略。</p>
<p>如果看到的是PHP文件的源码( <code>index.php</code> ),可能是因为 <code>php-fpm</code> 服务没有启动。</p>
<p>检查 <code>php-fpm</code> 服务状态:</p>
<div class="jb51code"><pre class="brush:bash;">sudo systemctl status php-fpm
</pre></div>
<p>如果尚未启动,则启动它:</p>
<div class="jb51code"><pre class="brush:bash;">sudo systemctl start php-fpm
</pre></div>
<p>并将其加入开机启动:</p>
<div class="jb51code"><pre class="brush:bash;">sudo systemctl enable php-fpm
</pre></div>
<p>重启Apache服务:</p>
<div class="jb51code"><pre class="brush:bash;">sudo systemctl restart httpd
</pre></div>
<p>刷新页面,现在就OK了。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202508/2025082509355973.png" /></p>
<p>但是,目前还有两个个问题。</p>
<ul><li>问题1: <code>http://&lt;公网IP&gt;/aaa/public</code> 这样的URL既不美观,也不安全</li><li>问题2:当访问其它目录时,比如 <code>http://&lt;公网IP&gt;/aaa</code> ,会直接列出目录结构:</li></ul>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202508/2025082509355978.png" /></p>
<p>解决办法:使用虚拟主机,使得 <code>http://&lt;ip&gt;</code> 直接指向 <code>/var/www/html/aaa/public</code> 。</p>
<p>在Apache的主配置文件( <code>/etc/httpd/conf.d/httpd.conf</code> )里,有如下内容:</p>
<div class="jb51code"><pre class="brush:bash;">IncludeOptional conf.d/*.conf
</pre></div>
<p>因此,我们可以创建一个单独的配置文件 <code>aaa.conf</code> ,以免混淆。</p>
<p>在 <code>/etc/httpd/conf.d</code> 目录下创建文件 <code>aaa.conf</code> (需要sudo权限),内容如下:</p>
<div class="jb51code"><pre class="brush:plain;">&lt;VirtualHost *:80&gt;
    # 设置管理员邮箱,可选
    ServerAdmin webmaster@localhost
    # !!! 核心配置:将文档根目录设置为ThinkPHP的public目录 !!!
    DocumentRoot "/var/www/html/aaa/public"
    # 设置服务器域名,如果没有域名,可以用IP或留空
    ServerName &lt;公网IP&gt;
    # 定义对文档根目录的访问权限
    &lt;Directory "/var/www/html/aaa/public"&gt;
      # 允许覆盖Apache配置(.htaccess文件生效所需)
      AllowOverride All
      # 访问权限控制
      Require all granted
      # 可选:设置目录索引文件,index.php优先于index.html
      DirectoryIndex index.php index.html index.htm
    &lt;/Directory&gt;
    # 错误日志和访问日志路径,方便排查问题
    ErrorLog /var/log/httpd/aaa_error.log
    CustomLog /var/log/httpd/aaa_access.log combined
    # 确保Apache能正确处理PHP文件(如果全局已配置则可省略)
    &lt;FilesMatch \.php$&gt;
      # SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
      SetHandler "proxy:fcgi://127.0.0.1:9000"
    &lt;/FilesMatch&gt;
&lt;/VirtualHost&gt;</pre></div>
<p>注释事项:</p>
<ul><li><code>ServerName</code> :设置为域名(如果有的话)或者公网IP</li><li><code>SetHandler</code> :根据服务器上PHP-FPM的实际配置,替换成正确的路径,具体可通过 <code>sudo grep -r &#39;listen =&#39; /etc/php-fpm.d/www.conf</code> 来查看。此处如果配置不正确的话,访问页面会报错&ldquo;Service Unavailable&rdquo;:</li></ul>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202508/2025082509355974.png" /></p>
<p>修改配置后,要重启php-fpm和httpd服务:</p>
<div class="jb51code"><pre class="brush:bash;">sudo systemctl restart php-fpm
sudo systemctl restart httpd</pre></div>
<p>现在,只需访问 <code>http://&lt;公网IP&gt;</code> :</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202508/2025082509355930.png" /></p>
<p>访问其它地址,会报错:</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202508/2025082509355945.png" /></p>
<p class="maodian"><a name="_label2"></a></p><h2>参考资料</h2>
<ul><li><code>https://help.aliyun.com/zh/ecs/use-cases/building-thinkphp-framework</code></li><li><code>https://help.aliyun.com/zh/ecs/getting-started/use-the-ecs-instance-in-the-console</code></li><li><code>https://help.aliyun.com/zh/ecs/use-cases/build-a-lamp-stack-on-a-centos-7-instance</code></li><li><code>https://blog.csdn.net/duke_ding2/article/details/150351146</code></li></ul>
<p>到此这篇关于阿里云ECS服务器轻松搭建ThinkPHP环境的文章就介绍到这了,更多相关阿里云ECS服务器搭建ThinkPHP内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
頁: [1]
查看完整版本: 阿里云ECS服务器轻松搭建ThinkPHP环境