![如何自动部署同一应用程序的新实例(在 1 台服务器上)?](https://linux22.com/image/796936/%E5%A6%82%E4%BD%95%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2%E5%90%8C%E4%B8%80%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E6%96%B0%E5%AE%9E%E4%BE%8B%EF%BC%88%E5%9C%A8%201%20%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%EF%BC%89%EF%BC%9F%20.png)
我正在开发一个 SaaS 应用程序,每个客户都运行自己的应用程序版本。所有应用程序实例目前都在一台服务器上运行。这对我们来说非常有效(我们总共需要更少的资源)。该应用程序不会占用大量资源,因此即使是小型 VPS 也会显得有点过分(而且更昂贵)。
目前,添加新客户需要做相当多的工作:
- 创建一个允许ssh的用户
- 创建新的 MySQL 数据库和用户
- 为应用程序创建虚拟主机
- 以新用户登录,对应用程序进行 git checkout(在正确的位置)
- 在新数据库中创建表,并添加一些初始数据
- 添加一些 cron 作业
- 创建第一个可以登录的用户
- 将此新实例添加到 capistrano
自动执行这些任务的最佳方法是什么?是否有应用程序可以(在正确配置的情况下)执行此操作?理想情况下,这应该可供销售人员使用(因此是基于 Web 的)。
我可以编写一个 (bash) 脚本来完成大部分这些任务,然后可能添加一个小型的基于 Web 的包装器,以便有人可以提供域/默认用户信息。当然,这也需要一个删除脚本,因为有些客户最终会离开,这意味着您需要所有现有客户/实例的列表。
答案1
事实上,这是你作为系统管理员的工作。编写所有重复的脚本,以便你可以处理其他需要完成或修复的事情。
如果您对自己的脚本编写技能还不自信,那么您应该有一个类似于生产的测试环境,您可以在该环境中测试您的脚本,如果您破坏它,也不会给您和客户带来金钱损失。
答案2
我的答案取决于您预计有多少新客户。如果您“偶尔”添加新客户 - 我会为上述所有程序创建一个清单,并在每次添加新客户时仔细遵循它。如果每天要添加几次新客户 - 或者在许多服务器上添加新客户,那么我会将其自动化。
我对系统管理的经验法则是:很难过于细致,因此在添加客户时请备份您接触的每个文件...
1.) 使用 useradd 和命令行参数编写脚本来创建用户 - 确保在发出 useradd 命令之前创建 /etc/passwd 和 /etc/shadow(如果是本地用户)的“600 root:root”副本。2.) mkdir /etc/ssh。3. date +%Y%m%d
) cp /etc/ssh/* /etc/ssh。4. date +%Y%m%d
) awk、sed、sshkeygen(或其他)来创建 ssh 密钥并添加用户 5.) 使用命令行参数创建 SQL 脚本来创建数据库的 bash 脚本。......等等等等
你明白我的理由...最后一步 - 创建一个将所有步骤联系在一起的“超级脚本”。
嗯...“网络”方面...除非您有相当好的防火墙和安全措施....我不会创建网页来添加客户。我相信您已经想到了这一点...至于如何进行则由您自己决定,但我的想法是,您说您想要一个可以在机器上以 root 身份执行脚本的网页。您必须是 root 才能添加用户。也许您可以这样做,但我不相信自己可以创建一个页面,让某些用户可以随意将数据输入表单并让其以 root 身份执行某些操作。我可以进行清理...我可以遵循清理方法...但是,我不相信我的“黑客”技能足以测试我自己的具有 root 级命令的应用程序...抱歉,我想我是个懦夫 :-)