gpt4 book ai didi

windows-7 - 获取在Vagrant VM(在Windows 7主机下)上运行的LAMP堆栈的完整说明?

转载 作者:行者123 更新时间:2023-12-03 10:23:38 25 4
gpt4 key购买 nike

我正在运行Vagrant VM标准问题lucid32.box。在此设置LAMP的完整说明是什么?

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

vagrant@lucid32:~$ knife cookbook site install apache2


但是得到了

WARNING: No knife configuration file found


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

我一直在网上进行大量搜索以寻找答案,但对于不解释其起点/前提条件的部分解决方案感到不知所措。

更新资料

我的目标是自己回答这个问题,因为似乎没人愿意。这是我目前的理解-我打算稍后用红色解决我的未知数/问题。

最佳答案

好的,我已经决定作为原始问题解答者为我自己完全回答。 (感谢所有之前做出贡献的人。)

使用Vagrant和Oracle VirtualBox在Windows 64位主机上进行LAMP VM的端到端设置

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


明确定义起点和先决条件
为那些像我一样在具有能力的Windows计算机来托管VM的公司环境中的用户提供指导。相反,他们假定基于Linux的主机。
请明确要设置文件的位置:在主机上?在来宾操作系统上? (要确定主机操作系统和来宾操作系统都是基于Linux还是基于Unix,这特别困难-显示的命令行片段显然看不出任何线索,因为它们看上去都一样。)
说明使用了哪个版本的Vagrant。主要有两(2)个版本:API版本1,该版本是v1.1.0之前(但不包括)的所有版本。另一个是API版本2-从v1.1.0开始发行。因此,版本约定类似于Java。这个API版本非常重要,因为例如v1 API脚本根本无法在Vagrant软件的API v2上运行,除非在脚本的开头放置了一个子句以指明要使用哪个版本。

我个人认为,Vagrant版本控制约定可能会更简单。注意:此指南适用于Vagrant1。我被告知版本1具有广泛的安装基础,而Vagrant 2仍处于2013年中期草案中。因此,我想将版本1-V1 LTS-长期支持-像Ubuntu表明这将持续很长时间。


这是一张图片,以阐明哪个API在Vagrant软件的哪个版本上:



对于此处使用Vagrant的示例设置,我建议使用V1.1.0之前的版本(即vagrantup.com上下载的Vagrant API 1),但是您应该能够使用上述Vagrant软件的Vagrant 2 API版本但是您需要在脚本的开头添加一个“指令”,以告知Vagrant它们是针对Vagrant 1的,否则脚本将失败并显示一条错误消息。 TODO:我将尝试获取该指令并将其放在此处以提供帮助。

(流浪者的创建者Mitchell Hashimoto-请在您的O'Reilly图书的任何将来版本中注意上述内容:流浪者:正常运行:http://shop.oreilly.com/product/0636920026358.do

这些答案中的这些指示应该做什么:

使用Windows 7 64位计算机(或Mac或Linux计算机)上的Oracle VirtualBox,获得具有LAMP(Linux操作系统,Apache Web服务器,MySQL数据库,PHP)堆栈的32位Ubuntu Linux操作系统,并作为虚拟机运行,但主要在Windows上进行了测试,但在Mac上应该可以正常使用,并且该解决方案是独立于平台的)。我已经测试了PHP OK(通过标准的phpinfo.php文件,看到MySQL正在运行,但尚未测试)。

设置在Vagrant VM上运行的LAMP堆栈的其他方法

注意:对于那些想要使用Drupal开源内容管理框架来实现LAMP堆栈的人(如我),可以使用另一种开箱即用的解决方案:http://drupal.org/project/vagrant
您应该能够仅遵循下面的先决条件,然后从上述URL下载.zip并按照其中的说明进行操作,并从命令行运行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上可以正常使用的其他一些现成的Vagrant设置:


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


如果要将Solr搜索引擎作为LAMP堆栈的一部分放在VM中本地,则可能需要查看以下内容:


https://github.com/computerminds/parrot


尽管这些替代方法很棒,但我的说明仍然对帮助您了解此类设置的工作或希望使用更简单的更基本的LAMP堆栈很有用。

您需要了解如何做的小附加功能(将在此处尝试包括在内)

设置完成后登录到计算机-这是通过基于SSH的标准登录完成的。您将需要免费工具putty.exe和puttygen.exe。
目前,我尚未在此处提供如何使用SSH登录,但以后会尝试这样做。您将在此答案的末尾找到参考。

请注意,登录将使用用户vagrant

(按照下面的设置说明进行操作后)才能使用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


(键入时未显示密码。)

通过使用根用户登录来测试新密码:

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


信用: https://scottlinux.com/2011/07/22/reset-or-change-user-password-in-linux/
(文章:“在Linux中重置或更改用户密码”-这帮助我确定了操作方法。)

有什么错误吗?

尝试一下-如果您有问题,请在答案中添加注释,我将尝试解决。另请参阅最后的故障排除。

未来的任务

当前正在使用Puppet。用Chef代替Puppet来做,只是为了拓宽工作方式。这两个都是竞争者,但是有不同的方法,因此我相信:在Puppet的帮助下,我被告知您说出自己想要的内容,Puppet可能会做出一些任意决定来达到目标​​。我相信与厨师一起,您可以确定确切的步骤顺序。再次-在这里发表评论,并在必要时纠正我,

这些说明的先决条件:


Windows 7 64位
已安装的VirtualBox
已安装的无业游民
Vagrant似乎不需要单独安装Ruby和Puppet。老实说,我确实安装了这些程序来解决一些问题,但发现这些问题是另外一些问题。因此,我卸载了Ruby和Puppet并重新运行( vagrant up等),它仍然有效,因此我认为不需要这些额外的,单独的Ruby和Puppet安装。
建议使用的Vagrant和VirtualBox版本组合:VirtualBox版本4.2.12和Vagrant 1.2之前的版本(如前所述)。某些其他组合可能有效,但我尚未测试它们,因此请坚持使用此组合,除非我看到使用更高版本的明显好处。一个明显的好处就是配置速度。我在这里陈述的组合至少适用于puphpet.com设置虚拟机的路由,这非常复杂,因此我认为应该适用于此处所述的简单设置。


(信用:这些说明基于:
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)。该映像实际上等效于您传统上用于在计算机上安装OS的安装盘(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


(注意,由于我已经初始化了lucid32,所以我在编写这些指令时只使用了 vagrant init,但是对于第一次,您将必须执行上述命令。)

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.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__)


因此,您的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:\ Users \ rdavis \ lamp-project \ manifests中创建文件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(以及其他Vagrant辅助文件和文件夹结构)可以从我的GitHub存储库VagrantVMSetups中找到,网址为: https://github.com/therobyouknow/VagrantVMSetups
-请参见 justlamp文件夹-与此答案中使用的 lamp-project内容相同。)

然后运行Vagrant:

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


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

故障排除:

解决问题1:使用错误的/非法的引号-运行 vagrant 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:运行 vagrant 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

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

我自己,我根本不需要编辑php.ini。顺便说一句,这是该lucid32 VM的 /etc/php5/cli/php.ini

解决问题4:解决有关版本不匹配的VirtualBox附加警告消息

[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=1198
https://unix.stackexchange.com/questions/58216/automate-installation-of-virtualbox-guest-additio
ns-通过命令行

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:运行 The box 'base' could not be found."后看到 vagrant up错误消息。

补救?检查 config.vm.box =中包含语句 Vagrantfile等的行(请参见上面的示例 Vagrantfile),以确保它引用的是系统上实际存在的Vagrant框(操作系统安装映像)-issue命令 vagrant box list看看您有哪些盒子。

如果您按照我的指示进行操作,则应具有 lucid32框。确保您的 config.vm.box =中没有多余的 Vagrantfile等语句。坦白: config.vm.box = "base"中有一个多余的 Vagrantfile,实际上上面的几行已经完成了。我现在纠正了这个问题。

常问问题


问:什么是无家可归的盒子?答:可以认为它等同于OS安装盘,因为它是VM的基础,起点–是OS。这是一个二进制文件。
问:什么是流浪者套餐?答:VM的快照以及Vagrant从VagrantFile执行的配置提供了一种独立的方法,可以将设置分发给其他人。


参考文献:

普通流浪者资源:

What exactly do the Vagrant commands do?
-漂亮的描述

http://community.opscode.com/questions/81
http://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/
How do I associate a Vagrant project directory with an existing VirtualBox VM?
http://docs.vagrantup.com/v1/docs/getting-started/index.html

有关“无家可归的盒子”的更多信息:

http://docs.vagrantup.com/v1/docs/boxes.html
Where is Vagrant saving changes to the VM?

基于SSH密钥的登录信息(从外部登录VM框-即从主机或另一台计算机登录):

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

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

对于基于Windows SSH的VM登录:

PuTTY:免费的telnet / ssh客户端
www.chiark.greenend.org.uk/~sgtatham/putty/

腻子:

www.chiark.greenend.org.uk/~sgtatham/putty/download.html

版本历史/此答案的更新


路标和标题清理
添加了运行 config.vm.box = "lucid32"的过程,可能需要一段时间
添加了如何在VM中设置root密码
添加了缺少的步骤来下载和初始化lucid32框(相当于安装磁盘)
为我的 https://github.com/therobyouknow/VagrantVMSetups GitHub存储库添加了链接,其中包含针对此答案的Vagrant配置设置-为方便起见。
实际上,在上面的几行中,已更改 vagrant up以删除无关的 Vagrantfile,而 config.vm.box = "base"已经完成。如果遇到错误 config.vm.box = "lucid32",这将有所帮助。还添加了一个新的故障排除项目,解释该问题。
为那些想要基于Drupal的LAMP VM的人添加了其他现成的解决方案: http://drupal.org/project/vagrant参见上面的更多说明。
2013-07-10:对语法的轻微调整,以撰写本指南的原因。更新后,现在出版了O'Reilly的Vagrant书。已添加链接到 https://puphpet.com/-在线Vagrant配置器脚本生成器(非常好!)。添加了到VeeWee工具的链接,该工具用于从任何.ISO Linux发行版(标准安装光盘)生成Vagrant .box文件
2013-10-14更新了“他们似乎不做什么”项目符号,并指出了Vagrant版本-本指南使用了Vagrant 1(以及原因)。声明与puphpet.com一起使用的Vagrant 2也使用puphpet.com链接到我的文档,以为Drupal设置Vagrant VM。
2013-10-21更新,以声明要使用的VirtualBox版本和Vagrant的组合:VirtualBox版本4.2.12和Vagrant 1.2.2。某些其他组合也可以使用,但我尚未对其进行测试,因此请坚持使用此组合,除非我看到使用更高版本的明显好处。一个明显的好处就是配置速度。前往“ Vagrant VM”部分的其他方法。更新后表示此解决方案和其他解决方案与平台无关,并且可以在PC,Mac或Linux上运行。
2013年10月23日更新了用于本指南的Vagrant版本(即v1.2之前的版本(即Vagrant 2之前的版本))和另一种方法puphpet.com(v1.2.2-相比之下,它是Vagrant 2发行版)的更新。 )
2013-12-03更正了Vagrant API版本说明以及Vagrant软件版本中的哪个API版本。添加了一些其他的,全面的Vagrant设置。

关于windows-7 - 获取在Vagrant VM(在Windows 7主机下)上运行的LAMP堆栈的完整说明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14608875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com