Vagrant教學 – 安裝 Apache

在本 Vagrant 教程中,我將教您在工作站上設置 Vagrant,以便為您的開發環境創建和管理虛擬機。

安裝 Apache 網絡服務器

現在讓我們安裝一個 apache 服務器並看看是否可以通過網絡瀏覽器訪問它。

步驟 1:使用以下命令安裝 apache

sudo apt-get install apache2 -y

步驟 2:啟動 Apache 服務器。

sudo service apache2 start

步驟 3:檢查服務器狀態。 您將看到輸出正在運行。

sudo service apache2 status

步驟 4:讓我們使用curl來看看是否能夠訪問該網頁。 它應該輸出 apache 2 HTML 歡迎頁面。

curl localhost

步驟 5:使用以下命令獲取虛擬機的 IP 地址。

ip route get 1.2.3.4 | awk '{print $7}'

上述命令應輸出 IP 地址。

第 6 步:嘗試使用 IP 地址進行curl。 您應該看到與步驟 4 相同的輸出。將 IP 地址替換為您在輸出中看到的地址。

curl 10.0.2.15

第 7 步:現在,嘗試從系統的網絡瀏覽器訪問 IP 地址。 您將無法訪問它。 原因是VM當前網絡不是專用網絡。 這意味著,存在從外部世界到虛擬機的連接。

讓我們對 Vagrant 文件進行一些更改,以便從瀏覽器訪問虛擬機。

步驟 8:使用以下命令銷毀虛擬機。

vagrant destroy

第 9 步:現在,打開 Vagrantfile 並取消註釋以下行。

config.vm.network "private_network", ip: "192.168.33.10"

這意味著,我們正在啟用專用網絡並將虛擬機的 IP 地址設置為 192.168.33.10。如果您想允許從 Wi-Fi 網絡上的另一台計算機訪問虛擬機,請啟用以下選項。

當您啟動虛擬機時,它會要求橋接接口,如下所示。
Vagrant 公共網橋詳細信息

您還可以配置從主機到 Vagrant VM 的端口轉發。 例如,如果您在虛擬機上的 80 上運行 apache 服務器,則可以配置主機端口 8080 將請求轉發到虛擬機端口 80。

config.vm.network "forwarded_port", guest: 80, host: 8080

這樣,您就可以從主機 Web 瀏覽器訪問 http://localhost:8080 上的 apache 服務器

第 10 步:再次啟動虛擬機並通過 ssh 進入其中。

vagrant up
vagrant ssh

步驟 11:現在安裝 apache 服務器並使用步驟 1 和 2 啟動它

第12步:現在如果您嘗試使用192.168.33.10訪問apache歡迎頁面,您將能夠訪問它。

http://192.168.33.10

Vagrant 共享文件夾

如果您想知道如何與 Vagrant VM 共享主機文件夾,這裡就是 /vagrant 文件夾發揮作用的地方

Vagrant 默認共享文件夾每個 Vagrant VM 都會有一個 /vagrant 文件夾。 該文件夾被安裝到您擁有 Vagrantfile 的主機文件夾中。 這意味著,您創建的包含 Vagrantfile 的項目文件夾將安裝在 VM 內的 /vagrant 位置。因此,從 vagrant VM 中,如果訪問 /vagrant 文件夾,則可以看到 Vagrantfile。這是使用共享文件夾的真實用例。如果您在主機上處理代碼,則可以將 vagrant 項目文件夾設置為代碼的根文件夾,以便虛擬機中運行的 Web 服務器可以訪問您的代碼並直接對其進行測試。Vagrant 自定義共享文件夾位置如果您希望使用與 Vagrant VM 共享的自定義主機文件夾,可以通過添加 config.vm.synced_folder 參數來實現。例如,

config.vm.synced_folder "/host/code/", "/vm/code"

在上面的配置中,/host/code/ 是主機中存在的文件夾,/vm/code 是 Vagrant VM 內的位置。

如果您使用通用文件夾來存儲主機中的所有代碼和配置,則此功能會派上用場。

