在vagrant中托管一个mvc应用程序

时间:2014-04-04 22:49:42

标签: networking laravel-4 apache2 vagrant

也许这只是因为它是一个星期五而且是在关闭时间之后但是我已经坚持了一个小时并且不能完全正常工作。我正在使用Vagrant和我们正在构建的应用程序 - git repo包含Vagrantfile和Laravel应用程序。我们有/deploy/tests/src目录;实际的Laravel框架位于/src。在我的本地计算机上,我已经设置了一个VirtualHost,让我通过浏览localhost:9000来访问该应用程序:

Listen 8081
<VirtualHost *:8081>
    DocumentRoot "/Application/mamp/apache2/htdocs/myapp/src/public"
    ServerName localhost
    <Directory "/Application/mamp/apache2/htdocs/myapp/src/public">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

像魅力一样工作。所以我将相关位复制到我的Vagrant设置中:

Listen 8081
<VirtualHost *:8081>
    DocumentRoot "/var/www/src/public"
    ServerName localhost
    <Directory "/var/www/src/public">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

我的Vagrantfile看起来像这样:

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

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.box = "hashicorp/precise64"
    config.vm.provision :shell, :path => "vagrant/main.sh"
    config.vm.network "private_network", ip: "192.168.100.101", virtualbox__intnet: true
end

我的vagrant/main.sh文件如下所示:

#!/usr/bin/env bash

apt-get update

echo mysql-server-5.5 mysql-server/root_password password notthepassword | debconf-set-selections
echo mysql-server-5.5 mysql-server/root_password_again password notthepassword | debconf-set-selections

apt-get install -y mysql-common mysql-server mysql-client

apt-get install -y apache2

apt-get install -y php5 libapache2-mod-php5
apt-get install -y php5-mysql php5-curl php-pear php5-imagick php5-mcrypt php5-memcache

apt-get install -y vim

a2enmod rewrite
sed -i -e 's/AllowOverride None/AllowOverride All/g' /etc/apache2/sites-available/default
cp /vagrant/vagrant/bgs /etc/apache2/sites-available
a2ensite bgs
/etc/init.d/apache2 restart

rm -rf /var/www
ln -fs /vagrant /var/www

一旦它全部启动并运行,我就可以ping 192.168.100.101。但它没有提供任何HTML - 如果我在Chrome浏览器中浏览到该地址,则会收到“无数据接收”错误。如果我转到192.168.100.101:8081,则说Chrome无法找到该地址。如何配置所有内容以便一起玩,让我克隆我的仓库,运行vagrant up,然后浏览到192.168.100.101:8081并查看我的应用程序?

(另外:我甚至在那里添加了一个端口转发线,从guest:8081转到host:8081。这产生了一个HTTP 500错误(“服务器遇到内部错误或配置错误,但无法完成你的请求。“)。不确定这是否有进展。

1 个答案:

答案 0 :(得分:1)

事实证明,有很多事情同时发生:

  • 我使用的是Ubuntu 12 LTS,它有一个旧版本的PHP来运行Laravel的边缘版本。安装升级版本的PHP修复了该文件。
  • virtualbox__intnet指令错了。不知何故。将整个Vagrantfile行更改为:config.vm.network "private_network", :ip => "192.168.100.101", :auto_network => true
  • 不同的端口,在各种符号链接目录和apache配置目录中混乱......不必要地复杂。

这是我的最终设置,以防其他人有这个确切的具体问题:

Vagrantfile:

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

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.box = "puppetlabs/ubuntu-13.10-64-puppet"
    config.vm.provision :shell, :path => "vagrant/main.sh"
    config.vm.network "private_network", :ip => "192.168.100.101", :auto_network => true
end

main.sh:

#!/usr/bin/env bash

apt-get update

echo mysql-server-5.5 mysql-server/root_password password f6b6rWixbu99CtQ | debconf-set-selections
echo mysql-server-5.5 mysql-server/root_password_again password f6b6rWixbu99CtQ | debconf-set-selections

apt-get install -y mysql-common mysql-server mysql-client apache2 php5 libapache2-mod-php5 php5-mysql php5-curl php-pear php5-imagick php5-mcrypt php5-memcache php5-json

a2enmod rewrite
sed -i -e 's/AllowOverride None/AllowOverride All/g' /etc/apache2/sites-available/default
cp /vagrant/vagrant/app.conf /etc/apache2/sites-available
a2ensite app.conf

#fix for ubuntu 13.10: http://stackoverflow.com/questions/19446679/mcrypt-not-present-after-ubuntu-upgrade-to-13-10
ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/mcrypt.ini
php5enmod mcrypt
#/fix

#json licensing snafu: http://stackoverflow.com/questions/18239405/php-fatal-error-call-to-undefined-function-json-decode
php5enmod json
#/snafu

#may need to be done on the host OS, not the guest: http://stackoverflow.com/questions/17954625/services-json-failed-to-open-stream-permission-denied-in-laravel-4
chmod -R 0777 /vagrant/src/app/storage

rm -rf /var/www
ln -fs /vagrant/src/public /var/www

/etc/init.d/apache2 restart

复制的Apache站点配置:

<VirtualHost *:80>
    DocumentRoot "/var/www"
    ServerName localhost
    <Directory "/var/www">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

(顺便说一句,虽然这个配置与默认的apache配置非常相似,但我发现为我正在处理的任何项目创建配置更简单,更具可扩展性,如果我需要扩展选项,一个未来的项目,我可以。)