欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SimfaseDevEnv一个Vagrant构建的开发环境

程序员文章站 2022-05-31 18:09:21
...

SimfaseDevEnv

介绍

SimfaseDevEnv是为php开发者提供的开发环境,构建在vagrant之上;Vagrant的Vagrangfile配置文件是在Homestead的ruby脚本之上进行的改变。整体与Homestead很像,但是做了一些更改,为了更适应中国国内的开发网络环境。

相对于Homestead,SimfaseDevEnv有以下主要不同的地方

  • vagrant box的安装是本地导入的,不需要在线安装。(国内的网络环境太差)

  • PHP版本是5.5 并没有使用php7(php7不是不好,它很优秀,但是目前国内生产环境用php7的不多)

  • 全平台(osx/linux/Win)支持nfs(并不是Windows使用samba不好,只是samba不支持软链和硬链 开发symfony、nodejs等项目的时候就烦恼了)

  • 软件工具能使用国内源的都切换成了国内源,比如ubuntu软件源、composer 、cnpm[taobao]

  • 不生成类似于 .Homestead 的用户配置文件。(为的是可以灵活的安装多个SimfaseDevEnv)

SimfaseDevEnv 可以在任何 Windows、Mac 或 Linux 上面运行,里面包含了 Nginx 网页服务器、PHP 5.5、MySQL、Redis、Memcached Nodejs。

如果使用的Windows,需要在BIOS中启用硬件虚拟化(VT-x)。

内置软件

  • Ubuntu 14.04

  • Git 1.8

  • PHP 5.5

  • Nginx 1.8

  • MySQL 5.5

  • Node 5.8.0 (With n npm cnpm[taobao] Bower, Grunt, and Gulp)

  • Redis 3

  • Memcached

  • Composer

安装与配置

1.安装 VirtualBox 与 Vagrant

在启动SimfaseDevEnv 环境之前,必须先安装 VirtualBox 和 Vagrant.目前SimfaseDevEnv不支持VMware和parallels。

1.1 VirtualBox安装

Mac与Linux不限制VirtualBox 版本,但是如果是Win用户建议安装 VitrualBox4.3.12(Win用户点此链接即可下载)

Win用户:VirtualBox安装完成后;如果你的C盘空间不够大,建议打开软件窗口,找到设置入口,点击常规 将默认虚拟电脑位置 更改到其他空间比较大的分区。比如 D:\VirtualBox VMs .

1.2 Vagrant安装

Mac与Linux不限制 Vagrant 版本,但是如果是Win用户要求安装Vagran 1.7.4(Win用户点此链接即可下载)

因为Vagrant1.8.1 在win7/win10上有不少issue,有些问题还是很严重的。

2 增加 Vagrant 封装包

2.1 下载simfase-dev-env-0.1.0.box

因为找不到好的方便的免费的http server。索性放到的百度云盘,如果有机会争取切换到我们公司的服务器上去。

2.2 将simfase-dev-env-0.1.0.box包导入到Vagrant

当下载好simfase-dev-env-0.1.0.box后。你可以在终端机中输入以下命令导入。导入包可能会花费一点时间。

vagrant box add simfase-dev-env /where/is/your/simfase-dev-env-0.1.0.box

注意,Win用户需要注意添加 file:///来指向位置如:

vagrant box add simfase-dev-env file:///d:/download/simfase-dev-env-0.1.0.box

3 安装SimfaseDevEnv

因为SimfaseDevEnv做了一些脚本处理,所以并不能用 vagrant init simfase-dev-env直接初始化。需要下载我们处理过的脚本用作vagrant配置来启动SimfaseDevEnv.

可以将SimfaseDevEnv仓库下载到本地的任意位置,我们建议的是 Mac/Linux 用户将SimfaseDevEnv仓库 git clone 到 ~ 根下。Win用户将SimfaseDevEnv仓库 git clone 到 某盘符 根下。github仓库OSC仓库

git clone https://github.com/iMarlboro/SimfaseDevEnv.git SimfaseDevEnv

或者

git clone https://git.oschina.net/marlboro/SimfaseDevEnv.git SimfaseDevEnv

git clone 后,进入 SimfaseDevEnv目录,执行以下代码来初始化SimfaseDevEnv。当然也可以选择手动初始化,很简单,将SimfaseDevEnv/src/stubs下的所有文件,复制到 SimfaseDevEnv根目录下即可。

sh init.sh

注意 Win用户需要使用Cygwin或者Git Bash来执行

此时,就会看 SimfaseDevEnv根目录看到多出了SimfaseDevEnv.yaml等4个文件。

4 配置 SSH **

然后需要编辑 SimfaseDevEnv目录下的SimfaseDevEnv.yaml文件。可以在文件中配置 SSH 公开**,以及主要机器与 SimfaseDevEnv 虚拟机之间的共享目录。

