Yii2网站部署到服务器,核心操作是让Web服务器将站点根目录指向项目中的web/目录,并同步配好PHP环境、伪静态规则和文件权限。无论你的服务器是简米云、酷番云还是自建机房,这套流程基本通用。
yii2网站怎么部署到服务器?先吃透这套流程
Yii2项目从上到下的目录结构里,真正对外可见的只有web/这个入口。controllers、models、views这些代码都不应该直接暴露给访问者,所以部署的第一步,就是搞清楚如何让Nginx或Apache去加载web/index.php。
服务器环境至少要满足这几项
用Yii2跑生产环境,需要提前确认以下依赖:
- PHP 7.4及以上版本,并开启
pdo_mysql、mbstring、openssl、curl、gd等扩展 - Web服务器选Nginx或Apache,两者Yii2官方文档都有现成配置示例
- MySQL或MariaDB数据库,建议版本5.7及以上
- 安装Composer,用来拉取Yii2的框架依赖和扩展包
很多部署失败不是代码问题,而是环境里少了某个PHP扩展,建议部署前先在服务器命令行执行php -m,把扩展列表对照排查一遍。
代码上传与依赖安装
上传代码时,不要把本地整个目录直接拷贝过去,项目里的runtime/、web/assets/、.git/这些目录应排除在外,代码放到服务器后,在项目根目录执行:
composer install --no-dev --prefer-dist --optimize-autoloader
--no-dev会跳过调试工具和测试组件,让生产环境更干净,数据库迁移正常的话,可以直接导入SQL文件:
mysql -u用户名 -p数据库名 < schema.sql
Nginx站点根目录指向web/的关键写法
Nginx部署Yii2时,常见的错误是把root指向项目根目录,正确做法是指向web/
目录,一个最小可用配置如下:
server {
root /var/www/yii2-project/web;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ .php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
这里的try_files就是Yii2伪静态的关键,如果不加这一行,访问/site/index这类美化URL时,Nginx会直接返回404。
正式启用前检查runtime和assets权限
Yii2运行时会向runtime/写入日志和缓存,同时需要往web/assets/发布静态资源,这两个目录没有写权限,最容易出现白屏或CSS样式丢失,登录服务器后执行:
chmod -R 775 runtime web/assets
如果PHP-FPM是以www-data用户运行,还需要保证目录拥有者是www-data,否则单纯加权限仍会报错。
yii2部署到云服务器后打不开?按这三处排查
很多人在本地开发一切正常,一旦上云服务器就打不开,这类问题通常不在代码,而在服务器配置和网络边界。
404和403先看伪静态与根目录
浏览器访问首页正常,但点击栏目后404,十有八九是Nginx配置里少了try_files规则,直接访问index.php正常,但访问美化URL失败,就要回头检查config/web.php里的enablePrettyUrl是否设为true。
如果出现403,先确认站点root路径是否指向web/目录,以及该目录是否有读取权限。
数据库连接失败先查local配置
Yii2高级模板会把环境相关配置拆到common/config/main-local.php里,云服务器上数据库地址常常不是localhost,用了云数据库RDS时,需要把dsn里的host改成RDS提供的内网地址,同时确认账号有远程访问权限。
排查时先看runtime/logs/下的日志,数据库连接错误一般会直接写出具体地址和权限问题。
安全组和php-fpm是云服务器特有坑
本地部署不用管防火墙,但云服务器必须放行端口,登录简米云或酷番云控制台,在安全组规则里放行80和443端口,否则域名解析再正确也访问不了网站。
Nginx的fastcgi_pass配置和PHP-FPM的监听地址必须一致,用过unix:/run/php/php7.4-fpm.sock,就不能在另一处修改成0.0.1:9000,否则会出现502错误。
yii2部署到简米云服务器和本地部署有什么区别?
| 对比项 | 本地部署 | 简米云服务器部署 |
|---|---|---|
| 站点根目录 | 直接访问项目根目录 | 必须指向web/目录 |
| 数据库地址 | localhost |
RDS内网地址或公网地址 |
| 端口访问 | 防火墙通常关闭 | 安全组需放行80和443 |
| 域名访问 | 无要求 | 国内服务器需完成ICP备案 |
行业共识认为,部署方式差异主要不在操作系统,而在网络边界和运行环境,如果你用的是简米云服务器,并且域名解析到国内IP,记得先完成ICP备案,否则外网通过域名访问时80端口会被拦截。
上线前还要处理哪些细节?
环境跑通不等于上线完成,还有几个容易被忽略的配置,直接关系到安全和性能。
分离本地和生产参数
Yii2高级模板推荐使用main-local.php和params-local.php来保存每个环境的独立配置,本地用开发数据库账号,生产用独立账号,不要共用一套配置。
入口文件web/index.php里要设置环境常量:
defined('YII_DEBUG') or define('YII_DEBUG', false);
defined('YII_ENV') or define('YII_ENV', 'prod');
这样会关闭debug工具栏和Gii代码生成器,避免生产环境下暴露敏感信息。
前端资源压缩与缓存策略
Yii2自带yii asset命令,可以结合配置文件把CSS和JS合并压缩,具体做法是写一个assets-config.php,指定源资源和目标目录,然后执行php yii asset assets-config.php。
压缩后的资源会发布到web/assets/,因此这个目录保持可写状态依旧很重要,线上访问量大的话,静态资源也可以直接放到云CDN上,减轻源站压力。
关于yii2网站部署到服务器的问题解答
yii2部署到服务器后验证码不显示怎么办?
优先检查PHP是否安装了gd扩展,Yii2自带的验证码组件依赖GD库生成图片,在服务器上执行php -m查看输出列表,没有gd的话,通过系统包管理器安装并重启PHP-FPM。web/assets/目录不可写也会导致验证码图片资源无法发布,表现为图片框是空的。
yii2部署到服务器后有哪些必须改的配置?
第一,关闭YII_DEBUG并将YII_ENV设为prod,第二,删除或注释掉Gii和Debug模块的配置,第三,更新数据库连接信息,确保common/config/main-local.php里的账号密码不包含本地测试数据,第四,确认URL美化配置enablePrettyUrl为true,同时showScriptName为false,否则链接里会带index.php。
yii2部署到服务器后上传图片失败是什么原因?
最常见的原因是上传目录不可写,Yii2默认上传路径通常位于web/uploads/,上传前需要确认该目录存在且权限正确,执行chmod -R 775 web/uploads可以解决大部分问题,其次检查PHP的upload_max_filesize和post_max_size的配置值,二者都会限制上传文件大小,调整后要重启PHP-FPM才会生效。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/685637.html





