配置文件(nginx.conf 等)更改后自动重新加载

配置文件(nginx.conf 等)更改后自动重新加载

sudo service nginx reload在处理/试验/学习配置文件nginx(以及其他包含的配置文件)时,我总是忘记重新加载 nginx 设置。

有没有办法实现这一点,即在以下任何更改之后,nginx 重新加载配置文件:

  • /etc/nginx/nginx.conf
  • /etc/nginx/sites-available/(任何文件的更改、删除、创建)
  • /etc/nginx/sites-enabled/(任何文件的更改、删除、创建)

您可能认为我忘记重新加载是愚蠢的,但作为新手并且实际学习和实验,确实有足够多的事情需要跟踪。

答案1

使用配置管理系统部署这些更改,并包含一个触发器来自动重新启动配置文件已更改的服务。

在学习期间养成使用 CM 的习惯非常值得,因为在以后的职业生涯中,改掉坏习惯会变得更加困难。

为了帮助您入门,这里有一个简单的 ansible 剧本,它将把 nginx 配置文件部署到您的服务器,然后在发生任何更改时重新启动 nginx:

---
- hosts: web
  sudo: yes

  tasks:
    - name: Install packages
      apt: state=installed install_recommends=no name={{ item }}
      with_items:
        - nginx

    - name: Deploy nginx config file
      copy: src=nginx.conf dest=/etc/nginx/nginx.conf
      notify: restart nginx

  handlers:
    - name: restart nginx
      service: name=nginx state=restarted

将该文本保存到类似 的文件中foo.yml。您还需要一个清单文件来告诉 ansible 在哪个主机上运行这些命令。创建一个hosts包含以下内容的文件:

[web]
servername.example.com

将您的剧本、库存文件和 nginx.conf 保存在同一目录中。

然后你就可以应用剧本了:

$ ansible-playbook foo.yml -i hosts -K

发出该命令后,系统会要求你输入 sudo 密码。输入密码后,剧本就会运行。

答案2

显然,您希望拥有一个 CM(配置管理系统),而 Ansible 能够自动化应用程序部署。

我认为 CI(持续集成)或 CD(持续部署)也可以满足您的需求。使用 git+CI/CD+VM 您可以轻松测试您的服务。您可以尝试以下服务:

Shippable、Circle CI、GitLab CI。

相关内容