Vagrant打造PHP开发环境
Vagrant
Vagrant允许用户创建和配置轻量级,可重复的和便携式的虚拟软件(VirtualBox
、Hyper-V
、Docker
、VMware
、AWS
)开发环境。其背后的核心思想在于,在大型软件开发项目中,虚拟化的环境维护变得越来越困难。 Vagrant简化了必要的软件配置管理,以提高开发生产力。 Vagrant是用Ruby语言编写的,但它的生态系统支持几乎所有主要语言的开发
为什么使用
- 统一开发环境
- 线上环境保持一致
- 统一管理
在开发人员人数逐步上升时,统一开发环境就显得很重要特别是Linux环境下, 新员工只需要学习vagrant成本,配置下host无需配置环境一个box一份配置文件搞定,保持环境线上环境一致避免由环境引起的Bug。
安装
- 下载Vagrant
- 下载Virtualbox
- 配置文件
- 下载Box
在配置文件中Provider项选择为VirtualBox, Distro项为CentOS 7 x64, 下载box时候选择centos7的box。
初始化启动
解压配置文件包到D:盘
,最终目录为D:\puphpet\V8WmwX
(每个人的目录不一样), 将下载好的box文件剪切到V8WmwX
目录下并命名为centos7.box
- 执行box导入命令(打开CMD)
C:\Users\meShell>d:
D:\>cd puphpet\V8WmwX
D:\>puphpet\V8WmwX>vagrant box add puphpet/centos7-x64 ./centos7.box
Note:
puphpet/centos7-x64
名称是目录V8WmwX目录puphpet目录下面config.yaml
文件里面box
键的值(如图)
- 安装插件
#必须安装此插件
#@see https://github.com/dotless-de/vagrant-vbguest
D:\>puphpet\V8WmwX>vagrant plugin install vagrant-vbguest
#这两个插件都是和hosts有关,本人还喜欢直接改hosts文件
#@see https://github.com/devopsgroup-io/vagrant-hostmanager
#@see https://github.com/cogitatio/vagrant-hostsupdater
D:\>puphpet\V8WmwX>vagrant plugin install vagrant-hostsupdater
D:\>puphpet\V8WmwX>vagrant plugin install vagrant-hostmanager
- 启动
D:\>puphpet\V8WmwX>vagrant up
配置环境
- 安装PHP和Nginx
#登录主机
D:\>puphpet\V8WmwX>vagrant ssh
#切换用户,root、vagrant用户默认密码都为vagrant
[03:04 PM]-[vagrant@meshell]-[~]$ su root
Password: vagrant
#直接使用yum install 来安装php、nginx、mysql
[03:06 PM]-[root@meshell]-[/home/vagrant]$ yum install php nginx mysql
- 配置Nginx
[03:06 PM]-[root@meshell]-[/home/vagrant]$ cd /etc/nginx/sites-enabled
#创建vagrant.dev host文件
[03:06 PM]-[root@meshell]-[/home/vagrant]$ touch vagrant.dev
#vagrant.dev 内容,此配置项目只有一个入口文件就是index.php
server {
server_name vagrant.dev;
root /var/www/vagrant;
index index.html index.htm index.php;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass127.0.0.1:9000;
fastcgi_split_path_info^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
#return 404 for all php files as we do have a front controller
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/vagrant_error.log;
access_log /var/log/nginx/vagrant_access.log;
}
Note:
需要注意上面的/var/www/vagrant
, 这里的/var/www
目录是虚拟机的目录,vagrant
目录是宿主机挂载上去的目录,主要的配置项还是刚才的config.yaml(如下图)所以这个vagrant
其实是D:\\www
下面的目录
- 重启nginx
[03:06 PM]-[root@meshell]-[/home/vagrant]$ nginx -s reload
- 绑定Hosts
#使用ifconfig命令查看虚拟机ip
[03:06 PM]-[root@meshell]-[/home/vagrant]$ ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
inet6 fe80::a00:27ff:fe63:82ef prefixlen 64 scopeid 0x20<link>
ether 08:00:27:63:82:ef txqueuelen 1000 (Ethernet)
RX packets 28646 bytes 22522188 (21.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 21731 bytes 2461924 (2.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.101 netmask 255.255.255.0 broadcast 192.168.56.255
ether 08:00:27:4d:fa:60 txqueuelen 1000 (Ethernet)
RX packets 387787 bytes 23763723 (22.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 394811 bytes 102634777 (97.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 0 (Local Loopback)
RX packets 665 bytes 329712 (321.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 665 bytes 329712 (321.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
配置宿主机hosts(windows)
#ip 地址为上面的显示的地址
192.168.56.101 vagrant.dev
Note:
hosts文件目录C:\Windows\System32\drivers\etc
测试代码
在挂载目录新建vagrant
, 然后在目录下新建index.php
文件写入代码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<style>
<!--
body {
background-color: #f4645f
}
div {
margin: 0 auto;
width: 100%;
text-align: center;
vertical-align: middle;
white-space: pre-line;
}
h1 {
color: #fff;
}
-->
</style>
<body>
<div>
<h1>
<?php
echo 'Hello World';
?>
</h1>
</div>
</body>
</html>
Note:
我的挂载目录D:/www, 最终文件: D:/www/vagrant/index.php
自定义shell
在启动vagrant
时,它支持启动完虚拟机之后执行自定义shell
脚本。比如我们在开启之后想直接把nginx
、php
等一些软件开启来,就可以用这种方式,这样我们就不要在去连接虚拟机开启这些,不过你也可以在系统里面写开机启动的脚本。在写脚本之前了解下如何配置https://www.vagrantup.com/intro/getting-started/provisioning.html
- 修改
config.yaml
#加上这个意思是在每次启动vagrant up时都会执行bootstrap.sh这个脚本
machine_id.vm.provision "shell", run: "always" do |s|
s.path = 'puphpet/shell/bootstrap.sh'
end
- 创建bootstrap.sh文件
#!/bin/sh
echo "Running bootstrap"
service nginx start
service php-fpm start
echo "Finish bootstrap"
Note:
provision
配置有两种形式一种是脚本只执行一次还有就是每次启动都执行