我四处寻找并找不到答案,可能是因为 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 存储库外的项目文件夹中,名为项目的文件夹中:
文件夹结构 :

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

  • 在每个项目中,我有一个文件夹,我称之为配置,其中包含一个子文件夹 bash
    /outside-homestead/projects/myapp1/provision/bash
    在每个 bash 文件夹中,我将一个 setup.sh 文件与我的命令一起放置:
  • 外部宅基地/项目/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 "-----------------------------------------------"
    
    当然,您可以根据项目的复杂程度,根据需要使用此部署文件变得简单或复杂。
    在 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 的位置是特定于版本的:
  • Homestead 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 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/

    10-11 15:39