如何在腾讯云CVM上配置ThinkPHP云主机并部署?

2026-05-08 02:463阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1095个文字,预计阅读时间需要5分钟。

如何在腾讯云CVM上配置ThinkPHP云主机并部署?

直接上结论:

为什么不能用腾讯云市场的 LNMP 镜像

市场镜像大多基于老旧 CentOS 7 + PHP 7.2 静态编译,模块硬编码、升级路径断裂。比如你项目依赖 yaml 扩展,Ubuntu 22.04 的 apt 源默认不带,而市场镜像连 pecl 都没装全;又或者你用了 mysql_connect(),PHP 8+ 已彻底移除该函数,但镜像里 PHP 版本锁死,没法切到 7.4 兼容。

更实际的问题是:open_basedir 路径写死、php-fpm.sock 权限混乱、SSL 自动续签配置缺失——这些在 lnmp install 脚本里都已预置处理,手改配置容易漏项。

  • lnmp.org:执行 ./lnmp install,自动关 SELinux、调 ulimit、生成防跨站配置
  • Ubuntu 20.04+ 用户注意先 sudo systemctl disable systemd-resolved,否则 apt update 可能超时中断
  • 装完用 lnmp php-version 切 PHP 8.2(新项目)或 7.4(老项目),别硬改 /usr/local/php/bin/php 软链

ThinkPHP 的 public/ 目录必须暴露为 Web 根目录

很多人把整个 ThinkPHP 项目(含 application/thinkruntime/)直接扔进 /var/www/html,结果访问域名只看到 404 或直接列出文件——因为 public/index.php 才是唯一合法入口,其他目录绝不能被 Web 服务器直接访问。

立即学习“PHP免费学习笔记(深入)”;

Nginx 配置里必须明确指定 root /data/wwwroot/your-project/public;,而不是项目根目录。否则 .htaccess(Apache)或重写规则(Nginx)根本不会生效,index.php/s=/admin 这类路由全崩。

  • 确认 location / 块内写了标准重写:if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; }
  • 别套用 Laravel 或 WordPress 的伪静态规则,ThinkPHP 5.1+ 依赖 s= 参数解析 PATH_INFO
  • 宝塔用户请手动清空伪静态框,粘贴上述规则,不要点“启用 ThinkPHP”按钮——它有时会加错 try_files

runtime/ 和 vendor/ 目录部署常见坑

Class 'think\App' not found 不是框架缺文件,是自动加载器挂了。核心就两点:一是 vendor/autoload.php 没传上去,二是 runtime/ 不可写或路径写死了本地绝对路径。

上传前必须执行 composer install --no-dev,而不是直接复制本地 vendor/;Git 部署要检查 vendor/ 是否被 .gitignore 排除。另外,index.php 里引入 autoload 的路径如果写成 /Users/xxx/project/vendor/autoload.php,上线必报错。

  • runtime/ 目录必须存在,且权限为 755(Linux 下 chmod -R 755 runtime
  • 但不要上传本地已生成的 runtime/cache/runtime/log/,清空再传,避免缓存污染
  • 确认 opcache.enable_cli = 1php -i | grep opcache 查),否则 php think optimize:route 生成的缓存无法加载

HTTPS 下上传大文件失败怎么调

开 HTTPS 后,413 Request Entity Too Large 很常见,不是腾讯云限制,是你自己没对齐 Nginx 和 PHP 的三处上限:

Nginx 的 client_max_body_size、PHP 的 upload_max_filesizepost_max_size 必须一致,且 post_max_sizeupload_max_filesize。漏调任何一项都会导致静默失败或 413。

  • Nginx 配置(server 块内):client_max_body_size 100m;
  • PHP 配置(php.ini):upload_max_filesize = 100Mpost_max_size = 100Mmax_execution_time = 300
  • 改完必须执行 lnmp php reload(不是 restart),reload 不中断已有请求

复杂点在于:有些项目还用了 nginx-unitoneinstack,它们的 PHP 配置路径和重载命令不同,得先 find / -name php.ini 2>/dev/null 定位真实配置文件,再确认 reload 方式。别假设所有环境都走 lnmp 流程。

