在远程Azure VM上以sudo身份运行shipit-deploy

时间:2016-04-29 13:17:48

标签: node.js azure deployment web-deployment

我需要将几个NodeJS应用程序部署到在Microsoft Azure上运行的Ubuntu 14.04.4虚拟机 我正在使用shipitshipit-deploy来完成任务。

我的shipitfile.js到目前为止如下所示:

module.exports = function (shipit) {
  require('shipit-deploy')(shipit);

  var stagingConfig = require('./config.staging').deploy;
  var productionConfig = require('./config.prod').deploy;

  shipit.initConfig({
    default: {
      workspace: '/tmp/my-api',
      deployTo: '/var/www/my-api',
      repositoryUrl: 'https://githubrepoaddresshere.git',
      ignores: ['.git', 'node_modules', 'migrations', 'dumpDB', 'logs', 'bin'],
      rsync: ['--del'],
      keepReleases: 2,
      key: '~/.ssh/id_rsa.pem',
      shallowClone: true
    },
    staging: stagingConfig,
    production: productionConfig
  });

  shipit.on('init', function() {
    console.log('Starting deployment...');
  });

  shipit.on('deployed', function () {
    // npm install etc etc
  });
};

stagingConfig变量是一个包含环境特定信息的对象:

{
  "branch": "develop",
  "servers": "username@my-api-staging.northeurope.cloudapp.azure.com"
}

当我运行shipit staging deploy命令时,我得到了

'deploy:update' errored after 3.41 s
Error: Command failed: ssh -i ~/.ssh/id_rsa.pem "username@my-api-staging.northeurope.cloudapp.azure.com" "mkdir -p /var/www/my-api/releases/20160429125114"
mkdir: cannot create directory ‘/var/www/my-api/releases’: Permission denied

我知道我可以:

1)尝试在/home/username上部署 2)Use this workaroundroot开始ssh会话。

我仍然需要尝试第一个,并且不愿意使用第二个。

所以我的问题是:是否有一个干净且非hacky的解决方案,使shipit-deploy在使用sudo部署期间运行的每个命令前缀?

1 个答案:

答案 0 :(得分:0)

您可以尝试将变量shipit.releasesPath修改为您的主路径,在命令中不需要sudo前缀。

因此,您的部署任务不需要管理员权限,这也可以避免一些意外的权限操作问题。

E.G。

shipit.initConfig({
    default: {
      ...
    },
    staging: {
      servers: '<user>@<your_vm_name>.cloudapp.net'
    }
  });
  shipit.releasesPath = '/home/www/releases';