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

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

有一个 Web 应用程序需要部署到远程服务器上。scp虽然可以访问此服务器,但没有可用的 shell,所以不能就ssh在那里。

出现的问题是如何在那里部署应用程序?部署,运行准备好的脚本来执行一些任务,如更新数据库模式、重新启动服务器、清除缓存等?

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

另一种方法是将一个简单的检查放入目标机器的 cron 中,并每隔 1 分钟触发一次。在这种情况下,部署过程将如下所示:

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

你觉得这两个想法怎么样?还有其他想法吗?我想找到最好的(最安全的方式,可以避免可能出现的失误,也不会以任何方式对生产服务器进行 DOS 攻击)部署方法...

答案1

我们做的事情与你的第一个建议类似

我们将所有内容压缩,复制,然后 ping 一个受密码保护的网站,该网站只能在旧网站顶部进行解压。我们在压缩副本之后但在解压之前运行 SQL 脚本。

无论你建议哪种方式听起来都可行,但正如你提到的,如果你有一个外部可访问的部署网址,你最好确保它足够安全。

答案2

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

相关内容