ssh-delivery
v0.3.2
Published
Do fast files deploy with SFTP. Support servers chain.
Readme
SSH-Delivery
Do fast files deploy with SFTP. Support servers chain.
Install
npm install -g ssh-deliveryConfigure
Create config with tasks and servers declaration. Default config file names :
.deliveryrc
.deliveryrc.js
.delivery.config.js
delivery.config.jsconst fs = require('fs');
const os = require('os');
const path = require('path');
module.exports = {
// SSH servers (all server options see at https://github.com/mscdex/ssh2#client-methods `connect` method)
// Upload destination servers should support SFTP. Gateway servers should support port forwarding.
servers: {
gate: {
alias: 'gate',
host: 'gate.myweb.com',
username: 'root',
password: 'secret',
// Optional: Socks5 proxy settings for connecting to the first SSH server in the chain
socksProxyHost: '127.0.0.1',
socksProxyPort: 1080,
// socksProxyUsername and socksProxyPassword are optional if your proxy requires authentication
// socksProxyUsername: 'proxyUser',
// socksProxyPassword: 'proxyPass',
},
web: {
host: 'myweb.com',
port: 41022,
username: 'root',
privateKey: fs.readFileSync(path.resolve(os.homedir(), '.ssh', 'id_rsa')),
passphrase: 'secret',
via: 'gate', // Connection to this server will be made via 'gate' server
},
},
// Delivery tasks
tasks: {
deployToWebServer: {
// Commands before uploading
before: {
run: ['npm run build'],
},
// Files to upload
src: {
path: './build/',
},
// Where should upload
dst: {
server: 'web', // server name from servers-section
path: '/var/www/html', // path on remote server
},
// Commands after uploading
after: {
run: ['rm -rf ./build'],
},
},
},
// Optional global SFTP upload stream tuning.
// Smaller values can help on lossy links or with PMTU/fragmentation issues,
// but may reduce upload throughput.
uploadTuning: {
// bytes; defaults from Node streams are used when omitted
readHighWaterMarkBytes: 16384,
writeHighWaterMarkBytes: 16384,
},
};You can keep servers options secure in your home directory. Create $HOME/.delivery.js with content like this:
const fs = require('fs');
const os = require('os');
const path = require('path');
module.exports = {
servers: {
gate: {
alias: 'gate',
host: 'gate.myweb.com',
username: 'root',
password: 'secret',
// Optional Socks5 proxy settings:
// socksProxyHost: '127.0.0.1',
// socksProxyPort: 1080,
// socksProxyUsername: 'proxyUser',
// socksProxyPassword: 'proxyPass',
},
web: {
host: 'myweb.com',
port: 41022,
username: 'root',
privateKey: fs.readFileSync(path.resolve(os.homedir(), '.ssh', 'id_rsa')),
passphrase: 'secret',
via: 'gate', // Connection to this server will be made via 'gate' server
},
},
// Optional global SFTP upload stream tuning.
uploadTuning: {
readHighWaterMarkBytes: 16384,
writeHighWaterMarkBytes: 16384,
},
}and use serves gate and web in your separate configs without redeclaration.
Run
Run static task with
delivery deployToWebServeror with custom config path
delivery deployToWebServer -c ./custom-config.jsYou can keep servers options with credentials in separate config
Network Notes
Use SFTP stream buffer tuning when the route is unstable (for example, packet loss on VPN) or when there are PMTU/fragmentation issues:
uploadTuning.readHighWaterMarkBytesuploadTuning.writeHighWaterMarkBytes
If VPN path has PMTU issues, try lowering readHighWaterMarkBytes and writeHighWaterMarkBytes
(for example to 16384 or 8192).
