Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Ansible安排网站部署,以便在没有vhost更改的情况下不会重新启动Apache?_Apache_Ansible_Vhosts - Fatal编程技术网

如何使用Ansible安排网站部署,以便在没有vhost更改的情况下不会重新启动Apache?

如何使用Ansible安排网站部署,以便在没有vhost更改的情况下不会重新启动Apache?,apache,ansible,vhosts,Apache,Ansible,Vhosts,我目前正在学习Ansible,为了应用所学内容,我正在转换一些旧的Bash安装脚本来构建web服务器。我的一个用例是安装或升级网站。该过程通常是: 将Apache vhost定义复制到/etc/apache2/可用站点中 /etc/apache2/启用站点中的符号链接vhost定义 签出/var/www/sitename中的分支或从源文件夹复制 在该项目内运行自定义设置或迁移脚本,例如使用Phing Apache的优雅重启 如果需要vhost,我只对重新启动web服务器感兴趣,主要是因为我的

我目前正在学习Ansible,为了应用所学内容,我正在转换一些旧的Bash安装脚本来构建web服务器。我的一个用例是安装或升级网站。该过程通常是:

  • 将Apache vhost定义复制到
    /etc/apache2/可用站点中
  • /etc/apache2/启用站点中的符号链接vhost定义
  • 签出
    /var/www/sitename
    中的分支或从源文件夹复制
  • 在该项目内运行自定义设置或迁移脚本,例如使用Phing
  • Apache的优雅重启
如果需要vhost,我只对重新启动web服务器感兴趣,主要是因为我的SSL证书上有一个密码短语,如果发生这种情况,需要重新输入密码短语。由于此playbook的大多数运行都是升级,而不是安装,因此在不需要重启的地方抑制重启是有意义的

我已经围绕这个用例做了一些搜索,但是我似乎在网上找不到太多相关的资料。因此,我创建了以下内容,使用文件哈希来检测更改,我想知道是否有更好的方法。这是:

---

# Copy site contents unconditionally
- file: path=/var/www/html state=directory
- copy: src=../../build-files/default/index.html dest=/var/www/html/index.html

# Copy vhost to a temporary file so we can checksum it remotely
- copy: src=../../build-files/apache/000-default.conf dest=/tmp/000-default.conf

# Get the checksum of the existing vhost
- shell: md5sum /etc/apache2/sites-available/000-default.conf | cut -f 1 -d ' '
  register: old_checksum_default_site

# Get the checksum of the new vhost
- shell: md5sum /tmp/000-default.conf | cut -f 1 -d ' '
  register: new_checksum_default_site

- debug: msg="Old checksum is {{ old_checksum_default_site.stdout }}, new checksum is {{ new_checksum_default_site.stdout }}"

# Copy our default vhost into place if necessary
- copy: src=../../build-files/apache/000-default.conf dest=/etc/apache2/sites-available/000-default.conf
  notify: restart apache
  when: old_checksum_default_site.stdout != new_checksum_default_site.stdout

这对于所有网站来说都是一个样板,甚至还没有符号链接——有没有更简单的方法?我不是Python程序员,但请告诉我是否编写自定义模块可能是最好的解决方案。

如果不了解apache/vhost的内部内容,这就足够了

# Copy site contents unconditionally
- file: path=/var/www/html state=directory
- copy: src=../../build-files/default/index.html dest=/var/www/html/index.html

# Copy vhost to a temporary file so we can checksum it remotely
- copy: src=../../build-files/apache/000-default.conf dest=/etc/apache2/sites-available/000-default.conf
  notify:
    - restart apache
如果对
000 default.conf
的本地副本没有任何更改,则ansible步骤在运行时将报告为绿色


如果某些内容已更改,则颜色将为黄色,您将看到处理程序在最后运行。

在不了解apache/vhost内容的内部结构的情况下,这应该足够了

# Copy site contents unconditionally
- file: path=/var/www/html state=directory
- copy: src=../../build-files/default/index.html dest=/var/www/html/index.html

# Copy vhost to a temporary file so we can checksum it remotely
- copy: src=../../build-files/apache/000-default.conf dest=/etc/apache2/sites-available/000-default.conf
  notify:
    - restart apache
如果对
000 default.conf
的本地副本没有任何更改,则ansible步骤在运行时将报告为绿色


如果某些内容已更改,则颜色将为黄色,您将看到处理程序在末尾运行。

哦,对了,Ansible副本是否仅在会产生更改时才运行?这是正确的。它在内部完成所有md5sum的工作(或者使用另一种方式——我不确定如何完成)。编辑:您可以将ansible看作是将服务器带到所需状态的东西。如果您不指定状态更改(通过更新配置),那么ansible将不采取任何操作哦,对了,ansible副本是否仅在产生更改时才运行?这是正确的。它在内部完成所有md5sum的工作(或者使用另一种方式——我不确定如何完成)。编辑:您可以将ansible看作是将服务器带到所需状态的东西。如果不指定状态更改(通过更新配置),ansible将不采取任何操作