cursor重构谷粒商城04——vagrant技术快速部署虚拟机

前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶到中高阶程序员。

本项目将基于谷粒商城项目,并且对谷粒商城项目进行二次重构,使其满足最新的主流技术栈要求。

上一篇文章介绍了谷粒商城的技术架构,并且分析了它有什么不足。我们这篇文章,学习使用vagrant快速创建虚拟机,部署虚拟机环境。

1、虚拟机软件virtual box安装

可以使用vmware或者virtual box等软件安装虚拟机。犹豫virtual box较为轻量级,而且开源免费,我们这里选用它。您也可以使用其它软件。当然,您有多余的linux电脑,那也是很ok的。就不用安装了。

补充:为何服务器一般要用linux
服务器通常选择Linux操作系统,主要基于以下几个原因:
开源性和成本效益:Linux是开源的。
稳定性和可靠性:Linux以其卓越的稳定性著称,能够长时间运行而无需重启,适合需要持续服务的服务器环境。
安全性:Linux的多用户和多任务设计,以及强大的权限管理机制,使其在安全性方面优于许多其他操作系统。此外,开源社区的积极维护确保了安全漏洞能够及时被发现和修复。
灵活性和可定制性:Linux允许用户根据具体需求定制系统,选择适合的发行版和软件包,满足不同的服务器应用场景。
广泛的社区支持:Linux拥有庞大的开发者和用户社区,提供丰富的技术支持和资源,帮助解决服务器管理和维护中的各种问题。

在这里插入图片描述

请自行直接从官网下载安装vitual box。https://www.virtualbox.org/

2、Vagrant安装

一般来说,安装虚拟机,我们会在网络上查找需要的安装镜像,但是这样比较麻烦。这里我们使用新技术Vagarant。

Vagrant 是一个开源工具,用于创建和管理虚拟开发环境。它使得开发人员能够在本地机器上快速搭建虚拟机,模拟不同操作系统和软件环境,而无需担心配置问题。通过 Vagrant,开发者可以使用简单的配置文件来自动化环境的构建,使得开发环境的一致性和可重复性更强。

简单来说,Vagrant 就像是一个“虚拟机管理器”,帮助你轻松创建、管理和共享虚拟开发环境。

下载地址:https://www.vagrantup.com/
在这里插入图片描述
下载后双击,傻瓜式安装。

在这里插入图片描述

注意,Vagrant 是没有图形界面的,所以安装完成后也没有桌面快捷方式。具体使用方法,接下来会详细说明。

Vagrant 的安装程序会自动把安装路径加入到 PATH 环境变量,所以,这时候可以通过命令行执行 vagrant version 检查是否安装成功

在这里插入图片描述

3、快速部署虚拟机

接下来,使用vagrant部署一个虚拟机。

vagrant init centos/7
vagrant up

成功后,将看到如下截图。
在这里插入图片描述
打开virtual box,可以看到虚拟机已经启动了。

在这里插入图片描述

注意:命令 vagrant init centos/7 中,使用的centos/7,是vagrant官方提供的镜像名称,类似于docker。想要查找很简单。可以通过官网去找。

https://portal.cloud.hashicorp.com/vagrant/discover
在这里插入图片描述

您可能会遇到如下报错。

C:\usr>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos/7'...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.Command: ["import", "\\\\?\\C:\\Users\\半旧\\.vagrant.d\\boxes\\centos-VAGRANTSLASH-7\\2004.01\\virtualbox\\box.ovf", "--vsys", "0", "--vmname", "centos-7-1-1.x86_64_1737351515819_14516", "--vsys", "0", "--unit", "10", "--disk", "C:/Users/���/VirtualBox VMs/centos-7-1-1.x86_64_1737351515819_14516/centos-7-1-1.x86_64.vmdk"]Stderr: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Interpreting \\?\C:\Users\���\.vagrant.d\boxes\centos-VAGRANTSLASH-7\2004.01\virtualbox\box.ovf...
OK.
0%...
Progress state: VBOX_E_INVALID_OBJECT_STATE
VBoxManage.exe: error: Appliance import failed
VBoxManage.exe: error: Storage for the medium 'C:\Users\???\VirtualBox VMs\centos-7-1-1.x86_64_1737351515819_14516\centos-7-1-1.x86_64.vmdk' is not created
VBoxManage.exe: error: Details: code VBOX_E_INVALID_OBJECT_STATE (0x80bb0007), component ApplianceWrap, interface
VBoxManage.exe: error: Context: "enum RTEXITCODE __cdecl handleImportAppliance(struct HandlerArg *)" at line 1363 of file VBoxManageAppliance.cpp

