為了日常更好的學習、測試,又不想付出雲主機等開銷,搭建一個本地測試環境無疑是個明智的選擇。再結合GitHub、Jenkins、Docker等工具,進行持續集成、資源隔離,既可以快速的構建、部署自己的項目,又可以迅速的環境恢復。仔細想了一下,簡直不能更好。
環境描述
本地環境:
- 操作系統:Windows7 企業版
- 處理器:i5-3340M 2.70GHz
- 內存:16GB
- 系統類型:64位
- 硬盤:總量300GB,剩余100GB
- 虛擬化軟件:Oracle VM VirtualBox 5.0.20
- 遠程訪問軟件:SecureCRT 6.6.1
測試環境:
- 操作系統:CentOS 7.3
- Linux內核:3.10
- 系統鏡像:CentOS-7-x86_64-Minimal-1611.iso
- CPU核數:1核
- 內存:2GB
- 系統類型:64位
- 硬盤:20GB
創建虛擬機
1、安裝操作系統
具體設置:
(PS:右CTRL切換鼠標焦點)
- 系統類型:local-4(隨意)、Linux、Red Hat (64-bit)
- 內存大小:2048MB(2GB)
- 虛擬硬盤:現在創建虛擬硬盤
- 虛擬硬盤文件類型:VDI(VirtualBox磁盤映像)
- 虛擬硬盤分配方式:動態分配(PS:固定大小創建真的很慢,因為我要創建4、5個,實在等不起)
- 虛擬硬盤位置大小:local-4(隨意)、20GB(最好不要用默認8GB,容易不夠用,因為上面是動態分配,大點沒關系)
- 語言:中文、簡體中文(中國)
- 安裝位置:不變
- 用戶設置:ROOT密碼(secret)、不會創建任何用戶
截圖:
Linux、Red Hat (64-bit)
內存:2048MB(2GB)
默認設置:現在創建虛擬硬盤
默認設置:VDI(VirtualBox磁盤映像)
默認設置:動態分配
硬盤大小:20GB(最好不要用默認8GB,容易不夠用)
2、配置IP
配置動態IP
日常使用經常會需要通過IP來訪問虛機及運行在其上的服務,因此需要給虛機配置IP。
網上有很多方法,最簡單的方法就是在安裝完成之后,先關機,再添加一個新的虛擬網卡即可,啟動后就會發現多了一個IP,該IP是動態IP(可以通過ip a命令,查看是否包含dynamic來區分)。
截圖:
網卡1(原網卡)保留不動,連接方式:網絡地址轉換(NAT),以后做端口轉發時會用到
網卡2-啟用網絡連接,連接方式:僅主機(Host-Only)適配器
查看靜態IP,命令:ip a,192.168.56.101
配置靜態IP
除了上述方法,也可以通過修改網卡的配置文件來為虛機配置靜態IP,在要創建多個虛機來組成測試環境的情況下,建議采用這種方式。
具體步驟:
- 查看網卡信息,命令:ip a,記錄網卡名和MAC地址
- 修改網卡的配置文件:/etc/sysconfig/network-scripts/ifcfg-enp0s8、ifcfg-enp0s3,若沒有,則新建。
- 重啟network服務,命令:systemctl restart network.service
- 重啟虛機
將/etc/sysconfig/network-scripts/ifcfg-enp0s3中的ONBOOT=no改為yes,否則yum可能會不正常。
修改(或新建)后的網卡配置文件(/etc/sysconfig/network-scripts/ifcfg-enp0s8)如下:
DEVICE=enp0s8
BOOTPROTO=static
TYPE=Ethernet
NAME=enp0s8
BROADCAST=192.168.56.255
HWADDR=08:00:27:44:F5:35
IPADDR=192.168.56.101
IPV6INIT=yes
IPV6_AUTOCONF=yes
NETMASK=255.255.255.0
NETWORK=192.168.56.1
ONBOOT=yes
截圖:
查看網卡信息,命令:ip a,記錄網卡名和MAC地址
重啟虛機后的網卡信息,沒有了原來的dynamic,表示靜態IP配置成功
3、配置遠程訪問
Virtual Box等虛擬機軟件的控制界面雖然也能訪問虛機,甚至某些操作系統還有可視化界面,但是對於一個合格的程序員來說,為了掌握Linux下的操作,以及追求流程的操作體驗,使用遠程訪問工具來訪問虛機,無疑是一個Good idea。
具體步驟:
- Alt + C(或者從工具欄打開)打開連接窗口,點擊“新建會話”
- 連接協議:SSH2
- 主機名:192.168.56.101,端口:22,防火牆:None,用戶名:root
- 文件傳輸協議:SFTP
- 會話名稱:192.168.56.101(可自定義),描述:無
- 用戶名:root,密碼:(secret),保存密碼
- 確認保存(暫無截圖)
- 檢查確認IP,命令:ip a
截圖:
Alt + C(或者從工具欄打開)打開連接窗口,點擊“新建會話”
連接協議:SSH2
主機名:192.168.56.101,端口:22,防火牆:None,用戶名:root
文件傳輸協議:SFTP
會話名稱:192.168.56.101(可自定義),描述:無
用戶名:root,密碼:(secret),保存密碼
檢查確認IP,命令:ip a
4、修改主機名
由於在許多測試過程中,都需要用到多個虛機,在使用遠程訪問工具時,不容易區分,所以需要修改主機名,方便日常管理和區分。CentOS 7提供了主機名工具:hostnamectl,通過這個工具,可以很方便的管理主機名。
4.1、永久修改主機名:
hostnamectl set-hostname local-56-101
4.2、重新登陸或Alt + C(新建會話),可以確認主機名是否修改成功:
附:hostnamectl使用方法:
hostnamectl --help
安裝工具
不論是進行項目開發,還是進行多機器的運維、測試,使用合適的工具,都能極大的提高日常開發效率。所以在創建完虛機后,首先需要安裝一些實用、方便的工具。
lrzsz
lrzsz是一個Linux下類似ftp的用於文件上傳、下載的工具,通過lrzsz可以很方便的在本地宿主機與VirtualBox上的虛機直接傳輸文件。
安裝:
yum install lrzsz -y
命令:
- 從本機上傳文件:rz
- 從虛機下載文件:sz [文件名]
Vim
Vim在Vi的基礎上添加了很多特性,雖然系統默認集成了Vi,但還是推薦安裝Vim,並修改配置文件,來對字符集、編碼、tab鍵等進行設置。
安裝:
yum install vim -y
配置:
tee ~/.vimrc <<EOF
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
set ts=4
set expandtab
set smartindent
set tabstop=4
set shiftwidth=4
set expandtab
set softtabstop=4
EOF
source ~/.vimrc
bind-utils與net-tools
bind-utils與net-tools分別包含了nslookup與ifconfig等常用的網絡相關的工具。
安裝:
yum install bind-utils net-tools -y
Git
Git是一個開源、免費的分布式版本控制系統,可以高速、有效的處理各種規模的項目的版本管理。
安裝:
yum install git -y
Ansible
Ansible是一款基於Python開發的自動化運維工具,可以進行配置管理、批量部署等功能。對於機器較多的場景,可以使用Ansible來免去重復敲命令的煩惱。
安裝:
yum install ansible -y
使用方法:
- 創建一個工作目錄:~/ansible
- 在工作目錄中創建一個Inventory文件,即包含各主機信息的文件
- 官方文檔
- 各模塊文檔
- PlayBooks文檔
- Inventory文檔
Inventory文件說明:
- [cluster]是組的別名,可以通過該組名對其下的所有機器進行控制
- 每一行內容分別是:機器別名、機器IP、ssh訪問時使用的用戶名、ssh訪問時使用的密碼
創建Inventory文件:
mkdir ~/ansible
tee ~/ansible/cluster.inv <<EOF
[cluster]
192.168.56.101 ansible_ssh_host=192.168.56.101 ansible_ssh_user=root ansible_ssh_pass=test
192.168.56.102 ansible_ssh_host=192.168.56.102 ansible_ssh_user=root ansible_ssh_pass=test
192.168.56.103 ansible_ssh_host=192.168.56.103 ansible_ssh_user=root ansible_ssh_pass=test
192.168.56.104 ansible_ssh_host=192.168.56.104 ansible_ssh_user=root ansible_ssh_pass=test
EOF
示例:
從創建的Inventory文件(cluster.inv)中獲取機器信息,並在Inventory文件中的所有機器上安裝docker,並啟動
ansible all -i cluster.inv -m yum -a "name=docker"
ansible all -i ~/ansible/cluster.inv -m raw -a "systemctl start docker"
Tips:
如果出現第一次ssh訪問出現的輸入yes/or的提示,導致中斷,可以修改ansible的配置文件:/etc/ansible/ansible.cfg,將默認的host_key_checking = False改為True。
Docker
Docker是用於開發、裝載、運行應用的開放平台。通過Docker你可以將你的應用與架構分離。Docker可以幫你更快的裝載代碼、更快的測試、更快的部署,縮短代碼從編寫到運行的周期。
安裝:
yum install docker -y
啟動:
systemctl start docker
安裝服務
MySQL
最流行的關系型數據庫管理系統之一,開發環境自然得有一個。推薦5.7版本以后的,支持Json,在表結構設計上靈活了很多。並且推薦使用docker以容器的方式啟動,如果發生配置不當或使用不當,可以非常方便、迅速的重置環境,並且不會對所在虛機的環境造成影響。
安裝:
docker pull mysql:5.7
mkdir /opt/dev/mysql
rm -rf /opt/dev/mysql
docker run --name dev_mysql --restart=always -v /opt/dev/mysql:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 mysql:5.7
說明:
-
mysql版本:5.7
-
容器名:dev_mysql
-
數據目錄:/opt/dev/mysql
-
Root密碼:root
-
端口:3307
-
容器退出后始終重啟
-
--privileged=true是為了防止因CentOS7中的安全模塊selinux的權限限制,導致出現“Permission denied”的錯誤