php怎么部署线上程序_本地代码同步到线上总报错怎么办【操作】

1次阅读

permission denied 多因权限或路径错误:目标目录属主非当前用户,应改用部署用户并加入对应组;同步路径末尾加/表示同步内容;避免sudo rsync和线上git操作。

php怎么部署线上程序_本地代码同步到线上总报错怎么办【操作】

用 rsync 同步时提示 Permission denied 怎么办

多数报错其实卡在权限或路径上,不是代码问题。线上服务器的部署目录(比如 /var/www/html)通常属于 www-datanginx 用户,而你用普通用户 ssh 登录后直接 rsync 写入会失败。

实操建议:

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

  • 先确认目标目录属主:ls -ld /var/www/html,如果显示 root:www-data,普通用户无法写入
  • 改用部署专用用户(如 deploy),并将其加入 www-data 组:usermod -aG www-data deploy
  • 同步命令加 -e "ssh -p 2222" 指定端口,避免默认 22 被拦截;路径末尾加斜杠 /rsync -av ./src/ user@host:/var/www/html/)表示“同步内容”,不加则同步整个 src 目录
  • 别用 sudo rsync——远程端不会继承本地 sudo 权限,反而更易出错

git pull 在线上执行总卡住或报 Error: Your local changes would be overwritten

这是典型「线上不该当开发环境」导致的问题。线上目录如果被手动改过(比如调试时 touch 过文件、改过配置),再 git pull 就会拒绝覆盖。

实操建议:

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

  • 线上只保留 git clone 出来的 bare 仓库 + 一个 work-tree,用钩子自动检出(推荐)
  • 临时救急:进目录运行 git reset --hard && git clean -fd 清掉所有未跟踪和修改文件(⚠️ 配置文件会被删!务必先备份 .envconfig.php 等)
  • 永远不要在线上直接 git checkoutgit commit——版本管理必须在本地完成
  • git status 看清楚哪些文件「红色」(未跟踪)、「绿色」(已暂存),比盲目 pull 安全得多

PHP 文件传上去就 500,但本地正常

常见原因不是语法错误,而是环境差异:线上 PHP 版本低、扩展没开、文件权限不对、或 opcache 缓存了旧字节码。

实操建议:

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

  • 立刻查错误日志:tail -f /var/log/php*/error.logtail -f /var/log/apache2/error.log,比浏览器 500 有用十倍
  • 检查 PHP 版本和扩展:php -vphp -m | grep pdo,尤其注意 mbstringcurljson 是否启用
  • 文件权限要严格:代码文件 644,目录 755storagebootstrap/cachelaravel)这类可写目录得设为 775 并属组正确
  • 清空 opcache:php -r "opcache_reset();",或重启 php-fpm:sudo systemctl restart php*-fpm

怎么避免每次上线都手抖输错命令

人工同步本质不可靠,真正省心的方式是把「本地 → 线上」这个动作固化成脚本或流程,而不是依赖记忆。

实操建议:

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

  • 写个简易 deploy.sh封装 rsync 命令 + 权限修复 + 服务重载,加上 set -e 让任一命令失败就中止
  • scp 替代 rsync 仅适用于小项目(无增量、无排除),命令更简单:scp -r -p ./src/* user@host:/var/www/html/
  • 哪怕不用 CI/CD,也至少用 git archive 打包发布:git archive --format=zip HEAD | ssh user@host 'cd /var/www/html && unzip -o /dev/stdin',天然排除 .git 和本地忽略文件
  • 所有操作前先 whoami && pwd 确认当前用户和路径——90% 的「同步到错目录」源于此

最麻烦的往往不是技术点,而是线上环境没做最小化隔离:比如没禁用 display_errors 导致敏感路径泄露,或者 .env 文件权限是 644 被 Web 直接访问。部署不是复制粘贴,是验证每层契约是否成立。

text=ZqhQzanResources