定制CPU和內存

您可以為您的 vagrant VM 定義自定義 CPU 和內存。

根據系統中的可用資源設置 CPU 和內存值。

這是配置語法。

config.vm.provider "virtualbox" do |vb|
    vb.memory = 2048
    vb.cpus = 1
end

Vagrant Provisioner

Vagrant 最好的一點是你可以將配置腳本添加到 Vagrantfile 中。

以下是使用 shell 腳本作為配置程序的示例。

config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y apache2
    service apache2 start
  SHELL

您還可以使用 Ansible、Chef 或 puppet 作為配置程序。

Vagrant 文件示例

您可以從單個 Vagrantfile 創建單個或多個虛擬機。 讓我們看一下單個和多個虛擬機配置的示例。
單個虛擬機 Vagrantfile

下面的 Vagrantfile 包含了我上面解釋的所有概念。

  • 使用 ubuntu/trusty64 盒子創建虛擬機
  • 在主機端口 8080 上啟用專用網絡、public_network 和端口轉發
  • 自定義共享文件夾
  • 定制CPU和內存
  • 用於安裝 apache2 的 Shell 配置程序
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-22.04"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.network "public_network"
  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.synced_folder "code/", "/app/code"
  config.vm.provider "virtualbox" do |vb|
    vb.memory = 2048
    vb.cpus = 1
  end
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y apache2
    service apache2 start
  SHELL
end

多虛擬機 Vagrantfile

以下 Vagrantfile 具有使用自己的配置創建兩個名為 web 和 db 的 VM 的配置。

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo Hello"
  config.vm.define "web" do |web|
    web.vm.box = "bento/ubuntu-22.04"
    web.vm.network "private_network", ip: "192.168.33.20"
    web.vm.synced_folder "code/", "/app/code"
    web.vm.provider "virtualbox" do |vb|
        vb.memory = 1048
        vb.cpus = 1
    end
  end
  config.vm.define "db" do |db|
    db.vm.box = "ubuntu/trusty64"
    db.vm.network "private_network", ip: "192.168.33.30"
    db.vm.synced_folder "data/", "/db/data"
    db.vm.provider "virtualbox" do |vb|
        vb.memory = 2048
        vb.cpus = 1
    end
  end
end

要通過 ssh 進入虛擬機,您需要使用名稱 web 和 db

vagrant ssh web
vagrant ssh db

您可以使用其名稱單獨管理虛擬機。
帶循環的多虛擬機 Vagrantfile

假設您要創建 3 個相同類型的虛擬機。

在這種情況下,您可以使用循環來創建多個具有派生專用 IP 的虛擬機。

這是一個例子。

Vagrant.configure("2") do |config|
  (2..4).each do |i|
    config.vm.define "vm-#{i}" do |web|
      web.vm.box = "bento/ubuntu-22.04"
      web.vm.network "private_network", ip: "192.168.33.#{i}", auto_config: false
      web.vm.provision "shell", inline: "echo hello #{i}"
      web.vm.synced_folder "code/", "/app/code"
    end
  end
end

Vagrant Vs Docker

Vagrant 只是一個包裝實用程序,可以使用 Virtualbox 或 Docker 等後端提供商來配置虛擬機或容器。 相比之下,Docker 是一個輕量級容器解決方案,擁有自己的一套工具來管理容器。

如果您使用 Virtualbox 或 Vmware 作為 Vagrant 的提供者,它可以根據 Vagrantfile 中的配置啟動虛擬機。

如果您使用 Docker 作為 Vagrant 的提供者,那麼它將根據 Vagrantfile 中的配置啟動 docker 容器。

結論

在本 Vagrant 教程中,您學習瞭如何為開發環境設置基本的 Vagrant 虛擬機。

它是為您的工作站設置開發環境的絕佳工具。

您可以使用 docker-compose 等工具來實現這些目標,但大多數時候我更喜歡將 Vagrant 與普通虛擬機一起用於測試目的。

如果您有任何適用於 vagrant 的很酷的技巧,請在評論部分告訴我。

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *