win10下使用virtualbox + vagrant配置ruby開發機環境

Vagrant是一個基於Ruby的工具,用於創建和部署虛擬化開發環境。它 使用Oracle的開源VirtualBox虛擬化系統,使用 Chef創建自動化虛擬環境。搭配Cmder如絲般順滑,實現你所有關於Mac&Linux的幻想

在寫本文前,筆者已經嘗試了多種其他的替代方法,例如wmware虛擬機安裝kylin。然而發現總是還有各種問題。經大佬指點安裝了virtualbox + vagrant。於是發現配置起來如此簡單。接下來筆者將詳細闡述。

 (注:筆者自己的服務器上的配置是centos7.2 + ruby2.3.4 + mariadb + redis,自己的筆記本爲win10,另外,很多網上的類似文章都寫於很長時間以前,很多內容現在已經不適用,甚至很多關鍵的環節還不講清楚,導致筆者配置初期踩了很多的坑。所以寫下此文,總結經驗)

配置流程

1、box鏡像的選擇

本文中,筆者由於網站服務器系統爲centos7.2,所以理所應當的選擇了centos的鏡像。(鏡像官網,支持搜索配置:https://app.vagrantup.com/boxes/search。 關於vagrant,此文中不再贅述,網上關於vagrant+virtualbox的資料很多,基本配置也非常簡單省事)。

 起初,筆者隨意下載了一個下載量高的centos,結果發現內部配置有很多的問題,主要問題是很多軟件的版本過於老舊且更新很麻煩,需要手動解決很多的依賴(有的甚至還解決不了,於是果斷棄坑)。後來換了一個官方鏡像,於是有了很大的改觀。(安利一下我用的鏡像:https://app.vagrantup.com/centos/boxes/7

在選擇鏡像的時候要注意以下幾點:

•如沒有十足的把握,請儘量選擇較新且完整版的鏡像(儘量不要Minimal)
•如果網絡條件允許(例如在中國大陸之外)的話,可以直接按照頁面上的方法配置。如果網絡條件不允許或者速度極慢,可以先按照上面init你的vagrant,然後得到box的下載地址,中斷init。然後用迅雷下載此地址到本地再配置,可以大大節省時間。

2、安裝git

作爲開發機,git是必不可少的,然而一開始也被git坑了好長時間。
 首先直接命令安裝

yum install git

安裝時務必注意版本,版本最好不要低於1.8(之前另一個系統git1.7,很多網站上的repo無法正常訪問)
 接下來就是配置git的一些全局設置

git config --global user.name "HansBug"
git config --global user.email [email protected]
git config credential.helper 'cache --timeout=7200'

三條設置依次爲用戶名,用戶郵箱和記住密碼(本人較懶,不想配置ssh)有效時間(單位秒,例子中爲2小時)

3、安裝rvm

作爲rails環境的搭建,rvm是很重要的一環。
 首先安裝rvm(如果本機沒有curl或者出現其他依賴問題請先解決)

curl -L get.rvm.io | bash -s stable

安裝完後如果看到如下的提示的話

 * WARNING: You have '~/.profile' file, you might want to load it,
  to do that add the following line to '/home/vagrant/.bash_profile':

   source ~/.profile

則按照他說的做就好了。

安裝完畢後有一個很重要的操作——將原鏡像地址換掉。原鏡像地址由於某些神祕的原因(你懂得),接下來ruby下載速度奇慢,而且還不穩定。
 於是果斷執行命令

echo "ruby_url=https://cache.ruby-china.org/pub/ruby" > ~/.rvm/user/db

4、安裝ruby

rvm配置完畢之後,下一步就是安裝ruby(我使用的是2.3.4版本)

rvm install 2.3.4

然後安裝完之後設置爲默認版本

rvm use 2.3.4 --default

5、修改gem source

一般來說,ruby安裝完之後,gem也就有了。但是因爲一些神祕的原因(你懂得),gem原本的source常常下載速度極慢。
 首先看一下現有的gem source

gem source -l

反饋是

*** CURRENT SOURCES ***

https://rubygems.org/

這個是rubygem原有的鏡像,在大陸訪問速度比較慢。我們可以換上ruby-china提供的鏡像。操作如下:

gem source -r https://rubygems.org/
gem source -a https://gems.ruby-china.org/

依次是刪除原有鏡像地址和創建新鏡像地址。到此,gem配置完畢

6、安裝rails和bundler

如果之前都配置妥善了的話,這一步其實很簡單
 首先(中間可能會出現部分依賴性問題,可以通過baidu和google自行解決,一般都能找到相關資料)

gem install rails

確認安裝完畢後,運行

gem install bundler

7、安裝mariadb和redis

其實mariadb在centos上的安裝非常簡單,直接 yum -y install mariadb mariadb-server mysql-devel 即可(最後一個要是不安裝的話,等會bundle install時會出現依賴錯誤)。

 然後就可以 sudo service mariadb start來啓動數據庫了,十分方便。(關於數據庫的設置密碼等問題,可以自行百度相關資料,此處不再贅述)

redis的話,在確保EPEL安裝了的情況下,也可以直接yum -y install redis,系統服務也配置好了,非常方便。(EPEL的安裝請看文末問題區2)
注:在正式部署項目之前,請務必按照development的方式將redis和mariadb的相關配置配置好

關於mariadb的基本初始設置,可以參照://www.jb51.net/article/108930.htm
關於mariadb的遠程訪問問題,可以參照下面鏈接,寫的很簡潔清晰(不過除了開發機以外的情況下將遠程權限賦予全部ip是很不安全的)://www.jb51.net/article/72426.htm

8、部署項目

首先在項目目錄下初始化倉庫並添加遠程倉庫(後面寫上你的git地址)

git init
git remote add origin *****************.git

然後
git pull origin master

將項目安置好,然後接下來就是rails項目的一般性流程了

bundle install
rails db:migrate
rails db:seed

(注:若在bundle install的過程中遇到相關依賴性問題的話,可以首先查看錯誤說明,很多錯誤說明中已經告訴了你如何操作,需要安裝什麼包。如果沒能解決的話請百度或google)
 最後一步,

rails server -b 0.0.0.0

啓動rails服務器,然後我們就可以直接通過3000端口訪問本機的網站啦!大功告成

問題區

1、vagrant無法與主機共享文件夾

我這邊之前出現過一個問題,將配置文件(Vagrantfile)裏面的這行註釋去掉

config.vm.synced_folder "data", "/vagrant_data"

啓用文件夾共享時,出現了錯誤

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=1000,gid=1000 vagrant_data /vagrant_data

The error output from the command was:

mount: unknown filesystem type 'vboxsf'

這個問題解決方案已經知道。其實很簡單,就是缺一個插件,裝上就ok

vagrant plugin install vagrant-vbguest

然後reload,問題解決。

2、部分軟件包無法找到

這種情況是由於centos7本身帶的軟件包並不多。所以我們需要安裝EPEL(//www.jb51.net/article/113316.htm
 操作如下:

yum -y install epel-release
yum repolist

依次是安裝epel和刷新軟件包列表。我們可以看到,軟件包數量增加了很多。

3、將虛擬機映射至ip

其實這一步也很簡單,將Vagrantfile裏面的這一行註釋去掉即可(同時也請保證局域網內ip地址沒有衝突,如有衝突,請更換一個ip。另,若是衝突的話,一般在vagrant up & reload的過程中會報錯)
config.vm.network "private_network", ip: "192.168.33.10"

然後網站就可以通過192.168.33.10:3000訪問,數據庫可以用192.168.33.10鏈接,甚至也可以用putty通過192.168.33.10的ip地址鏈接,就像連接你的服務器一樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章