Vagrant:无法在来宾启动时加载符号链接的 nginx 配置

代码坎迪斯

使适应

  • 流浪者 2.0.1
  • 流浪盒:ubuntu/xenial64
  • 配置:ansible

流浪档案

Vagrant.configure("2") do |config|

    config.vm.box = "ubuntu/xenial64"
    config.vm.box_download_insecure = true

    config.vm.define "foobar"
    config.vm.provider "virtualbox" do |provider|
        provider.name = "foobar"
        provider.customize [ "modifyvm", :id, "--uartmode1", "disconnected" ]
    end

    config.vm.network "private_network", ip: "192.168.5.4"
    config.vm.hostname = "foobar.dev"
    config.hostsupdater.aliases = ["pma.foobar.dev","readis.foobar.dev"]

    config.vm.synced_folder ".", "/vagrant", type: "nfs"

    config.vm.provision "Installing 'vagrant'", type: "ansible_local" do |provisioner|
        provisioner.playbook = "/vagrant/env/ansible/install-vagrant.yml"
        provisioner.inventory_path = "/vagrant/env/ansible/inv/integration/hosts"
        provisioner.limit = "localhost"
    end

end

问题

如您所见,我的来宾上运行着 3 台 nginx 主机。我使用 ansible 将这 3 个单独的配置(启用站点)从来宾系统符号链接到我的主机系统,这将等于

sudo ln -s /vagrant/path/to/dist.conf /etc/nginx/sites-enabled/dist.conf

当我第一次使用vagrant upBox 时,站点是可以访问的,因为在配置结束时我会重新启动nginx服务。但是一旦我停止盒子并再次启动它,网站就无法访问,但nginx服务正在运行。然后我可以nginx在 shell 上重新启动服务,然后一切正常。

原因

我发现在nginx服务启动时同步/vagrant文件夹尚未安装。nginx无论符号链接配置是否可以解析,服务仍然可以正常启动。

问题

我可以设置一个始终运行的配置 shell 脚本,它nginx在每个vagrant up. 但这不是我正在寻找的解决方案。

有没有办法/vagrant在安装文件夹后立即处理来宾系统中的触发器我可以想象有某种xyz.d文件夹我可以将脚本放入其中,这些脚本将使用所有必要的参数来执行以识别流浪者安装。


编辑 (2018-04-25)

我不想依赖 Vagrant 的机制,比如插件或进一步的配置脚本。我最近从配置 shell 脚本更改为 Ansible,同时我想对 Docker 或其他部署机制使用相同的配置。我可以想象 Docker 中的挂载也有同样的问题。


编辑 (2018-04-27)

在 Vagrant 挂载后启动服务

我发现@razius 的这篇文章有完全相同的问题。该解决方案不是最新的,我得到了寻找systemd与他的解决方案等效的提示但我对它并不熟悉。所以可能有人可以帮助我。

代码坎迪斯

https://stackoverflow.com/a/38559856/2323764

我找到了上面链接的解决方案,但我不得不根据systemd标准和建议进行修改

  • systemd单元更改不属于/lib/systemd这些更改,而这些更改可以随时被包和/或分发更新覆盖。单位的更改必须在 中单位的副本中进行/etc/systemd
  • 复制
    /lib/systemd/system/nginx.service

    /etc/systemd/system/nginx.service
  • WantedBy将部分中的设置更改[Install]vagrant.mount
  • 请注意,名称vagrant.mount取决于 vagrant 安装到框中的路径。如果您挂载,vagrant/somepath则挂载名为vagrant-somepath.mount.
  • 运行以下命令来重写单元的目标文件和其他必要的依赖项:
    systemctl daemon-reload
    systemctl disable nginx.service
    systemctl enable nginx.service

这导致我的 ansible 处理程序如下:

- name: Stopping the service 'nginx.service'
  listen: "restart service 'nginx.service'"
  systemd:
    name: "nginx.service"
    state: stopped

- name: Copying the service unit 'nginx.service'
  listen: "restart service 'nginx.service'"
  copy:
    src: "/lib/systemd/system/nginx.service"
    dest: "/etc/systemd/system/nginx.service"
    force: yes

- name: Configuring the service unit 'nginx.service' dependency to 'vagrant.mount'
  listen: "restart service 'nginx.service'"
  replace:
    path: "/etc/systemd/system/nginx.service"
    regexp: "^WantedBy=(.*)$"
    replace: "WantedBy=vagrant.mount"

- name: Running 'daemon-reload'
  listen: "restart service 'nginx.service'"
  systemd:
    daemon-reload: yes

- name: Disabling service 'nginx.service'
  listen: "restart service 'nginx.service'"
  systemd:
    name: "nginx.service"
    enabled: no

- name: Enabling service 'nginx.service'
  listen: "restart service 'nginx.service'"
  systemd:
    name: "nginx.service"
    enabled: yes

- name: Starting service 'nginx.service'
  listen: "restart service 'nginx.service'"
  systemd:
    name: "nginx.service"
    state: started

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章