如何在 vagrant up 上自动启用 Homestead 中的 php 扩展

How to automatically enable php extensions in Homestead on vagrant up

我在 Homestead 中使用 Laravel 5.3,在 VirtualBox 上使用 Vagrant 1.8.7 运行。

我需要启用一些 php 扩展。

我知道我可以通过 ssh 进入框并编辑 php.ini 以启用扩展,但这似乎是一种非常反流浪的方式。

我想告诉 Vagrant 为 box 提供特定的 php 扩展,这样我就可以简单地调用 vagrant up --provision 然后 box 就可以使用了(有点 vagrant 对吧? )

那么,我们如何在 vagrant up 上自动启用 Homestead 中的 php 扩展?

您应该首先使用 ssh 登录到 Homestead 服务器(可能您已经知道这一点 - “vagrant ssh”)。

然后转到“/etc/php/7.0/fpm/” 这个位置也有 cli "/etc/php/7.0/cli/" 使用“sudo vi php.ini”编辑它(esc 和 :wq 以保存更改)。

那你应该重启nginx:

sudo nginx -s reload"

然后重启php-fpm:

sudo service php7.0-fpm restart" 

如果您不确定您的宅基地是PHP 5.x 还是7.x,请使用

find / -name php.ini

查找 php.ini——您可能会得到 2 或 3 个结果。

经过一些修补,下面是我想出的。我不保证这是 正确的方法 只是,就我而言,它似乎有效:

找到你installed homestead时生成的after.sh。对我来说,在 Mac El Capitain 上,文件是在 ~/.homestead/after.sh 创建的,我想在 windows.

上的类似位置有一个 .bat

不要编辑错误~/Homestead/src/stubs/after.sh,那是宅基地安装的模板文件,不是你实际生成的副本。


编辑after.sh

将以下行添加到 after.sh(这是我的整个文件,只有前 5 行注释行在默认文件中):

#!/bin/sh

# If you would like to do some extra provisioning you may
# add any commands you wish to this file and they will
# be run after the Homestead machine is provisioned.

# in the below --assume-yes is to avoid confirms [y/N]
# DEBIAN_FRONTEND=noninteractive is to avoid a big menu asking if it's ok to 
# overwrite the php.ini file, may make --assume-yes redundant, not sure

# run apt-get update first, without it I was getting errors not finding the extensions 
sudo DEBIAN_FRONTEND=noninteractive apt-get --assume-yes update

# load any extensions you like here 
sudo DEBIAN_FRONTEND=noninteractive apt-get --assume-yes install php-xdebug 
sudo DEBIAN_FRONTEND=noninteractive apt-get --assume-yes install php7.0-ldap # update to php7.2-ldap if using php 7.2 etc...

# enable xdebug via cli
sudo phpenmod -s cli xdebug

# restart php and nginx
sudo service php7.3-fpm restart && sudo service nginx restart

如果你在心理上不知道你需要的扩展的确切名称(我不知道)你可以使用 sudo apt-cache search php7-* 或类似的来列出可用的


无业游民销毁

现在,如果你有 Homestead,在终端中,cd 到你的 Homestead 目录,对我来说 cd ~/Homestead 然后 运行 vagrant destroy


流浪起来

虽然在里面 /Homestead 运行 vagrant up --provision


检查安装

检查扩展是否正确安装,同时在 /Homestead 运行 这两个命令中:

vagrant ssh

php -r "print_r(get_loaded_extensions());"

我的输出(添加了 33 和 61):

DoDSoftware:Homestead DOoDSoftware$ vagrant ssh
Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-22-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
vagrant@homestead:~$ php -r "print_r(get_loaded_extensions());"
Array
(
    [0] => Core
    [1] => date
    [2] => libxml
    [3] => openssl
    [4] => pcre
    [5] => zlib
    [6] => filter
    [7] => hash
    [8] => pcntl
    [9] => Reflection
    [10] => SPL
    [11] => session
    [12] => standard
    [13] => mysqlnd
    [14] => PDO
    [15] => xml
    [16] => apcu
    [17] => apc
    [18] => bcmath
    [19] => calendar
    [20] => ctype
    [21] => curl
    [22] => dom
    [23] => mbstring
    [24] => fileinfo
    [25] => ftp
    [26] => gd
    [27] => gettext
    [28] => iconv
    [29] => igbinary
    [30] => imap
    [31] => intl
    [32] => json
    [33] => ldap
    [34] => exif
    [35] => mcrypt
    [36] => msgpack
    [37] => mysqli
    [38] => pdo_mysql
    [39] => pdo_pgsql
    [40] => pdo_sqlite
    [41] => pgsql
    [42] => Phar
    [43] => posix
    [44] => readline
    [45] => shmop
    [46] => SimpleXML
    [47] => soap
    [48] => sockets
    [49] => sqlite3
    [50] => sysvmsg
    [51] => sysvsem
    [52] => sysvshm
    [53] => tokenizer
    [54] => wddx
    [55] => xmlreader
    [56] => xmlwriter
    [57] => xsl
    [58] => zip
    [59] => memcached
    [60] => blackfire
    [61] => Zend OPcache
    [62] => xdebug
)

就像我在开头所说的那样,我不能说这是正确的方法,但到目前为止它对我有用。

如果有人发现这种方法有缺陷,请随时告诉我我做错了:)

万一还有这个需要:

=> https://guides.wp-bullet.com/install-apcu-object-cache-for-php7-for-wordpress-ubuntu-16-04/

=> 运行 第 3 个命令:

sudo apt-get update
sudo apt-get install php7.0-apcu -y
sudo service php7.0-fpm restart

或简单地添加到 after.sh:

sudo apt-get install php7.x-apcu -y