Vagrant 构建 LNMP 一致环境
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 插件即可自动帮我们完成所有的配置。
注意,这里在安装 kernel 和 kernel-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:2222
default: SSH username: vagrant
default: 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/vagrantdemo
The 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! Guest
default: additions are required for forwarded ports, shared folders, host only
default: networking, and more. If SSH fails on this machine, please install
default: 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 bzip2
Stdout from the command:
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Stderr 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 default
HostName 127.0.0.1
User vagrant
Port 2200
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile D:/workspace/vagrant-lnmp/.vagrant/machines/default/virtualbox/private_key
IdentitiesOnly yes
LogLevel 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,然后保存即可。
Vagrant 构建 LNMP 一致环境的更多相关文章
- Vagrant 构建 Linux 开发环境
Vagrant 是一个简单易用的部署工具,用英文说应该是 Orchestration Tool .它能帮助开发人员迅速的构建一个开发环境,帮助测试人员构建测试环境, Vagrant 基于 Ruby 开 ...
- 在windows下用vagrant建立lnmp开发环境
1.安装vagrant,vitrualbox 2.下载homestead的box包,并添加到vagrant 下载地址: https://atlas.hashicorp.com/laravel/boxe ...
- Docke--Dockerfile 构建LNMP环境
Dockerfile 构建nginx并结合php 1.构建基础镜像 先构建一个基础镜像,添加repo的环境和编译的环境,而centos镜像就是初始的官方镜像,后面构建php.nginx.mysql都使 ...
- [phvia/dkc] Docker Compose 快速构建(LNMP+Node)运行环境
快速构建(LNMP+Node)运行环境. dkc 在此作为 docker-compose 的缩写,你可以理解为 alias dkc=docker-compose 准备 安装 docker 选择1) 从 ...
- 使用 Vagrant 构建开发环境
使用 Vagrant 构建开发环境 摘要:本文描述了如使用 Vagrant 构建统一的开发环境. 问题 作为开发人员,我们通常面临的问题有: 开发环境需要手工安装配置,这包括操作系统(CentOS.U ...
- 十九.部署LNMP环境、构建LNMP平台、地址重写
proxy client web1 web2 1.部署LNMP环境 1.1 部署nginx(前面已部署过) 1.2 部署mariadb ]# yum -y install mariadb mari ...
- 高级运维(三):部署Lnmp环境、构建Lnmp平台、地址重写
一.部署LNMP环境 目标: 安装部署Nginx.MariaDB.PHP环境 1> 安装部署Nginx.MariaDB.PHP.PHP-FPM: 2> 启动Nginx.MariaDB.FP ...
- 使用 Vagrant 打造跨平台开发环境
Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用,“代码在我机子上运行没有问题”这种说辞将成为历史. 我们可以通过 Va ...
- docker:Dockerfile构建LNMP平台
docker:Dockerfile构建LNMP平台 1.dockerfile介绍 Dockerfile是Docker用来构建镜像的文本文件,包含自定义的指令和格式.可以通过docker buil ...
随机推荐
- Lucene 4.6.1 java.lang.IllegalStateException: TokenStream contract violation
这是旧代码在新版本Lucene中出现的异常,异常如下: Exception in thread "main" java.lang.IllegalStateException: To ...
- SQL server 关于 GROUP BY 详细讲解和用法
1. Group By 语句简介: Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”.它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若 ...
- python学习笔记(8):
一.变量和类型 1.Python基本变量类型: 整数 ,浮点数 ,字符串, 布尔值 ,空值 ,函数, 模块, 类型, 自定义类型 2.变量定义 :变量存储在内存中的值.这就意味着在创建变量时会在内存中 ...
- vue-cli-webpake搭建和配置
确认创建项目后,后续还需输入一下项目名称.项目描述.作者.打包方式.是否使用ESLint规范代码等等,详见上图.安装顺利执行后会,生成如下文件目录:1.全局化安装cnpm npm install cn ...
- ZYNQ系列
赛灵思公司(Xilinx)推出的行业第一个可扩展处理平台Zynq系列.旨在为视频监视.汽车驾驶员辅助以及工厂自动化等高端嵌入式应用提供所需的处理与计算性能水平. 中文名 ZYNQ系列 开发商 赛灵 ...
- python的list内存分配算法
前提:python为了提高效率会为list预先分配一定的内存空间供其使用,避免在每次append等操作都去申请内存,下面简单分析下list的内存分配算法,主要就是两段. 1.当没有元素时,newsiz ...
- GetExtendedTcpTable
https://blog.csdn.net/sky101010ws/article/details/55511501 AdjustTokenPrivileges function Library Ad ...
- mybatis返回新增对象的主键
加这两行就可以返回这个插入对象的自增的主键<insert id="insertSeatPortraitData" parameterType="seatPortra ...
- vue对特殊特性的研究
key 预期:number | string key 的特殊属性主要用在 Vue 的虚拟 DOM 算法,在新旧 nodes 对比时辨识 VNodes.如果不使用 key,Vue 会使用一种最大限度减少 ...
- Redis之数据类型
一.概念: Redis:一个开源.支持网络.基于内存.键值对存储数据库. 特点:它可以支持多种数据类型. 二.数据类型 1)Redis String 具体说明: 一般的普通的k到v一个映射是Strin ...