当前位置: 首页 > 知识库问答 >
问题:

让一个LAMP堆栈在一个流浪的VM上运行(在Windows7主机下),完整的说明?

郎玮
2023-03-14

我有一个流浪汉VM标准问题32。盒子在运转。在这上面设置指示灯的完整说明是什么?

我看过刀(厨师的一部分)并尝试:

vagrant@lucid32:~$ knife cookbook site install apache2

但是得到

WARNING: No knife configuration file found

如何设置刀具配置文件,其中应该包含什么?

我一直在网上搜索答案,但被无法解释其出发点/先决条件的部分解决方案淹没了。

使现代化

我的目标是自己回答这个问题,因为似乎没有人愿意这样做。以下是我目前的理解——我的目标是在稍后用红色表示我的未知/问题。

共有2个答案

田翔
2023-03-14

虚拟机中,您需要运行:

$knife configure

接受所有默认值。

在您运行这个之后,在您的~/。厨师/knife.rb.中会有一个配置文件

至于您的图表:vagrant文件夹包含该项目的vagrant文件。实际情况。ovf和。vmdk文件以及另一个Vagranfile存在于/%USERPROFILE%/中。流浪汉d/

Vagranfile是Vagant的配置文件,以设置的优先级顺序存在于多个位置。项目文件夹中的Vagranfile优先:Vagrantfile留档。

一切都可以来自localhost,包括使用多个vm设置更复杂的Vagrant项目。

编辑:为了明确,刀配置cmd应该在VM中运行,并删除一个杂乱的Windows路径引用。

柳刚豪
2023-03-14

好的,我决定作为最初的问题海报为自己完整地回答这个问题。(感谢所有在此之前作出贡献的人。)

使用Vagant和Oracle VirtualBox在Windows 64位主机上端到端设置LAMP VM

我最初问这个问题是因为尽管网上有很多说明和指南,但它们似乎没有做到:

>

就我个人而言,我认为Vagant版本控制约定可以更简单。注:本指南适用于流浪者1。我被告知,版本1已经有了广泛的安装基础,而《流浪2》仍处于2013年年中的草稿阶段。因此,我想把版本1-V1 LTS称为长期支持,就像Ubuntu一样,以表明这将持续很长时间。

下面是一张图片,用于说明哪个API位于哪个版本的Vagrant软件上:

对于我在这里使用Vagrant的示例设置,我建议使用pre-V1。1.0(即vagrantup.com上下载的Vagrant API 1),但是您应该能够使用上述Vagrant软件的Vagrant 2 API版本,但您需要在脚本开头添加一个“指令”,告诉Vagrant它们是用于Vagrant 1的,否则脚本将失败并显示错误消息。托多:我会试着得到那个指令并把它放在这里来帮助你。