如果没有 SSH **的话, 在 Mac 和 Linux 下,可以利用下面的命令来创建一个 SSH **组:

ssh-****** -t rsa -C "[email protected]"

在 Windows 下,你需要安装 Git 并且使用包含在 Git 里的 Git Bash 来执行上述的命令。另外也可以使用 PuTTYPuTTYgen

创建了好 SSH **后,在SimfaseDevEnv目录下SimfaseDevEnv.yaml 文件中的 authorize 属性指明**路径(默认情况下已经有一个赋值,如果你的authorize不在所对应位置请更改 。 在Win下 ~表示在C盘的user/用户 目录下)。

5 配置共享文件夹

5.1 Mac/Linux

SimfaseDevEnv目录下的SimfaseDevEnv.yaml文件文件中的 folders 属性列出了所有你想在 SimfaseDevEnv 环境共享的文件夹列表。这些文件夹中的文件若有变动,他们将会同步在你的本机与 SimfaseDevEnv 环境里。你可以将你需要的共享文件夹都配置进去。
map表示宿主机器的目录,to表示SimfaseDevEnv环境目录。

如果要开启 NFS,只需要在SimfaseDevEnv.yaml中的 folders 中加入一个标识 type: nfs:

    folders:
        - map: ~/Code
          to: /home/vagrant/Code
          type: nfs

5.1 Win7/Win10

如果是Win用户开启NFS,一定要先安装vagrant-winnfsd 插件,使用如下命令:

vagrant plugin install vagrant-winnfsd 
可能的情况

部分Win用户可能会提示缺少childprocess,那么还需要先安装childprocess然后再安装vagrant-winnfsd代码如下(按顺执行):

vagrant plugin install childprocess
vagrant plugin install vagrant-winnfsd 

安装完成后可以通过如下命令查看安装的插件列表

    vagrant plugin list

注意:最后还需要增加增在SimfaseDevEnv.yaml的 folders中配置mount_options,切记:

    folders:
        - map: ~/Code
        to: /home/vagrant/Code
        type: nfs
        mount_options: 
            - 'nolock,vers=3,udp,noatime'
           

本部分Win实现NFS,参考了文献speeding-up-homestead-on-windows-using-nfs

如果通过vagrant在线安装插件失败

毕竟vagrant server在国外,如果因为网络问题安装失败,那么可以将 gem包下载到本地再安装

下载childprocess ,点击链接进入后,右下侧有下载链接点击下载

下载vagrant-winnfsd,点击链接进入后,右下侧有下载链接点击下载

下载后,在bash中进入下载的目录运行

vagrant plugin install childprocess-x.x.x.gem 
vagrant plugin install vagrant-winnfsd-x.x.x.gem 

提示 x.x.x 表示你本次下载的软件的版本号

6 Bash Aliases

SimfaseDevEnv目录下的aliases文件中,我们增加了很多命令,方便在使用过程中快速操作(后面的章节会详细讲解用法),如果要增加 Bash aliases 到你的 SimfaseDevEnv 封装包中,只要将内容添 到aliases 文件中即可。

7 启动 Vagrant 封装包

编辑完 SimfaseDevEnv.yaml 后,在终端机里进入SimfaseDevEnv 文件夹并执行 vagrant up 命令。

Vagrant 会将虚拟机开机,并且自动配置共享目录。如果要移除虚拟机,可以使用 vagrant destroy --force 命令(这是彻底铲除虚机,不要轻易操作)。下面列表一些常用vagrant 命令

  • vagrant up命令,开机。

  • vagrant suspend 将虚拟机置于休眠状态。这时候主机会保存虚拟机的当前状态。再用vagrant up启动虚拟机时能够返回之前工作的状态。这种方式优点是休眠和启动速度都很快,只有几秒钟。缺点是需要额外的磁盘空间来存储当前状态。

  • vagrant halt 则是关机。如果想再次启动还是使用vagrant up命令,不过需要多花些时间。

  • vagrant destroy 则会将虚拟机从磁盘中删除。如果想重新创建还是使用vagrant up命令。

  • vagrant reload 从Vagrantfile重新启动虚拟机。

  • vagrant global-status 输出所有虚拟机当前运行状态,关机、已启动等。

SimfaseDevEnv中的aliases和after.sh仅仅在第一次 vagrant up是载入并执行加入到SimfaseDevEnv环境中,如果在这之后对它们进行过改动,且认为会使用到,那么需要进行以下命令重新载入shell

vagrant up --provision

至此,SimfaseDevEnv安装完成!

常见用法

SSH 连接SimfaseDevEnv

