Virtualbox + Vagrant + OneinStack 搭建虚拟开发环境

Vagrant 用于创建和部署虚拟化开发环境, 通过命令和配置文件来管理虚拟机.

  • 创建共享文件夹, 用于主机和虚拟机之间进行资源共享
  • package进行打包分发, 避免二次重建环境, 且可以统一开发环境
VirtualBox + Vagrant 安装并启动
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1. 安装 Vagrant https://releases.hashicorp.com/vagrant/2.2.3/vagrant_2.2.3_x86_64.msi

2. 安装 Virtualbox https://download.virtualbox.org/virtualbox/6.0.2/VirtualBox-6.0.2-128162-Win.exe

3. 新建 D:/centos7 目录, 并切换至此目录
D:
cd centos7

4. 添加 box 到 vagrant, 选择 virtualbox
vagrant box add centos/7
若下载太慢,可以中断下载,复制box下载链接并下载至D盘 https://vagrantcloud.com/centos/boxes/7/versions/1812.01/providers/virtualbox.box
vagrant box add centos/7 D:/virtualbox.box

5. 初始化目录, 生成 Vagrantfile 文件
vagrant init centos/7

6. 由于vagrant没有Guest Additions, 通过vagrant不能创建共享文件夹, 所以需要下载vbguest插件, 当启动时自动安装Guest Additions
vagrant plugin install vagrant-vbguest

7. 修改 Vagrantfile 配置文件
#启用 vagrant_data 共享目录(第二个参数不要跟vagrant同名)
config.vm.synced_folder "D:/share", "/vagrant_data"
#配置虚拟机IP(只能主机访问)
config.vm.network "private_network", ip: "192.168.1.7"

8. 启动系统
vagrant up

9. SSH 连接
vagrant ssh
Vagrant Xshell 连接方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#密钥登录
#1. 查看 HostName、User、Port、IdentityFile
vagrant ssh-config
#2. 配置 xshell 的主机、端口
#3. 用户身份验证方法修改为 Public Key, 配置用户名 vagrant, 用户密钥选择 IdentityFile 路径指向的文件即可登录

#密码登录
#1. 切换 root 账号
sudo -i
#2. 设置密码
passwd
#3. 修改 /etc/ssh/sshd_config, 去掉 PermitRootLogin、PasswordAuthentication 前面的 # 号, 并修改为 yes
PermitRootLogin yes
PasswordAuthentication yes
#4. 重启sshd服务
systemctl restart sshd
制作 box
1
2
3
4
5
6
7
8
9
10
11
#1. 清除 yum 缓存、删除解压后的 OneinStack
yum clean all

#2. 切换至 D:/centos7, 然后关机
vagrant halt

#3. 切换至 VirtualBox 安装目录下, 查看虚拟机名称
vboxmanage list vms

#4. 打包语法:vagrant package --base 在VirtualBox显示的虚拟机名称 --output 打包后的box, 例:
vagrant package --base centos7_default_1548314709374_91318 --output D:/test.box
问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#启动系统时提示 default: Warning: Authentication failure. Retrying...
#1. vagrant ssh 登录vagrant用户(默认密码vagrant),并切换到 /home/vagrant 目录
cd /home/vagrant

#2. 下载官方公钥
wget https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub

#3. 覆盖authorized_keys
mv vagrant.pub /home/vagrant/.ssh/authorized_keys

#4. 修改authorized_keys文件权限,除了属主vagrant以外,group和其他用户都不可写
chmod go-w /home/vagrant/.ssh/authorized_keys

#5. 退出并reload
exit
vagrant reload

OneinStack LAMP 环境一键搭建
1
2
3
4
5
#安装wget
yum install -y wget

#下载并安装, 访问地址 192.168.1.7
wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz && tar xzf oneinstack-full.tar.gz && ./oneinstack/install.sh --apache_option 1 --php_option 7 --phpcache_option 1 --php_extensions fileinfo,redis --db_option 2 --dbinstallmethod 1 --dbrootpwd root --redis --iptables
OneinStack MySQL远程连接 (需配置 private_network)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#1. 添加iptables 3306 端口
iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
#保存iptables规则
service iptables save
#查看添加的iptables规则
iptables -nvL

#2. MySQL 授权, 添加一个用户 vagrant(用户名不能为root), 密码为 123456, 授权为% (%表示所有IP能连接)对 test 数据库所有权限
grant all privileges on test.* to vagrant@'%' identified by '123456';
#刷新权限立即生效
flush privileges

#3. 主机连接
Host:192.168.1.7
User:vagrant
Password:123456
OneinStack PHP 关闭zend opcache
1
2
3
4
5
phpinfo() 可以看到 opcache 的配置文件路径,将以下两个参数的值修改为0
opcache.enable=0;
opcache_cli=0;

systemctl restart php-fpm

搭建 test 项目 - 虚拟机配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#1. OneinStack 安装后的项目目录默认为 /data/wwwroot, 在 /data/wwwroot 目录下新建 test 目录
#2. 在 /usr/local/apache/conf/vhost/ 目录下新建 test.conf, 代码如下:
Listen 8080
<VirtualHost *:8080>
DocumentRoot "/data/wwwroot/test"
ErrorLog "/data/wwwlogs/test_error_apache.log"
CustomLog "/data/wwwlogs/test_apache.log" common
<Files ~ (\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)$>
Order allow,deny
Deny from all
</Files>
<FilesMatch \.php$>
SetHandler "proxy:unix:/dev/shm/php-cgi.sock|fcgi://localhost"
</FilesMatch>
<Directory "/data/wwwroot/test">
SetOutputFilter DEFLATE
Options FollowSymLinks ExecCGI
Require all granted
AllowOverride All
Order allow,deny
Allow from all
DirectoryIndex index.php index.html
</Directory>
</VirtualHost>

#3. 重启apache
systemctl restart httpd
#4. 添加iptables 8080 端口
iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
#5. 保存iptables规则
service iptables save
搭建 test 项目 - Vagrant 配置
1
2
3
4
5
#1. D盘新建test目录,作为项目目录
#2. 配置 Vagrantfile synced_folder
config.vm.synced_folder "D:/test/", "/data/wwwroot/test"
#3. 重启
vagrant reload
搭建 test 项目 - 测试
1
2
3
4
5
#1. D:/test 目录下新建 index.php
<?php
echo 'Test';

#2. 访问 192.168.1.7:8080, 若页面出现 test, 就说明可以了
0%