Last active
November 23, 2017 02:01
-
-
Save Antnee/1d9afbd4e6f1cbd0d237 to your computer and use it in GitHub Desktop.
Vagrant PHP 7 Apache 2.4 XDebug
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- mode: ruby -*- | |
# vi: set ft=ruby : | |
# All Vagrant configuration is done below. The "2" in Vagrant.configure | |
# configures the configuration version (we support older styles for | |
# backwards compatibility). Please don't change it unless you know what | |
# you're doing. | |
Vagrant.configure(2) do |config| | |
# The most common configuration options are documented and commented below. | |
# For a complete reference, please see the online documentation at | |
# https://docs.vagrantup.com. | |
# Every Vagrant development environment requires a box. You can search for | |
# boxes at https://atlas.hashicorp.com/search. | |
config.vm.box = "rasmus/php7dev" | |
# Disable automatic box update checking. If you disable this, then | |
# boxes will only be checked for updates when the user runs | |
# `vagrant box outdated`. This is not recommended. | |
# config.vm.box_check_update = false | |
# Create a forwarded port mapping which allows access to a specific port | |
# within the machine from a port on the host machine. In the example below, | |
# accessing "localhost:8080" will access port 80 on the guest machine. | |
config.vm.network "forwarded_port", guest: 80, host: 8080 | |
# Create a private network, which allows host-only access to the machine | |
# using a specific IP. | |
# config.vm.network "private_network", ip: "192.168.33.10" | |
# Create a public network, which generally matched to bridged network. | |
# Bridged networks make the machine appear as another physical device on | |
# your network. | |
# config.vm.network "public_network" | |
# Share an additional folder to the guest VM. The first argument is | |
# the path on the host to the actual folder. The second argument is | |
# the path on the guest to mount the folder. And the optional third | |
# argument is a set of non-required options. | |
# config.vm.synced_folder "../data", "/vagrant_data" | |
# Provider-specific configuration so you can fine-tune various | |
# backing providers for Vagrant. These expose provider-specific options. | |
# Example for VirtualBox: | |
# | |
# config.vm.provider "virtualbox" do |vb| | |
# # Display the VirtualBox GUI when booting the machine | |
# vb.gui = true | |
# | |
# # Customize the amount of memory on the VM: | |
# vb.memory = "1024" | |
# end | |
# | |
# View the documentation for the provider you are using for more | |
# information on available options. | |
# Define a Vagrant Push strategy for pushing to Atlas. Other push strategies | |
# such as FTP and Heroku are also available. See the documentation at | |
# https://docs.vagrantup.com/v2/push/atlas.html for more information. | |
# config.push.define "atlas" do |push| | |
# push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME" | |
# end | |
# Enable provisioning with a shell script. Additional provisioners such as | |
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the | |
# documentation for more information about their specific syntax and use. | |
config.vm.provision "shell", inline: <<-SHELL | |
apt-get update | |
apt-get install -y apache2 | |
apt-get autoremove -y | |
service nginx stop | |
rm /etc/rc*/*nginx | |
update-rc.d apache2 defaults | |
makephp 7 | |
newphp 70 | |
ln -s /vagrant /var/www/vagrant | |
mkdir -p /vagrant/public | |
rm -rf /etc/apache2/sites-enabled/000-default.conf | |
sed 's|/var/www/default|/var/www/vagrant/public|' < /etc/apache2/sites-available/000-default.conf > /etc/apache2/sites-available/001-default.conf | |
awk '/AllowOverride None/{c+=1}{if(c==2){sub("None", "All",$0)};print}' /etc/apache2/sites-available/001-default.conf > /etc/apache2/sites-available/001-default.conf.next | |
rm -rf /etc/apache2/sites-available/001-default.conf | |
mv /etc/apache2/sites-available/001-default.conf.next /etc/apache2/sites-available/001-default.conf | |
ln -s /etc/apache2/sites-available/001-default.conf /etc/apache2/sites-enabled/001-default.conf | |
git clone https://github.com/xdebug/xdebug.git | |
cd xdebug | |
phpize | |
./configure --enable-xdebug | |
make | |
cp modules/xdebug.so /usr/local/lib/php/extensions/ | |
echo "zend_extension=\"/usr/local/lib/php/extensions/xdebug.so\"" > /etc/php7/conf.d/xdebug.ini | |
a2enmod rewrite | |
apachectl restart | |
SHELL | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
PHP 7 Apache 2.4 XDebug Vagrantfile
About
This is based on Rasmus Lerdorf's PHP 7 dev box. However, I've defaulted this one to use Apache 2 instead of nginx. It will also clone the XDebug repo and build and install it.
By default, the directory that you have your Vagrantfile in will get a
/public
directory (if it doesn't have one already) and will become the web-root.Provisioning Warning!!!
Note that provisioning will reset any settings that you add to
/etc/php7/conf.d/xdebug.ini
so if you want to add any additional settings you'll probably want to use a different file, or comment out the line that writes to this fileLikewise, I've made changes to
/etc/apache2/sites-available/000-default.conf
and saved it to/etc/apache2/sites-available/001-default.conf
. The/etc/apache2/sites-enabled/000-default.conf
symlink is removed and new one is created that points to/etc/apache2/sites-available/001-default.conf
. As a result, if you use either of these files your settings may well be lost when you run avagrant provision
, so I suggest that you either use a different config, or comment out the lines that refer to these files once you've performed the initial provisioning.Forwarded Ports
You will find the following config for forwarded ports:
With this your site will be accessible over
http://localhost:8080
by default. Change this if you want it to be something elseUsing with Windows
If you want to run this on Windows with VirtualBox, you may need to ensure that you have the local policy that enables the creation of symlinks and that VirtualBox allows it: http://www.ahtik.com/blog/fixing-your-virtualbox-shared-folder-symlink-error/