Homestead和MongoDB环境搭建教程

Author: droid4me      Publish date: 2016-08-20      Tags: Homestead, Laravel, MongoDB, RockMongo, Vagrant, 教程

前言

由于开发需要,所以接触了 Laravel Homestead,在 Windows 环境下部署了对应的开发环境,虽然网上关于 Laravel Homestead 的搭建教程已经比较齐备了,但是笔者在 Windows 环境实践过程中依旧碰到了一些棘手的问题,发现配置起来并不特别友好,所以在此写就此不完全手把手教程。希望对刚接触 Web 开发的新人有所帮助(虽然我也是新人)。

环境介绍

懒人上手的方式是使用类似一键式的部署策略。Vagrant 是一款主要使用 VirtualBox 的用于构建及配置虚拟开发环境的软件,基于 Ruby,主要以命令行的方式运行。Laravel Homestead 是一个官方的、预封装的 Vagrant box,它已经内置了很多东西:

可以说 Laravel Homestead 基本内置了开发所需的主要部件。那么我们直接拿来用就好了。对我这种新手来说,用来调试个人网站 / 学习 Linux 的基本姿势是再好不过了。

另外,近年来 MongoDB 的使用也比较广泛。MongoDB 是一种文档导向数据库管理系统,由 C++ 撰写而成,以此来解决应用程序开发社区中的大量现实问题。基本语法和操作比起 MySQL 来说更简单,更通俗一些。如果你有考虑用 MongoDB 来作为数据库管理系统的话,不妨试试在 Homestead 中安装 MongoDB 及其插件来实现。

安装和设置

首先安装 VirtualBoxVagrant ,安装过程就不赘述了,都是 GUI 界面操作没有什么好说的。建议将两者安装在 Windows 系统默认路径下,避免不必要的麻烦。另外笔者使用的是 Git Bash 进行命令行操作,不对 CMD 用户负责,如果你是 CMD 用户,那么我强烈建议你换个友好的 SHell 再来看下文。下文中 $ 同行为命令,其他为命令运行结果。文中提及的用户目录(即 Git Bash 的根目录)为 Windows 的用户目录, 路径为 C:\Users<用户名>,或运行 %UserProfile% 即可打开当前用户目录。

添加 Vagrant box

添加 Vagrant box 的默认命令是:

$ vagrant box add laravel/homestead

上述命令安装的 box 是最新版本,如当前最新版本的 Homestead 为 v0.5。Laravel 社区对新技术保持比较开放的姿态,所以 Homestead 的最新版一般都使用比较新的软件,如 PHP7,推崇 HHVM,MySQL 5.7 等。如果你像笔者一样想使用老版本的话,如 PHP5.6 等,可以选择 v0.3.3 版本的 box:

$ vagrant box add laravel/homestead --box-version=0.3.3

在选择 virtualbox 作为虚拟环境后可看到如下反馈:

==> box: Adding box 'laravel/homestead' (v0.3.3) for provider: virtualbox

box: Downloading: https://atlas.hashicorp.com/laravel/boxes/homestead/versions/0.3.3/providers/virtualbox.box

box: Progress: 0% (Rate: 243k/s, Estimated time remaining: 1:55:07)

然后使用如下命令导入 box:

$ vagrant box add laravel/homestead

由于国内网络比较坑爹,box 的下载速度有时候很不能忍。那么我们可以 Ctrl+C 中断下载,把下载链接复制出来使用下载工具加速,然后手动导入,如下载完成的 virtualbox.box 的文件路径为 F:\ 根目录,则命令为:

$ vagrant box add laravel/homestead /f/virtualbox.box

在导入使用下载工具下载好的 virtualbox.box 前切记对文件完整性进行验证,这里提供几个主要版本的 CheckSum:

➜ Boxes openssl sha1 homestead-virtualbox-0.2.7.box
SHA1(homestead-virtualbox-0.2.7.box)= 76e67b203a39f77d617ad9ed00d2aec0c79e7680
➜ Boxes openssl sha1 homestead-virtualbox-0.4.4.box
SHA1(homestead-virtualbox-0.4.4.box)= 059821e503c5441e9243edd687e061e5ce0a1bec
➜ Boxes openssl sha1 homestead-virtualbox-0.3.3.box
SHA1(homestead-virtualbox-0.3.3.box)= 41967c26e7fd8b0fae84c3ecbd0e4058c0ab2bb1

