簡體   English   中英

流浪漢:符號鏈接的Nginx配置無法在來賓啟動時加載

[英]Vagrant: symlinked nginx configs cannot be loaded on guest's start

條件

  • 流浪漢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主機。 我將來自來賓系統的這3個單獨的配置(啟用的站點)鏈接到我的主機系統中,ansible等於

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

當我第一次vagrant up Box時,這些站點都是可訪問的,因為在供應結束時,我重新啟動了nginx服務。 但是,一旦我停止安裝並重新啟動它,這些站點就無法訪問,但是nginx服務正在運行。 然后,我可以在外殼上重新啟動nginx服務,然后一切正常。

原因

我發現在nginx服務啟動時,尚未掛載同步的/vagrant文件夾。 無論是否可以解析符號鏈接的配置, nginx服務仍然可以正常啟動。

我可以設置始終運行的Provisioning Shell腳本,該腳本在每個vagrant up重新啟動nginx服務。 但這不是我正在尋找的解決方案。

一旦掛載了/vagrant文件夾,是否有辦法處理來賓系統中的觸發器? 我可以想象有一個xyz.d文件夾,我可以在其中放置腳本,並使用所有必需的參數執行這些腳本,以標識無所事事的安裝。


編輯(2018-04-25)

我不想依靠Vagrant的機制,例如插件或進一步的配置腳本。 我最近從配置外殼程序腳本更改為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
  • [Install]部分中的WantedBy設置更改為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM