我四处寻找并找不到答案,可能是因为 Homestead 太新了,但我想知道:在 Laravel Homestead 中,是否有一种方法可以让“vagrant up”运行“vagrant up”中定义的每个项目的配置脚本Homestead.yaml'文件?
需要明确的是,我在 Homestead.yaml 中定义了一个项目,该项目有一个 bash 脚本,我需要运行该脚本以简化设置。这有可能吗?
也许,在项目根目录中,有另一个 Homestead.yaml 文件,它定义了在初始化 vagrant box 时要运行的任何 bash 脚本?
或者也许是一个自定义编写的 bash 脚本,它在每个项目的根目录中运行一个 .sh 文件?有任何想法吗?
最佳答案
根据 isimmons 的回答,这是我为 Homestead v2 和 Homestead v1 的早期版本实际创建一个工作项目特定设置脚本的方法
介绍:
我将所有项目保存在 homestead 存储库外的项目文件夹中,名为项目的文件夹中:
文件夹结构 :
在每个项目中,我有一个文件夹,我称之为配置,其中包含一个子文件夹 bash
/outside-homestead/projects/myapp1/provision/bash
在每个 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 安装的脚本文件夹中创建 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 的“after”文件中添加自定义脚本。该文件用于在整个宅基地配置过程结束后调用脚本,因此将在 server_setup.sh 和循环的 project_setup.sh 已经运行 之后运行。 v1 和 v2 之间的另一个区别在于 Homestead.yaml 文件中关于数据库的内容。无需在 server_setup 中放置数据库创建代码,您只需在 Homestead.yaml 中添加一个数据库列表:databases:
- homestead
- project1db
- project2db
对于 Homestead 2 和 Homestead 1,Homestead.yaml 的其余部分是相同的。要启用此“自定义”,请将这 2 个变量添加到 Homestead.yaml 的站点部分:provisionScript 变量是你的 setup.sh 文件在 vagrant 中的完整路径,而不是在你的桌面主机上。这使得操作系统独立,这也是虚拟机的目的。
appHome 变量是项目的完整路径。你希望这个变量在你的部署脚本之外,因为你的部署脚本的位置应该是独立于服务器的,并且这个变量是 Homestead 特定的。基本上,您应该能够将 setup.sh 的内容复制到 Laravel Forge 的部署脚本编辑器(等等),而无需更改内容(很多)。
Homestead.yaml 的位置是特定于版本的:
宅基地.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 up 时,Vagrant 将运行 server_setup.sh 一次并循环 project_setup.sh 以调用您项目特定的 setup.sh 文件。您将看到 vagrant 运行时的输出。因此,为了便于阅读和提供详细的文档,您需要划定每个事件的开始位置。一个很好的书签教程,我从中大量借用,是:http://scotch.io/tutorials/php/getting-started-with-laravel-homestead
关于php - 在 Laravel Homestead 中为每个项目运行配置脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23841089/