mac(3):vagrant 统一本地开发环境

一:目标

    1:打包一个box镜像

    2:这个box镜像运行lnmp

    3:配置好php框架运行环境:tp5,yii2,laravel5

    4:打包分发配置的环境


二:基础环境

    1:VirtualBox5.1.8安装

        下载地址:https://www.virtualbox.org/wiki/Download_Old_Builds_5_1

    2:Vagrant1.8.6安装

    下载地址:https://releases.hashicorp.com/vagrant/1.8.6/


三:启动虚拟机

    1:准备操作系统的box

        ubuntu1404.box

    2:添加box


vagrant box add ubuntu1404 ubuntu1404.box  
vagrant box list
vagrant box remove ubuntu1404

    3:初始化box

vagrant init ubuntu1404
vagrant ssh
其他命令
vagrant up     启动虚拟机
vagrant halt   关闭虚拟机
vagrant status 虚拟机状态
vagrant suspend 挂起虚拟机
vagrant reload  重启虚拟机
vagrant destory 删除虚拟机

修改Vagrantfile 进行网络转发和文件共享
config.vm.network "private_network", ip: "192.168.199.101"
config.vm.synced_folder "/Users/wysmacmini02/app/test_vagrant/", "/home/www/test_vagrant/",:mount_options=>["dmode=777","fmode=777"]

    4:可能遇到的错误

Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

The error output from the command was:

mount: unknown filesystem type 'vboxsf'

        解决方案

ubuntu系统(vagrant ssh进入ubuntu)
sudo apt-get update
sudo apt-get install virtualbox-guest-utils

centos系统(vagrant ssh进入centos)
sudo yum update
sudo yum install gcc
sudo yum install kernel-devel


四:vagrant 高级配置

    1:端口转发(将本机端端口转发指定虚拟机端口)


config.vm.network "forwarded_port", guest: 80, host: 8888 
在本机输入127.0.0.1:8888 将会转发到虚拟机的127.0.0.1:80端口

    2:网络配置(可以配置为公有网络和私有网络)

        a:公有网络,同一路由器下的ip段,可以自由访问,不能配置共享目录

config.vm.network "public_network", ip: "192.168.199.101"

        b:私有网络,本机才能访问虚拟机,能配置共享目录

config.vm.network "private_network", ip: "192.168.199.101"
config.vm.synced_folder "/Users/wysmacmini02/app/test_vagrant/", "/home/www/test_vagrant/",:mount_options=>["dmode=777","fmode=777"]  设置文件的权限dmode文件夹 fmode文件

    3:共享目录


config.vm.synced_folder "/Users/vincent/code/", "/home/www"

    4:其他优化

虚拟机名称
    vb.name = "ubuntu_mooc"
虚拟机主机名
    config.vm.hostname = "mooc"
密码
    config.ssh.password = "vagrant"
配置虚拟机内存和CPU
    vb.memory = "1024"
    vb.cpus = 2

    5:例子

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu1404"
  config.vm.hostname = "ubuntu"
  config.ssh.password = "vagrant"
  #config.vm.network "forwarded_port", guest: 80, host: 8888 ,id: 'nginx'
  config.vm.network "private_network", ip: "192.168.199.101",auto_config: true
  config.vm.synced_folder "/Users/ww/app/vagrant/", "/home/www", :nfs => true

  config.vm.provider "virtualbox" do |vb|
     #vb.gui = true
     vb.memory = "1024"
     vb.cpus = 2
     vb.name = "ubuntu_mooc"
  end

  config.vm.provision "shell", inline: <<-SHELL
  #   apt-get update
  #   apt-get install -y apache2
      sudo apt-get install -y redis-server
  SHELL
end


五:载虚拟机中的ubuntu系统中安装lnmp

    1:替换源apt-get

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份
sudo vim /etc/apt/sources.list #将文件内容替换成源文件内容
sudo apt-get update

deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

    2:Nginx


sudo apt-get install nginx
nginx -v
curl -I 'http://127.0.0.1'

    3:Mysql

sudo apt-get install mysql-server #服务器端
    安装期间会提示输入为mysql设置root密码,我这边不操作,直接enter 不设置密码
sudo apt-get install mysql-client #客户端
    mysql -uroot -p #测试连接库,上面安装服务端没有设置密码,这里直接enter进入

    4:php5.59


sudo apt-get install php5-cli
php -v
sudo apt-get install php5-mcrypt php5-mysql php5-gd

    5:安装支持nginx fastcgi

