[フレーム]
Last Updated: February 25, 2016
·
18.49K
· nekwebdev

Bash Script to create new Apache2 virtual hosts.

Hello World!

Major edit:

You can find the script here.
Just run vhost -help to get the usage information.

I left the following for reference, but it is much easier and faster to use the new script.

If you are coming from my tip on how to setup a web development OS in VirtualBox, then the script will work as is (https://coderwall.com/p/sc6r_q)

This script will assume certain things:

  • That you plan on using the /home/username/www directory as your webroot.

  • That you have template and template-pub already setup in /etc/apache2/sites-available.

This is what my template virtual host file looks like, straight copy from the default one:

<VirtualHost *:80>
 ServerAdmin webmaster@localhost

 ServerName template.local
 DocumentRoot /home/username/www/template
 <Directory />
 Options FollowSymLinks
 AllowOverride All
 </Directory>
 <Directory /home/username/www/template/>
 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

 # Possible values include: debug, info, notice, warn, error, crit,
 # alert, emerg.
 LogLevel warn

 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Now this is the template-pub virtual host file contents:

<VirtualHost *:80>
 ServerAdmin webmaster@localhost

 ServerName template.local
 DocumentRoot /home/username/www/template/public
 <Directory />
 Options FollowSymLinks
 AllowOverride All
 </Directory>
 <Directory /home/username/www/template/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>

Here we only added /public to the DocumentRoot and Directory for frameworks that have a public folder and the applications one level higher. This is highly suggested as standard practice for a more secure web application, keep it one level above the public web root.

Now that this is taken care of here is the script in all it's glory. It will ask for the root password to be able to manage the virtual host files.

#!/bin/bash
# Duplicate the base vhost template, will need SUDO!!!
sudo -v

if [ "2ドル" == "pub" ]
then
 echo "Creating a vhost for 1ドル with a webroot in $HOME/www/1ドル/public/"
 sudo cp /etc/apache2/sites-available/template-pub /etc/apache2/sites-available/1ドル
else
 echo "Creating a vhost for 1ドル with a webroot in $HOME/www/1ドル/"
 sudo cp /etc/apache2/sites-available/template /etc/apache2/sites-available/1ドル
fi

sudo sed -i 's/template/'1ドル'/g' /etc/apache2/sites-available/1ドル
sudo sed -i '1s/^/127.0.0.1 '1ドル'.local\n/' /etc/hosts

sudo a2ensite 1ドル
sudo service apache2 reload

echo "Done, please browse to http://1ドル.local to check!"

Copy it in your /home/username/bin folder as Mint 14.1 auto adds it to your $PATH (type echo $PATH to check it).
Make sure you chmod +x scriptname.sh

scriptname.sh vhostname

scriptname.sh vhostname pub

The second command will set the virtual host with it's web root inside the public folder of your project.

Hope it helps :)

1 Response
Add your response

I'm relatively new to linux. I've installed Ubuntu 13.10 and am having trouble with your new script. I saved it to ~/bin/vhosts.sh and chmod it. Made sure ~/bin was in my path as well. But when I run ./vhosts.sh -help it tries to create a help.local and ~/www/help dir instead of listing the commands. I know it's something super simple that I'm missing but I'm stuck and stupid. EDIT: Also of note I'm using ZSH.

over 1 year ago ·

AltStyle によって変換されたページ (->オリジナル) /