(Mitchell Hashimoto,流浪者创作者-请注意以上内容,以备将来出版的O'Reilly书籍:《流浪者:启动和运行:http://shop.oreilly.com/product/0636920026358.do)

此答案中的这些说明应该做什么:

为您提供32位UbuntuLinux操作系统,其LAMP(Linux操作系统,Apache Web服务器,MySQL数据库,PHP)堆栈作为虚拟机运行,在Windows 7 64位机器上使用Oracle VirtualBox(或Mac或Linux机器,但主要在Windows上测试,但应该在Mac上运行良好,此解决方案是独立于平台的)。我已经测试了PHP OK(通过标准phpinfo.php文件,看到MySQL正在运行,但还没有测试)。

在Vagant VM上设置LAMP堆栈的其他方法

注意:对于那些(像我一样)希望使用Drupal开源内容管理框架的LAMP堆栈的人来说,另一个非常现成的解决方案是:http://drupal.org/project/vagrant您应该能够只遵循我下面的先决条件,然后下载。从上面的URL压缩并按照上面的说明操作,然后从命令行运行vagrant up,启动VM并等待它的构建和启动(其中一些是一次性的,因为一旦您设置了映像,后续引导应该会更快)。你可以“免费”得到很多其他开发人员的东西(也就是说,为了节省你安装它们的工作量),比如git、drush(我想)和性能评测工具。然后转到[服务器地址]/install。php来安装Drupal。这似乎工作得很好,没有问题-我已经尝试过,但没有广泛测试。如果收到错误消息,可能需要禁用xhprof的安装-请参阅http://drupal.org/node/1940668详情请参阅。

另一个选项是使用此配置工具:https://puphpet.com/-这是一种用于配置Vagrant设置的可视点击方法。这适用于Vagrant 2(我认为,更新是的,至少适用于Vagrant 1.2.2)。更新:事实上,我已经成功地实现了这一点,并基于在本地运行Drupal的设置-请参阅我的指南:https://drupal.org/node/2055947

使现代化

以下是我发现在Mac和Windows上运行良好的一些现成的流浪设置:

  • https://github.com/mikebell/drupaldev-apache
  • https://github.com/mikebell/drupaldev-nginx

如果您希望Solr搜索引擎作为LAMP堆栈的一部分在VM中本地运行,您可能需要查看:

  • https://github.com/computerminds/parrot

即使这些替代方案很好,我的说明仍然有助于帮助您了解此类设置的工作原理,或者如果您想要更简单、更基本的灯组。

你需要了解如何做的小额外内容(将尝试在此处包括它们)

设置后登录到机器-这是通过标准的基于SSH的登录完成的。你需要免费的工具油灰。exe和puttygen。exe。目前我还没有在这里提供如何使用SSH登录,但将来会尝试这样做。你可以在这个答案的末尾找到参考资料。

请注意,登录将与用户流浪者

(在您按照下面的设置说明操作后)使用root用户,您需要解锁帐户才能重置密码:

解锁root帐户:

vagrant@lucid32:~$ sudo passwd -u root
passwd: password expiry information changed.

然后更改root密码:

vagrant@lucid32:~$ sudo passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

(输入时不会显示密码。)

通过使用新密码登录到root来测试新密码:

vagrant@lucid32:~$ su root
Password:
root@lucid32:/home/vagrant#

学分:https://scottlinux.com/2011/07/22/reset-or-change-user-password-in-linux/(文章:“在Linux中重置或更改用户密码”-这帮助我解决了如何做到这一点。)

有错误吗?

试一试——如果你有问题,我会试着解决。请参阅最后的故障排除。

未来任务

目前使用木偶。用厨师而不是木偶来做,只是为了拓宽工作方式。这两个都是竞争者,但有不同的方法,所以我相信:有了木偶,我被告知你说你想要什么,木偶可能会做出一些武断的决定让你去那里。而对于厨师,我相信你定义了精确的步骤顺序。再次-在这里评论并在必要时纠正我,

这些指令的先决条件:

>

建议使用的Vagrant和VirtualBox版本组合:VirtualBox版本4.2。12和流浪前1.2(如前所述)。某些其他组合可以工作,但我还没有测试过,所以我坚持使用这种组合,除非我能看到使用更高版本的明显好处。一个最明显的好处是资源调配的速度。我在这里陈述的组合对PUPPET有效。com设置VM的路径至少相当复杂,因此我假设应该在这里记录的简单设置上工作。

(信用证:这些说明基于:http://ox86.tumblr.com/post/23734821654/painless-development-environments-with-virtualbox…但不是一份精确的副本,因为它们不适合我。)

说明

(请确保您具备上述先决条件。)

主机安装工作在Windows用户文件夹中的主机上完成,例如,对我来说,这是C:\Users\rdavis

mkdir lamp-project
cd lamp-project
mkdir configs
cd ..
cd lamp-project
mkdir manifests

(以下来源:http://docs.vagrantup.com/v1/docs/getting-started/index.html)

下载发行版安装映像,在本例中为Ubuntu Lucid(10.04)。此映像实际上等同于传统上用于在机器上安装操作系统的安装磁盘(CD或DVD)。

C:\Users\rdavis\lamp-project>vagrant box add lucid32 http://files.vagrantup.com/lucid32.box

(顺便说一句,vagrantup.com上还有其他几个流行的发行版,但是如果您想从发行版.ISO生成.box文件,那么有一个名为VeeWee的工具可以做到这一点:https://github.com/jedi4ever/veewee)

初始化它:

C:\Users\rdavis\lamp-project>vagrant init lucid32

(请注意,我只是在编写这些指令时使用了流浪者init,因为我已经初始化了lucid32,但是第一次,您必须执行上面的命令。)

C:\Users\rdavis\lamp-project>vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

C:\Users\rdavis\lamp-project>

编辑C:\Users\rdavis\lamp project\Vagrantfile-直接在Vagrant::Config之后插入以下内容。运行do | config |

config.vm.box = "lucid32"
config.vm.provision :puppet do |puppet|
    puppet.manifests_path = File.expand_path("../manifests", __FILE__)
end
config.vm.forward_port 80, 8080
config.vm.share_folder "configs", "/configs", File.expand_path("../configs", __FILE__)

所以你的Vagrantfile应该看起来像:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant::Config.run do |config|

config.vm.box = "lucid32"
config.vm.provision :puppet do |puppet|
    puppet.manifests_path = File.expand_path("../manifests", __FILE__)
end
config.vm.forward_port 80, 8080
config.vm.share_folder "configs", "/configs", File.expand_path("../configs", __FILE__)

 # All Vagrant configuration is done here. The most common configuration
 # options are documented and commented below. For a complete reference,
 # please see the online documentation at vagrantup.com.

 # Every Vagrant virtual environment requires a box to build off of.
 # config.vm.box = "lucid32" 
 # (this is already done above, but if you have a box called 'base' which is an Ubuntu lucid32 then you can use: config.vm.box = "base". This info may be helpful if you get error: "The box 'base' could not be found.")

 # The url from where the 'config.vm.box' box will be fetched if it
 # doesn't already exist on the user's system.
 # config.vm.box_url = "http://example.com/path/to/above.box"

 # Boot with a GUI so you can see the screen. (Default is headless)
 # config.vm.boot_mode = :gui

 # Assign this VM to a host-only network IP, allowing you to access it
 # via the IP. Host-only networks can talk to the host machine as well as
 # any other machines on the same network, but cannot be accessed (through this
 # network interface) by any external networks.
 # config.vm.network :hostonly, "192.168.33.10"

 # Assign this VM to a bridged network, allowing you to connect directly to a
 # network using the host's network device. This makes the VM appear as another
 # physical device on your network.
 # config.vm.network :bridged

 # Forward a port from the guest to the host, which allows for outside
 # computers to access the VM, whereas host only networking does not.
 # config.vm.forward_port 80, 8080

 # Share an additional folder to the guest VM. The first argument is
 # an identifier, the second is the path on the guest to mount the
 # folder, and the third is the path on the host to the actual folder.
 # config.vm.share_folder "v-data", "/vagrant_data", "../data"

 # Enable provisioning with Puppet stand alone.  Puppet manifests
 # are contained in a directory path relative to this Vagrantfile.
 # You will need to create the manifests directory and a manifest in
 # the file base.pp in the manifests_path directory.
 #
 # An example Puppet manifest to provision the message of the day:
 #
 # # group { "puppet":
 # #   ensure => "present",
 # # }
 # #
 # # File { owner => 0, group => 0, mode => 0644 }
 # #
 # # file { '/etc/motd':
 # #   content => "Welcome to your Vagrant-built virtual machine!
 # #               Managed by Puppet.\n"
 # # }
 #
 # config.vm.provision :puppet do |puppet|
 #   puppet.manifests_path = "manifests"
 #   puppet.manifest_file  = "base.pp"
 # end

 # Enable provisioning with chef solo, specifying a cookbooks path, roles
 # path, and data_bags path (all relative to this Vagrantfile), and adding
 # some recipes and/or roles.
 #
 # config.vm.provision :chef_solo do |chef|
 #   chef.cookbooks_path = "../my-recipes/cookbooks"
 #   chef.roles_path = "../my-recipes/roles"
 #   chef.data_bags_path = "../my-recipes/data_bags"
 #   chef.add_recipe "mysql"
 #   chef.add_role "web"
 #
 #   # You may also specify custom JSON attributes:
 #   chef.json = { :mysql_password => "foo" }
 # end

 # Enable provisioning with chef server, specifying the chef server URL,
 # and the path to the validation key (relative to this Vagrantfile).
 #
 # The Opscode Platform uses HTTPS. Substitute your organization for
 # ORGNAME in the URL and validation key.
 #
 # If you have your own Chef Server, use the appropriate URL, which may be
 # HTTP instead of HTTPS depending on your configuration. Also change the
 # validation key to validation.pem.
 #
 # config.vm.provision :chef_client do |chef|
 #   chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
 #   chef.validation_key_path = "ORGNAME-validator.pem"
 # end
 #
 # If you're using the Opscode platform, your validator client is
 # ORGNAME-validator, replacing ORGNAME with your organization name.
 #
 # IF you have your own Chef Server, the default validation client name is
 # chef-validator, unless you changed the configuration.
 #
 #   chef.validation_client_name = "ORGNAME-validator"
end

然后,在C:\用户\rdavis\灯具项目\清单中创建文件default.pp并放入其中:

$config_path = "/configs"
$vagrant_base_path = "/vagrant"
Exec { path => "/bin:/usr/bin:/usr/local/bin" }
group { "puppet": ensure => present }
exec { "apt-get update": command => "apt-get update" }
class apache {

    exec { "enable-mod_rewrite":
        require => Package["apache2"],
        before => Service["apache2"],
        command => "/usr/sbin/a2enmod rewrite"
    }
    package { "apache2":
        ensure => present
    }

    service { "apache2":
        ensure => running,
        require => Package["apache2"]
    }
}
class php {
    package { "libapache2-mod-php5": ensure => present }
    package { "php5": ensure => present }
    package { "php5-cli": ensure => present }
    package { "php5-dev": ensure => present }
    package { "php5-mysql": ensure => present }
    package { "php-pear": ensure => present }
    exec { "pear upgrade":
        command => "/usr/bin/pear upgrade",
require => Package["php-pear"],
    }
}
class mysql {
  package { "mysql-server":
    require => Exec["apt-get update"],
    ensure => present,
  }
  service { "mysql":
    enable => true,
    ensure => running,
    require => Package["mysql-server"],
  }
  exec { "Set MySQL server root password":
        require => Package["mysql-server"],
        unless => "/usr/bin/mysqladmin -uroot -proot status",
        command => "/usr/bin/mysqladmin -uroot password root",
  }
}
include apache
include php
include mysql

(有益的注意事项(可选),我的上述版本的Vagrantfiledefault.pp(以及其他Vagant辅助文件和文件夹结构)可从我的GitHub存储库VagrantVMSetup获得,地址:https://github.com/therobyouknow/VagrantVMSetups-请参阅ustlight文件夹-这与此答案中使用的light-project的内容相同。(

然后跑流浪汉:

C:\Users\rdavis\lamp-project>vagrant up

请注意,这可能需要一段时间(5-15分钟)-但请耐心等待。它现在应该成功运行LAMP虚拟机。然后,您已经完成了当前工作任务中的VM。如果您随后保留VM供以后使用,但使用vagrant halt(而不是vagrant destroy删除VM映像)将其关闭,则我预计此延迟将是一次性的初始设置时间。我认为,VM的后续启动(使用vagrant up)应该更快。

故障排除:

故障排除问题1:使用了错误/非法的报价-运行Wagrant up后在主机上看到错误消息

背景:这种情况发生在我身上,因为我粘贴了说明来源的网页上的代码片段。代码片段有开引号和闭引号——Vagrant使用的解释器/解析器(或者我认为大多数脚本解释器和编译器)不会将其解释为正确的引号

症状:输出如下:

There is a syntax error in the following Vagrantfile. The syntax error
message is reproduced below for convenience:

C:/Users/rdavis/lamp-project/Vagrantfile:6: invalid multibyte char (US-ASCII)
C:/Users/rdavis/lamp-project/Vagrantfile:6: syntax error, unexpected $end

或者这个:

Could not parse for environment production: Could not match ?/configs? at /tmp/vagrant-puppet/manifests/default.pp:1 on node lucid32.hsd1.ca.comcast.net.

The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

或者这个:

There was an error executing the following command with VBoxManage:

["list", "hostonlyifs"]

补救措施:使用适当的双引号“。不要使用开引号和闭引号。

故障排除问题2:运行Wagrant up后主机上出现以下错误消息

←[1;35merr: /Stage[main]/Apache/File[/etc/apache2/sites-enabled/000-default]: Could not evaluate: Could not retrieve information from environment production source(s) file:/configs/000-default at /tmp
/vagrant-puppet/manifests/default.pp:11←[0m

补救措施:您不应该看到这一点-使用的原始脚本包含对包含000 default的路径的引用。我只是删除了所有引用它的行和结构。

疑难解答问题3:PHP文件被视为下载(在浏览器中下载文件),而不是执行和显示。

PHP需要在来宾VM机器上启用。

补救措施:您可能需要也可能不需要这样做。

此技巧有效:(启用PHP并停止将文件视为下载):https://serverfault.com/questions/243435/getting-php-to-work-with-apache-to-run-php-files-through-browser

vagrant@lucid32:/etc/php5/cli$ a2enmod php5
Module php5 already enabled
vagrant@lucid32:/etc/php5/cli$ sudo apache2ctl restart

另一个提示:

PHP需要启用,建议如下:http://galleryproject.org/node/55011

is: editphp.ini这些是共享扩展名(. so文件)。您需要在php.ini中启用它们,然后重新启动PHP。

我自己,我不需要编辑php。毕竟是这样。顺便说一句,这里是:/etc/php5/cli/php。此lucid32虚拟机的ini

疑难解答问题4:解决有关版本不匹配的VirtualBox additions警告消息

[default] The guest additions on this VM do not match the install version of
VirtualBox! This may cause things such as forwarded ports, shared
folders, and more to not work properly. If any of those things fail on
this machine, please update the guest additions and repackage the
box.

Guest Additions Version: 4.2.0
VirtualBox Version: 4.2.4

这似乎不是一个问题(它不会阻止VM成功运行),但如果您希望解决它:

http://automation.binarysage.net/?p=1198https://unix.stackexchange.com/questions/58216/automate-installation-of-virtualbox-guest-additions-via命令行

https://serverfault.com/questions/243435/getting-php-to-work-with-apache-to-run-php-files-through-browser

(对于Linux用户:http://www.pauloamgomes.net/blog/installing-vagrant)

疑难解答问题5:找不到框“base”。“运行vagrant up后看到错误消息。

救济检查包含语句config的行。虚拟机。box=等。在您的Vagrantfile中(请参阅上面的示例Vagrantfile),以确保它引用的是系统上实际存在的一个Vagrant box(操作系统安装映像)-发出命令Vagrant box list,查看您有哪些box。

如果您遵循了我的说明,那么您应该有lucid32框。确保没有无关的config。虚拟机。box=etc.您的vagrant文件中的语句。供认:有一个无关的config。虚拟机。box=“base”在我的vagrant文件中当实际上在上面几行时,config。虚拟机。box=“lucid32”已完成。我现在已经纠正了这一点。

常见问题

>

问:什么是流浪包?答:虚拟机的快照加上Vagrant从Vagrant文件执行的配置提供了一种独立的方法,可以将设置分发给其他人。

参考资料:

一般流浪者资源:

-流浪汉的命令是做什么的?-描述得不错

http://community.opscode.com/questions/81http://deanstrezovski.com/setting-up-a-cagrant-lamp-stack/http://www.jasongrimes.org/2012/06/managing-lamp-environments-with-chef-vagrant-and-ec2-1-of-3/如何将Vagant项目目录与现有的VirtualBox VM关联?http://docs.vagrantup.com/v1/docs/getting-started/index.html

更多关于流浪者盒子的信息:

http://docs.vagrantup.com/v1/docs/boxes.htmlVagant将更改保存到VM的位置?

基于SSH密钥的登录(从外部登录到VM框-即从主机或其他计算机):

http://www.howtoforge.com/ssh_key_based_logins_putty_p2http://docs.vagrantup.com/v1/docs/getting-started/ssh.html

http://en.wikipedia.org/wiki/Ssh-agent

对于基于Windows SSH的虚拟机登录:

PuTTY:免费的telnet/ssh客户端www.chiark。格林德。组织。英国/~sgtatham/油灰/

普蒂根:

www.chiark。格林德。组织。uk/~sgtatham/putty/下载。html

此答案的版本历史记录/更新

  1. 路标和标题清理
  2. 添加运行流浪者向上,这可能需要一段时间
  3. 添加了如何在VM中设置root密码
  4. 添加了缺失步骤下载并初始化lucid32 box(相当于安装磁盘)
  5. 为方便起见,添加了我的https://github.com/therobyouknow/VagrantVMSetupsGitHub回购的链接,其中包含了这个答案的流浪配置设置。
  6. 修改Vagrantfile以删除无关的config.vm.box="base",实际上上面几行,config.vm.box="lucid32"已经完成。这将有助于如果您遇到错误无法找到框'base'。"还添加了一个新的故障排除项目,解释了同样的问题。
  7. 为那些想要基于Drupal的LAMP虚拟机的人添加了可选的开箱即用解决方案:http://drupal.org/project/vagrant参见上面关于此的更多注释。
  8. 2013-07-10:对编写本指南的原因进行了轻微的语法调整。更新了奥赖利的流浪书现在出版了。添加链接到https://puphpet.com/-在线Vagant配置脚本生成器(非常好!)。添加到VeeWee工具的链接,该工具用于从任何文件中生成Vagant. box文件。ISOLinux分布(标准安装盘)
  9. 2013-10-14更新了他们似乎不做的项目符号,并指出了流浪的版本-本指南使用流浪1(以及为什么)。声明的流浪2使用puphpet.com也链接到我的留档使用puphpet.com为Drupal设置一个流浪VM。
  10. 2013-10-21更新到VirtualBox版本和Vagant的状态组合使用:VirtualBox版本4.2.12和Vagant 1.2.2。某些其他组合可以工作,但我还没有测试过,所以我坚持使用这个组合,除非我能看到使用更高版本的明显好处。一个最明显的好处是配置的速度。将标题放在其他方法上,以流浪VM部分。更新说这个和其他解决方案是独立于平台的,应该在个人电脑、苹果电脑或Linux上工作。
  11. 2013-10-23更新了本指南(即v1.2之前(即Vagant 2之前))和另一种方法,puphpet.com(v1.2.2-相比之下,这是一个Vagant 2版本。)
  12. 2013-12-03修正了Vagant API版本控制的注意事项,以及什么API版本在哪个Vagant软件版本中。添加了一些更多的替代,全面的流浪设置。
 类似资料:
  • 本文向大家介绍说一下堆栈的区别?相关面试题,主要包含被问及说一下堆栈的区别?时的应答技巧和注意事项,需要的朋友参考一下 功能方面:堆是用来存放对象的,栈是用来执行程序的。 共享性:堆是线程共享的,栈是线程私有的。 空间大小:堆大小远远大于栈。

  • 本文向大家介绍简要说说一个完整机器学习项目的流程?相关面试题,主要包含被问及简要说说一个完整机器学习项目的流程?时的应答技巧和注意事项,需要的朋友参考一下 抽象成数学问题(确定是一个分类问题、回归问题还是聚类问题,明确可以获得什么样的数据) 获取数据(数据要具有代表性,对数据的量级也要有一个评估,多少样本,多少特征,对内存的消耗,考虑内存是否能放得下,如果放不下考虑降维或者改进算法,如果数据量太大

  • 5.6 一个完整的流程 到之前为止,我们了解了URL和抽取相关API,一个爬虫已经基本编写完成了。 @TargetUrl("https://github.com/\\w+/\\w+") @HelpUrl("https://github.com/\\w+") public class GithubRepo { @ExtractBy(value = "//h1[@class='entry-t

  • 问题内容: 我需要编写一个小的日志分析器应用程序来处理由我的项目中使用的第三方封闭源库(内部具有自定义记录器)生成的一些日志文件。 如果日志中有异常条目,我需要从堆栈顶部到异常的实际位置收集有关堆栈跟踪中所涉及方法的汇总信息。 不幸的是,默认情况下,Java printStackTrace()不会打印调用堆栈中的每个方法,但是最多可以打印一个特定的数目,其余的仅被引用为。 如果我自己可以捕获到该异

  • [信息][05/05/2017 13:12:25.650][Akka-Spring-demo-Akka.actor.default-dispatcher-5][Akka://Akka-spring-demo/deadletters]从演员[Akka://Akka-spring-demo/deadletters]到演员[Akka://Akka-spring-demo/deadletters]的消息[

  • 我希望使用运行测试,但只能针对主机服务器1。有办法做到这一点吗?