Skip to content

Instantly share code, notes, and snippets.

@RicardoWEBSiTE
Created February 5, 2014 21:47
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 RicardoWEBSiTE/8833859 to your computer and use it in GitHub Desktop.
Save RicardoWEBSiTE/8833859 to your computer and use it in GitHub Desktop.
Vagrant Bootstrapping Ubuntu Precise 32bit for Laravel 4, Apache 2.2.22, PHP 5.4, MySQL 5.5 , Vim, cURL, Git, Composer, pip, HTTPie
#!/usr/bin/env bash
# Configurable variables
database='vagrant'
username='vagrant'
password='vagrant'
echo ''
echo ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
echo ' Bootstrapping Ubuntu Precise 32bit for Laravel 4'
echo ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
echo ' Apache 2.2.22, PHP 5.4, MySQL 5.5'
echo ' Vim, cURL, Git, Composer, pip, HTTPie'
echo ''
echo 'Created for Laravel 4 Starter Site'
echo ''
echo 'github.com/andrew13/Laravel-4-Bootstrap-Starter-Site'
echo ''
# ---------------
# Various fixes
# ---------------
echo '- Fixing locales issues with Ubuntu...'
dpkg-reconfigure locales >/dev/null
update-locale LANG=en_US.UTF-8
echo '- Configuring timezone to UTC...'
echo \"Europe/London\" | sudo tee /etc/timezone
dpkg-reconfigure --frontend noninteractive tzdata
# ------------------------
# Update and basic tools
# ------------------------
echo '- Updating apt-get repositories...'
apt-get update >/dev/null
echo '...done'
# Install Vim
echo '- Installing vim...'
apt-get install -y vim >/dev/null
echo '...done'
# ---------
# PHP 5.4
# ---------
echo '- Installing python-software-properties...'
apt-get install -y python-software-properties >/dev/null
echo '...done'
echo '- Adding PHP 5.4 PPA...'
add-apt-repository ppa:ondrej/php5 >/dev/null
echo '...done'
echo '- Updating apt-get repositories...'
apt-get update >/dev/null
echo '...done'
echo '- Installing PHP 5.4...'
apt-get install -y php5 >/dev/null
echo '...done'
echo '- Installing required PHP modules for Laravel 4...'
apt-get install -y php5-mcrypt >/dev/null
apt-get install -y php5-mysql >/dev/null
apt-get install -y php5-curl >/dev/null
echo '...done'
# ---------------
# Apache 2.2.22
# ---------------
echo '- Installing Apache 2...'
apt-get install -y apache2 >/dev/null
echo "ServerName localhost" > /etc/apache2/httpd.conf
echo '...done'
echo '- Enabling Apache 2 mod_rewrite...'
a2enmod rewrite >/dev/null
# Restart apache
service apache2 restart >/dev/null
echo '...done'
echo '- Setting up Apache 2 virtual host...'
# Remove /var/www
rm -rf /var/www
# Symlink /vagrant to /var/www
ln -fs /vagrant /var/www
# Remove default virtual host file
a2dissite default >/dev/null
rm /etc/apache2/sites-available/default
# Setup new virtual host file
VHOST=$(cat <<EOF
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/public
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/public/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from All
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride All
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
EOF
)
echo "${VHOST}" > /etc/apache2/sites-available/default
# Enable the new virtual host
a2ensite default >/dev/null
service apache2 reload >/dev/null
echo '...done'
# -----------
# MySQL 5.5
# -----------
echo '- Installing MySQL...'
# Ignore the post install questions
export DEBIAN_FRONTEND=noninteractive
# Install MySQL quietly
apt-get -q -y install mysql-server >/dev/null
echo '...done'
# ------
# cURL
# ------
echo '- Installing cURL...'
apt-get install -y curl >/dev/null
echo '...done'
# -----
# Git
# -----
echo '- Installing Git...'
apt-get install -y git-core >/dev/null
echo '...done'
# ----------
# Composer
# ----------
echo '- Installing Composer...'
curl -s https://getcomposer.org/installer | php
# Make Composer available globally
mv composer.phar /usr/local/bin/composer
echo '...done'
# --------------
# pip & HTTPie
# --------------
echo '- Installing pip...'
curl -s http://python-distribute.org/distribute_setup.py | python
easy_install pip >/dev/null
echo '...done'
echo '- Installing HTTPie...'
pip install --upgrade httpie >/dev/null
rm distribute-0.6.48.tar.gz
echo '...done'
# -------------
# Final setup
# -------------
# Add aliases
sed -i '$a alias art="php artisan"' /home/vagrant/.bashrc
# Create script for python smtpd
SMTPD=$(cat <<EOF
#!/usr/bin/env bash
echo ''
echo 'Starting Python SMTP daemon...'
echo 'Listening to port 25'
echo 'Outgoing emails will display in this session'
echo 'Ctrl-C to quit'
sudo python -m smtpd -n -c DebuggingServer localhost:25
EOF
)
echo "${SMTPD}" > /usr/local/bin/pysmtpd
chmod +x /usr/local/bin/pysmtpd
# Create script for quick install
STARTER=$(cat <<EOF
#!/usr/bin/env bash
echo ''
echo 'Will run composer install --dev'
echo 'Then migrate and seed the databases'
echo ''
cd /vagrant
composer install --dev
php artisan migrate
php artisan db:seed
echo ''
echo 'Laravel Project Ready!!!'
echo ''
echo '----------------------------------------------'
echo ' Navigate to http://127.0.0.1:8080 on host OS'
echo '----------------------------------------------'
EOF
)
echo "${STARTER}" > /usr/local/bin/install-laravel
chmod +x /usr/local/bin/install-laravel
# Set up the database
echo "CREATE DATABASE IF NOT EXISTS $database" | mysql
echo "CREATE USER '$username'@'localhost' IDENTIFIED BY '$password'" | mysql
echo "GRANT ALL PRIVILEGES ON $database.* TO '$username'@'localhost' IDENTIFIED BY '$password'" | mysql
# Create default Laravel 4 app/config/vagrant folder template
mkdir /home/vagrant/templates
mkdir /home/vagrant/templates/vagrant
# Create app.php
APP=$(cat <<EOF
<?php
return array(
'debug' => true,
'url' => 'http://localhost',
'timezone' => 'UTC',
'key' => 'A8GcqzTd8Pt2EqspPbrQoGnfpbTCUPFq'
);
EOF
)
echo "${APP}" > /home/vagrant/templates/vagrant/app.php
# Create database.php
DATABASE=$(cat <<EOF
<?php
return array(
'fetch' => PDO::FETCH_CLASS,
'default' => 'mysql',
'connections' => array(
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'vagrant',
'username' => 'vagrant',
'password' => 'vagrant',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
),
);
EOF
)
echo "${DATABASE}" > /home/vagrant/templates/vagrant/database.php
# Create mail.php
MAIL=$(cat <<EOF
<?php
return array(
'driver' => 'smtp',
'host' => 'localhost',
'port' => 25,
'from' => array(
'address' => 'info@startersite.com',
'name' => 'Larvel 4 Starter Site'
),
);
EOF
)
echo "${MAIL}" > /home/vagrant/templates/vagrant/mail.php
echo ''
echo ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
echo ' Bootstrapping done!'
echo ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
echo ''
echo ' If you cloned the laravel 4 stater site from'
echo ''
echo 'github.com/andrew13/Laravel-4-Bootstrap-Starter-Site'
echo ''
echo ' Your next steps are:'
echo ' $ vagrant ssh'
echo ' vagrant@vagrant-laravel4:~$ install-laravel'
echo ' vagrant@vagrant-laravel4:~$ pysmtpd'
echo ''
echo ' Open http://127.0.0.1:8080 in your host OS'
echo ''
echo 'emails sent will open in the session running pysmtpd'
echo ''
echo ' Enjoy your new Laravel 4 ready virtual machine!'
echo ''
echo ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
echo ''
echo 'For more information to setup other projects just as fast check the vagrantfile'
echo ''
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment