前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >cursor重构谷粒商城04——vagrant技术快速部署虚拟机

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

作者头像
半旧518
发布于 2025-01-23 00:14:37
发布于 2025-01-23 00:14:37
18800
代码可运行
举报
文章被收录于专栏:半旧的技术栈半旧的技术栈
运行总次数:0
代码可运行

前言:这个系列将使用最前沿的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部署一个虚拟机。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vagrant init centos/7
vagrant up

成功后,将看到如下截图。

打开virtual box,可以看到虚拟机已经启动了。

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

https://portal.cloud.hashicorp.com/vagrant/discover

您可能会遇到如下报错。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 环境变量,指向这个新目录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setx VAGRANT_HOME "C:\VagrantData"

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bash
C:\Users\半旧\.vagrant.d\boxes\centos-VAGRANTSLASH-7

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

步骤4:重新执行虚拟机安装

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vagrant init centos/7
vagrant up

接下来我们远程连接下虚拟机。回顾下我们之前看到的控制台信息。

发现没有,原来已经帮我们自动创建了ssh连接相关信息。我们只需要执行如下命令,就完成了远程连接。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vagrant ssh

牛!!

4、网络配置

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

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

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

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

改ip有很多办法,因为我们使用了vagarant,可以直接更改vagrantfile解决。

在宿主机输入命令,查看虚拟网卡配置。

看到图中是192.168.56.1,我们将虚拟机的ip地址设置为同一网段就行。

重启下虚拟机。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vagrant reload

测试下宿主机和虚拟机网络是否互通。

一切ok。

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

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

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

先解释下这个配置文件。

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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:仅允许通过本地回环地址访问

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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 地址,可以通过宿主机访问虚拟机,但不能直接访问互联网或其他网络。

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

其实,就是虚拟机和宿主机,组了一个内部局域网。

