3 changed files with 250 additions and 223 deletions
@ -0,0 +1,177 @@
|
||||
#!/usr/bin/env bash |
||||
|
||||
# Run this as sudo! |
||||
# I move this file to /usr/local/bin/vhost and run command 'vhost' from anywhere, using sudo. |
||||
|
||||
# |
||||
# Show Usage, Output to STDERR |
||||
# |
||||
function show_usage { |
||||
cat <<- _EOF_ |
||||
|
||||
Create a new vHost in Ubuntu Server |
||||
Assumes /etc/apache2/sites-available and /etc/apache2/sites-enabled setup used |
||||
|
||||
-d DocumentRoot - i.e. /var/www/yoursite |
||||
-h Help - Show this menu. |
||||
-s ServerName - i.e. example.com or sub.example.com |
||||
-a ServerAlias - i.e. *.example.com or another domain altogether |
||||
-p File path to the SSL certificate. Directories only, no file name. |
||||
If using an SSL Certificate, also creates a port :443 vhost as well. |
||||
This *ASSUMES* a .crt and a .key file exists |
||||
at file path /provided-file-path/your-server-or-cert-name.[crt|key]. |
||||
Otherwise you can except Apache errors when you reload Apache. |
||||
Ensure Apache's mod_ssl is enabled via "sudo a2enmod ssl". |
||||
-c Certificate filename. "xip.io" becomes "xip.io.key" and "xip.io.crt". |
||||
|
||||
Example Usage. Serve files from /var/www/xip.io at http(s)://192.168.33.10.xip.io |
||||
using ssl files from /etc/ssl/xip.io/xip.io.[key|crt] |
||||
sudo vhost -d /var/www/xip.io -s 192.168.33.10.xip.io -p /etc/ssl/xip.io -c xip.io |
||||
|
||||
_EOF_ |
||||
exit 1 |
||||
} |
||||
|
||||
|
||||
# |
||||
# Output vHost skeleton, fill with userinput |
||||
# To be outputted into new file |
||||
# |
||||
function create_vhost { |
||||
cat <<- _EOF_ |
||||
<VirtualHost *:80> |
||||
ServerAdmin webmaster@localhost |
||||
ServerName $ServerName |
||||
$ServerAlias |
||||
|
||||
DocumentRoot $DocumentRoot |
||||
|
||||
|
||||
<Directory $DocumentRoot> |
||||
Options Indexes FollowSymLinks MultiViews |
||||
AllowOverride All |
||||
Order allow,deny |
||||
allow from all |
||||
</Directory> |
||||
|
||||
ErrorLog \${APACHE_LOG_DIR}/$ServerName-error.log |
||||
|
||||
# Possible values include: debug, info, notice, warn, error, crit, |
||||
# alert, emerg. |
||||
LogLevel warn |
||||
|
||||
CustomLog \${APACHE_LOG_DIR}/$ServerName-access.log combined |
||||
|
||||
|
||||
</VirtualHost> |
||||
_EOF_ |
||||
} |
||||
|
||||
function create_ssl_vhost { |
||||
cat <<- _EOF_ |
||||
<VirtualHost *:443> |
||||
ServerAdmin webmaster@localhost |
||||
ServerName $ServerName |
||||
$ServerAlias |
||||
|
||||
DocumentRoot $DocumentRoot |
||||
|
||||
<Directory $DocumentRoot> |
||||
Options Indexes FollowSymLinks MultiViews |
||||
AllowOverride All |
||||
Order allow,deny |
||||
allow from all |
||||
</Directory> |
||||
|
||||
ErrorLog \${APACHE_LOG_DIR}/$ServerName-error.log |
||||
|
||||
# Possible values include: debug, info, notice, warn, error, crit, |
||||
# alert, emerg. |
||||
LogLevel warn |
||||
|
||||
CustomLog \${APACHE_LOG_DIR}/$ServerName-access.log combined |
||||
|
||||
SSLEngine on |
||||
|
||||
SSLCertificateFile $CertPath/$CertName.crt |
||||
SSLCertificateKeyFile $CertPath/$CertName.key |
||||
|
||||
<FilesMatch "\.(cgi|shtml|phtml|php)$"> |
||||
SSLOptions +StdEnvVars |
||||
</FilesMatch> |
||||
|
||||
BrowserMatch "MSIE [2-6]" \\ |
||||
nokeepalive ssl-unclean-shutdown \\ |
||||
downgrade-1.0 force-response-1.0 |
||||
# MSIE 7 and newer should be able to use keepalive |
||||
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown |
||||
</VirtualHost> |
||||
_EOF_ |
||||
} |
||||
|
||||
#Sanity Check - are there two arguments with 2 values? |
||||
if [ "$#" -lt 4 ]; then |
||||
show_usage |
||||
fi |
||||
|
||||
CertPath="" |
||||
|
||||
#Parse flags |
||||
while getopts "d:s:a:p:c:h" OPTION; do |
||||
case $OPTION in |
||||
h) |
||||
show_usage |
||||
;; |
||||
d) |
||||
DocumentRoot=$OPTARG |
||||
;; |
||||
s) |
||||
ServerName=$OPTARG |
||||
;; |
||||
a) |
||||
Alias=$OPTARG |
||||
;; |
||||
p) |
||||
CertPath=$OPTARG |
||||
;; |
||||
c) |
||||
CertName=$OPTARG |
||||
;; |
||||
*) |
||||
show_usage |
||||
;; |
||||
esac |
||||
done |
||||
|
||||
# If alias is set: |
||||
if [ "$Alias" != "" ]; then |
||||
ServerAlias="ServerAlias "$Alias |
||||
else |
||||
ServerAlias="" |
||||
fi |
||||
|
||||
# If CertName doesn't get set, set it to ServerName |
||||
if [ "$CertName" == "" ]; then |
||||
CertName=$ServerName |
||||
fi |
||||
|
||||
if [ ! -d $DocumentRoot ]; then |
||||
mkdir -p $DocumentRoot |
||||
#chown USER:USER $DocumentRoot #POSSIBLE IMPLEMENTATION, new flag -u ? |
||||
fi |
||||
|
||||
if [ -f "$DocumentRoot/$ServerName.conf" ]; then |
||||
echo 'vHost already exists. Aborting' |
||||
show_usage |
||||
else |
||||
create_vhost > /etc/apache2/sites-available/${ServerName}.conf |
||||
|
||||
# Add :443 handling |
||||
if [ "$CertPath" != "" ]; then |
||||
create_ssl_vhost >> /etc/apache2/sites-available/${ServerName}.conf |
||||
fi |
||||
|
||||
# Enable Site |
||||
cd /etc/apache2/sites-available/ && a2ensite ${ServerName}.conf |
||||
service apache2 reload |
||||
fi |
Loading…
Reference in new issue