有一个 Web 应用程序需要部署在远程服务器上。可以scp
访问此服务器,但没有工作外壳,所以不能就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 操作的最安全的方式)来部署它......
我们做的事情类似于你的第一个建议
我们将所有内容压缩、复制,然后 ping 一个受密码保护的网站,该网站只能在内部访问,以便在旧网站的顶部解压缩。我们在 zip 副本之后但在解压缩之前运行 sql 脚本。
无论哪种方式,您建议的声音听起来都可以工作,但正如您所提到的,如果您有一个可从外部访问的部署 url,您最好确保它足够安全。
您的第一个想法是网络服务器的用户帐户有足够的权限来执行部署任务,并且网络服务器没有经过 chroot。如果满足这些要求,我认为脚本在完成后被删除是个好主意。