- macOS 10.13.6
- VirtualBox 5.2.18
- Vagrant 2.1.4
- CentOS Linux release 7.5.1804 (Core)
目標:利用Vagrant創建CentOS虛擬機,并快速部署LNMP環境,調試本地代碼。
1.安裝Vagrant
下載VirtualBox 并安裝
下載Vagrant 并安裝
2.安裝虛擬機
新建一個Vagrant操作目錄,我這里叫centos
,下載需要的box(即系統),Vagrant社區提供了很多已經打包好的系統。下載地址
找到需要的系統,會有介紹和安裝方式
$ mkdir centos
$ cd centos
$ vagrant init centos/7
$ vagrant up
下載比較慢,需翻墻,也可以下載到本地后再add,方式如下:
依然在終端運行$ vagrant init centos/7
命令,但是在運行過程中會發現終端將box文件原地址打印了出來,見下圖, 一出現該地址,按 ctrl + c 退出
將下載的box放到centos
目錄下,并刪除已經產生的Vagrantfile,執行
$ vagrant box add centos-7.box
$ vagrant init centos-7
$ vagrant up
目錄下會生成Vagrantfile配置文件,修改配置文件可以實現虛擬機與本地的ip端口轉發與數據共享。
通過
$ vagrant -h
查看常用的Vagrant命令,經常使用的有$ vagrant up
啟動虛擬機;$ vagrant reload
重啟虛擬機;$ vagrant halt
關閉虛擬機;$ vagrant ssh
登錄虛擬機,默認的虛擬機root密碼是vagrant
。
Vagrant命令
3.部署web軟件
自己部署NMP,或推薦個簡單的工具——寶塔面板,可視化一鍵部署。
$ vagrant ssh
$ yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_pro.sh && sh install.sh
安裝時會設置默認端口,我這里設置為8881,并會得到后臺默認的賬戶名和密碼。
寶塔面板安裝完畢,配置ip端口轉發,訪問虛擬機寶塔面板的可視化頁面,打開Vagrantfile,修改以下值:
guest是虛擬機上對應的端口,host是本機對應的端口,為了避免常用端口占用,虛擬機的80端口轉發到本地的8880端口。
配置完畢,$ vagrant reload
重啟虛擬機。
瀏覽器打開 http://localhost:8881/ 就可以看到可視化面板了,軟件管理中安裝NMP等服務軟件。
安裝完畢后,添加站點:
我這里用本地hosts www.test.com
訪問虛擬機中/www/wwwroot/test
目錄下的web主頁,需要修改本地hosts,推薦軟件SwitchHosts
,添加一條規則并開啟:
OK,瀏覽器打開 www.test.com:8880 就可以看到寶塔面板的歡迎頁了。
4.共享目錄
修改 Vagrantfile 文件,
參數含義:
config.vm.synced_folder
"your_folder"(必須) //物理機目錄,可以是絕對地址或相對地址,相對地址是指相對與vagrant配置文件所在目錄
,"vm_folder(必須)" // 掛載到虛擬機上的目錄地址 ,create(boolean)--可選 //默認為false,若配置為true,掛載到虛擬機上的目錄若不存在則自動創建
,disabled(boolean):--可選 //默認為false,若為true,則禁用該項掛載
,owner(string):'root'--可選 //虛擬機系統下文件所有者(確保系統下有該用戶,否則會報錯),默認為vagrant
,group(string):'root'--可選 //虛擬機系統下文件所有組( (確保系統下有該用戶組,否則會報錯),默認為vagrant
,mount_options(array):["dmode=775","fmode=664"]--可選 dmode配置目錄權限,fmode配置文件權限 //默認權限777
,type(string):--可選 //指定文件共享方式,例如:'nfs',vagrant默認根據系統環境選擇最佳的文件共享方式
重要:安裝 vagrant-vbguest 插件實現目錄實時共享:
這時如果直接$ vagrant reload
重啟會報錯誤:
Vagrant was unable to mount VirtualBox shared folders. This is usually because the filesystem "vboxsf" is not available. This filesystem is made available via the VirtualBox Guest Additions and kernel module. Please verify that these guest additions are properly installed in the guest. This is not a bug in Vagrant and is usually caused by a faulty Vagrant box. For context, the command attempted was: mount -t vboxsf -o uid=0,gid=0 www_wwwroot_test /www/wwwroot/test The error output from the command was: mount: unknown filesystem type 'vboxsf'
需要安裝插件,網上一般的安裝方式($ vagrant plugin install vagrant-vbguest
)會因為墻的問題導致各種安裝失敗,切換國內的gem源安裝:
$ gem update --system # gem更新到最新,需翻墻
$ gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ # 刪除默認源,添加國內源,注意使用ruby-china.com新域名,原ruby-china.org源也需要刪除重新設置
$ gem sources -l # 檢查源,確保只有一個,多余需要刪除
$ vagrant plugin install vagrant-vbguest --plugin-clean-sources --plugin-source [https://gems.ruby-china.com/](https://gems.ruby-china.com/) # 安裝插件
$ vagrant reload # 重啟虛機
重新登錄虛機,$ vagrant ssh
,提權到root,$ su
,測試本地test目錄和虛機/www/wwwroot/test
目錄是否已經共享同步,配置完成。