vagrant搭建centos環境


vagrant搭建centos環境

前言

macos作為開發環境已經相當方便,有很豐富的工具,如homebrew類似於ubuntu的apt-get和centos的yum,很方便地安裝各種開發工具。但終究與線上生產環境不同,即便安裝的是相同的軟件,安裝目錄,管理方式都有所不同。當項目很復雜,或者有多個項目時,很容易將mac本地環境弄得亂七八糟。

為了能與線上生產環境一致,嘗試過用docker, 並沒有想象中的方便,可能是我對dokcer的了解太少。且覺得docker的門檻較高。

衡量各種方案后,最終選擇用vagrant與virtualBox搭建一個完整的linux系統,這樣能夠與線上生產環境一致,也能很方便地進行移植。

環境准備

我選擇的是 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 查看私鑰的路徑

img

查看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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM