vagrant搭建centos環境
前言
macos作為開發環境已經相當方便,有很豐富的工具,如homebrew
類似於ubuntu的apt-get
和centos的yum
,很方便地安裝各種開發工具。但終究與線上生產環境不同,即便安裝的是相同的軟件,安裝目錄,管理方式都有所不同。當項目很復雜,或者有多個項目時,很容易將mac本地環境弄得亂七八糟。
為了能與線上生產環境一致,嘗試過用docker, 並沒有想象中的方便,可能是我對dokcer的了解太少。且覺得docker的門檻較高。
衡量各種方案后,最終選擇用vagrant與virtualBox搭建一個完整的linux系統,這樣能夠與線上生產環境一致,也能很方便地進行移植。
環境准備
- 下載安裝 virtualBox
- 下載安裝 vagrant
- 使用迅雷下載 官方鏡像
我選擇的是 centos7.2 的鏡像
安裝
新建目錄centos
,作為vagrant的根目錄
- 導入下載的鏡像
☁ centos vagrant box add centos ~/Downloads/vagrant-centos-7.2.box
# 將box命名為centos
- 初始化
☁ centos vagrant init
會自動生成Vagrantfile
配置文件
修改配置文件
設置box名稱
box名稱須與上面命令指定的box名一致
config.vm.box = "centos"
端口轉發
config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
macos不允許將本機的80端口轉發, 解決方案參照: mac設置端口轉發
開啟nfs
默認的virtualBox共享文件速度太慢,需要啟用nfs默認
Vagrantfile 設置:
config.vm.network "private_network", type: "dhcp"
config.vm.synced_folder "/Users/airmb/Downloads/work", "/home/wwwroot/work", :nfs => true, :mount_options => ['actimeo=2']
設置內存
內存大小根據物理機內存設置,我的mac物理機是8G內存,分配了3G給虛擬機
如果要安裝mysql5.7,內存不能低於2G
config.vm.provider "virtualbox" do |vb|
vb.memory = "3072"
end
啟動與連接
連接vagrant虛擬機有兩種方式:
- 賬號密碼,兩者均為 vagrant
- ssh key, 可通過
ssh-config
查看私鑰的路徑
查看ssh-config
可以用vagrant默認生成的key,也可以將自己的私鑰替換到 IdentityFile 指定的文件,連接虛擬機后再將公鑰放到虛擬機中的
~/.ssh/authorized_keys
啟動虛擬機
☁ centos vagrant up
連接進入虛擬機
☁ centos vagrant ssh
默認的共享掛載目錄:/home/vagrant
常用vagrant命令
- vagrant up 啟動
- vagrant ssh 進入虛擬機
- vagrant halt 關機
- vagrant reload 重啟
- 導出與導入
☁ centos vagrant package --base centos_default_1533259579120_24934 --out centos7.2.box # 導出box
☁ centos vagrant box add centos ./centos7.2.box # 導入box
清空重新導入鏡像
當需要重新導入鏡像時,為避免出現各種奇奇怪怪的問題,清空以下內容:
# 將現有的box刪除
☁ centos vagrant box list
centos (virtualbox, 0)
☁ centos vagrant box remove centos
☁ centos vagrant global-status --prune
☁ centos rm -rf .vagrant
☁ centos rm -rf Vagrantfile
☁ centos cd ~/VirtualBox\ VMs
☁ VirtualBox VMs ls
centos_default_1534145188471_82398
☁ VirtualBox VMs rm -rf ./*
配置文件 Vagrantfile
端口轉發
config.vm.network "forwarded_port", guest: 80, host: 8080
內存分配
config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
vb.memory = "3072"
end
目錄掛載
config.vm.synced_folder "~/code", "/home/wwwroot/code", :owner=> 'vagrant', :group=>'www', :mount_options => ['dmode=775', 'fmode=775']
填坑記錄
nginx不同步本地修改的靜態文件
同一個文件,本地修改后,centos虛擬機能看到同步的修改,但怎么刷新都看不到變化,只有在centos里面再修改文件才有效。而動態文件,如php文件修改后實時能看到變化
解決:
將nginx.conf的配置修改:
sendfile off;
apache也有相同問題,修改配置:
EnableSendfile off