使用SSH将Github构建部署到Inmotionhosting服务器失败求助
部署失败问题排查与解决
错误原因分析
日志中kex_exchange_identification: read: Connection reset by peer和Connection reset by *** port 2222是核心错误,指向SSH连接被服务器主动重置,可能的原因及解决步骤如下:
1. 虚拟主机SSH端口的IP访问限制
多数cPanel虚拟主机会对SSH端口(如2222)设置IP白名单,GitHub Actions的Runner IP不在允许列表内时会被拒绝连接。
- 解决:登录cPanel,找到SSH访问设置,检查IP白名单规则,添加GitHub Actions的IP段,或临时关闭IP限制进行测试。
2. 私钥格式不兼容
你将密钥转换为PPK格式(Putty专用),但GitHub Actions的SSH客户端需要OpenSSH格式的私钥,PPK格式无法被识别。
- 解决:使用Puttygen打开PPK文件,点击「Conversions」→「Export OpenSSH key」,导出无密码保护的私钥,更新GitHub Secrets中的
PRIVATE_SSH_KEY为该内容。
3. SSH密钥未正确授权
即使生成了密钥,若公钥未添加到cPanel的「SSH授权密钥」列表,或~/.ssh/authorized_keys文件权限错误,会导致密钥验证失败。
- 解决:在cPanel的SSH设置中确认公钥已正确添加;检查服务器上
~/.ssh/authorized_keys权限为600,~/.ssh目录权限为700。
4. 同步源路径错误
当前脚本同步的是仓库根目录./,但你需要部署的是dist目录,错误的源路径可能导致文件传输异常,甚至触发服务器的安全限制。
- 解决:在
web-deploy步骤中添加local-dir: ./dist/参数,指定仅同步构建后的产物目录:- name: 📂 Sync Files uses: SamKirkland/web-deploy@v1 with: target-server: ${{ secrets.HOST }} ssh-port: 2222 remote-user: ${{ secrets.USERNAME }} private-ssh-key: ${{ secrets.PRIVATE_SSH_KEY }} destination-path: ${{ secrets.PATH }} local-dir: ./dist/ # 新增此参数
Vue3+Webpack合并JS文件配置
1. 优化代码分割(推荐)
通过Webpack的splitChunks配置,将第三方依赖、公共代码合并为少量文件,同时保留合理的代码分割以优化加载速度。修改项目根目录的vue.config.js:
module.exports = { configureWebpack: { optimization: { splitChunks: { chunks: 'all', // 合并所有第三方依赖到单个vendors文件 cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name: 'vendors', chunks: 'all' }, // 合并项目内公共代码到common文件 common: { name: 'common', minChunks: 2, chunks: 'all', priority: -10, reuseExistingChunk: true } } } } } }
2. 禁用代码分割(生成单个JS文件)
若项目规模较小,可完全禁用代码分割,生成单个bundle文件:
module.exports = { configureWebpack: { optimization: { splitChunks: false, runtimeChunk: false // 同时禁用runtime chunk } } }
3. 移除路由懒加载
若项目使用了路由懒加载(如const Home = () => import('./views/Home.vue')),会自动生成多个chunk文件。如需合并,改为直接导入:
// 替换懒加载写法 import Home from './views/Home.vue' const routes = [ { path: '/', component: Home } ]
内容的提问来源于stack exchange,提问作者karimlo
相关产品推荐
相关产品推荐

