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
此时,就会看 SimfaseDevEnv根目录看到多出了SimfaseDevEnv.yaml等4个文件。
4 配置 SSH 密钥
然后需要编辑 SimfaseDevEnv目录下的SimfaseDevEnv.yaml文件。可以在文件中配置 SSH 公开密钥,以及主要机器与 SimfaseDevEnv 虚拟机之间的共享目录。
如果没有 SSH 密钥的话, 在 Mac 和 Linux 下,可以利用下面的命令来创建一个 SSH 密钥组:
ssh-keygen -t rsa -C "you@email.com"
在 Windows 下,你需要安装 Git 并且使用包含在 Git 里的 Git Bash 来执行上述的命令。另外也可以使用 PuTTY 和 PuTTYgen。
创建了好 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已经将初始环境都安装好了。