GitHub 地址 <——— 所有文件都在这里

前提条件

安装 Vagrant,VirtualBox。

设置

下载软件并放入 soft 目录

MySQL:mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar 文件的 下载地址。

安装 vagrant-vbguest 插件

如果需要使用同步目录 synced_folder,就需要安装这个插件:

vagrant plugin install vbguest

使用 VirtualBox 安装虚拟机时,需要虚拟机支持 vboxsf 文件系统。如果不支持,则在启动时执行到 Vagrantfile 中的同步目录(synced folders)这一行时会报错如下:

mount: unknown filesystem type 'vboxsf'

在 Vagrant 中安装 vagrant-vbguest 插件后,Vagrant 会自动在虚拟机中安装 vbguest,从而解决这个问题:

D:\workspace\vagrant-lnmp>vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Fetching: micromachine-2.0.0.gem (100%)
Fetching: vagrant-vbguest-0.15.2.gem (100%)
Installed the plugin 'vagrant-vbguest (0.15.2)'!

启动

在当前目录中执行 vagrant up,启动完成后就可以访问虚拟机了。

修改 ssh 登录的默认用户为 root

Vagrant 默认的登录用户是 vagrant,密码也是 vagrant。可以配置为 root 用户(默认密码也是 vagrant):

  • 登录虚拟机,复制 ssh key:
vagrant ssh
# 把 vagrant 用户的 ssh key 拷贝到 root 用户下
sudo cp -r ./.ssh/ /root/
sudo chown -R root.root /root/.ssh
exit
  • 修改 Vagrantfile 中的登录用户名:
config.ssh.username = 'root'
  • 重新 reload:
vagrant reload
  • 登录后默认用户为 root:
vagrant ssh

使用同步目录将宿主机文件映射到虚拟机

Vagrant 默认会将 Vagrantfile 所在的目录中的所有文件和目录复制到虚拟机的 /vagrant 目录,注意这并不是同步目录(可以修改文件试试)。如果需要创建同步目录,则需要在 virtualbox 虚拟机中安装增强插件 VirtualBox Guest Additions。

通过 Vagrant 操作

直接安装 vagrant-vbguest 插件即可自动帮我们完成所有的配置。

注意,这里在安装 kernelkernel-devel 两个组件时经常发生问题,因为在安装这两个软件时只要 uname -r 指定了精确的内核版本,而内核版本包含一个比较大的数字,不一定能精确匹配到:

通过 VirtualBox 操作的步骤如下:

  • 启动 virtualbox 客户端
  • 关闭当前虚拟机
  • 在设置-存储新增加一个空的虚拟光驱
  • 启动虚拟机在菜单页面载入VirtualBox Guest Additions
  • 登录虚拟机用户名/密码为vagrant/vagrant,安装 VirtualBox Guest Additions
# 安装kernel、gcc、make等包
sudo yum -y update
sudo yum -y install kernel-devel kernel-headers gcc make perl
sudo reboot# mount镜像
sudo mkdir -p /mnt/cdrom
sudo mount /dev/cdrom /mnt/cdrom
cd /mnt/cdrom
sudo ./VBoxLinuxAdditions.run

修改 Vagrantfile 中映射目录

# 设定当前项目目录映射到虚拟机中的目录
config.vm.synced_folder ".", "/opt/gocode/src/..."# 重新reload
vagrant reload

常见问题

创建同步目录失败

CentOS7 默认用的 3.10 内核,跟升级内核之后的内核编号有所不同:

[root@VM_139_74_centos ~]# uname -r
4.15.6-1.el7.elrepo.x86_64
[root@VM_120_242_centos ~]# uname -r
3.10.0-327.36.3.el7.x86_64

Vagrant 安装过程的信息:

...
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:kernel-devel kernel-devel-3.10.0-693.21.1.el7.x86_64...default: SSH address: 127.0.0.1:2222default: SSH username: vagrantdefault: SSH auth method: private key
==> default: Rsyncing folder: /cygdrive/d/workspace/vagrant-lnmp/ => /vagrant
==> default: Mounting shared folders...default: /home/vagrantdemo => D:/workspace/vagrantdemo
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 home_vagrantdemo /home/vagrantdemoThe error output from the command was:/sbin/mount.vboxsf: mounting failed with the error: No such device

这个报错也好解决,直接通过 vagrant ssh 登录虚拟机后,执行:

sudo yum install kernel kernel-devel -y

安装即可,可能内核的具体版本会有所差异,但一般不影响使用。

安装完成后,退出虚拟机,在宿主机执行:

