我目前正在尝试第一次将 Meteor 项目部署到外部服务器。该服务器由 DigitalOcean 托管,运行 ubuntu 16.04,并设置了 SSH 密钥以实现无密码访问。
我从 MUP 得到的错误是:
[159.203.165.13] - Setup Docker
events.js:165
throw er; // Unhandled 'error' event
^
Error: All configured authentication methods failed
at tryNextAuth (/usr/lib/node_modules/mup/node_modules/nodemiral/node_modules/ssh2/lib/client.js:290:17)
at SSH2Stream.onUSERAUTH_FAILURE (/usr/lib/node_modules/mup/node_modules/nodemiral/node_modules/ssh2/lib/client.js:469:5)
at SSH2Stream.emit (events.js:180:13)
at parsePacket (/usr/lib/node_modules/mup/node_modules/ssh2-streams/lib/ssh.js:3647:10)
at SSH2Stream._transform (/usr/lib/node_modules/mup/node_modules/ssh2-streams/lib/ssh.js:551:13)
at SSH2Stream.Transform._read (_stream_transform.js:185:10)
at SSH2Stream._read (/usr/lib/node_modules/mup/node_modules/ssh2-streams/lib/ssh.js:212:15)
at SSH2Stream.Transform._write (_stream_transform.js:173:12)
at doWrite (_stream_writable.js:410:12)
at writeOrBuffer (_stream_writable.js:396:5)
at SSH2Stream.Writable.write (_stream_writable.js:294:11)
at Socket.ondata (_stream_readable.js:651:20)
at Socket.emit (events.js:180:13)
at addChunk (_stream_readable.js:274:12)
at readableAddChunk (_stream_readable.js:261:11)
at Socket.Readable.push (_stream_readable.js:218:10)
Emitted 'error' event at:
at tryNextAuth (/usr/lib/node_modules/mup/node_modules/nodemiral/node_modules/ssh2/lib/client.js:292:12)
at SSH2Stream.onUSERAUTH_FAILURE (/usr/lib/node_modules/mup/node_modules/nodemiral/node_modules/ssh2/lib/client.js:469:5)
[... lines matching original stack trace ...]
at Socket.Readable.push (_stream_readable.js:218:10)
在这一点上,我根据其他建议尝试了几种涉及 mup 文件的解决方案,例如:
1) 添加密码 - 给出与未发生更改完全相同的错误。
2)根据数字海洋添加我用于对服务器进行身份验证的相同 SSH 密钥 - 说“privateKey 值不包含(有效)私钥”。我已经尝试了用于对服务器进行身份验证的密钥以及我能找到的所有其他密钥,但没有生成一个仅供 Meteor 使用的新密钥。
3) 将两者留空并允许它“尝试” ssh-agent - 假装它不知道 ssh-agent 是什么,并抛出与我使用密码时相同的错误。
我已经查看并遵循以下文章中的相同说明:http: //meteortips.com/deployment-tutorial/digitalocean-part-1/
本文假设只有两种可能的状态。一个是 ssh 密钥尚未使用或设置,因此需要生成它。第二个是 ssh 密钥存在并且被准确地设置在他们期望的位置。不幸的是,我似乎处于不同的境地。在设置 DO 服务器之前,我使用 putty 生成了一个密钥,并使用它创建了 droplet。创建后,该文件不存在。~/.ssh/ 目录中唯一的东西是一个名为“authorized_keys”的文件,它保存着我用来连接服务器的密钥。该文件无法使用,服务器上其他 ssh 密钥位置的任何文件也无法使用。我也尝试将文件直接复制到服务器上,但也无济于事。
在找到解决方案的一些徒劳希望中,我还尝试在 Meteor 构建包和源代码文件夹中运行这些相同的命令。都没有奏效。我应该提一下,尽管这是我仍然可以尝试解决的唯一一篇文章,但我已经尝试了使用 MUP 找到的每一篇文章。
如果有人能以此为我指明正确的方向,这样我就可以停止在黑暗中疯狂地挥舞,我将非常感激。
编辑:根据要求,下面是当前的 mup.js 文件,其中删除了凭据
module.exports = {
servers: {
one: {
// TODO: set host address, username, and authentication method
host: '111.111.111.11',
username: 'root',
// ssh-agent: '/home/Meteor/MeteorKey.pem'
pem: '~/.ssh/id_rsa.pub'
// password: 'password1'
// or neither for authenticate from ssh-agent
}
},
app: {
// TODO: change app name and path
name: 'app-name',
path: '../',
servers: {
one: {},
},
buildOptions: {
serverOnly: true,
},
env: {
// TODO: Change to your app's url
// If you are using ssl, it needs to start with https://
ROOT_URL: 'http://www.app-name.com',
MONGO_URL: 'mongodb://mongodb/meteor',
MONGO_OPLOG_URL: 'mongodb://mongodb/local',
},
docker: {
// change to 'abernix/meteord:base' if your app is using Meteor 1.4 - 1.5
image: 'abernix/meteord:node-8.4.0-base',
},
// Show progress bar while uploading bundle to server
// You might need to disable it on CI servers
enableUploadProgressBar: true
},
mongo: {
version: '3.4.1',
servers: {
one: {}
}
},
// (Optional)
// Use the proxy to setup ssl or to route requests to the correct
// app when there are several apps
// proxy: {
// domains: 'mywebsite.com,www.mywebsite.com',