之前在大厨网写的环境搭建教程,粘在博客里备份一下~
在执行以下步骤前请确保自己的机器中有ruby的环境
ruby --version
1.下载virtualbox并安装
https://www.virtualbox.org/wiki/Downloads
2.下载vagrant,这里我们使用的版本是1.7.2,并安装
https://www.vagrantup.com/downloads.html
下面是一些vagrant的介绍:
虚拟开发环境
平常我们经常会遇到这样的问题:在开发机上面开发完毕程序,放到正式环境之后会出现各种奇怪的问题:描述符少了、nginx配置不正确、MySQL编码不对、php缺少模块、glibc版本太低等。
所以我们就需要虚拟开发环境,我们虚拟和正式环境一样的虚拟开发环境,而随着个人开发机硬件的升级,我们可以很容易的在本机跑虚拟机,例如VMware、VirtualBox等。因此使用虚拟化开发环境,在本机可以运行自己喜欢的OS(Windows、Ubuntu、Mac等),开发的程序运行在虚拟机中,这样迁移到生产环境可以避免环境不一致导致的莫名错误。
虚拟开发环境特别适合团队中开发环境、测试环境、正式环境不同的场合,这样就可以使得整个团队保持一致的环境。
Vagrant
Vagrant就是为了方便的实现虚拟化环境而设计的,使用Ruby开发,基于VirtualBox等虚拟机管理软件的接口,提供了一个可配置、轻量级的便携式虚拟开发环境。使用Vagrant可以很方便的就建立起来一个虚拟环境,而且可以模拟多台虚拟机,这样我们平时还可以在开发机模拟分布式系统。
Vagrant还会创建一些共享文件夹,用来给你在主机和虚拟机之间共享代码用。这样就使得我们可以在主机上写程序,然后在虚拟机中运行。如此一来团队之间就可以共享相同的开发环境,就不会再出现类似“只有你的环境才会出现的bug”这样的事情。
团队新员工加入,常常会遇到花一天甚至更多时间来从头搭建完整的开发环境,而有了Vagrant,只需要直接将已经打包好的package(里面包括开发工具,代码库,配置好的服务器等)拿过来就可以工作了,这对于提升工作效率非常有帮助。
Vagrant不仅可以用来作为个人的虚拟开发环境工具,而且特别适合团队使用,它使得我们虚拟化环境变得如此的简单,只要一个简单的命令就可以开启虚拟之路。
3.添加一个官方镜像站已有的box
vagrant box add box_name //这个参数是可选的,http://www.vagrantbox.es/是一份可以下载的镜像列表,比如我们这里使用官方库里的ubuntu镜像,ubuntu/trusty64
[实际执行命令vagrant box add ubuntu/trusty64]
或者也可以
vagrant box add box_name url
的格式来添加其它的box
会开始下载ubuntu的镜像,下载成功后
执行
vagrant box list
可以看到刚才添加的box
执行
vagrant init box_name
即在当前目录下建立了Vagrantfile文件,在该目录下运行vagrant up
将会以之前添加到vagrant box list里的名为box_name的box为基准,建立一个virtualbox的虚拟机,并初始化虚拟机内的实际环境
因为直接使用curl下载会比较慢,推荐使用wget -c的方式自行下载镜像,之后再使用指定本地url的方式添加box
注意!!!!!!!!!!!不要使用迅雷下载镜像,很可能导致box添加出错(想知道为什么的可以来问我cao1988228@163.com)
4.Vagrantfile配置文件详解
在我们的开发目录下有一个文件Vagrantfile
,里面包含有大量的配置信息,主要包括三个方面的配置,虚拟机的配置、SSH配置、Vagrant的一些基础配置。Vagrant是使用Ruby开发的,所以它的配置语法也是Ruby的,但是我们没有学过Ruby的人还是可以跟着它的注释知道怎么配置一些基本项的配置。
4.1.box设置
config.vm.box = "base"
上面这配置展示了Vagrant要去启用那个box作为系统,也就是上面我们输入vagrant init Box名称
时所指定的box,如果沒有输入box名称的話,那么默认就是base
,VirtualBox提供了VBoxManage这个命令行工具,可以让我们设定VM,用modifyvm
这个命令让我们可以设定VM的名称和内存大小等等,这里说的名称指的是在VirtualBox中显示的名称,我们也可以在Vagrantfile中进行设定,在Vagrantfile中加入如下这行就可以设定了:
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "astaxie", "--memory", "512"]
end
这行设置的意思是调用VBoxManage的modifyvm
的命令,设置VM的名称为astaxie
,内存为512MB。你可以类似的通过定制其它VM属性来定制你自己的VM。
4.2.网络设置
Vagrant有两种方式来进行网络连接,一种是host-only(主机模式),意思是主机和虚拟机之间的网络互访,而不是虚拟机访问internet的技术,也就是只有你一個人自High,其他人访问不到你的虚拟机。另一种是Bridge(桥接模式),该模式下的VM就像是局域网中的一台独立的主机,也就是说需要VM到你的路由器要IP,这样的话局域网里面其他机器就可以访问它了,一般我们设置虚拟机都是自high为主,所以我们的设置一般如下:
config.vm.network :private_network, ip: "11.11.11.11"
这里我们虚拟机设置为hostonly,并且指定了一个IP,IP的话建议最好不要用192.168..
这个网段,因为很有可能和你局域网里面的其它机器IP冲突,所以最好使用类似11.11..
这样的IP地址。
4.3.hostname设置
hostname
的设置非常简单,Vagrantfile中加入下面这行就可以了:
config.vm.hostname = "dachu"
设置hostname
非常重要,因为当我们有很多台虚拟服务器的时候,都是依靠hostname
來做识别的,例如Puppet或是Chef,都是通过hostname
來做识别的,既然设置那么简单,所以我们就別偷懒,设置一个。
4.4.同步目录
我们上面介绍过/vagrant
目录默认就是当前的开发目录,这是在虚拟机开启的时候默认挂载同步的。我们还可以通过配置来设置额外的同步目录:
config.vm.synced_folder "/Users/cherry/vagrant/data", "/vagrant_data"
上面这个设定,第一个参数是主机的目录,第二个参数是虚拟机挂载的目录
4.5.端口转发设置
以上步骤完成后,修改Vagrantfile,搜索forward,可以找到端口转发的设置样例,完成我们的8080到80,3000到3000的转发过程
例如
config.vm.network "forwarded_port", guest: 80, host: 80
guest指的是虚拟机内的端口,host指宿主机的端口
修改完成后,重启vagrant
ps.因为mac对端口转发的特殊限制,需要把80端口转发到8080,再在vagrant里从宿主的8080转到80,才能完成整个过程,
所以在mac里的配置应该是这样的
config.vm.network "forwarded_port", guest: 80, host: 8080
在mac上还需要配置80转到8080,可以采取下面的方法
打开apache2配置文件(默认应该都有安装,没有的话,请先安装apache2)
/etc/apache2/httpd.conf
在文件末尾添加转发配置:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
重启apache2
apachectl stop
apachectl start
修改完Vagrantfile的配置后,记得要用
vagrant reload
命令来重启VM之后才能使用VM更新后的配置
5.vagrant ssh进入虚拟机环境,现在可以开始安装lnmp开发所需要的环境
sudo apt-get install -y nginx php5 php5-cli php5-fpm php5-mysql memcached php5-gd php5-curl
php5-memcache php5-mcrypt git language-pack-zh-hant language-pack-zh-hans zsh mysql-server mysql-client
在安装mysql时应该会弹出输入root密码的界面
mysql安装好之后
mysql -uroot -p你的密码进入mysql终端
创建用户
create user '用户名'@'localhost' identified by '密码';
授予全部权限
grant all privileges on *.* to '用户名'@'localhost';
下面就可以用上述的用户和密码连入本地数据库了
5.安装全部完成之后,输入
sudo php5enmod mcrypt
否则在开发时可能会提示找不到mcrypt模块
6.配置nginx
这个还是直接拷贝现有的配置吧,主要包括/etc/nginx目录下的
fastcgi_params(这个文件里设置了nginx解析php脚本时把脚本交到哪里处理),
转发主要是这一句:
fastcgi_pass unix:/var/run/php5-fpm.sock;=> 这个与/etc/php5/fpm/pool.d/www.conf里的listen选项是对应的
nginx.conf(这个文件中包含了一些master/worker进程数的设置,运行时pid文件储存路径,是否使用epoll(仅限linux),gzip压缩,另外用include把site-enabled目录下的文件include进来)
site-enabled目录,这个目录下实际上是一些指向site-available目录下的软链接
site-available里是具体的设置
配置文件修改完成之后
sudo service nginx restart //重启nginx
7.使用php --ini可以查看到php5-cli的php.ini文件所在路径
因为nginx使用php5-fpm来解析php脚本,其php.ini文件实际是在/etc/php/fpm/目录下,修改该php.ini,将display_errors改为On
重启php-fpm
sudo service php5-fpm restart
8.我们的nginx的配置文件里把文档root设置为/data/www/dachuwang,所以可以进入/data/www,克隆dachuwang仓库的代码
之后请参照git的工作流程
9.配置hosts
下载switchhosts客户端,拷贝其他人的配置,或者自己手工把虚拟域名指向127.0.0.1
10.配置zsh和vim
zsh配置,參考這裡
https://github.com/cch123/prezto
vim配置,參考這裡
https://github.com/wklken/k-vim
]
10.下面是一步到位法,
因为配置好vagrant后可以用vagrant package命令直接将运行环境完整打包到指定的box,因此可以直接从别人那里拷贝Vagrantfile和box文件,即可得到完整的运行环境
实际上如果网络条件允许的话,我们可以直接修改Vagrantfile来支持以上一切操作,但因为网速受限,目前只能选择大部分运行工具已经被打包好的方式来分发开发环境
假如Vagrantfile和box文件都在当前目录下,执行
vagrant box add dachuwang(虚拟机的名字,随便定义) ./package.box
即可
11.有时vagrant使用私钥认证会遇到authentication failure,怎么办?
修改Vagrantfile,添加
config.ssh.username = "vagrant"
config.ssh.password = "vagrant"
重新vagrant即可~