GithubHelp home page GithubHelp logo

fmalee / vagrantx Goto Github PK

View Code? Open in Web Editor NEW

This project forked from laravel/homestead

0.0 2.0 0.0 284 KB

Homestead的自动化Vagrant脚本很好,但又不想用Homestead。所以Fork过来自己改着用

License: MIT License

Shell 56.72% Ruby 43.28%

vagrantx's Introduction

Vagrant 自动化脚本

Vagrant可以快速部署虚拟化开发环境。而Laravel框架的Homestead事先在Ubuntu里封装了PHP的开发环境,让实现快速的目标更近一步。

但是想进一步熟练使用Linux,所以决定自己从Debian发行版部署环境,然后打包自己成自己的Box。

所以直接使用Laravel Homestead的脚本进行Vagrant的功能扩充。

增加和修改的部分

  • Homestead 修改为VagrantX
  • 建立说明文档
  • 清理无用文件,简化项目
  • 将配置文件移到上级目录src,然后将src改名为vagrant.d,因为src在很多项目中很常见,容易冲突
  • 将配置文件和scripts脚本目录都初始化到~/.vagrantX目录,方便统一管理。
  • 同时允许个性化项目,只要将配置文件放置在项目目录下,脚本优先读取,方便部署多个案例。
  • 增加Nginx站点的常规配置脚本
  • 增加datadir配置选项,将本机数据库目录映射到虚拟机的数据库目录,让数据在本地以保证虚拟机被玩坏后的数据安全。
  • 增加apt_proxy配置选项。默认Vagrant首次启动会更新APT,可以用apt_proxy配置代理。
  • 似乎只要只要取消parallelsv.update_guest_tools就能顺利进入系统,文件共享成功,而不需要开启NFS。
  • 其他小调整

待完善

  • 多站点下使用blackfire需要域名访问,所以创建站点时同时增加对应的DNS映射
  • 修改默认端口逻辑:如果用户配置自己的端口映射,那么默认端口映射都取消
  • 调整Variable的变量处理机制
  • init.sh脚本的awk变量处理

使用方法

Clone代码到本地

git clone [email protected]:fmalee/VagrantX.git vagrantX

执行初始化

bash init.sh

将会将配置文件和脚本代码拷贝到~/.vagrantX目录

配置vagrant.yaml文件

vi ~/.vagrantX/Vagrant.yaml

创建工作目录

拷贝Vagrantfile文件到任意目录,然后启动Vagrant

vagrant up

想使用独立配置文件

  1. 拷贝Vagrantfile文件和vagrant目录到新工作目录
  2. 配置vagrant目录下的Vagrant.yaml
  3. vagrant up

疑难问题

MySQL数据库映射手记

希望将虚拟机的MySQL数据库用本地数据库映射,这样Vagrant不小心销毁也不会丢失数据库。 现在的情况是MySQL经常无法启动,无论是直接映射覆盖/var/lib/mysql,还是修改数据库目录和增加apparmor权限。 一般都是InnoDB: Unable to lock ./ib_logfile1, error: 11错误。 这个和权限有关的错误可能是和NFS本身有关。MySQL认为有另一个进程在使用InnoDB文件。 删除ibdata1,ib_logfile0,ib_logfile1三个文件让MySQL重建就能启动,可是这和备份数据的初衷不符合。

解决

这个情况一般是发生在多个虚拟机交替使用同一个本地的数据库目录造成的权限锁死。 所以最终还是就因为InnoDB的问题导致无法启动,也就是NFS权限的问题,MySQL认为该文件其他进程在使用。 暂时没有好的解决办法。 只能是一台虚拟机对应一个数据库目录。 如果锁死,手动重置自己主机的NFS。

折腾过程

试了不少方法都没有成功,先搁置:

  • 修改主机目录权限为最大

  • 修改UID和GID为虚拟机上Mysql一致,权限一致。

  • mv三个文件在cp回来。

  • 使用虚拟机自带的共享功能映射。

  • 之前试验的时候,虚拟机第二次重启后映射都能正常启动,所以做了脚本判断是否第一次启动虚拟机。后来发现就算这样成功了也很不理想,因为在Vagrantfile内部没法像插件一样回调Vagrant命令,最多只能让shell在虚拟机内部执行,所以还是需要手动Vagrant up

  • 看错误日志,以为是MySQL5.6的插件导致无法启动,所以删除所有四个插件,结果是插件的Error不影响启动。

  • 将NFS设置为:map_uid => 'mysql',:map_gid => 'mysql'会导致Can't read dir of '.' (errno: 13 - Permission denied)错误,还是权限问题。

  • Ubuntu下只装了nfs-common,所以和NFS相关的只有一个RPC服务:rpcbind,尝试重启不起作用。

  • 将本地之前的数据库cp到虚拟机目录,修改权限,MySQL能正常启动。

  • /var/lib/mysql数据库复制到本地映射,正常启动。

  • 删除ibdata1,ib_logfile0,ib_logfile1三个文件让MySQL重建就能启动。

其他未整理

InnoDB常规解决办法

sudo mv ibdata1 ibdata1.bak sudo cp -a ibdata1.bak ibdata1 sudo mv ib_logfile0 ib_logfile0.bak sudo cp -a ib_logfile0.bak ib_logfile0 sudo mv ib_logfile1 ib_logfile1.bak sudo cp -a ib_logfile1.bak ib_logfile1

数据库权限

sudo chown -R mysql:mysql /var/mysql sudo chown -R mysql:root /var/mysql/mysql

sudo chown -R root:root /var/mysql/debian-5.6.flag sudo chown -R root:root /var/mysql/mysql_upgrade_info

sudo vi /etc/mysql/my.cnf datadir = /var/mysql

sudo service mysql restart sudo service rpcbind restart

apparmor权限

sudo cp /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/usr.sbin.mysqld.bak sudo vi /etc/apparmor.d/usr.sbin.mysqld

/var/mysql r, /var/mysql** rwk,

sudo /etc/init.d/apparmor restart

其他操作

showmount -e 192.168.0.2 #查看NFS挂载 sudo nfsd enable #确认NFSD服务开启 sudo nfsd update #刷新NFSD共享资源 showmount -e #显示当前共享的资源

资源

vagrantx's People

Contributors

adamgoose avatar adeubank avatar ahsanity avatar andrewhood125 avatar briankiewel avatar codybohn avatar crynobone avatar drewhammond avatar fmalee avatar grahamcampbell avatar haampie avatar impleri avatar jamshady avatar jesseobrien avatar kevinsimard avatar lancedikson avatar martinlindhe avatar mintalicious avatar nathanmac avatar nickknissen avatar nickroberts avatar olivierparent avatar parhamdoustdar avatar pedrofornaza avatar pixelpeter avatar svpernova09 avatar taylorotwell avatar techdaddies-kevin avatar tillkruss avatar wouterj avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.