我希望能够:
- 以最短的时间启动一个根据我的喜好配置的 Unix 服务器,无需人工干预。
- 定期运行一个脚本来检查我的配置更改是否完整,并提供修复不正确的设置(即因为配置文件有时会在更新期间被替换)。
为了实现这一目标,我必须选择哪些技术? (在我想讨论具体的软件建议之前,我要求了解如何做到这一点的不同基本方法。)
这大致就是我手动执行的操作(从 VirtualBox 本地执行,或在 VPS 上远程执行)。括号只是部分示例。
- 设置要点 (
visudo, adduser
) - 安装软件包 (
sshd, php, nginx, mysql, ufw
) - 运行安装脚本 (
mysql_secure_installation
) - 运行配置命令 (
ufw allow
) - 编辑配置文件 (
php.ini, sshd_config
) - 填充数据库 (
cat db.sql | mysql
) - 填充 nginx 网络文件 (
rsync local remote:
) - 启动 nginx
至于今天检查配置文件,除了手动检查之外,我没有什么好的策略,这确实很困难。
我听说过 Puppet 等,但说实话,我对他们的语法有点害怕。在决定一项技术并投入学习时间之前,我想先了解一下选项的鸟瞰视角。
答案1
您正在寻找的是 Server Farmer (http://serverfarmer.org/) - 它具有与 Ansible 类似的架构,但它更简单并且主要用 Bash 编写。
它可以处理 Linux 实例的完整生命周期,从在所有主要云平台(AWS、Azure、Google Cloud、Hetzner、阿里云、e24cloud、Rackspace 和基于 OpenStack 的混合云)中创建新实例,通过基本主机配置到应用程序部署。
唯一的例外是,对于防火墙来说,它直接使用 iptables,而不是ufw
.
您可以从分叉这两个存储库并调整配置开始:
- https://github.com/serverfarmer/serverfarmer- 查看文件scripts/functions.custom
- https://github.com/serverfarmer/sf-keys- 查看所有文件
答案2
有很多选择:
-- 我正在使用 puppet 来完成相同的任务
-- 您可以使用 puppet 、 ansible 、 saltstack 或 Chef 等
-- 您可以使用 docker 容器,使用 docker 文件进行所需的配置
-- 您可以在云中使用预先配置的虚拟机(openstack、aws)并在需要时启动它,然后附加数据卷。
答案3
一些提供商(例如 Linode)允许您创建自己的映像,您可以根据需要将其部署到您在其系统中创建的任何 VPS。您当然可以创建自己的 VirtualBox/VMWare 模板来使用、克隆或导出并与其他人共享。
不过,跳出框框思考……可以在本地虚拟机、VPS 或裸机硬件中工作的东西 -
设置一个虚拟机,并在安装每个包之后,在配置任何内容之前,从包的配置目录中创建一个 git 存储库(/etc/apache2
等等)。进行配置,执行 git commit 并将 git Push 推送到存储库。根据需要对任何包重复此操作。在我的 VPS 上,我可能会进行基本的 LAMP 配置,然后进行 dovecot+postfix 等,以便每个服务组合都有自己的 git 存储库。
control
然后使用该文件创建一个假的 debian 软件包,equivs-build
这样您就拥有了一个除了依赖于您通常安装的所有内容之外什么都不做的软件包 - dovecot、postfix、apache 等。同样,我会考虑将其分解并创建一个匹配的软件包.deb 文件,其中包含您拥有 git 存储库的每个服务组合的依赖项。
那么对于新机器...
进行基础安装。安装假包,让 apt 处理获取依赖项 - 您的普通软件 - 使用默认配置安装。然后下拉包含更改的配置的各种存储库的副本,并将配置文件放到适当的位置。