添加 box 以后可以使用 box 列表命令进行检查:

$ vagrant box list
laravel/homestead (virtualbox, 0)

部署 Homestead 环境

建立工程目录

假设开发项目为 hello_world,你可以在代码存放目录 Code 下建立 project 项目根文件夹及 hello_world 项目文件夹并进入该项目文件夹:

$ mkdir ~/Code/project/hello_world
$ cd ~/Code/project/

下载克隆 Homestead

在项目根文件夹 project 下克隆 Homestead 项目到本地:

$ git clone https://github.com/laravel/homestead.git Homestead
Cloning into 'Homestead'...
remote: Counting objects: 1623, done.
remote: Total 1623 (delta 0), reused 0 (delta 0), pack-reused 1623
Receiving objects: 100% (1623/1623), 252.22 KiB | 152.00 KiB/s, done.
Resolving deltas: 100% (958/958), done.
Checking connectivity... done.

该 Github 代码库中装载着 vagrant 的配置脚本, 用来自动化配置网络, 端口映射等开发所需的配置文件。该配置文件要求与你先前添加的 box 有所对应,否则将不能匹配成功。如果你需要使用 PHP5.6 等环境对应的 v0.3.3 版本 box,可以使用克隆老版本代码库:

$ git clone --branch v2.1.8 https://github.com/laravel/homestead.git Homestead
Cloning into 'Homestead'...
remote: Counting objects: 1623, done.
remote: Total 1623 (delta 0), reused 0 (delta 0), pack-reused 1623
Receiving objects: 100% (1623/1623), 252.22 KiB | 128.00 KiB/s, done.
Resolving deltas: 100% (958/958), done.
Checking connectivity... done.
Note: checking out '301484041e062bb62b42d2bbbf0d636408d0f6b4'.

初始化 Homestead

运行克隆好的 Homestead 目录中的 init.sh 对 Homestead 进行初始化:

$ bash ~/Code/project/Homestead/init.sh
Homestead initialized!

配置 Homestead

编辑用户根目录中 .homestead/ 目录下的 Homestead.yaml 文件,对 Homestead 环境进行配置,一般来说个人只需修改 folders 和 sites 字段即可,本文用例配置如下:

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
- ~/.ssh/id_rsa

folders:
- map: ~/Code/project/hello_world
to: /home/vagrant/hello_world

sites:
- map: homestead.app
to: /home/vagrant/hello_world/public

databases:
- homestead

variables:
- key: APP_ENV
value: local

# blackfire:
# - id: foo
# token: bar
# client-id: foo
# client-token: bar

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

安装完成以后,vagrant 虚拟环境与 Windows 主机之间默认使用 ssh 密钥对验证进行 ssh 通讯,一般来说密钥对在使用 Git 的前期准备工作中应该已经生成。生成 ssh 密钥对命令为 $ ssh-keygen -t rsa ,其生成目录在用户文件目录下的 .ssh 中,请确保配置文件中的 authorize 和 keys 参数指向你的 ssh 的密钥路径。或着你也可以使用账号 vagrant 和密码 vagrant 登录虚拟环境。

运行 Homestead

配置完成后进入 Homestead 目录,然后使用 vagrant up 命令即可启动 Homestead 虚拟环境:

$ cd ~/Code/project/Homestead/
$ vagrant up
...
...
...
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

修改系统 c:\Windows\System32\drivers\etc\hosts 文件,添加条目 127.0.0.1 homestead.app 后浏览器访问 http://homestead.app:8000/ 显示 No input file specified. 则说明 Homestead 已安装成功。

Tips

$ vagrant up //启动
$ vagrant halt //关闭
$ vagrant suspend //暂停

$ vagrant reload //重启
$ vagrant ssh //SSH 连接
$ vagrant status //查看状态
$ vagrant destroy --force //强制删除

