vagrant配置端口转发

vagrant配置端口转发

大家好,又见面了,我是全栈君。

vagrant 提供了三种网络配置方式:端口转发(默认)、私有网络、公有网络,可以在配置文件 Vagrantfile 进行网络配置,推荐使用私有网络。

端口转发(forwarded ports)

1 .定义
端口转发指把宿主机的端口映射到虚拟机的某一个端口上,访问宿主机端口时,请求实际是被转发到虚拟机上指定端口的。
:宿主机指运行虚拟机的物理机。

2 .优点

  • 容易实现外网访问虚拟机

3 .缺点

  • 如果端口较少需要映射很容易,但是端口比较多时,就比较麻烦,例如:MySQL,redis,nginx等服务。
  • 不支持在宿主机使用小于1024的端口来转发,例如:不能使用SSL的443端口来进行https连接。

4 .配置
在配置文件Vagrantfile下做如下编辑

Vagrant.configure("2") do |config|
  config.vm.network  
       "forwarded_port"(必须) //端口转发标识
       , guest(必须): //虚拟机端口
       , host(必须): //宿主机端口,值必须大于1024
       ,guest_ip(可选): //虚拟机端口绑定虚拟机ip地址
       ,host_ip(可选): //虚拟机端口绑定宿主机ip
       ,protocol(可选)://指定通信协议,可以使用tcp/udp,默认tcp
       ,auto_correct(可选)://true/false,若配置为true,则每次开启虚拟机的时候自动检查是否存在端口冲突
end

:若guest_ip和host_ip两项配置为空,则局域网下的所有设备都可以访问该虚拟机。

示例配置,如下:

Vagrant.configure("2") do |config|
  config.vm.network "forwarded_port", guest: 80, host: 8080,
    auto_correct: true
end

访问宿主计算机8080端口的请求都转发到虚拟机的80端口上进行处理。

补充:

如果要再添加一个端口转发

config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 8181, host: 8181

添加完之后执行vagrant reload命令重新加载配置文件即可,so easy~

 

私有网络(private networks)

1 .定义
私有网络是指只有宿主机可以访问虚拟机,如果多个虚拟机设定在同一个网段也可以互相访问。
2 .优点

  • 安全,只有自己可以访问

3 .缺点

  • 团队成员不能访问你的虚拟机

4 .配置
使用私有网络的最简单方法是允许通过DHCP分配IP。

Vagrant.configure("2") do |config|
  config.vm.network "private_network", type: "dhcp"
end

这将自动从保留的地址空间分配IP地址。 可以通过使用 vagrant ssh 将 SSH 连接到计算机并使用适当的命令行工具查找 IP(例如ifconfig)来确定 IP 地址。

还可以为计算机指定静态IP地址。 可以使用已知的静态 IP 访问 Vagrant 受管计算机。 配置如下:

config.vm.network 
                 "private_network"//必须 ,私有网络标识
                 , ip: "192.168.33.10"

:私有ip可以自行指定
如果您想自己手动配置网络接口,可以通过指定auto_config来禁用Vagrant的自动配置功能:
Vagrant.configure(“2”) do |config|
config.vm.network “private_network”, ip: “192.168.50.4”,
auto_config: false
end

公有网络(public networks)

1 .定义
公有网络是指设置虚拟机和宿主机有相同的网络配置。

2 .优点

  • 方便团队协作,别人可以访问你的虚拟机

3 .缺点

  • 只有在有网络的情况下才能访问虚拟机

4 .配置

Vagrant.configure("2") do |config|
  config.vm.network 
   "public_network" //必须 公有网络标识
  ,ip(string):  //可选,配置静态ip
  ,bridge(string/array): "en1: Wi-Fi (AirPort)"//可选,设置桥接的网卡
end

四、分布式环境

我们可以在 Vagrantfile 里使用 config.vm.define 方法定义多个主机:

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo Hello"

  config.vm.define "web" do |web|
    web.vm.box = "apache"
  end

  config.vm.define "db" do |db|
    db.vm.box = "mysql"
  end
end

如上,config.vm.define 采用定义一个变量的块。 此变量(如上面的web)与config 变量完全相同,只是内部变量的任何配置仅适用于正在定义的计算机。 因此,web 上的任何配置都只会影响 web 计算机。也可以继续使用 config 对象。 config 对象在特定于机器的配置之前加载和合并。使用这些范围时,配置程序等事务的执行顺序变得很重要。 Vagrant 按照 Vagrantfile 中列出的顺序强制执行从外到内的排序。 例如,使用下面的 Vagrantfile,输出顺序为 “A”, “C”, “B”

Vagrant.configure("2") do |config|
    config.vm.provision :shell, inline: 'echo A'
    config.vm.define :testing do |test|
        test.vm.provision :shell, inline: 'echo B'
    end
    config.vm.provision :shell, inline: 'echo C'
