[英]Vagrant: symlinked nginx configs cannot be loaded on guest's start
流浪文件
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
文件夾,我可以在其中放置腳本,並使用所有必需的參數執行這些腳本,以標識無所事事的安裝。
我不想依靠Vagrant的機制,例如插件或進一步的配置腳本。 我最近從配置外殼程序腳本更改為Ansible,同時希望對Docker或其他部署機制使用相同的配置。 我可以想象Docker中的安裝會出現同樣的問題。
我發現@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.