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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

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