GitHub Actions结合FTP Deploy部署超万文件项目触发FTP连接中断报错求助
故障根因
你遇到的FIN包断开错误是共享主机侧主动切断FTP连接导致,和GitHub Action无关。绝大多数共享主机都会限制单FTP会话的最长连接时长、单会话最大传输文件数,用来避免单个用户占用过多公共FTP资源。你的测试项目文件少,传输耗时短,没触达限制阈值就完成了部署,而实际项目过万的文件数用FTP逐文件传输的耗时远超主机限制,因此被主动断连。
可行解决思路
- 优化现有FTP部署配置
你使用的SamKirkland/FTP-Deploy-Action支持多个调优参数,直接在配置的with块补充即可:- 排除不需要同步的冗余文件,减少传输总量,比如
.git目录、CI配置文件、本地配置文件等 - 调高连接、传输超时阈值
- 首次全量部署建议先用本地FTP工具把所有文件上传到主机,后续Action只同步变更文件,单次传输量会大幅下降
调优后的部署步骤配置参考:
- name: 📂 Sync files to server uses: SamKirkland/FTP-Deploy-Action@4.1.0 with: server: ${{ secrets.FTP_SERVER }} username: ${{ secrets.FTP_USERNAME }} password: ${{ secrets.FTP_PASSWORD }} server-dir: /staging/ timeout: 600000 # 传输超时设为10分钟,单位毫秒 connTimeout: 30000 # 连接超时设为30秒 exclude: | .git/** .github/** auth.json .gitignore README.md *.log - 排除不需要同步的冗余文件,减少传输总量,比如
- 更换为更稳定的SFTP协议
如果你的共享主机支持SFTP,优先换用SFTP传输,比传统FTP连接更稳定、连接复用效率更高,可直接替换为SFTP部署Action,避免FTP的连接限制问题。 - 压缩打包后传输(最优方案)
放弃逐文件传输的思路:在CI步骤中将所有需要部署的代码打包为单个tar.gz压缩包,只传输这个压缩包到服务器,可将传输耗时从十几分钟降到几秒级别。如果主机支持SSH,可直接在CI中执行远程解压命令;如果没有SSH权限,可提前上传一个单文件PHP解压脚本到主机,压缩包传输完成后访问脚本完成解压,用完删除解压脚本即可。 - 拆分部署任务
若必须使用FTP传输,可将部署步骤拆分为多段,分别同步核心文件、插件、主题等不同目录,每段同步完成后断开FTP连接再开启新连接,避免单会话触发主机的时长、文件数限制。
内容的提问来源于stack exchange,提问作者EmWe
相关产品推荐
相关产品推荐