vagrant reload

配置文件无法写入,报错 bash: /etc/yum.repos.d/nginx.repo: Permission denied

bash-4.2$ sudo echo '[nginx]
> name=nginx repo
> baseurl=http://nginx.org/packages/centos/7/$basearch/
> gpgcheck=0
> enabled=1' > /etc/yum.repos.d/nginx.repo
bash: /etc/yum.repos.d/nginx.repo: Permission denied

上面这种写法虽然使用了 sudo,但是 sudo 仅能作用于 echo,无法影响到输出重定向。此时需要使用这种写法:

bash-4.2$ sudo bash -c "echo '[nginx]
> name=nginx repo
> baseurl=http://nginx.org/packages/centos/7/$basearch/
> gpgcheck=0
> enabled=1' > /etc/yum.repos.d/nginx.repo"
bash: /etc/yum.repos.d/nginx.repo: Permission denied

epel-release >= 7 is needed by webtatic-release-7-3.noarch

yum install -y kernel-devel kernel-devel-uname -r

默认安装 kernel-devel 插件时会使用 uname -r 检查系统内核版本。但是有可能找不到这个内核版本对应的插件。如果插件安装失败,会导致同步目录无法使用。

...default: SSH auth method: private key
==> default: Machine booted and ready!
[default] No installation found.
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
There are no enabled repos.Run "yum repolist all" to see the repos you have.To enable Red Hat Subscription Management repositories:subscription-manager repos --enable <repo>To enable custom repositories:yum-config-manager --enable <repo>
==> default: Checking for guest additions in VM...default: No guest additions were detected on the base box for this VM! Guestdefault: additions are required for forwarded ports, shared folders, host onlydefault: networking, and more. If SSH fails on this machine, please installdefault: the guest additions and repackage the box to continue.default:default: This is not an error message; everything may continue to work properly,default: in which case you may ignore this message.
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!yum install -y kernel-devel kernel-devel-`uname -r` gcc binutils make perl bzip2Stdout from the command:Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfileStderr from the command:There are no enabled repos.Run "yum repolist all" to see the repos you have.To enable Red Hat Subscription Management repositories:subscription-manager repos --enable <repo>To enable custom repositories:yum-config-manager --enable <repo>
PS D:\workspace\vagrant-lnmp-bento74-shellinline> vagrant reload
==> default: Attempting graceful shutdown of VM...

vagrant@127.0.0.1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

出现这个问题,多半是关掉了密码登录,只能用证书登录。Vagrant 默认只支持证书登录。可以用 Xshell 或 PuTTY 通过 127.0.0.1 加指定的端口号登录试试,如果无法输入密码,只能通过证书登录,则确认没有开启密码登录。虚拟机具体的主机名和端口号可以用 vagrant ssh-config 查看:

PS D:\workspace\vagrant-lnmp> vagrant ssh
vagrant@127.0.0.1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).PS D:\workspace\vagrant-lnmp> vagrant ssh-config
Host defaultHostName 127.0.0.1User vagrantPort 2200UserKnownHostsFile /dev/nullStrictHostKeyChecking noPasswordAuthentication noIdentityFile D:/workspace/vagrant-lnmp/.vagrant/machines/default/virtualbox/private_keyIdentitiesOnly yesLogLevel FATAL

其中 IdentityFile 指明了用户私钥位置,将其导入 Xshell 后,再使用默认的用户 vagrant 访问 HostName 和 Port 指定的主机和端口,一般就可以连上了。

当然,也可以在 Vagrantfile 文件中开启密码登录,同时还可以指定默认登录的用户为 root 用户:

config.ssh.username = "root"
config.ssh.password = "vagrant"

或者通过证书登录后,编辑配置文件:/etc/ssh/sshd_config 添加一行配置:

PasswordAuthentication yes

然后,重启 sshd:

sudo systemctl reload sshd

$'\r': command not found

Windows 文件的换行符为:[CR][LF],即回车换行 \r\n
Linux 和 Unix 文件的换行符为:[LF],只有换行 \n

解决方案:
用 Sublime 打开文件,在菜单中选择 view -> Line Endings -> Unix,然后保存即可。

转载于:https://www.cnblogs.com/kika/p/10851591.html

