Skip to content

Instantly share code, notes, and snippets.

@rrosiek
Last active June 5, 2023 07:08
Show Gist options
  • Save rrosiek/8190550 to your computer and use it in GitHub Desktop.
Save rrosiek/8190550 to your computer and use it in GitHub Desktop.
Vagrant provision script for php, Apache, MySQL, phpMyAdmin, Laravel, and javascript helpers. Tested with Ubuntu 16.04.
#! /usr/bin/env bash
###
#
# install_mysql.sh
#
# This script assumes your Vagrantfile has been configured to map the root of
# your application to /vagrant and that your web root is the "public" folder
# (Laravel standard). Standard and error output is sent to
# /vagrant/vm_build.log during provisioning.
#
###
# Variables
DBHOST=localhost
DBNAME=dbname
DBUSER=dbuser
DBPASSWD=test123
echo -e "\n--- Mkay, installing now... ---\n"
echo -e "\n--- Updating packages list ---\n"
apt-get -qq update
echo -e "\n--- Install base packages ---\n"
apt-get -y install vim curl build-essential python-software-properties git >> /vagrant/vm_build.log 2>&1
echo -e "\n--- Add Node 6.x rather than 4 ---\n"
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - >> /vagrant/vm_build.log 2>&1
echo -e "\n--- Updating packages list ---\n"
apt-get -qq update
# MySQL setup for development purposes ONLY
echo -e "\n--- Install MySQL specific packages and settings ---\n"
debconf-set-selections <<< "mysql-server mysql-server/root_password password $DBPASSWD"
debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $DBPASSWD"
debconf-set-selections <<< "phpmyadmin phpmyadmin/dbconfig-install boolean true"
debconf-set-selections <<< "phpmyadmin phpmyadmin/app-password-confirm password $DBPASSWD"
debconf-set-selections <<< "phpmyadmin phpmyadmin/mysql/admin-pass password $DBPASSWD"
debconf-set-selections <<< "phpmyadmin phpmyadmin/mysql/app-pass password $DBPASSWD"
debconf-set-selections <<< "phpmyadmin phpmyadmin/reconfigure-webserver multiselect none"
apt-get -y install mysql-server phpmyadmin >> /vagrant/vm_build.log 2>&1
echo -e "\n--- Setting up our MySQL user and db ---\n"
mysql -uroot -p$DBPASSWD -e "CREATE DATABASE $DBNAME" >> /vagrant/vm_build.log 2>&1
mysql -uroot -p$DBPASSWD -e "grant all privileges on $DBNAME.* to '$DBUSER'@'localhost' identified by '$DBPASSWD'" > /vagrant/vm_build.log 2>&1
echo -e "\n--- Installing PHP-specific packages ---\n"
apt-get -y install php apache2 libapache2-mod-php php-curl php-gd php-mysql php-gettext >> /vagrant/vm_build.log 2>&1
echo -e "\n--- Enabling mod-rewrite ---\n"
a2enmod rewrite >> /vagrant/vm_build.log 2>&1
echo -e "\n--- Allowing Apache override to all ---\n"
sed -i "s/AllowOverride None/AllowOverride All/g" /etc/apache2/apache2.conf
echo -e "\n--- Setting document root to public directory ---\n"
rm -rf /var/www/html
ln -fs /vagrant/public /var/www/html
echo -e "\n--- We definitly need to see the PHP errors, turning them on ---\n"
sed -i "s/error_reporting = .*/error_reporting = E_ALL/" /etc/php/7.0/apache2/php.ini
sed -i "s/display_errors = .*/display_errors = On/" /etc/php/7.0/apache2/php.ini
echo -e "\n--- Restarting Apache ---\n"
service apache2 restart >> /vagrant/vm_build.log 2>&1
echo -e "\n--- Installing Composer for PHP package management ---\n"
curl --silent https://getcomposer.org/installer | php >> /vagrant/vm_build.log 2>&1
mv composer.phar /usr/local/bin/composer
echo -e "\n--- Installing NodeJS and NPM ---\n"
apt-get -y install nodejs >> /vagrant/vm_build.log 2>&1
echo -e "\n--- Installing javascript components ---\n"
npm install -g gulp bower >> /vagrant/vm_build.log 2>&1
echo -e "\n--- Updating project components and pulling latest versions ---\n"
cd /vagrant
if [[ -s /vagrant/composer.json ]] ;then
sudo -u vagrant -H sh -c "composer install" >> /vagrant/vm_build.log 2>&1
fi
if [[ -s /vagrant/package.json ]] ;then
sudo -u vagrant -H sh -c "npm install" >> /vagrant/vm_build.log 2>&1
fi
if [[ -s /vagrant/bower.json ]] ;then
sudo -u vagrant -H sh -c "bower install -s" >> /vagrant/vm_build.log 2>&1
fi
if [[ -s /vagrant/gulpfile.js ]] ;then
sudo -u vagrant -H sh -c "gulp" >> /vagrant/vm_build.log 2>&1
fi
echo -e "\n--- Creating a symlink for future phpunit use ---\n"
if [[ -x /vagrant/vendor/bin/phpunit ]] ;then
ln -fs /vagrant/vendor/bin/phpunit /usr/local/bin/phpunit
fi
@rrosiek
Copy link
Author

rrosiek commented Jul 30, 2016

Hmm, are you building an Ubuntu VM? Try using this at the top:

#!/bin/bash

instead of

#! /usr/bin/env bash

Seems like it's not running in a bash environment, although what's there has been tested.

@nerdoc
Copy link

nerdoc commented Dec 7, 2016

BTW: bash is needed. the <<< HERE statement is not supported in Ubuntu's default shell (/bin/sh -> /bin/dash), and echo -e doesn't work neither there.

@zalog
Copy link

zalog commented May 30, 2017

I'm not sure about -yes flag. It's apt-get -y install or apt-get install -y?

@rrosiek
Copy link
Author

rrosiek commented Jun 12, 2017

Hi @zalog, I think both versions will work, but from the command reference, flags technically go before the command:

apt-get [options] [-o config=string] [-c=cfgfile] command [pkg]

@michaelfresco
Copy link

@ amiceli

When I run ths script I've this following error : Syntax error: redirection unexpected on line 36.
Somebody have had this error ?

With ubuntu16.04 i managed to get it running by typing bash install_mysql.sh

@joshddavis
Copy link

@rrosiek

Can someone explain to me why he sets "phpmyadmin phpmyadmin/reconfigure-webserver multiselect none"? His script works and I'm able to load phpmyadmin, but just so I can understand whats happening here why doesn't he choose the apache2 flag instead? How does it still get configured to work in this case? Sorry im completely new at this.

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