gpt4 book ai didi

php - 在 Laravel Homestead 中为每个项目运行配置脚本

转载 作者:行者123 更新时间:2023-11-29 09:47:51 24 4
gpt4 key购买 nike

我四处搜索但找不到答案,可能是因为 Homestead 太新了,但我想知道:在 Laravel Homestead 中,是否有一种方法可以让“vagrant up”通过为每个定义的项目配置脚本运行在“Homestead.yaml”文件中?

需要说明的是,我在 Homestead.yaml 中定义了一个项目,其中包含一个 bash 脚本,我需要运行该脚本以简化设置。这有可能吗?

也许,在项目根目录中,有另一个 Homestead.yaml 文件定义了在初始化 vagrant box 时要运行的任何 bash 脚本?

或者也许是一个自定义编写的 bash 脚本,它在每个项目的根目录中运行一个 .sh 文件?有什么想法吗?

最佳答案

根据 isimmons 的回答,这里是我如何为 Homestead v2Homestead v1

创建一个工作项目特定的设置脚本

介绍:

我将我所有的项目都保存在我的宅基地存储库之外的一个项目文件夹中,该文件夹位于一个名为 projects 的文件夹中:

文件夹结构:

  • /outside-homestead/projects/myapp1,
  • /outside-homestead/projects/myapp2,
  • 等...

在每个项目中,我都有一个文件夹,我称之为 provision,其中有一个子文件夹 bash/outside-homestead/projects/myapp1/provision/bash

在每个 bash 文件夹中,我用我的命令放置了一个 setup.sh 文件:

  • outside-homestead/projects/myapp1/provision/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 "-----------------------------------------------"

当然,您可以根据项目的复杂程度,根据需要使用此部署文件进行简单或复杂的设置。

在您的宅基地安装的脚本文件夹中创建 2 个文件:project_setup.sh 和 server_setup.sh。文件 project_setup.sh 用于调用和运行项目特定的 setup.sh 文件。

scripts/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 中的完整路径,而不是在您的桌面主机上。这使事物独立于操作系统,这无论如何都是 VM 的目的。

appHome 变量是您项目的完整路径。你希望这个变量在你的部署脚本之外,因为你的部署脚本的位置应该是服务器独立的,而且这个变量是特定于 Homestead 的。基本上,您应该能够将 setup.sh 的内容复制到 Laravel Forge 的部署脚本编辑器(等等),而无需更改内容(太多)。

Homestead.yaml 的位置是特定于版本的:

  • 家园 v2 => [HOME].homestead\Homestead.yaml
  • Homestead v1 =>/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 时,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/

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