Vagrant 构建 LNMP 一致环境相关推荐

  1. Vagrant 构建 Linux 开发环境

    Vagrant 是一个简单易用的部署工具,用英文说应该是 Orchestration Tool .它能帮助开发人员迅速的构建一个开发环境,帮助测试人员构建测试环境, Vagrant 基于 Ruby 开 ...

  2. Dockerfile构建LNMP分离环境部署wordpress

    最近忙着写自己的项目,也把一个站点的bbs论坛打算迁移到Docker中,测试没发现啥大问题.在单台上面的架构如下:(往后我们也是要讲到compose和swarm调度的慢慢来) 1.首先我们先安装一下d ...

  3. 【docker】基于docker快速部署个人lnmp业务环境

    过年了我还在加班...祝大家新年快乐! 由于个人工作原因经常需要在各个单位部署各类接口服务器.以前这部分的工作安排的工作时间是一天搞定.但是现在不一样了.操作系统准备好后我只要三四分钟就把环境给搞定了 ...

  4. 0基础用vagrant 快速构建larval开发环境 (我杨某人尽力描述了,都有从0介绍)

    vagrant 快速构建larval开发环境 历史背景 今天闲来无事又从头写了一遍,这玩意能干嘛?从0开始,5分钟自动化部署larval框架项目(取决于你网速),无论是windows,mac,linu ...

  5. VirtualBox+vagrant 搭建LNMP环境

    VirtualBox+vagrant 搭建LNMP环境 1.安装VirtualBox和vagrant 去各自的官网下载最新的版本就OK了,win7用户需要注意一下,win7下不支持很高版本的vagra ...

  6. 使用 Vagrant 打造跨平台开发环境

    参考:https://segmentfault.com/a/1190000000264347 Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类 ...

  7. docker中lnmp访问php页面,Docker下部署LNMP工作环境的教程(详细步骤)

    本篇文章给大家带来的内容是关于Docker下部署LNMP工作环境的教程(详细步骤),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 普通PC环境也可以用以下配置,只是MYSQL那里换回 ...

  8. 使用docker搭建LNMP开发环境

    宿主机环境 系统:ubuntu 18.04 docker版本:18.03.1-ce docker的安装请自行参考官方文档. 前言 这篇文章用于介绍如何使用docker在ubuntu系统上搭建一个LNM ...

  9. centOS7 LNMP+phpmyadmin环境搭建 第三篇phpmyadmin安装

    这篇文章主要介绍了CentOS7 LNMP+phpmyadmin环境搭建,第三篇phpmyadmin安装,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 之前我们已经安装了lnmp的环境,现在让我们 ...

最新文章

  1. selenium--iframe之模拟qq空间登录
  2. python整数二进制有多少个1_几种统计一个二进制数内有几个1的方法
  3. 【资讯】K8S生态再添一员,Rancher发布开源HCI软件Harvester、及其安装教程
  4. Xcode 4.4 的新特性 | LLVM 4.0 的新语法
  5. 图的存储以及深度优先以及广度优先遍历
  6. css3制作炫酷导航栏效果 转
  7. 监控mysql业务数据分析_MySQL数据库监控指标之执行性能总结
  8. (1)FPGA面试技能提升篇(SystemC)
  9. movelast对数据记录数有要求吗_客户验厂,电脑坏了,考勤记录数据可以自动生成找回来吗?...
  10. nginx 与fastcgi通信方式
  11. 高一计算机算法教案,高中信息技术 算法及其实现 教案
  12. RTP payload format for VP9 video
  13. 英特尔核显自定义分辨率_英特尔核芯显卡设置如何操作【图文】
  14. 甘超波:NLP抽离与结合
  15. 基于Node.js的ORM框架 Prisma的上手使用
  16. 从pdf复制文字到word中的问题
  17. 学习分布式系统需要的知识
  18. TTL、Ping包最大字节数、网络时延、抖动、丢包率,看完瞬间变大神!
  19. 计算机软考软件设计师2019试题,软考2019下半年软件设计师上午真题.pdf
  20. 解决go数据表查询结构体对应字段null问题(sqlx converting NULL to string is unsupported)

热门文章

  1. php判断直线相交,zoj 1158 判断2线段完全相交
  2. python 网上爬取数据源码_Python爬虫经常爬不到数据,或许你可以看一下小编的这篇文章...
  3. Ubuntu系统(四)-修改主机名和配置DNS上网
  4. 浏览器数据库 IndexedDB(一) 概述
  5. URL中文传值乱码解决方式
  6. 算法学习--二叉查找树
  7. Linux下ip route、ip rule、iptables的关系(转
  8. Arcgis javascript那些事儿(十五)——影像服务的发布与使用
  9. oracle——expdp与impdp备份使用方法
  10. Arcgis javascript那些事儿(十三)——距离面积计算