这个错误是因为路径中包含了非标准字符(如 半旧,即中文字符),而 VirtualBox 或 Vagrant 在处理这些字符时出现了问题。

解决办法。

步骤 1:更改 Vagrant 的存储位置

在 C: 盘下创建一个新的目录,如 C:\VagrantData。

设置 VAGRANT_HOME 环境变量,指向这个新目录:

setx VAGRANT_HOME "C:\VagrantData"

步骤 2:清理之前下载的 box 文件
既然我们更改了 Vagrant 的存储路径,我们需要清理之前下载的 centos/7 box 文件。

删除原有的 centos/7 box 文件。你可以删除以下文件夹:

bash
C:\Users\半旧\.vagrant.d\boxes\centos-VAGRANTSLASH-7

步骤 3:更改virtual box全局配置

在这里插入图片描述
步骤4:重新执行虚拟机安装

打开一个新的cmd窗口,重新执行命令。

vagrant init centos/7
vagrant up

接下来我们远程连接下虚拟机。回顾下我们之前看到的控制台信息。
在这里插入图片描述
发现没有,原来已经帮我们自动创建了ssh连接相关信息。我们只需要执行如下命令,就完成了远程连接。

vagrant ssh

牛!!
在这里插入图片描述

4、网络配置

接下来我们需要解决一个问题,就是宿主机与虚拟机端口冲突。比如两者都有mysql,两个3306端口就冲突了。

我们可以配置端口转发,来避免这一问题。

在这里插入图片描述

但是,这要是很多软件冲突,就太麻烦了。

我们可以给虚拟机分配单独的ip地址,解决这一问题。

改ip有很多办法,因为我们使用了vagarant,可以直接更改vagrantfile解决。
在这里插入图片描述
在宿主机输入命令,查看虚拟网卡配置。

在这里插入图片描述
看到图中是192.168.56.1,我们将虚拟机的ip地址设置为同一网段就行。

在这里插入图片描述
重启下虚拟机。

vagrant reload

测试下宿主机和虚拟机网络是否互通。
在这里插入图片描述
一切ok。

自此,使用vagrant创建虚拟机的内容就大功告成了。

5、补充:常见网络连接模式

这里,再补充一点网络的基础知识。我们回顾下之前Vagrantfile中看到的内容,发现没有,网络有好几种模式。

在这里插入图片描述

先解释下这个配置文件。

1、端口转发(Port Forwarding):端口转发使得主机(host machine)可以访问虚拟机(guest machine)上特定的端口。其实就是端口映射关系。

示例1:开放端口并允许公共访问

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
config.vm.network "forwarded_port", guest: 80, host: 8080

这个配置会将虚拟机(guest)的端口 80 转发到主机(host)的端口 8080。
在主机的浏览器中访问 localhost:8080 时,将会访问虚拟机的端口 80。

示例 2:仅允许通过本地回环地址访问

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

2、公共网络(Public Network)

# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
config.vm.network "public_network"

这个配置使得虚拟机通过桥接网络连接到物理网络,虚拟机将像一台独立的物理设备一样出现在同一网络中。
虚拟机会自动获取一个与主机网络中其他设备相同的 IP 地址,通常由 DHCP 服务器分配。它允许虚拟机与网络中的其他设备进行通信。

上面有一个名词:桥接网络,它是什么呢?其实它就是虚拟机的一种网络模式。而示例1,示例2,采用的是端口转发,其实是另一种网络模式:网络地址转换(NAT)

在virtual box软件中,可以看到这些网络模式。
在这里插入图片描述
桥接模式

桥接网络(Bridged Network) 是一种虚拟机网络配置,使得虚拟机像物理网络中的另一台独立设备一样,通过物理主机的网络接口直接连接到物理网络。

桥接网络的工作原理:
在桥接网络模式下,虚拟机和物理主机(宿主机)共享同一个物理网络适配器,虚拟机与物理网络中的其他设备(如其他计算机、打印机、路由器等)在同一个网络中,并且会像主机一样获取到一个独立的 IP 地址。

桥接网络的特点:
独立的 IP 地址:虚拟机将被分配到和主机在同一局域网中的 IP 地址。这个 IP 地址通常由 DHCP 服务器分配,虚拟机在网络上就像一台物理设备。

虚拟机与物理设备通信:虚拟机能够与物理网络上的其他设备进行通信,就像它们是直接连接到物理网络一样。

与主机隔离:虚拟机不会受到主机操作系统的网络配置影响,虚拟机拥有完全独立的网络连接。
在这里插入图片描述
NAT模式。

NAT(Network Address Translation)模式 是虚拟机(VM)网络配置的一种方式,它允许虚拟机通过宿主机的网络连接访问外部网络(如互联网),而无需直接暴露虚拟机的 IP 地址。

