在只能通过scp访问的远程服务器上部署应用程序的好方法是什么?

有一个Web应用程序需要在远程服务器上部署。 有一个scp访问这台服务器,虽然没有工作的shell,所以不能只是ssh在那里。

出现的问题是如何在那里部署应用程序? 像运行一个准备好的脚本部署,执行一些任务,如更新DB模式,重新启动服务器,清除caching等?

我想到的一件事是通过scp复制所有文件,然后在目标计算机上ping一些URL(例如http://production.site.com/deploy或者那里的任何随机字符),以便启动部署脚本在那里。 这将需要可能有一些基于IP的限制,只是不是每个人都进入这个url触发部署脚本(以避免可能的DOS攻击)。

另一种方法是在目标机器的cron中进行一次简单的检查,然后像每1分钟一次启动一次。 在这种情况下,部署过程将如下所示:

  • 我们将整个应用程序复制到生产服务器,然后复制特定的文件,如deploy.it
  • cron作业检查deploy.it存在, deploy.lock不存在。 如果是这样,它会创build一个locking文件( deploy.lock )并启动一个部署脚本。
  • 部署脚本完成运行后, deploy.itdeploy.lock都将被删除。

你对这两个想法有什么看法? 还有更多的想法? 我想find最好的(最安全的可能螺丝钉和从生产服务器DOS的任何方式)部署它的方式…

我们做一些类似于你的第一个build议

我们把所有东西都压缩起来,复制一遍,然后ping一个密码保护的网站,这个网站只能在内部访问,以便在旧网站的顶部解压缩。 我们在压缩文件之后但在解压之前运行sql脚本。

无论哪种方式,你build议听起来像他们会工作,但正如你所提到的,如果你有一个外部可访问的部署url,你最好确保它足够安全。

你的第一个想法是,web服务器的用户帐户具有足够的特权来执行部署任务,并且web服务器不是chroot。 如果这些要求满足,我认为这是一个很好的主意,如果脚本完成后删除。