我四处寻找,我找不到答案,可能是因为Homestead是如此的新,但我想知道:在Laravel Homestead,是否有一种方法可以让'流浪汉'通过在'Homestead中定义的每个项目的配置脚本运行。yaml文件?
要明确,我在Homestead中定义了一个项目。yaml,它有一个bash脚本,我需要运行它来简化设置。这可能吗?
也许,在项目根,有另一个Homestead。定义初始化流浪箱时要运行的bash脚本的Yaml文件?
或者是一个自定义编写的bash脚本,在每个项目的根目录中运行.sh文件?什么好主意吗?
根据isimmon的回答,以下是我如何为Homestead v2和Homestead v1的早期版本创建一个工作项目特定的设置脚本
介绍:
我把我所有的项目都保存在我的homestead repo之外的一个projects文件夹中,这个文件夹名为projects:
<<p> 文件夹结构/strong>:- /outside-homestead/项目/myapp1,
- /outside-homestead/项目/myapp2,
- 等等…
在每个项目中,我都有一个名为provision的文件夹,其中包含子文件夹bash/outside-homestead/项目/myapp1/规定/bash
在每个bash文件夹中,我放置了一个包含命令的setup.sh文件:
- outside-homestead/项目/myapp1/规定/bash setup.sh
#!/bin/sh
echo "==============================================="
echo "Project - DEPLOYMENT"
echo "==============================================="
echo "-----------------------------------------------"
echo "Project - Going down for maintenance."
echo "-----------------------------------------------"
php artisan down
echo "-----------------------------------------------"
echo "Project - Down for maintenance."
echo "-----------------------------------------------"
echo "Project - Composer is installing project."
echo "-----------------------------------------------"
composer install
echo "-----------------------------------------------"
echo "Project - Composer is updating project."
echo "-----------------------------------------------"
composer update
echo "-----------------------------------------------"
echo "Project - Composer is updating class autoload."
echo "-----------------------------------------------"
composer dump-autoload
echo "-----------------------------------------------"
echo "Project - Application is being optimized."
echo "-----------------------------------------------"
php artisan optimize
echo "-----------------------------------------------"
echo "Project - Artisan is migrating DB."
echo "-----------------------------------------------"
php artisan migrate --seed --force
echo "-----------------------------------------------"
echo "Project - Coming up from maintenance."
echo "-----------------------------------------------"
php artisan up
echo "-----------------------------------------------"
echo "Project - LIVE."
echo "-----------------------------------------------"
当然,您可以根据项目的复杂程度选择简单或复杂的部署文件。
在homestead安装的scripts文件夹中创建2个文件:project_setup.sh和server_setup.sh。文件project_setup.sh用于调用和运行项目特定的setup.sh文件。
脚本/projects_setup.sh
#!/bin/sh
cd $4
dos2unix $3
/bin/bash $3
server_setup.sh文件用于运行所有开发项目所需的通用命令,例如启用XDebug, nginx上传设置,数据库创建/设置(仅v1)和php配置。
脚本/server_setup.sh
#!/bin/sh
echo "============================================"
echo "Homestead - PROVISIONING"
echo "============================================"
env VAR='() { :;}; echo Bash is vulnerable!' bash -c "echo Bash is safe"
sudo apt-get update -y -q
sudo apt-get install php5-intl -y -q
echo "-------------------------------------------"
echo "Homestead - Enabling XDebug."
echo "-------------------------------------------"
echo ''n ' >> /etc/php5/fpm/conf.d/20-xdebug.ini
echo 'xdebug.remote_port=9000' >> /etc/php5/fpm/conf.d/20-xdebug.ini
echo 'xdebug.remote_mode=req' >> /etc/php5/fpm/conf.d/20-xdebug.ini
echo 'xdebug.remote_host=127.0.0.1' >> /etc/php5/fpm/conf.d/20-xdebug.ini
echo 'xdebug.remote_handler=dbgp' >> /etc/php5/fpm/conf.d/20-xdebug.ini
echo 'xdebug.remote_connect_back=1' >> /etc/php5/fpm/conf.d/20-xdebug.ini
echo 'xdebug.remote_enable=1' >> /etc/php5/fpm/conf.d/20-xdebug.ini
echo 'xdebug.remote_autostart=0' >> /etc/php5/fpm/conf.d/20-xdebug.ini
echo 'xdebug.max_nesting_level=400' >> /etc/php5/fpm/conf.d/20-xdebug.ini
echo 'xdebug.idekey=PHPSTORM' >> /etc/php5/fpm/conf.d/20-xdebug.ini
echo 'xdebug.default_enable=1' >> /etc/php5/fpm/conf.d/20-xdebug.ini
echo 'xdebug.cli_color=1' >> /etc/php5/fpm/conf.d/20-xdebug.ini
echo 'xdebug.scream=0' >> /etc/php5/fpm/conf.d/20-xdebug.ini
echo 'xdebug.show_local_vars=1' >> /etc/php5/fpm/conf.d/20-xdebug.ini
echo ''n ' >> /etc/php5/fpm/conf.d/20-xdebug.ini
echo "------------------------------------------"
echo "Homestead - Enabled XDebug."
echo "------------------------------------------"
etc....
接下来,您要确保在输入vagrant/homestead up时调用您的文件。为此,您需要稍微修改一下scripts/homestead。rb。查找这些行:
# Configure All Of The Server Environment Variables
if settings.has_key?("variables")
settings["variables"].each do |var|
config.vm.provision "shell" do |s|
s.inline = "echo '"'nenv[$1] = '$2''" >> /etc/php5/fpm/php-fpm.conf && service php5-fpm restart"
s.args = [var["key"], var["value"]]
end
end
end
# Update Composer On Every Provision
config.vm.provision "shell" do |s|
s.inline = "/usr/local/bin/composer self-update"
end
在本节之后添加以下代码
# Custom Server provisioning
config.vm.provision "shell" do |s|
s.inline = "dos2unix /vagrant/scripts/server_setup.sh"
end
config.vm.provision "shell" do |s|
s.inline = "bash /vagrant/scripts/server_setup.sh"
end
# Custom Project provisioning
settings["sites"].each do |site|
config.vm.provision "shell" do |s|
s.path = "./scripts/project_setup.sh"
s.args = [site["map"], site["to"], site["provisionScript"], site["appHome"]]
end
end
Homestead 2可以在"后面添加自定义脚本。[HOME].homestead'after.sh文件。该文件用于在整个homestead配置过程结束后调用脚本,因此将在server_setup.sh和循环的project_setup.sh 已经运行之后运行。v1 &v2在宅基地。关于数据库的Yaml文件。您只需在Homestead.yaml:
中添加一个数据库列表,而不是在server_setup中放置数据库创建代码。databases:
- homestead
- project1db
- project2db
对于Homestead 2 &宅基地1剩下的宅基地。Yaml也是一样。要启用此"自定义",请将以下两个变量添加到Homestead.yaml的sites部分:
- provisionScript
- appHome
Homestead的位置。Yaml是版本特定的:
- 宅基地v2 =>(家里).homestead ' Homestead.yaml
- 宅基地v1 =>/Homestead.yaml
Homestead.yaml
sites:
- map: vm.myapp1.local
to: /home/vagrant/Code/myapp1/public
provisionScript: /home/vagrant/Code/myapp1/provision/bash/setup.sh
appHome: /home/vagrant/Code/myapp1
- map: vm.myapp2.local
to: /home/vagrant/Code/myapp2/public
provisionScript: /home/vagrant/Code/myapp2/provision/bash/setup.sh
appHome: /home/vagrant/Code/myapp2
现在当你启动vagrant/homestead时,vagrant将运行server_setup.sh一次,并循环project_setup.sh来调用项目特定的setup.sh文件。
您将看到作为流浪运行的输出。因此,为了便于阅读和提供详细的文档,您需要划分每个活动的起始位置。一个值得收藏的好教程是:http://scotch.io/tutorials/php/getting-started-with-laravel-homestead
在scripts/homestead。看来您可以从homestead.yaml
访问站点地图。使用下面的yaml文件'sites'部分
sites:
- map: testapp.dev
to: /home/vagrant/Code/testapp/public
- map: testapp2.dev
to: /home/vagrant/Code/testapp2/public
从"配置Nginx站点"部分如何在homestead中循环使用"map"answers"to"。在Yaml中,您可以将这些值传递给自己的脚本。
#test calling script and sending the site domain and dir path as args
settings["sites"].each do |site|
config.vm.provision "shell" do |s|
s.path = "./scripts/foo.sh"
s.args = [site["map"], site["to"]]
end
end
脚本/foo.sh
#!/usr/bin/env bash
echo "site $1 is mapped to $2"
结果:==> default: Running provisioner: shell...
default: Running: C:/Users/lotus/AppData/Local/Temp/vagrant-shell20140525-3876-odm1f6.sh
==> default: site testapp.dev is mapped to /home/vagrant/Code/testapp/public
==> default: Running provisioner: shell...
default: Running: C:/Users/lotus/AppData/Local/Temp/vagrant-shell20140525-3876-14jbkwm.sh
==> default: site testapp2.dev is mapped to /home/vagrant/Code/testapp2/public
我对shell脚本不够熟悉,无法提供任何进一步的信息,但似乎您可以将此作为起点。
更新:你也可以添加自己的参数到站点部分,并使用相同的方式
sites:
- map: testapp.dev
to: /home/vagrant/Code/testapp/public
foo: "hello from foo"
- map: testapp2.dev
foo: "hello from foo 2"
to: /home/vagrant/Code/testapp2/public
然后在homestead中通过s.args = [site["map"], site["to"], site["foo"]]。在foo.sh中将它们回显为arg 3" $3",这对于在每个站点的基础上做一些事情可能很有帮助。
给你
homestead halt && homestead up --provision