NAT模式的工作原理:
在 NAT 模式 下,虚拟机通过宿主机(物理主机)的网络连接进行外部通信。虚拟机本身并不直接拥有公共 IP 地址,而是通过宿主机共享网络连接。宿主机会充当一个“网关”,把虚拟机的网络流量转换(NAT)为宿主机的 IP 地址,然后将这些数据转发到外部网络。

特点:
虚拟机与外部网络通信:虚拟机可以访问外部网络(如互联网),但它对外界是不可见的,外部网络无法直接访问虚拟机。虚拟机的网络流量会通过宿主机的 IP 地址进行转发。

虚拟机的私有 IP:虚拟机通常会获得一个私有 IP 地址(如 192.168.x.x 或 10.x.x.x),并且该 IP 地址仅对虚拟机和宿主机可见。外部网络无法直接访问虚拟机的私有 IP 地址。

端口转发(Port Forwarding):如果你希望从外部网络访问虚拟机的服务(例如 Web 服务),可以通过设置端口转发来实现。通过端口转发,外部网络可以通过宿主机的某个端口访问虚拟机的端口。
在这里插入图片描述
Host-Only(仅主机模式)。

仅主机网络模式创建一个虚拟网络,仅允许虚拟机与宿主机进行通信,而虚拟机与外部网络没有连接。虚拟机将获得一个由宿主机分配的 IP 地址,可以通过宿主机访问虚拟机,但不能直接访问互联网或其他网络。

使用场景:适用于需要隔离虚拟机与外部网络,但又需要虚拟机和宿主机之间通信的场景。例如,在测试环境中,需要虚拟机进行隔离,但需要宿主机管理虚拟机。

其实,就是虚拟机和宿主机,组了一个内部局域网。
在这里插入图片描述

现在在理解上面配置,是不是就很清晰明了了?
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/67016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在gitee/github上面搭建obsidian的图床

在搭建图床之前我们需要知道图床是一个什么东西,图床顾名思义就是存放图片的地方,那么我们为什么要搭建图床呢?因为我们在写博客的时候,很多同学都是在本地使用typora或者是obsidian进行markdown语法的文章的书写,文件格式通常都是…

SSM东理咨询交流论坛

🍅点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 js…

http的请求体各项解析

一、前言 做Java开发的人员都知道,其实我们很多时候不单单在写Java程序。做的各种各样的系统,不管是PC的 还是移动端的,还是为别的系统提供接口。其实都离不开http协议或者https 这些东西。Java作为编程语言,再做业务开发时&#…

【云安全】云原生-Docker(五)容器逃逸之漏洞利用

漏洞利用逃逸 通过漏洞利用实现逃逸,主要分为以下两种方式: 1、操作系统层面的内核漏洞 这是利用宿主机操作系统内核中的安全漏洞,直接突破容器的隔离机制,获得宿主机的权限。 攻击原理:容器本质上是通过 Linux 的…

微信小程序date picker的一些说明

微信小程序的picker是一个功能强大的组件&#xff0c;它可以是一个普通选择器&#xff0c;也可以是多项选择器&#xff0c;也可以是时间、日期、省市区选择器。 官方文档在这里 这里讲一下date picker的用法。 <view class"section"><view class"se…

[java] 面向对象进阶篇1--黑马程序员

目录 static 静态变量及其访问 实例变量及其访问 静态方法及其访问 实例方法及其访问 总结 继承 作用 定义格式 示例 总结 子类不能继承的内容 继承后的特点 成员变量 成员变量不重名 成员变量重名 super访问父类成员变量 成员方法 成员方法不重名 成员方法…

AI News(1/21/2025):OpenAI 安全疏忽:ChatGPT漏洞引发DDoS风险/OpenAI 代理工具即将发布

1、OpenAI 的安全疏忽&#xff1a;ChatGPT API 漏洞引发DDoS风险 德国安全研究员 Benjamin Flesch 发现了一个严重的安全漏洞&#xff1a;攻击者可以通过向 ChatGPT API 发送一个 HTTP 请求&#xff0c;利用 ChatGPT 的爬虫对目标网站发起 DDoS 攻击。该漏洞源于 OpenAI 在处理…

LLMs的星辰大海:大语言模型的前世今生

文章目录 一. LLM 的演进&#xff1a;从规则到智能的跃迁 &#x1f4ab;1.1 语言模型的蹒跚起步 &#x1f476;1.2 RNN 与 LSTM&#xff1a;序列建模的尝试 &#x1f9d0;1.3 Transformer 的横空出世&#xff1a;自注意力机制的革命 &#x1f4a5;1.4 LLM &#xff1a;从预测到…

