SFTP部署必须使用密钥认证且最小化用户权限:配置时Host填公网IP、Port为22、Auth type选Key pair,Private key file指向权限600的id_rsa,Root path设为项目绝对路径;Mapping需严格对齐本地与服务器路径,排除文件用.deploymentignore而非.gitignore,禁用Upload external changes以防反向覆盖。

用 SFTP 配置 Deployment 连接云服务器
直接填密码连云服务器(尤其是生产环境)不安全,也容易被防火墙或安全组拦截。必须用密钥认证,且用户权限要最小化。
操作要点:
- 在
Tools → Deployment → Configuration中点击+,选SFTP -
Host填云服务器公网 IP,Port填22(别改) -
Auth type选Key pair (OpenSSH),Private key file指向你本地的id_rsa(权限必须是600,否则 PHPStorm 拒绝加载) -
Root path建议填/home/youruser或项目实际路径(如/var/www/html),别填/ - 点
Test SFTP connection—— 失败时优先检查密钥权限、云服务器安全组是否放行22端口、系统防火墙(如ufw)是否允许 SSH
Mapping 必须对齐本地与服务器路径
映射错一个字符(比如多一个 / 或少一个),上传后文件就进错目录,甚至覆盖系统文件。
常见错误现象:
立即学习“PHP免费学习笔记(深入)”;
- 上传后页面 404:本地路径是
/path/to/project,但 Mapping 的Deployment path on server填成了/var/www/html/project/(末尾多斜杠),而 Nginx 配置的是root /var/www/html - 上传后报 Permission denied:服务器目标目录属主不是当前 SFTP 用户,例如
/var/www/html属于www-data,但你用ubuntu用户上传,没写入权限
解决办法:
- Mapping 的
Local path严格对应你打开的项目根目录(右键项目名 →Properties可确认) -
Deployment path on server填绝对路径,且确保该路径下chown -R youruser:youruser /path已执行 - 如果用宝塔、AMH 等面板,路径通常为
/www/wwwroot/yourdomain.com,别硬套/var/www/html
自动上传要关掉 “Upload external changes”
勾选 Automatic upload 后,默认会同时开启 Upload external changes —— 这个选项会让 PHPStorm 监听服务器上文件变动并反向同步,极易引发本地代码被远程覆盖,尤其多人共用测试服时。
正确设置:
- 在 Deployment 设置页,把
Options标签下的Upload external changes✅ 取消勾选 -
Automatic upload保留为On explicit save(Ctrl+S 时上传),别选Always,避免未保存草稿误传 - 首次上传建议右键项目根目录 →
Deployment → Upload to …全量推一次,再启用自动保存上传
注意:On explicit save 不代表“只传当前文件”,它会按 Mapping 规则上传所有已修改且未上传的文件(包括被 IDE 自动格式化的)。
忽略文件必须用 .deploymentignore 而非 .gitignore
PHPStorm 的 Deployment 不读 .gitignore,它有自己的规则引擎。你删了 node_modules 但没配忽略,每次保存都会卡住几秒甚至失败。
配置方式:
- 在 Deployment 设置页 →
Options标签 → 找到Exclude items by name - 填逗号分隔的模式,例如:
.git,.env,composer.lock,node_modules,vendor/bin - 支持通配符:
*.log、cache/*,但不支持正则 - 如果项目含敏感配置(如
config/database.php),务必加进排除列表,避免覆盖线上配置
真正容易被忽略的是:Deployment 的排除规则只作用于上传,不影响下载;而且它不会递归扫描子目录里的同名文件——比如你写了 config.php,但 app/config.php 仍会被传,得写成 **/config.php 才生效。


















