在Ubuntu 17.04上将SaltStack与支柱配合使用

SaltStack是用于同时在多个服务器上运行操作的出色工具,但它还支持按主机定义的配置预设,该预设存储在唯一的文件中,该文件又称为“支柱”。在本指南中,我们将编写一个小的SaltStack公式来安装Nginx并使用支柱自动执行虚拟主机的部署。

要求

  • 运行Ubuntu 17.04的Vultr实例(master)
  • 两个运行Ubuntu 17.04的Vultr实例(奴才)

设置主人

如果您只是入门而尚未设置SaltStack主服务器,请查看本文,其中介绍了如何开始使用SaltStack。

我们从为公式创建文件夹开始,该文件夹进一步保存SaltStack在我们的小兵上进行操作所需的文件。

mkdir -p /srv/salt/nginx

创建文件夹后,我们可以继续写init.sls文件,这是每个公式的重要组成部分:

nginx:
  pkg:
    - installed

/etc/nginx/sites-enabled/virtualhosts.conf:
    file.managed:
        - source: salt://nginx/files/virtualhosts.jinja
        - template: jinja
        - user: root
        - group: root
        - mode: 655

  cmd:
    - run
    - names:
        - service nginx restart

您可能已经注意到,SaltStack使用Jinja模板引擎来生成动态配置文件。这在我们的配置模板文件中提供了广泛的可能性,例如访问本地Python代码或设置变量等。下一步包括为我们的virtualhosts.conf文件创建模板,而我们首先需要创建文件夹:

mkdir -p /srv/salt/nginx/files

创建文件夹后,我们可以继续写virtualhosts.jinja文件:

{% for vhost in pillar['vhosts'] %}
server {
    listen {{ vhost['listenPort'] }};
    server_name {{ vhost['serverName'] }};
    root {{ vhost['documentRoot'] }};
    index {%- for index in vhost['indexFiles'] -%}{{ index }}{%- endfor -%};
    location / {
        try_files $uri $uri/ =404;
    }
}
{% endfor %}

创建公式后,我们可以继续设置支柱基础:

mkdir -p /srv/pillar/

匹配特定支柱文件的主机的所有引用都将写入到top.sls我们刚刚创建的目录中的文件中。在我们的示例中,我们假设主机名存在两个奴才nginxwww1nginxwww2而我们将为其分配两个唯一的支柱文件:

base:
  'id:nginxwww1':
    - match: grain
    - nginxwww1
  'id:nginxwww2':
    - match: grain
    - nginxwww2

接下来,我们将继续为其创建一个支柱文件,nginxwww1而我们将为该域创建一个虚拟主机,监听端口81 example.com,文档根为/var/www/example_com/,索引文件为index.shtml

vhosts:
    -
      listenPort: '81'
      serverName: 'example.com'
      documentRoot: '/var/www/example_com'
      indexFiles:
        - index.shtml

我们将继续为其创建一个支柱文件,nginxwww2而我们将创建一个虚拟主机,监听该域的端口82 example2.com,文档根为/var/www/example2_com/,索引文件为index.jsand index.css

vhosts:
    -
      listenPort: '82'
      serverName: 'example2.com'
      documentRoot: '/var/www/example2_com'
      indexFiles:
        - index.js
        - index.css

注意:支柱文件存储在/srv/pillar/

部署中

现在,我们可以通过更新我们的奴才来完成支柱的首次尝试:

salt '*' saltutil.refresh_pillar

然后,我们可以运行SaltStack公式:

salt '*' state.sls nginx

确认中

一旦SaltStack公式已运行并完成没有任何错误,我们应该能够看到nginx端口监听81nginxwww1和端口82nginxwww2的确认。

结论

这个相当轻巧但已经强大的SaltStack公式可以进一步扩展以添加对HTTPS的支持,可能是集成了Let's Encrypt,对CGI或PHP后端的支持以及您可以手动执行的所有操作。本指南应该为您提供用于配置文件部署的SaltStack公式和支柱的基本概念。祝自动化!

留下評論

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg可以避免系统污染,确保仅安装必要的依赖关系。

如何在Ubuntu 16.04上安装OpenSIPS控制面板

如何在Ubuntu 16.04上安装OpenSIPS控制面板

快速学习如何在Ubuntu 16.04上安装OpenSIPS控制面板,为VoIP提供商提供支持的功能。

在Fedora 28上安装Akaunting

在Fedora 28上安装Akaunting

学习如何在Fedora 28上安装Akaunting,一款适合小型企业和自由职业者的开源会计软件。

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

使用其他系统?Mailtrain是一个基于Node.js和MySQL / MariaDB构建的开源自托管新闻通讯应用程序。

诊断Minecraft服务器延迟和低TPS

诊断Minecraft服务器延迟和低TPS

了解導致Minecraft延遲的原因和解決方案,包括優化伺服器性能和減少滯後的步驟。

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息