-
Notifications
You must be signed in to change notification settings - Fork 1
/
vhost.sh
executable file
·110 lines (90 loc) · 2.86 KB
/
vhost.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/bin/bash
# script
# vhost.sh
#
# what it does?
# Configure an Apache virtual host
#
# usage: sudo ./vhost.sh <server_name> <user-owner>
# <server_name>: domain name, without www, e.g. awesomeness.com
# <user-owner>: user will be used, e.g. www-data
#
# author
# felipe lopes - bolzin [at] gmail [dot] com
#
# Copyright (c) 2015 Felipe Lopes
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
# TODO
#
# Use one error log per vhost
SERVER_NAME=$1
SERVER_ALIAS="www."$1
SERVER_ADMIN="webmaster@$1"
VHOST_DIR="/var/www/$1"
DOCUMENT_ROOT="$VHOST_DIR/public_html"
VHOST_FILE="/etc/apache2/sites-available/$SERVER_NAME.conf"
# test if root
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
# test usage
if [ $# -ne 2 ]; then
cat <<EOF
usage: sudo ./vhost.sh [<server_name> <user-owner>]
<server_name>: domain name, without www, e.g. awesomeness.com
<user-owner>: user will be used, e.g. www-data
EOF
exit 1
fi
# test if apache2 exist
dpkg --get-selections | grep apache2 -q
if [[ $? != 0 ]]; then
echo "Apache2 not installed"
exit 1
fi
# test if vhost is being used
if [ -d $VHOST_DIR ]; then
echo "$VHOST_DIR already being used"
exit 1
fi
# change permission to /var/www to 755
PERMISSION=$(stat -t --format=%a /var/www)
if [ $PERMISSION != "755" ]; then chmod 755 /var/www; fi
# create document root
mkdir -p $DOCUMENT_ROOT
chmod 775 $DOCUMENT_ROOT
# create an index.php inside document root
echo $INDEX > $DOCUMENT_ROOT/index.php
# change document root ownership
chown -R "$2":"$2" $DOCUMENT_ROOT
# create vhost conf file
cat <<EOF > "$VHOST_FILE"
<VirtualHost *:80>
ServerAdmin $SERVER_ADMIN
ServerName $SERVER_NAME
ServerAlias $SERVER_ALIAS
DocumentRoot $DOCUMENT_ROOT
ErrorLog \${APACHE_LOG_DIR}/error.log
CustomLog \${APACHE_LOG_DIR}/access.log combined
</Virtualhost>
EOF
# enable vhost
a2ensite $SERVER_NAME
service apache2 reload
exit 0