要通过 SSH 连接上的 SimfaseDevEnv 环境,在终端机里进入 SimfaseDevEnv 根 目录并执行 vagrant ssh 命令。如果是Mac/Linux用户并开启了NFS,启动SimfaseDevEnv时,还会提示输入宿主机器当前用户密码。

另外,SimfaseDevEnv环境中目前有两个用户,root/vagrant 与 vagrant/vagrant

连接数据库

在 SimfaseDevEnv 封装包中,已经预装了 MySQL 数据库。

如果想要从本机上通过 Navicat 或者 Sequel Pro 连接 MySQL 数据库,可以连接 127.0.0.1 的端口 33061 (MySQL) 。而帐号密码是 homestead / secret或者root / 123456

注意: 从本机端应该只能使用这些非标准的连接端口来连接数据库。因为当程序如 Laravel 运行在虚拟机时,在 Laravel 的数据库配置文件中依然是配置使用默认的 3306 连接端口。

添加Nginx站点

在SimfaseDevEnv 环境中,Nginx的配置文件是/etc/nginx/nginx.conf,Nginx的站点配置文件放置在/usr/local/etc/nginx/sites中。

在开发过程中可能会需要增加多个 Nginx 站点来运行不同的开发程序。SimfaseDevEnv 环境添加多站点是否非常简单的。运行以下命令即可。

serve domain.app /home/vagrant/Code/path/to/public/directory

上面的命令,将为 /home/vagrant/Code/path/to/public/directory目录的站点添加一个Nginx配置文件到/usr/local/etc/nginx/sites中,同时添加了ssl配置,通过openssl生成的key相关文件在/usr/local/etc/nginx/ssl中。如此项目不仅仅可以通过http访问,同时可以通过https访问。并且,本函数自动的在Nginx中添加了pathinfo以及 index.php重定向(就是所谓的优雅路径),这种配置对当前的大部分框架是通用的,比如 Laravel、Kohana、Codeigniter、Lumen、Thinkphp等等等

注意添加完站点后,别忘了在宿主机器中添加hosts。如Mac/Linux 是在 /etc/hosts文件中,Win是在C:\Windows\System32\drivers\etc\hosts中。

添加虚拟域名有两种方法,第一种方法直接指向到SimfaseDevEnv环境如下:

192.168.11.11 domain.app

这种方法可以在宿主机器中使用浏览器直接访问 http://domain.app 或者 https://domain.app

第二种方法,指向到宿主机器

127.0.0.1 domain.app

这种方法可以在宿主机器中使用浏览器访问http://domain.app:8001 或者 https://domain.app:44301

其他一些Nginx 辅助命令

另外,提供了其他一些快捷的创建Nginx站点的函数如:

serve-base domain.app /home/vagrant/Code/path/to/public/directory

以上命令与serve类似,但是不进行index.php 路径rewrite。此类配置方法适用于多文件程序,如wordpress、typecho等等

serve-symfony2 domain.app /home/vagrant/Code/path/to/public/directory

以上命令与serve类似,但是是专门针对symfony2框架的,将index.php的重定向,换成了app_dev.php

针对Nginx的命令,只是为了方便用户快速的创建Nginx配置,一些非通用的配置还是需要开发者手动的添加与编辑。

添加Mysql数据库

在SimfaseDevEnv环境中,mysql的配置文件位置在 /etc/mysql/my.cnf
在SimfaseDevEnv中预设了两个mysql超级用户 root/123456 和 homestead/secret (此用的创户是为了方便laravel开发者)

添加数据库可以使用mysql命令创建数据库,或通过 Navicat 、Sequel Pro 连接 MySQL 数据库来创建。

或者使用SimfaseDevEnv提供的函数来快速创建,使用方法

create-mysql database-name

连接端口

以下的端口将会被转发至 SimfaseDevEnv 环境:

  • SSH: 2222 → Forwards To 22 (此端口是不可配置的,Vagrant会根据端口冲突情况自动更改)

  • HTTP: 8001 → Forwards To 80

  • HTTPS: 44301 → Forwards To 443

  • MySQL: 33061 → Forwards To 3306

增加额外端口

也可以自定义转发额外的端口至 Vagrant box,只需要指定协议:

ports:
    - send: 93000
      to: 9300
    - send: 7777
      to: 777
      protocol: udp

SimfaseDevEnv默认IP

SimfaseDevEnv的默认ip是192.168.11.11,如果需要更换成其他ip在SimfaseDevEnv.yaml中配置即可。

备份与恢复

SimfaseDevEnv环境还提供方便的备份与恢复工具。为了方便大家升级SimfaseDevEnv时或者迁移数据时使用。

备份MySql

backup-mysql

此命令将mysql数据直接备份至 /vagrant/src/backup/mysql/db-年月日时分秒.sql

同时备份至 /vagrant/src/backup/mysql/latest.sql

恢复Mysql

import-mysql db-年月日时分秒.sql