现在在理解上面配置,是不是就很清晰明了了?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【Matlab】简单控制系统建模(控制系统工具箱)
控制系统应用是MATLAB和Simulink的重点应用领域,它包括了被控对象建模、控制器设计、自动代码生成部署和系统验证全流程。具体如下:
DevFrank
2024/07/24
3920
【Matlab】简单控制系统建模(控制系统工具箱)
【Matlab】创建离散时间模型(控制系统工具箱)
创建离散时间模型的语法与连续时间模型的语法类似,只是还必须提供采样时间(采样间隔以秒为单位)。
DevFrank
2024/07/24
2640
【Matlab】创建离散时间模型(控制系统工具箱)
自动控制理论笔记
\(G(s) = \frac{a}{s+a}\) \(\frac{1}{a}\)是时间常数\(\tau\),对应上升为0.63 \(4\tau\)对应阶跃响应0.98
列夫托尔斯昊
2020/08/25
2K0
自动控制理论笔记
Scipy 高级教程——控制系统分析与设计
Scipy 提供了强大的控制系统分析与设计工具,可以用于设计和分析线性时不变系统。本篇博客将深入介绍 Scipy 中的控制系统工具,并通过实例演示如何应用这些工具。
Echo_Wish
2024/01/20
2220
基于matlab的控制系统与仿真-2
image.png 试求其零极点模型和状态空间模型。 >> sys1=tf([2 18 40],[1 6 11 6 ]) sys1 = 2 s^2 + 18 s + 40 ---------------------- s^3 + 6 s^2 + 11 s + 6 Continuous-time transfer function. >> sys2=zpk(sys1) sys2 = 2 (s+5) (s+4) ----------------- (s+3)
AXYZdong
2020/10/30
4250
基于matlab的控制系统与仿真-2
【Matlab】简单PID 控制器设计(控制系统工具箱)
为了缩短响应时间,可以设置比自动选择的结果更高的目标交叉频率,即0.52。将交叉频率增加到 1.0。
DevFrank
2024/07/24
5500
【Matlab】简单PID 控制器设计(控制系统工具箱)
Simulink建模与仿真(9)-动态系统模型及其Simulink表示(连续系统模型及表示)
与离散系统不同,连续系统是指系统输出在时间上连续变化,而非仅在离散的时刻采样取值。连续系统的应用非常广泛,下面给出连续系统的基本概念。
用户9925864
2023/09/19
9480
Simulink建模与仿真(9)-动态系统模型及其Simulink表示(连续系统模型及表示)
LTI系统的冲激响应-洞悉一切
对于一个LTI系统,当其初始状态为零时,输入为单位冲激函数δ(t),所引起的响应称为单位冲激响应,简称冲激响应。通常用h(t)表示。
云深无际
2024/11/11
3500
LTI系统的冲激响应-洞悉一切
现代控制理论习题解答与Matlab程序示例
http://download.csdn.net/detail/zhangrelay/9544934
zhangrelay
2019/01/23
1.6K0
Transformers是SSMs:通过结构化状态空间对偶性的广义模型和高效算法(一)
尽管Transformer一直是深度学习在语言建模中取得成功的主要架构,但最近的研究表明,如Mamba之类的状态空间模型(SSMs)在小到中等规模上能够匹敌或超越Transformer的性能。我们表明,这两类模型实际上是非常相关的,并在一个经过充分研究的结构化半可分离矩阵类的各种分解之间,发展出SSM和注意力变体之间丰富的理论联系框架。我们的状态空间对偶性(SSD)框架使我们能够设计一种新的架构(Mamba-2),其核心层是对Mamba的选择性SSM的改进,速度提高了2-8倍,同时在语言建模方面继续与Transformer保持竞争力。
AI浩
2024/10/22
3570
Transformers是SSMs:通过结构化状态空间对偶性的广义模型和高效算法(一)
现代控制理论(机器人方向)考核要求与Matlab(Octave)简明教程
版权声明:本文为zhangrelay原创文章,有错请轻拍,转载请注明,谢谢... https://blog.csdn.net/ZhangRelay/article/details/88654172
zhangrelay
2019/04/09
8040
现代控制理论(机器人方向)考核要求与Matlab(Octave)简明教程
MATLAB系统辨识工具箱
点击Estimate,选择需要辨识的系统模型的结构,这里选择Transfer Function Models传递函数模型
用户9925864
2022/07/27
1.5K0
MATLAB系统辨识工具箱
动态系统建模与仿真MATLAB Simulink的应用案例
动态系统建模与仿真是工程、控制、物理等领域中的重要研究方向。MATLAB Simulink提供了一种直观的图形化环境,使得建模与仿真变得更加高效。本文将深入探讨动态系统建模的基本概念,并通过具体的应用案例展示如何使用MATLAB Simulink进行动态系统的建模与仿真。
一键难忘
2025/01/08
5400
Matlab pid参数调节工具箱
4、在结果可以实时看到控制的输出,通过调节系统的响应和鲁棒性,直到满足自己的期望,
用户9925864
2022/07/27
1.1K0
Matlab pid参数调节工具箱
扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)「建议收藏」
我们上篇提到的 卡尔曼滤波(参见我的另一篇文章: 卡尔曼滤波理论讲解与应用(matlab和python))是用于线性系统,预测(运动)模型和观测模型是在假设高斯和线性情况下进行的。简单的卡尔曼滤波必须应用在符合高斯分布的系统中,但是现实中并不是所有的系统都符合这样 。另外高斯分布在非线性系统中的传递结果将不再是高斯分布。那如何解决这个问题呢?扩展卡尔曼滤波就是干这个事的。
全栈程序员站长
2022/07/04
2K0
扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)「建议收藏」
PID控制算法仿真_连续控制系统的充分必要条件
PID控制是将误差信号e(t)的比例(P),积分(I)和微分(D)通过线性组合构成控制量进行控制,其输出信号为:
全栈程序员站长
2022/08/03
1K0
PID控制算法仿真_连续控制系统的充分必要条件
IIR 数字滤波器三种结构形式的MATLAB实现
一.实验目的 1. 掌握IIR 数字滤波器设计的方法; 2. 掌握IIR 数字滤波器直接型、级联型和并联型的基本特点并根据给定的传递函数形式正 确选择是否采用直接型、级联型和并联型。 3. 熟悉直接型、级联型和并联型软件实现的编程方法。 二.实验原理 一个IIR 滤波器的系统函数给出为:
timerring
2022/07/20
2.2K0
IIR 数字滤波器三种结构形式的MATLAB实现
Python实现所有算法-音频过滤器.下(巴特沃斯)
上节简单的写了一下音频滤波器的定义和作用。而这篇文章将主要集中精力在巴特沃斯过滤器上,在末尾将会给出:使用 Butterworth 设计的二阶 IIR 滤波器。
云深无际
2022/08/05
6490
Python实现所有算法-音频过滤器.下(巴特沃斯)
北邮通信原理知识点笔记小结-上半部分
数字通信比模拟通信有着更强的抗干扰能力,可以消除噪声积累,便于集成化、加密性能好,但是代价是什么呢?
Fisherman渔夫
2020/02/19
2K0
25考研机械复试面试 常见问答问题汇总 材料力学及控制工程篇
                                                第一部分:材料力学
啦啦javy
2024/10/17
4073
25考研机械复试面试 常见问答问题汇总 材料力学及控制工程篇
推荐阅读
相关推荐
【Matlab】简单控制系统建模(控制系统工具箱)
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • 1、虚拟机软件virtual box安装
  • 2、Vagrant安装
  • 3、快速部署虚拟机
  • 4、网络配置
  • 5、补充:常见网络连接模式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档