Skip to content

Instantly share code, notes, and snippets.

@Antnee
Last active November 23, 2017 02:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Antnee/1d9afbd4e6f1cbd0d237 to your computer and use it in GitHub Desktop.
Save Antnee/1d9afbd4e6f1cbd0d237 to your computer and use it in GitHub Desktop.
Vagrant PHP 7 Apache 2.4 XDebug
# -*- 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
@Antnee
Copy link
Author

Antnee commented Jan 15, 2016

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 file

Likewise, 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 a vagrant 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:

config.vm.network "forwarded_port", guest: 80, host: 8080

With this your site will be accessible over http://localhost:8080 by default. Change this if you want it to be something else

Using 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/

Run at cmd prompt:

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

Verify by running:

VBoxManage getextradata YOURVMNAME enumerate

If your user belongs to Administrators group then start VirtualBox with "Run as Administrator"!

If user is not in Administrators group

By default Windows 7 security policy does not allow creating symlinks as it's a potential security threat. Run "secpol.msc" and navigate to "Local Policies-User Rights Assignments" and add your user to "Create symbolic links"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment