Last active
June 18, 2024 01:35
-
-
Save jasonlewis/6291983 to your computer and use it in GitHub Desktop.
Bash script that creates a new project and virtual host for that project. Can also be used to quickly create a new Laravel project.
This file contains 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
#!/bin/bash | |
# This script creates a new project (or site) under /var/sites and creates | |
# new virtual host for that site. With the options a site can also | |
# install the latest version of Laravel directly. | |
# This script was originally based on the following script by @Nek from | |
# Coderwall: https://coderwall.com/p/cqoplg | |
# Display the usage information of the command. | |
create-project-usage() { | |
cat <<"USAGE" | |
Usage: create-project [OPTIONS] <name> | |
-h, --help Show this help screen | |
-u, --url Specify a local address, default is http://name.dev | |
-r, --remove Remove a Virtual Host | |
-e, --email Email of the administrator in the virtual host file | |
--list List the current virtual host | |
-l, --laravel Create a new Laravel project | |
Examples: | |
create-project foo | |
create-project --laravel foo | |
create-project --remove foo | |
USAGE | |
exit 0 | |
} | |
# Remove a project and its Virtual Host. | |
project-remove() { | |
sudo -v | |
echo "Removing $url from /etc/hosts." | |
sudo sed -i '/'$url'/d' /etc/hosts | |
echo "Disabling and deleting the $name virtual host." | |
sudo a2dissite $name | |
sudo rm /etc/apache2/sites-available/$name | |
sudo service apache2 reload | |
echo "Project has been removed. The document root still exists." | |
exit 0 | |
} | |
# List the available and enabled virtual hosts. | |
project-list() { | |
echo "Available virtual hosts:" | |
ls -l /etc/apache2/sites-available/ | |
echo "Enabled virtual hosts:" | |
ls -l /etc/apache2/sites-enabled/ | |
exit 0 | |
} | |
# Define and create default values. | |
name="${!#}" | |
email="webmaster@localhost" | |
url="$name.dev" | |
docroot="/var/sites/$name" | |
laravel=0 | |
# Loop to read options and arguments. | |
while [ $1 ]; do | |
case "$1" in | |
'--list') | |
project-list;; | |
'--help'|'-h') | |
create-project-usage;; | |
'--remove'|'-r') | |
url="$2" | |
project-remove;; | |
'--url'|'-u') | |
url="$2";; | |
'--email'|'-e') | |
email="$2";; | |
'--laravel'|'-l') | |
laravel=1 | |
esac | |
shift | |
done | |
# If we are not creating a Laravel project then the document root will be | |
# htdocs, otherwise it will be public. | |
if [ "$laravel" = 0 ]; then | |
docroot="$docroot/htdocs" | |
fi | |
# Check if the docroot exists, if it does not exist then we'll create it. | |
if [ ! -d "$docroot" ]; then | |
echo "Creating $docroot directory..." | |
mkdir -p $docroot | |
fi | |
# If creating a Laravel project then we'll use composer to create the | |
# new project in the document root. | |
if [ "$laravel" = 1 ]; then | |
echo -e "Installing latest version of Laravel...\n" | |
composer create-project --keep-vcs laravel/laravel $docroot | |
docroot="$docroot/public" | |
fi | |
echo -e "\nCreating the new $name Virtual Host with DocumentRoot: $docroot" | |
sudo cp /etc/apache2/sites-available/template /etc/apache2/sites-available/$name | |
sudo sed -i 's/template.email/'$email'/g' /etc/apache2/sites-available/$name | |
sudo sed -i 's/template.url/'$url'/g' /etc/apache2/sites-available/$name | |
sudo sed -i 's#template.docroot#'$docroot'#g' /etc/apache2/sites-available/$name | |
echo "Adding $url to the /etc/hosts file..." | |
sudo sed -i '1s/^/127.0.0.1 '$url'\n/' /etc/hosts | |
sudo a2ensite $name | |
sudo service apache2 reload | |
echo -e "\nYou can now browse to your Virtual Host at http://$url" | |
exit 0 |
This file contains 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
<VirtualHost *:80> | |
ServerAdmin template.email | |
ServerName template.url | |
DocumentRoot template.docroot | |
<Directory /> | |
Options FollowSymLinks | |
AllowOverride All | |
</Directory> | |
<Directory template.docroot/> | |
Options Indexes FollowSymLinks MultiViews | |
AllowOverride All | |
Order allow,deny | |
allow from All | |
</Directory> | |
ErrorLog ${APACHE_LOG_DIR}/error.log | |
LogLevel debug | |
CustomLog ${APACHE_LOG_DIR}/access.log combined | |
</VirtualHost> |
Hi just some precisions about the 403 error.
Be sure to work on a true install of linux. In my case i have an Ubuntu Gnome with wubi. My HD is in NTFS format
and both NTFS and Fat32 doesn't handle all those user/groups permissions.
check: http://askubuntu.com/questions/163685/403-forbidden-error-in-apache-with-document-root-on-an-ntfs-partition
hi, only one note: in the shell script you should add $name.conf beacuse the file .conf on sites-availables dont exist!
And .dev domain not work for apache https://stackoverflow.com/questions/47754347/google-chrome-dev-not-work-over-http
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi it's been 2 days that am struggling with the script create-project.sh. i just discover that my apache config wants that
the file in /etc/apache2/sites-available needs to ends with .conf otherwise i can't enable the site.
Now when i lauch the script every thing is allright except that 403 ERROR . :-( . What's really drive me nuts is i have the same configuration.