end

当在 Vagrantfile 中定义了多台计算机时,各种 vagrant 命令的使用会略有变化。
仅针对单个机器有意义的命令(例如 vagrant ssh)现在需要控制机器的名称。例如上面的例子,需要使用 vagrant ssh web 或 vagrant ssh db。

默认情况下,其他命令(例如 vagrant up)在每台机器上运行。因此,如果vagrant up ,Vagrant 会启动 web 和 db 机器。也可以选择具体启动 vagrant up web 或 vagrant up db。此外,也可以指定正则表达式以仅匹配某些计算机。

另外,可以使用自动启动设置允许告知 Vagrant 不启动特定计算机。 例:

config.vm.define "web"
config.vm.define "db"
config.vm.define "db_follower", autostart: false

当使用上述设置运行 vagrant 时,Vagrant 将自动启动 “web” 和 “db” 机器,但不会启动 “db_follower” 机器。 可以通过运行 vagrant up db_follower 来手动强制 “db_follower” 计算机启动。

可以指定主计算机。 主计算机将是未指定分布式环境中的特定计算机时使用的默认计算机。要指定默认计算机,只需在定义时将其标记为主计算机。 只能指定一台主机。

config.vm.define "web", primary: true do |web|
  # ...
end

Push

从版本1.7开始,Vagrant 能够将与 Vagrantfile 相同的目录中的应用程序代码部署或“推送”到远程数据库(如FTP服务器或HashiCorp的Atlas)。
推送的定义在应用程序的 Vagrantfile 中定义,并使用 vagrant push 子命令调用。 与 Vagrant 的其他组件非常相似,每个 Vagrant Push 插件都有自己的配置选项。 有关更多信息,请参阅Vagrant Push插件的文档。 以下是Vagrantfile中的Vagrant Push配置部分示例:

config.push.define "ftp" do |push|
  push.host = "ftp.company.com"
  push.username = "..."
  # ...
end

当应用程序准备好部署到FTP服务器时,只需运行一个命令:

vagrant push

与 Vagrant Providers 非常相似,Vagrant Push也支持多个后端声明。 考虑staging 和 QA 环境的常见情况:

config.push.define "staging", strategy: "ftp" do |push|
  # ...
end

config.push.define "qa", strategy: "ftp" do |push|
  # ...
end

在这种情况下,用户必须将 Vagrant Push 的名称传递给子命令:

vagrant push staging

参考:
https://www.vagrantup.com/docs/
https://jimmysong.io/posts/vagrant-intro/
https://www.jianshu.com/p/050b0a4468c4

作者:zpei0411
链接:https://www.jianshu.com/p/31b2a6ce0924
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112034.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 从“做事用人”到“用人做事”[通俗易懂]

    从“做事用人”到“用人做事”[通俗易懂]阿里张勇:从“做事用人”到“用人做事”商业管理今年十一月底,阿里巴巴进行了一年一度的组织架构调整,在这次调整中,阿里云升级成为阿里云智能;天猫升级为“大天猫”,并形成了三个事业群。12月时,阿里巴巴集团CEO张勇,在阿里青年干部培训营上,谈了他对这次组织架构升级的思考。36氪发表了张勇的讲话全文,我们从中为你选取了他的5个观点。第一,从“做事用人”到“用人做事”。这是马云给张勇的…

    2025年6月16日
    5
  • goland激活码_在线激活

    (goland激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/ide…

    2022年3月26日
    43
  • stuffing list_difflib

    stuffing list_difflibhttps://blog.csdn.net/heimu24/article/details/535813621.2创建图片列表清单这一步我们需要创建自己图片数据集的清单txt文件,这里提供两种方法。方法1:创建一个sh文件cd~/caffe-master/sudogeditexamples/images/create_filelist.shsudo就是获取管理员权限,gedit…

    2022年9月29日
    2
  • sql模糊查询 like[通俗易懂]

    sql模糊查询 like[通俗易懂]like经常与where字句和通配符在一块进行使用,表示像啥啥,模糊查询通配符主要是_和%  %百分号表示零个,一个或多个字符  _下划线表示单个字符**注意:**1、MSAccess使用问号(?)而不是下划线(_)2、百分号和下划线也可以组合使用!   3、可以使用AND或OR运算符组合任意数量的条件语法:select*from表名where字段…

    2022年4月27日
    67
  • UCF约束介绍_flcl alternative

    UCF约束介绍_flcl alternative约束(一)约束的分类:利用FPGA进行系统设计常用的约束主要分为3类。(1)时序约束:主要用于规范设计的时序行为,表达设计者期望满足的时序条件,知道综合和布局布线阶段的优化算法等。(2)布局布

    2022年8月2日
    5
  • Ajax 跨域,这应该是最全的解决方案了

    Ajax 跨域,这应该是最全的解决方案了

    2021年10月13日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号