如风似雨 發表於 2019-8-30 12:57:00

vagrant搭建centos环境

<h1 id="vagrant搭建centos环境">vagrant搭建centos环境</h1>
<h1 id="前言">前言</h1>
<p>macos作为开发环境已经相当方便,有很丰富的工具,如<code>homebrew</code>类似于ubuntu的<code>apt-get</code>和centos的<code>yum</code>,很方便地安装各种开发工具。但终究与线上生产环境不同,即便安装的是相同的软件,安装目录,管理方式都有所不同。当项目很复杂,或者有多个项目时,很容易将mac本地环境弄得乱七八糟。</p>
<p>为了能与线上生产环境一致,尝试过用docker, 并没有想象中的方便,可能是我对dokcer的了解太少。且觉得docker的门槛较高。</p>
<p>衡量各种方案后,最终选择用vagrant与virtualBox搭建一个完整的linux系统,这样能够与线上生产环境一致,也能很方便地进行移植。</p>
<h1 id="环境准备">环境准备</h1>
<ul>
<li>下载安装 virtualBox</li>
<li>下载安装 vagrant</li>
<li>使用迅雷下载 官方镜像</li>
</ul>
<blockquote>
<p>我选择的是 centos7.2 的镜像</p>
</blockquote>
<h1 id="安装">安装</h1>
<p>新建目录<code>centos</code>,作为vagrant的根目录</p>
<ul>
<li>导入下载的镜像</li>
</ul>
<pre><code>☁centosvagrant box add centos ~/Downloads/vagrant-centos-7.2.box
# 将box命名为centos
</code></pre>
<ul>
<li>初始化</li>
</ul>
<pre><code>☁centosvagrant init
</code></pre>
<p>会自动生成<code>Vagrantfile</code>配置文件</p>
<h1 id="修改配置文件">修改配置文件</h1>
<h2 id="设置box名称">设置box名称</h2>
<p>box名称须与上面命令指定的box名一致</p>
<pre><code>config.vm.box = "centos"
</code></pre>
<h2 id="端口转发">端口转发</h2>
<pre><code>config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
</code></pre>
<p>macos不允许将本机的80端口转发, 解决方案参照: mac设置端口转发</p>
<h2 id="开启nfs">开启nfs</h2>
<p>默认的virtualBox共享文件速度太慢,需要启用nfs默认</p>
<p>Vagrantfile 设置:</p>
<pre><code>config.vm.network "private_network", type: "dhcp"
config.vm.synced_folder "/Users/airmb/Downloads/work", "/home/wwwroot/work", :nfs =&gt; true, :mount_options =&gt; ['actimeo=2']
</code></pre>
<h2 id="设置内存">设置内存</h2>
<p>内存大小根据物理机内存设置,我的mac物理机是8G内存,分配了3G给虚拟机</p>
<blockquote>
<p>如果要安装mysql5.7,内存不能低于2G</p>
</blockquote>
<pre><code>config.vm.provider "virtualbox" do |vb|
vb.memory = "3072"
end
</code></pre>
<h1 id="启动与连接">启动与连接</h1>
<p>连接vagrant虚拟机有两种方式:</p>
<ul>
<li>账号密码,两者均为 vagrant</li>
<li>ssh key, 可通过 <code>ssh-config</code> 查看私钥的路径</li>
</ul>
<p><img src="https://upload-images.jianshu.io/upload_images/1864602-cef6b6b570db76aa.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/588/format/webp"></p>
<p>查看ssh-config</p>
<blockquote>
<p>可以用vagrant默认生成的key,也可以将自己的私钥替换到 IdentityFile 指定的文件,连接虚拟机后再将公钥放到虚拟机中的 <code>~/.ssh/authorized_keys</code></p>
</blockquote>
<p>启动虚拟机</p>
<pre><code>☁centosvagrant up
</code></pre>
<p>连接进入虚拟机</p>
<pre><code>☁centosvagrant ssh
</code></pre>
<blockquote>
<p>默认的共享挂载目录:/home/vagrant</p>
</blockquote>
<h1 id="常用vagrant命令">常用vagrant命令</h1>
<ul>
<li>vagrant up 启动</li>
<li>vagrant ssh 进入虚拟机</li>
<li>vagrant halt 关机</li>
<li>vagrant reload 重启</li>
<li>导出与导入</li>
</ul>
<pre><code>☁centosvagrant package --base centos_default_1533259579120_24934 --out centos7.2.box # 导出box
☁centosvagrant box add centos ./centos7.2.box # 导入box
</code></pre>
<h1 id="清空重新导入镜像">清空重新导入镜像</h1>
<p>当需要重新导入镜像时,为避免出现各种奇奇怪怪的问题,清空以下内容:</p>
<pre><code># 将现有的box删除
☁centosvagrant box list
centos (virtualbox, 0)
☁centosvagrant box remove centos

☁centosvagrant global-status --prune

☁centosrm -rf .vagrant

☁centosrm -rf Vagrantfile

☁centoscd ~/VirtualBox\ VMs
☁VirtualBox VMsls
centos_default_1534145188471_82398
☁VirtualBox VMsrm -rf ./*
</code></pre>
<h1 id="配置文件-vagrantfile">配置文件 Vagrantfile</h1>
<h2 id="端口转发-1">端口转发</h2>
<pre><code>config.vm.network "forwarded_port", guest: 80, host: 8080
</code></pre>
<h2 id="内存分配">内存分配</h2>
<pre><code>config.vm.provider "virtualbox" do |vb|
#   # Display the VirtualBox GUI when booting the machine
#   vb.gui = true
#
#   # Customize the amount of memory on the VM:
    vb.memory = "3072"
end
</code></pre>
<h2 id="目录挂载">目录挂载</h2>
<pre><code>config.vm.synced_folder "~/code", "/home/wwwroot/code", :owner=&gt; 'vagrant', :group=&gt;'www', :mount_options =&gt; ['dmode=775', 'fmode=775']
</code></pre>
<h1 id="填坑记录">填坑记录</h1>
<h2 id="nginx不同步本地修改的静态文件">nginx不同步本地修改的静态文件</h2>
<p>同一个文件,本地修改后,centos虚拟机能看到同步的修改,但怎么刷新都看不到变化,只有在centos里面再修改文件才有效。而动态文件,如php文件修改后实时能看到变化</p>
<p>解决:</p>
<p>将nginx.conf的配置修改:</p>
<pre><code>sendfile off;
</code></pre>
<p>apache也有相同问题,修改配置:</p>
<pre><code>EnableSendfile off
</code></pre><br><br>
来源:https://www.cnblogs.com/wzz2500/p/11434429.html
頁: [1]
查看完整版本: vagrant搭建centos环境