前段時間做了一個大學的專案,因為對安全性要求比較高,該學校的伺服器都是用的 Red Hat Enterprise Linux 系統。
Homestead 自帶的是 Ubuntu 系統,雖然可以用來開發,不過為了使 本地和線上的環境差異最小化,就內部做了一個 Red Hat 的 Vagrant Box,下面分享下製作流程:
註冊賬戶
Red Hat 的企業級系統是收費的,但是 developer 的版本是免費的,先去官網註冊一個賬戶並下載開發者版本(DVD iso):https://developers.redhat.com/products/rhel/download/, 最新的版本是 7.5.0,我當時使用的是 7.3.0。
安裝 RHEL
先檢查下 virtual box,下載最新的版本和 Extension Pack。
接著就要根據官方文件安裝系統了:https://developers.redhat.com/products/rhel/hello-world/#fndtn-virtualbox (沒找到中文的),如果有在 virtual box 裡安裝過 Linux 系統的會比較容易上手,不過官方文件還是非常詳細的,一步步根據步驟來即可(只需要完成步驟二),簡單概括如下:
- 選擇64位的系統,配置記憶體,建立虛擬硬碟。
- 允許主機和虛擬機器之間的 copy-paste、drag-drop,配置 CPU,匯入之前下載的 iso 檔案,共享資料夾可以跳過。
- 正式安裝系統:設定語言和鍵盤;
注意 Software Selection,請選擇 minimal install,因為我們配置伺服器,不需要 GUI 介面
;啟用乙太網;關閉 kdump 釋放記憶體;設定 root 使用者密碼等。
倉庫配置
系統建立後,SSH 登入為 root 使用者,去註冊 RHEL subscription-manager:
su -
subscription-manager register (會提示你輸入第一步註冊的 developer 帳戶和密碼)
subscription-manager attach
然後驗證可以連線到 Red Hat 軟體倉庫:
subscription-manager repos --list-enabled
再啟用額外的軟體倉庫,這樣你就可以安裝來自 RPMs 和 RHSCL 的軟體:
subscription-manager repos --enable rhel-server-rhscl-7-rpms
subscription-manager repos --enable rhel-7-server-optional-rpms
yum -y update
接著安裝一些 packages:
yum install -y openssh wget gcc vim
yum groupinstall 'Development Tools' (這一步是後面安裝 Virtualbox Guest Addition 所必須的)
使用者配置
接下來我們配置 vagrant 使用者,因為密碼一般也是設定成 vagrant,所以我們需要先修改密碼的需求,Red Hat 預設的密碼最小長度是 8,這裡我們修改成 5:
開啟 /etc/pam.d/system-auth 檔案,新增 "minlen = 5" 到 password requisite 行的末端。
新增使用者:
sudo useradd vagrant
sudo passwd vagrant (忽略警告:密碼包含使用者名稱)
sudo visudo -f /etc/sudoers.d/vagrant,新增 vagrant ALL=(ALL) NOPASSWD:ALL
reboot
這時我們重啟了伺服器,然後用 vagrant 使用者重新 SSH 登入,並執行以下所有的操作
。
為了能讓 vagrant 使用者免密碼登入,需要配置 insecure ssh keypair:
mkdir .ssh
chmod 0700 .ssh
cd .ssh/
wget https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub -O authorized_keys
chmod 0600 authorized_keys
接著允許 wheel 組的使用者免密碼執行 sudo 命令:
sudo visudo
修改 '%wheel ALL=(ALL) ALL' 成 '%wheel ALL=(ALL) NOPASSWD: ALL'
Virtualbox Guest Additions 配置
這個安裝還是有必要的,有以下幾點好處:
- 不再需要用 host key 在主機和虛擬機器之間切換
- 可以在主機和虛擬機器之間複製貼上
- 幫助設定共享資料夾
- 任意修改 VM 的視窗大小
wget http://download.virtualbox.org/virtualbox/5.2.18/VBoxGuestAdditions_5.2.18.iso
sudo mkdir /media/VBoxGuestAdditions
sudo mount -o loop,ro VBoxGuestAdditions_5.2.18.iso /media/VBoxGuestAdditions/
sudo sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run
rm VBoxGuestAdditions_5.2.18.iso
sudo umount /media/VBoxGuestAdditions
sudo rmdir /media/VBoxGuestAdditions
配置基本到此結束,可以關閉伺服器:sudo shutdown -r now。
匯出 VM 成 Vagrant Box
以下的 RedHat7 是 virtualbox 裡你起的 vm 的名字,該命令會最終匯出 rhel.box:
vagrant rhel --base RedHat7
這樣一個基本的 vagrant box 就建立完成了,把這個 box 分享給其他的團隊成員,就不需要每個人都去配置開發環境了,他們都可以新增這個新的 box 到 vagrant:
vagrant box add --name rhel7 rhel.box
額外
當然,其實開發環境配置還沒有結束,以上只是建立了 vagrant box,接著還需要配置 Vagrantfile 和 bash script 去安裝常用的開發軟體。
在 homestead 問世之前,我們也用 vagrant,基本都是自己配置的,java 的專案也用,不過有了 homestead 之後,大部分專案都用 homestead 做開發了(有時也用 docker)。