-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathvh.sh
executable file
·375 lines (348 loc) · 10.1 KB
/
vh.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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
#!/bin/bash
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# #
# Script en shell para crear virtualhost en un servidor. #
# Nota: Recuerden darle permiso de ejecución. #
# #
# Ayuda: En una terminal ejecutamos el archivo #
# #
# $ sudo ./virtualhost.sh --help #
# #
# Autor: Iván D. Meléndez #
# Email: [email protected] #
# Licencia: New BSD License #
# #
# Este script ha sido testeado en Ubuntu con Apache 2.2 y 2.4 #
# #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#Ruta por defecto del dominio o subdominio
RUTA="/var/www"
#Nombre del dominio
VIRTUALHOST=""
#Nombre del archivo
FILENAME=""
#Incluir la orden WWW
WWW=true
#Dirección IP del server
IPv4="127.0.0.1"
#Grupo del la carpeta del dominio
GRUPO="www-data"
#Versión de apache
APACHE='';
#Funcion que imprime el uso del script
function helpVH() {
cat << __EOT
Uso:
$ sudo ./virtualhost.sh --create
$ sudo ./virtualhost.sh --create /path/to/virtualhost
$ sudo ./virtualhost.sh --delete
__EOT
exit 1
}
# Funcion para crear un virtualhost
function newVH() {
# Verifico que el dominio no se encuentre registrado
if grep -cE "^$VIRTUALHOST" /etc/hosts ; then
echo " * [ERROR] El dominio $VIRTUALHOST ya se encuentra registrado..."
echo " * Utilice --delete $VIRTUALHOST si desea eliminar el virtualhost..."
else
echo " * Configurando el virtualhost '$VIRTUALHOST' en la ruta $RUTA"
# Creo el directorio si no se encuentra
if [ ! -d $RUTA ]; then
echo " * Creando diretorios en $RUTA... "
mkdir -p $RUTA
mkdir -p $RUTA/private/logs
mkdir -p $RUTA/private/tmp
# Asigno los permisos
chmod 775 $RUTA
chmod 777 $RUTA/private/logs
chmod 777 $RUTA/private/tmp
echo " * Asignando propietario al directorio... "
chown $USER:$GRUPO -R $RUTA
else
if [ ! -d $RUTA/private/logs ]; then
echo " * Creando diretorio para los archivos de sucesos... "
mkdir -p $RUTA/private/logs
# Asigno los permisos
chmod 777 $RUTA/private/logs
chown $USER:$GRUPO -R $RUTA
fi
if [ ! -d $RUTA/private/tmp ]; then
echo " * Creando diretorio para los archivos de sesiones... "
mkdir -p $RUTA/private/tmp
# Asigno los permisos
chmod 777 $RUTA/private/tmp
chown $USER:$GRUPO -R $RUTA
fi
fi
# Creo la entrada en /etc/hosts/
echo "$IPv4 $VIRTUALHOST" >> /etc/hosts
# Creo el archivo de virtualhost
touch /etc/apache2/sites-available/$FILENAME
if [ $APACHE = "2.4" ]; then
if $WWW ; then
echo "
<VirtualHost *:80>
ServerAdmin admin@$VIRTUALHOST
ServerName $VIRTUALHOST
ServerAlias www.$VIRTUALHOST
DocumentRoot $RUTA
ErrorLog $RUTA/private/logs/access.error.log
php_value error_log $RUTA/private/logs/php.error.log
#php_value session.save_path $RUTA/private/tmp
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory $RUTA/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>" > /etc/apache2/sites-available/$FILENAME
else
echo "
<VirtualHost *:80>
ServerAdmin admin@$VIRTUALHOST
ServerName $VIRTUALHOST
ServerAlias $VIRTUALHOST
DocumentRoot $RUTA
ErrorLog $RUTA/private/logs/access.error.log
php_value error_log $RUTA/private/logs/php.error.log
#php_value session.save_path $RUTA/private/tmp
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory $RUTA/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>" > /etc/apache2/sites-available/$FILENAME
fi
else
if $WWW ; then
echo "
<VirtualHost *:80>
ServerAdmin admin@$VIRTUALHOST
ServerName $VIRTUALHOST
ServerAlias www.$VIRTUALHOST
DocumentRoot $RUTA
ErrorLog $RUTA/private/logs/access.error.log
php_value error_log $RUTA/private/logs/php.error.log
#php_value session.save_path $RUTA/private/tmp
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory $RUTA/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>" > /etc/apache2/sites-available/$FILENAME
else
echo "
<VirtualHost *:80>
ServerAdmin admin@$VIRTUALHOST
ServerName $VIRTUALHOST
ServerAlias $VIRTUALHOST
DocumentRoot $RUTA
ErrorLog $RUTA/private/logs/access.error.log
php_value error_log $RUTA/private/logs/php.error.log
#php_value session.save_path $RUTA/private/tmp
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory $RUTA/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>" > /etc/apache2/sites-available/$FILENAME
fi
fi
# Habilito el virtual host
echo " * Habilitando el virtualhost..."
a2ensite $VIRTUALHOST 1>/dev/null 2>/dev/null
# Reinicio el servidor
echo " * Reiniciando el servidor apache..."
/etc/init.d/apache2 reload 1>/dev/null 2>/dev/null
# Creo el It Works
touch $RUTA/index.html
echo "<html>
<body>
<h1>It works $VIRTUALHOST!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body>
</html>" > $RUTA/index.html
# Asigno los permisos
chmod 775 $RUTA/index.html
touch $RUTA/private/index.html
touch $RUTA/private/tmp/index.html
touch $RUTA/private/logs/index.html
echo " * Virtualhost creado correctamente. $VIRTUALHOST/index.html!"
fi
exit 1;
}
# Funcion para eliminar virtualhost
function delVH() {
# Verifico que el virtualhost se encuentre registrado
if grep -cE "$VIRTUALHOST" /etc/hosts ; then
echo -n "Estas seguro de eliminar el virtualhost: $VIRTUALHOST? [S/n]: "
read continue
case $continue in
n*|N*) exit
esac
echo " * Conservando los datos en la carpeta del virtualhost..."
# Remuevo de apache el virtualhost
echo " * Deshabilitando el virtualhost $VIRTUALHOST del servidor..."
a2dissite $VIRTUALHOST 1>/dev/null 2>/dev/null
# Elimino la configuracion del virtualhost
echo " * Eliminando archivos de configuración..."
rm /etc/apache2/sites-available/$FILENAME
# Elimino el registro del dominio local
echo " * Removiendo el virtualhost $VIRTUALHOST de /etc/hosts..."
sed "/$VIRTUALHOST/ d" -i /etc/hosts
# Reinicio el servidor
echo " * Reiniciando el servidor..."
/etc/init.d/apache2 reload 1>/dev/null 2>/dev/null
echo " * El dominio se ha eliminado correctamente!"
else
echo " * [ERROR] El virtualhost $VIRTUALHOST no existe. Abortando..."
fi
exit 1;
}
# Determino si el usuario que ejecuta el archivo tiene privilegios
if [ `whoami` != 'root' ]; then
echo "Debes tener los privilegios de root para ejecutar el archivo."
exit
fi
# Determino el nombre de usuario que tiene los privilegios
if [ -z $USER -o $USER = "root" ]; then
if [ ! -z $SUDO_USER ]; then
USER=$SUDO_USER
else
USER=""
echo "Error. Los privilegios que posees no provienen de root."
exit
fi
fi
# Capturo los datos
if [ -z $1 ]; then
helpVH
else
#Determino la versión de apache
LIST=`apache2 -version`
SOURCE="Apache/2.4"
if echo "$LIST" | grep -i "$SOURCE"; then
APACHE="2.4";
else
APACHE="2.2";
fi
#Verifico si ejecuta la ayuda
if [ $1 = "--help" ]; then
helpVH
#Verifico si crea un virtualhost
elif [ $1 = "--create" ]; then
if [ -z $2 ]; then
echo -n "Deseas definir el virtualhost en la ubicación $RUTA? [S/n]: "
read confirmacion
case $confirmacion in
n*|N*)
echo "* [ERROR] Abortando..."
exit 1;
;;
esac
else
RUTA=${2%/}
echo -n "Deseas definir el virtualhost en la ubicación $RUTA? [S/n]: "
read confirmacion
case $confirmacion in
n*|N*)
echo "* [ERROR] Abortando..."
exit 1;
;;
esac
fi
#Pido el nombre del virtualhost y lo registro en la variable
echo -n "Ingresa el nombre del virtualhost (ej: domain.com): "
read virtual
if [ -z $virtual ]; then
echo " * [ERROR] No se ha definido el nombre del virtualhost. Para obtener ayuda utiliza --help"
exit 1
else
VIRTUALHOST=${virtual%/}
if [ $APACHE = "2.4" ]; then
FILENAME="$VIRTUALHOST.conf";
else
FILENAME="$VIRTUALHOST";
fi
fi
#Pido si incluye la orden www. antes del dominio
echo -n "Deseas indicar el alias 'www' al dominio? [S/n]: "
read confirmacion
case $confirmacion in
n*|N*)
WWW=false
;;
esac
#Pido la ip del server
echo -n "La dirección IPv4 del server es $IPv4? [S/n]: "
read confirmacion
case $confirmacion in
n*|N*)
echo -n "Ingresa la dirección IPv4 para el server: "
read ip
if [ -z $ip ]; then
echo " * [ERROR] No se ha definido la dirección IPv4 para el virtualhost. Para obtener ayuda utiliza --help"
exit 1
else
IPv4=$ip
fi
;;
esac
#Valido la carpeta del vhost
if [ $RUTA = "/var/www" ]; then
RUTA="/var/www/$VIRTUALHOST"
fi
#Confirmo la información digitada
if [ $IPv4 = "127.0.0.1" ]; then
echo " * [INFO] Se creará el virtualhost '$VIRTUALHOST' bajo en la ruta $RUTA"
else
echo " * [INFO] Se creará el virtualhost '$VIRTUALHOST' bajo la IP '$IPv4' en la ruta $RUTA"
fi
echo -n "Deseas continuar? [S/n]:"
read confirmacion
case $confirmacion in
n*|N*)
exit 1
;;
esac
#Ejecuto la función para crear el virtualhost
newVH
elif [ $1 = "--delete" ]; then
#Pido el nombre del virtualhost y lo almaceno en la variable
echo -n "Ingresa el nombre del virtualhost a eliminar: "
read virtual
if [ -z $virtual ]; then
echo " * [ERROR] No se ha definido el nombre del virtualhost. Para obtener ayuda utiliza --help"
exit 1
else
VIRTUALHOST=${virtual%/}
if [ $APACHE = "2.4" ]; then
FILENAME="$VIRTUALHOST.conf";
else
FILENAME="$VIRTUALHOST";
fi
delVH
fi
else
helpVH
fi
fi