启动成功后可以使用 vagrant ssh 连接 Homestead 虚拟环境:

$ vagrant ssh
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-25-generic x86_64)

* Documentation: https://help.ubuntu.com/
New release '16.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Thu Aug 18 02:26:18 2016 from 10.0.2.2
vagrant@homestead:~$

Homestead 环境已经集成 MySQL,默认账户为 homestead,密码为 secret,使用 mysql 命令即可进入 MySQL 进行操作:

vagrant@homestead:~$ mysql -u homestead -p
Enter password: secret
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.9 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

修改用户目录下的 .bash_profile 文件(即 ~/.bash_profile),加入如下字段,即可在今后使用 git-bash 时以 cdvmvmup 作为命令别名快速启动 Homestead。

alias cdvm="cd ~/Code/mytwitter_project/Homestead"
alias vmup="vagrant up"

部署 MongoDB

如果需要使用 MongoDB 作为 Web 数据库管理系统,可以按照如下手把手教程进行操作。

下载 MongoDB

首先下载安装包,并解压 tgz

# 下载
$ curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz

# 解压
$ tar -zxvf mongodb-linux-x86_64-3.0.6.tgz

# 将解压包拷贝到指定目录
$ sudo mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb

# 修改文件夹权限
$ sudo chmod 777 /usr/local/mongodb

# 创建数据库目录
$ mkdir -p /usr/local/mongodb/data/db

将 MongoDB 安装路径下的 bin 目录添加到系统变量 PATH 中:

$ export PATH=/usr/local/mongodb/bin:$PATH

然后可使用 $ echo $PATH 命令检查一下是否正确添加。

运行 MongoDB

在 MongoDB 安装路径下的 bin 目录执行 $ ./mongod 命令来启动 MongoDB 服务。或直接使用 $ /usr/local/mongodb/bin/mongod 命令即可直接启动 MongoDB 服务。--dbpath 参数可指定数据库存放目录,--logpath 参数可指定日志存放目录。指定参数启动 MongoDB:

$ /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --fork --logpath=/usr/local/mongodb/logs

安装 MongoDB 的 PHP 扩展

MongoDB 的 PHP 扩展有可能依赖 libsasl2-dev,所以我们先安装 libsasl2-dev 后即可成功安装 MongoDB 的 PHP 扩展:

$ sudo apt-get install libsasl2-dev
$ sudo pecl install mongo
...
...
...
Build process completed successfully
Installing '/usr/lib/php5/20131226/mongo.so'
install ok: channel://pecl.php.net/mongo-1.6.14
configuration option "php_ini" is not set to php.ini location
You should add "extension=mongo.so" to php.ini

使用 MongoDB 的 PHP 扩展需修改 PHP 配置文件,查看 PHP 配置文件所在目录:

$ php -i | grep 'Configuration File'
Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /etc/php5/cli/php.ini

在 /etc/php5/cli/php.ini 和 /etc/php5/fpm/php.ini 两个配置文件中加入 extension=mongo.so 字段并保存。重启 PHP 即可开始使用 MongoDB 进行开发:

$ sudo kill -USR2 `cat /run/php5-fpm.pid`

RockMongo 数据库管理器

全局使用命令行对 MongoDB 进行管理当然不是很方便,RockMongo 可以使用 Web 浏览的方式操作数据库。

RockMongo 官网 下载 RockMongo,将其解压至 Homestead 环境部署配置的 sites 目录下(本例即为 /home/vagrant/hello_world/public/RockMongo ),浏览器访问 http://homestead.app:8000/RockMongo ,用户名、密码默认为 admin,登录后即可实现 GUI 操作 MongoDB 数据库。


参考链接:

Laravel 的 Homestead 开发环境部署

Laravel5.1/Homestead (0.2.7) 开发环境的部署和设置

Homestead 安装需要知道的一些信息

Laravel 5.1 中文文档:Laravel Homestead

Linux 平台安装 MongoDB | 菜鸟教程

MongoDB PHP 扩展 | 菜鸟教程

comments powered by Disqus