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.pswp.cn/web/67016.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67016.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67016.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode 面試經典 150 題:簡化路徑

鏈接簡化路徑題序號71題型字符串解法棧難度中等熟練度??? 題目 給你一個字符串 path ,表示指向某一文件或目錄的 Unix 風格 絕對路徑 (以 ‘/’ 開頭),請你將其轉化為 更加簡潔的規范路徑。 在 Unix 風格的文件系統中規則如下…

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

在搭建圖床之前我們需要知道圖床是一個什么東西,圖床顧名思義就是存放圖片的地方,那么我們為什么要搭建圖床呢?因為我們在寫博客的時候,很多同學都是在本地使用typora或者是obsidian進行markdown語法的文章的書寫,文件格式通常都是…

JVM堆空間

JVM(Java虛擬機)堆空間是Java內存管理的核心區域之一,用于存儲Java對象實例。以下是關于JVM堆空間的詳細介紹: 1. 堆空間的作用 ? 存儲對象實例:幾乎所有的Java對象實例(通過new關鍵字創建的對象&#xf…

Redis 的熱 Key(Hot Key)問題及解決方法

Redis 的熱 Key(Hot Key)問題及解決方法 1. 什么是 Redis 熱 Key? Redis 熱 Key(Hot Key)指的是訪問頻率極高的 Key,通常會造成以下問題: 單 Key 訪問量過大:熱點 Key 可能被高并…

SSM東理咨詢交流論壇

🍅點贊收藏關注 → 添加文檔最下方聯系方式咨詢本源代碼、數據庫🍅 本人在Java畢業設計領域有多年的經驗,陸續會更新更多優質的Java實戰項目希望你能有所收獲,少走一些彎路。🍅關注我不迷路🍅 項目視頻 js…

http的請求體各項解析

一、前言 做Java開發的人員都知道,其實我們很多時候不單單在寫Java程序。做的各種各樣的系統,不管是PC的 還是移動端的,還是為別的系統提供接口。其實都離不開http協議或者https 這些東西。Java作為編程語言,再做業務開發時&#…

gradle生命周期鉤子函數

文章目錄 0. 總結表格1. 構建初始階段gradle.settingsEvaluated()gradle.projectsLoaded() 2. 配置階段gradle.beforeProject()gradle.afterProject()gradle.projectEvaluated()gradle.afterEvaluate()gradle.taskGraph.whenReady 3. 執行階段gradle.taskGraph.beforeTaskgradl…

Qt Enter和HoverEnter事件

介紹 做PC開發的過程中或多或少都會接觸到鼠標的懸停事件,Qt中處理鼠標懸停有Enter和HoverEnter兩種事件 相同點 QEvent::Enter對應QEnterEvent,描述的是鼠標進入控件坐標范圍之內的行為,QEnterEvent可以抓取鼠標的位置;QEvent…

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

漏洞利用逃逸 通過漏洞利用實現逃逸,主要分為以下兩種方式: 1、操作系統層面的內核漏洞 這是利用宿主機操作系統內核中的安全漏洞,直接突破容器的隔離機制,獲得宿主機的權限。 攻擊原理:容器本質上是通過 Linux 的…

如何優化深度學習模型來提高錯別字檢測準確率?

為了優化深度學習模型以提高錯別字檢測的準確率,可以從以下幾個方面入手: 1. 數據增強 數據增強是提高模型泛化能力的有效方法。通過在訓練數據中引入噪聲,模型可以學習到更多變的模式,從而提高對未見數據的識別能力。 刪除字符:以一定概率刪除文本中的一個字符。增加字…

二叉搜索樹中的搜索(力扣700)

首先介紹一下什么是二叉搜索樹。 二叉搜索樹是一個有序樹: 若它的左子樹不空,則左子樹上所有結點的值均小于它的根結點的值;若它的右子樹不空,則右子樹上所有結點的值均大于它的根結點的值;它的左、右子樹也分別為二叉…

pytest自動化測試 - 構造“預置條件”的幾種方式

<< 返回目錄 1 pytest自動化測試 - 構造“預置條件”的幾種方式 1.1 使用夾具構造預置條件 在夾具章節中&#xff0c;我們介紹了夾具的作用&#xff0c;其中一項就是構造預置條件。pytest.fixture裝飾器中如果測試數據使用yield返回&#xff0c;則yield前的語句為預置條…

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

微信小程序的picker是一個功能強大的組件&#xff0c;它可以是一個普通選擇器&#xff0c;也可以是多項選擇器&#xff0c;也可以是時間、日期、省市區選擇器。 官方文檔在這里 這里講一下date picker的用法。 <view class"section"><view class"se…

[java] 面向對象進階篇1--黑馬程序員

目錄 static 靜態變量及其訪問 實例變量及其訪問 靜態方法及其訪問 實例方法及其訪問 總結 繼承 作用 定義格式 示例 總結 子類不能繼承的內容 繼承后的特點 成員變量 成員變量不重名 成員變量重名 super訪問父類成員變量 成員方法 成員方法不重名 成員方法…

python3+TensorFlow 2.x 基礎學習(一)

目錄 TensorFlow 2.x基礎 1、安裝 TensorFlow 2.x 2、TensorFlow 2.x 基礎概念 2、1 Eager Execution 2、2 TensorFlow 張量&#xff08;Tensor&#xff09; 3、使用Keras構建神經網絡模型 3、1 構建 Sequential 模型 3、2 編譯模型 1、Optimizer&#xff08;優化器&a…

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 在處理…

openlava/LSF 用戶組管理腳本

背景 在openlava運維中經常需要自動化一些常規操作&#xff0c;比如增加用戶組以及組成員、刪除用戶組成員、刪除用戶組等。而openlava的配置文件需要手動修改&#xff0c;然后再通過badmin reconfig激活配置。因此開發腳本將手工操作自動化就很有必要。 通過將腳本中的User…

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、…