7-Zip高危漏洞CVE-2025-0411:解析与修复

7-Zip高危漏洞CVE-2025-0411&#xff1a;解析与修复 免责声明 本系列工具仅供安全专业人员进行已授权环境使用&#xff0c;此工具所提供的功能只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利…

数据结构(精讲)----树(应用篇)

特性&#xff1a; 什么是树&#xff1a; 树(Tree)是(n>0)个节点的有限集合T&#xff0c;它满足两个条件&#xff1a; (1) 有且仅有一个特定的称为根&#xff08;Root&#xff09;的节点。 (2) 其余的节点可以分为m&#xff08;m≥0&#xff09;个互不相交的有限集合T1、…

【动态规划】--- 斐波那契数模型

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey &#x1f3e0; 第N个泰波那契数模型 &#x1f4cc; 题目解析 第N个泰波那契数 题目要求的是泰波那契数&#xff0c;并非斐波那契数。 &…

如何确保Spring单例Bean在高并发环境下的安全性?

在Spring中&#xff0c;单例Bean就像是一个“公共的水杯”&#xff0c;整个应用程序中的所有线程都会共享这一个实例。在大部分情况下&#xff0c;这没什么问题&#xff0c;但如果多个线程同时想要修改这个“水杯”里的内容&#xff0c;就可能会出现问题了。 想象一下&#xff…

期刊审稿意见回复的LaTeX模板分享

下载网址 https://github.com/NeuroDong/Latex_for_review_comments 效果展示 分享内容 在学术写作过程中&#xff0c;回复审稿意见是一个重要且繁琐的环节。由于审稿人众多&#xff0c;使用Word进行排版往往效率低下。为了提高效率&#xff0c;我在网上找到了一个LaTeX模板…

Spring Boot/MVC

一、Spring Boot的创建 1.Spring Boot简化Spring程序的开发,使用注解和配置的方式开发 springboot内置了tomact服务器 tomact:web服务器,默认端口号8080,所以访问程序使用8080 src/main/java:Java源代码 src/main/resource:静态资源或配置文件,存放前端代码(js,css,html) s…

Spring--SpringMVC的调用流程

一.简介 1.1主要作用 SSM框架构建起单的技术栈需求&#xff01;其中的SpringMVC负责表述层&#xff08;控制层&#xff09;实现简化&#xff01; 最终总结&#xff1a; 1. 简化前端参数接收( 形参列表 )2. 端数据响应(返回值)1.2核心组件和调用流程 Spring MVC与许多其他Web…

C#集合排序的三种方法(List<T>.Sort、LINQ 的 OrderBy、IComparable<T> 接口)

见过不少人、经过不少事、也吃过不少苦&#xff0c;感悟世事无常、人心多变&#xff0c;靠着回忆将往事串珠成链&#xff0c;聊聊感情、谈谈发展&#xff0c;我慢慢写、你一点一点看...... 1、使用 List<T>.Sort 方法与自定义比较器 public class Person{public string …

从ChatGPT热潮看智算崛起

2025年1月7日&#xff0c;科智咨询发布《2025年IDC产业七大发展趋势》&#xff0c;其中提到“ChatGPT开启生成式AI热潮&#xff0c;智能算力需求暴涨&#xff0c;算力供给结构发生转变”。 【图片来源于网络&#xff0c;侵删】 为何会以ChatGPT发布为节点呢&#xff1f;咱们一起…

Frida使用指南(三)- Frida-Native-Hook

1.Process、Module、Memory基础 1.Process Process 对象代表当前被Hook的进程,能获取进程的信息,枚举模块,枚举范围等 2.Module Module 对象代表一个加载到进程的模块(例如,在 Windows 上的 DLL,或在 Linux/Android 上的 .so 文件), 能查询模块的信息,如模块的基址、名…

Electron学习笔记,安装环境(1)

1、支持win7的Electron 的版本是18&#xff0c;这里node.js用的是14版本&#xff08;node-v14.21.3-x86.msi&#xff09;云盘有安装包 Electron 18.x (截至2023年仍在维护中): Chromium: 96 Node.js: 14.17.0 2、安装node环境&#xff0c;node-v14.21.3-x86.msi双击运行选择安…

漏洞修复:Apache Tomcat 安全漏洞(CVE-2024-50379) | Apache Tomcat 安全漏洞(CVE-2024-52318)

文章目录 引言I Apache Tomcat 安全漏洞(CVE-2024-50379)漏洞描述修复建议升级Tomcat教程II Apache Tomcat 安全漏洞(CVE-2024-52318)漏洞描述修复建议III 安全警告引言 解决方案:升级到最新版Tomcat https://blog.csdn.net/z929118967/article/details/142934649 service in…