sudo apt-get install php5-cgi php5-fpm
修改成9000端口 ,默认sock模式
    cd /etc/php5/fpm/pool.d
    sudo vim www.conf 
    
    在33行 先注释掉listen = /var/run/php5-fpm.sock这一行 再下面添加 listen = 127.0.0.1:9000 
    
    sudo /etc/init.d/php5-fpm restart或sudo service php5-fpm restart

浏览器输入测试:192.168.199.101



六:运行三大框架

    1:tp5

        a:下载项目 composer create-project topthink/think tp5

        b:nginx配置

server {    
    charset utf-8;    
    client_max_body_size 128M;    
    listen 80;    
    server_name tp5.test;    
    root  /home/www/test_vagrant/tp5/public;    
    index  index.php;    
    
    location ~* \.(eot|otf|ttf|woff)$ {    
        add_header Access-Control-Allow-Origin *;    
    }    
    
    location / {    
        index    index.html index.php;    
        if ( -f $request_filename) {    
            break;    
        } 
       
        if ( !-e $request_filename) {    
            rewrite ^/(.*)$ /index.php/$1 last;    
            break;    
        }    
    }    
    
    location ~ \.php {    
        set $script $uri;    
        set $path_info "";    
        if ($uri ~ "^(.+\.php)(/.+)") {    
            set $script $1;    
            set $path_info $2;    
        }    
    include   fastcgi_params;    
    fastcgi_index    index.php?IF_REWRITE=1;    
    fastcgi_pass   127.0.0.1:9000;    
    fastcgi_param    PATH_INFO    $path_info;    
    fastcgi_param    SCRIPT_FILENAME    $document_root$fastcgi_script_name;    
    fastcgi_param    SCRIPT_NAME    $script;    
    try_files $uri =404;    
    }    
}

        c:无法查看日志 sudo chmod -R 755 /var/log/nginx

        

    2:yii2

        a:composer create-project yiisoft/yii2-app-basic yii2

        b:nginx配置

server {    
    charset utf-8;    
    client_max_body_size 128M;    
    listen 80;    
    server_name yii2.test;    
    root  /home/www/test_vagrant/yii2/web;    
    index  index.php;    
    
    location ~* \.(eot|otf|ttf|woff)$ {    
        add_header Access-Control-Allow-Origin *;    
    }    
    
    location / {    
        try_files $uri $uri/ /index.php?$args;    
    }   
     
    location ~ \.php$ {    
        include   fastcgi_params;
        fastcgi_index    index.php;
        fastcgi_param    SCRIPT_FILENAME    $document_root$fastcgi_script_name;    
        fastcgi_pass   127.0.0.1:9000;    
        try_files $uri =404;    
    }    
}

        c:测试效果 * http://yii2.test 做个测试页面 http://yii2.test/site/test 

        d:出现问题

runtime/logs": mkdir(): Permission denied
权限不够 chmod -R 777 runtime (如果在虚拟机不能修改文件权限,请使用nfs共享目录)
yii\web\Request::cookieValidationKey must be configured with a secret key.
config/web.php cookieValidationKey 赋值
如果打不开 site/test ,请修改config/web.php 中urlManager 注释打开


    3:laravel5.1(因为php版本5.69)

        a:下载

composer create-project --prefer-dist laravel/laravel laravel
注意:sudo apt-get install zip unzip
报proc_open的无法分配内存 忘记设置vagrant的内存和cpu 真是坑 找问题的过程很享受     
      vb.memory = "1024"  vb.cpus = 2

        b:nginx配置

server {    
    charset utf-8;    
    client_max_body_size 128M;    
    listen 80;    
    server_name laravel.test;    
    root  /home/www/test_vagrant/laravel/public;    
    index  index.php;    
    
    location ~* \.(eot|otf|ttf|woff)$ {    
        add_header Access-Control-Allow-Origin *;    
    }    
    
    location / {    
        try_files $uri $uri/ /index.php?$args;    
    }   
     
    location ~ \.php$ {    
        include   fastcgi_params;
        fastcgi_index    index.php;
        fastcgi_param    SCRIPT_FILENAME    $document_root$fastcgi_script_name;    
        fastcgi_pass   127.0.0.1:9000;    
        try_files $uri =404;    
    }    
}

        c:测试:http://laravel.test


七:打包分发

    1:打包命令

cd vagrant/ubuntu1404
vagrant halt 关闭虚拟机
vagrant package --base Name --output centos_php72.box
注意:--base Name  这里的Name 是Virtualfile的 VirtualBox GUI里,写错或不写,打的包可能是空包

阿群博客

    2:分发

        分发的那个人 根据自己需要修改Virtualfile里面的内容。


阿群博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论