此命令将mysql数据直接将 /vagrant/src/backup/mysql/db-年月日时分秒.sql 恢复至当前数据库

备份Nginx

backup-nginx

此命令将/usr/local/etc/nginx 所有配置文件直接压缩备份至 /vagrant/src/backup/nginx/年月日时分秒.tar.gz

同时备份至 /vagrant/src/backup/nginx/latest.tar.gz

恢复Nginx

import-nginx 年月日时分秒.tar.gz

此命令将直接将 /vagrant/src/backup/nginx/年月日时分秒.tar.gz 恢复至当前系统的/usr/local/etc/nginx

备份所有

backup-all

此命令同时执行了backup-mysql 和 backup-nginx

恢复所有

import-all

此命令同时将latest.sql 和 latest.tar.gz恢复到当前系统

软件说明

PHP

PHP的配置目录在/etc/php

sudo service php5-fpm start //开启
sudo service php5-fpm stop //关闭
sudo service php5-fpm restart//重启

PHP安装了这些扩展

  • apc

  • apcu

  • bcmath

  • bz2

  • calendar

  • Core

  • ctype

  • curl

  • date

  • dba

  • dom

  • ereg

  • exif

  • fileinfo

  • filter

  • ftp

  • gd

  • gettext

  • gmp

  • hash

  • iconv

  • imap

  • json

  • libxml

  • mbstring

  • mcrypt

  • memcache

  • memcached

  • mhash

  • mysql

  • mysqli

  • mysqlnd

  • openssl

  • pcntl

  • pcre

  • PDO

  • pdo_mysql

  • pdo_pgsql

  • pdo_sqlite

  • pgsql

  • Phar

  • posix

  • readline

  • redis #默认未关闭 php的redis扩展。 laravel Redis Alias与扩展名重名,建议将laravel 的 Redis Alias改成Predis为佳。如果要关闭redis扩展,sudo php5dismod redis命令即可,开启也很简单 sudo php5enmod redis

  • Reflection

  • session

  • shmop

  • SimpleXML

  • soap

  • sockets

  • SPL

  • sqlite3

  • standard

  • sysvmsg

  • sysvsem

  • sysvshm

  • tokenizer

  • wddx

  • xml

  • xmlreader

  • xmlwriter

  • Zend OPcache

  • zip

  • zlib

Nginx

Nginx的配置目录在/etc/nginx/nginx.conf

sudo service nginx start //开启
sudo service nginx stop //关闭
sudo service nginx restart//重启

MySql

MySql的配置文件在/etc/mysql/my.cnf

sudo service mysql start //开启
sudo service mysql stop //关闭
sudo service mysql restart//重启

Memcached

Memcached的配置文件是 /etc/memcached.conf

sudo service memcached start //开启
sudo service memcached stop //关闭
sudo service memcached restart//重启

Redis

Redis的配置文件是redis.conf

Redis默认是不自动启动的,需要手动启动。启动方法

sudo redis-server /etc/redis/redis.conf

关闭redis

sudo pkill redis-server

Nodejs

Nodejs 是使用n-install进行的安装,只在当前用户下进行了环境声明,所以使用nodejs的时候 不需要使用sudo,也不能使用sudo,除非开发者在全局环境中再声明一下。

相应的安装了

  • n 可去看看文档

  • Nodejs 已经安装了5.8.0 ,比如需要安装4.4.0 只需要n 4.4.0即可

  • npm

  • cnpm 使用的是淘宝NPM镜像,一般情况下请使用cnpm 而不是npm,因为npm源在qiang外太慢了。

  • Bower

  • Grunt

  • Gulp

Composer

Composer 已经安装,同时将repo仓库地址改成了https://packagist.phpcomposer.com 。详见pak.phpcomposer ,Composer中文手册

一般情况下使用phpcomposer是没有问题的,但是phpcomposer与官方库同步并不是很频繁,如果某个软件的版本已经在官方更新,但是phpcomposer并没有同步过来这时候就会出现composer update/install错误,解决的方法就是 切换为官方https://packagist.org/ 库,切换方法将 ~/.composer 中的 config.json置空就行。或者在composer.json中将某个出问题的require指定上一个版本后再重新composer update/install,能暂时解决问题,等phpcomposer更新后,再删除版本指定。

升级composer时,请使用sudo

其他

SimfaseDevEnv实现方法

SimfaseDevEnv环境 是基于ubuntu官方提供的vagrant box之上进行的扩展

SimfaseDevEnv环境的实现过程脚本都放在 SimfaseDevEnv/src/install中,有兴趣的开发者可以看看,有任何bug请不要吝啬提交issue。但是不要在当前SimfaseDevEnv中执行这些脚本,因为当前的SimfaseDevEnv已经将初始环境都安装好了。