本文共计1095个文字,预计阅读时间需要5分钟。

如何在腾讯云CVM上配置ThinkPHP云主机并部署?

直接上结论:

为什么不能用腾讯云市场的 LNMP 镜像

市场镜像大多基于老旧 CentOS 7 + PHP 7.2 静态编译,模块硬编码、升级路径断裂。比如你项目依赖 yaml 扩展,Ubuntu 22.04 的 apt 源默认不带,而市场镜像连 pecl 都没装全;又或者你用了 mysql_connect(),PHP 8+ 已彻底移除该函数,但镜像里 PHP 版本锁死,没法切到 7.4 兼容。

更实际的问题是:open_basedir 路径写死、php-fpm.sock 权限混乱、SSL 自动续签配置缺失——这些在 lnmp install 脚本里都已预置处理,手改配置容易漏项。

  • lnmp.org:执行 ./lnmp install,自动关 SELinux、调 ulimit、生成防跨站配置
  • Ubuntu 20.04+ 用户注意先 sudo systemctl disable systemd-resolved,否则 apt update 可能超时中断
  • 装完用 lnmp php-version 切 PHP 8.2(新项目)或 7.4(老项目),别硬改 /usr/local/php/bin/php 软链

ThinkPHP 的 public/ 目录必须暴露为 Web 根目录

很多人把整个 ThinkPHP 项目(含 application/thinkruntime/)直接扔进 /var/www/html,结果访问域名只看到 404 或直接列出文件——因为 public/index.php 才是唯一合法入口,其他目录绝不能被 Web 服务器直接访问。

立即学习“PHP免费学习笔记(深入)”;

Nginx 配置里必须明确指定 root /data/wwwroot/your-project/public;,而不是项目根目录。否则 .htaccess(Apache)或重写规则(Nginx)根本不会生效,index.php/s=/admin 这类路由全崩。

  • 确认 location / 块内写了标准重写:if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; }
  • 别套用 Laravel 或 WordPress 的伪静态规则,ThinkPHP 5.1+ 依赖 s= 参数解析 PATH_INFO
  • 宝塔用户请手动清空伪静态框,粘贴上述规则,不要点“启用 ThinkPHP”按钮——它有时会加错 try_files

runtime/ 和 vendor/ 目录部署常见坑

Class 'think\App' not found 不是框架缺文件,是自动加载器挂了。核心就两点:一是 vendor/autoload.php 没传上去,二是 runtime/ 不可写或路径写死了本地绝对路径。

上传前必须执行 composer install --no-dev,而不是直接复制本地 vendor/;Git 部署要检查 vendor/ 是否被 .gitignore 排除。另外,index.php 里引入 autoload 的路径如果写成 /Users/xxx/project/vendor/autoload.php,上线必报错。

  • runtime/ 目录必须存在,且权限为 755(Linux 下 chmod -R 755 runtime
  • 但不要上传本地已生成的 runtime/cache/runtime/log/,清空再传,避免缓存污染
  • 确认 opcache.enable_cli = 1php -i | grep opcache 查),否则 php think optimize:route 生成的缓存无法加载

HTTPS 下上传大文件失败怎么调

开 HTTPS 后,413 Request Entity Too Large 很常见,不是腾讯云限制,是你自己没对齐 Nginx 和 PHP 的三处上限:

Nginx 的 client_max_body_size、PHP 的 upload_max_filesizepost_max_size 必须一致,且 post_max_sizeupload_max_filesize。漏调任何一项都会导致静默失败或 413。

  • Nginx 配置(server 块内):client_max_body_size 100m;
  • PHP 配置(php.ini):upload_max_filesize = 100Mpost_max_size = 100Mmax_execution_time = 300
  • 改完必须执行 lnmp php reload(不是 restart),reload 不中断已有请求

复杂点在于:有些项目还用了 nginx-unitoneinstack,它们的 PHP 配置路径和重载命令不同,得先 find / -name php.ini 2>/dev/null 定位真实配置文件,再确认 reload 方式。别假设所有环境都走 lnmp 流程。