File "srvwebadmin.sh"
Full path: /www/wwwroot/fabriciovc.eti.br/downloads/scripts/construcao/ha/ha/ha/apache/srvwebadmin.sh
File size: 13.04 KiB (13350 bytes)
MIME-type: text/x-shellscript
Charset: utf-8
#!/bin/bash
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Nota de Copyright #
# Copyright C 2008 Fabricio Vaccari Constanski #
# fabriciovc[em]fabriciovc.eti.br - 26/11/2008 #
# Ultima atualizacao em : 26/01/2009 - fabriciovc #
# #
# Este trabalho esta licenciado sob uma Licenca Creative Commons Atribuicao- #
# Compartilhamento pela mesma Licenca 2.5 Brasil. Para ver uma copia desta #
# licenca, visite http://creativecommons.org/licenses/by-sa/2.5/br/ #
# ou envie uma carta para Creative Commons, 171 Second Street, Suite 300, #
# San Francisco, California 94105, USA. #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#- PATHS DE COMANDOS ----------------------------------------------------------
A2ENSITE=`which a2ensite`
A2DISSITE=`which a2dissite`
CAT=`which cat`
CHMOD=`which chmod`
CHOWN=`which chown`
CP=`which cp`
CUT=`which cut`
DATE=`which date`
LS=`which ls`
MKDIR=`which mkdir`
MYSQL=`which mysql`
MV=`which mv`
RM=`which rm`
SED=`which sed`
SETFACL=`which setfacl`
SVNADMIN=`which svnadmin`
#- USUARIOS E GRUPOS PARA DEFINICAO DE PERMISSOES -----------------------------
ADMIN_GROUP=''
CONTENT_GROUP='conteudo'
DESENV_GROUP='desenvolvimento'
UPLOAD_USER=''
WWW_USER='www-data'
#- ENDERECOS IPS NECESSARIOS PARA O SERVICO DE DNS ----------------------------
IP_NS1='192.168.1.253'
IP_NS2='192.168.1.253'
IP_WWW='192.168.1.253'
IP_ADM='192.168.1.253'
#- PATHS DE ARQUIVOS E DIRETORIOS ---------------------------------------------
DATA_DIR="/srv/dados" # Local da área de dados dos domínios
DNS_DOMAIN="/srv/bind/etc/bind" # Local do arquivo named.conf
DNS_FILE="${DNS_DOMAIN}/named.conf.local" # Nome do arquivo named.conf
DNS_DATA="/srv/bind/var/cache/bind" # Local dos arquivos de Zona de Dominio
WWW_DIR="/srv/www/website" # DocumentRoot do Apache2
WWW_VIRT="/etc/apache2/sites-available" # Local para arquivos de hosts virtuais
SVN_DIR="/srv/svn" # Local da área de dados do SVN
SVN_APACHE="/etc/apache2/svn" # Dir com as entradas do svn no apache
PAGINA_WEB="/svn" # Endereco do SVN http://dominio/svn
ARQUIVO_SENHA="$SVN_APACHE/passwd" # Local dos arquivos de senha usuarios
#- FUNCAO _CHECKOK - VERIFICACAO DE COMANDOS EXECUTADOS -----------------------
_CHECKOK () {
if [ $? -eq 0 ]; then
echo -e " \\033[1;32mOK\\033[0;39m"
else
echo -e " \\033[1;31mFALHOU\\033[0;39m"
fi
}
#------------------------------------------------------------------------------
#- FUNCAO _GET_DOMAIN - OBTEM O DOMINIO A SE UTILIZADO ------------------------
_GET_DOMAIN () {
echo -n "Digite o nome do dominio: "
read DOMAIN
if [ -z $DOMAIN ]; then
echo -e "\\033[1;31mDominio nao informado!!!\\033[0;39m"
_MENU
fi
DOM=$(echo $DOMAIN | egrep '([^\.])+([0-9A-Za-z-]+)\.([A-Za-z]{3})+(\.([A-Za-z]{2}))?$');
if [ -z $DOM ]; then
echo -e "\\033[1;31mFormato do dominio invalido!!!\\033[0;39m"
echo -e "O formato correto e: \\033[1;33mdominio.com(.br)\\033[0;39m"
_MENU
fi
}
#------------------------------------------------------------------------------
#- FUNCAO _SUBVERSION ---------------------------------------------------------
_SUBVERSION () {
if [ "$OPT" = "Criar Dominio" ]; then
echo -n "Criando repositorio SVN do dominio ${DOMAIN}..."
${SVNADMIN} create ${SVN_DIR}/${DOMAIN}
_CHECKOK
echo -n "Criando entrada do repositorio SVN do dominio ${DOMAIN} no apache ..."
$CAT << EOF > $SVN_APACHE/${DOMAIN}
<Location $PAGINA_WEB/${DOMAIN}>
DAV svn
SVNPath ${SVN_DIR}/${DOMAIN}
AuthType Basic
AuthName "Repositorio ${DOMAIN}"
# <LimitExcept GET PROPFIND OPTIONS REPORT>
# AuthUserFile ${ARQUIVO_SENHA}
# AuthzSVNAccessFile $SVN_APACHE/${DOMAIN}
# Require valid-user
# </LimitExcept>
</Location>
EOF
_CHECKOK
#echo -n "Mudando as permissoes de escrita do diretorio ${SVN_DIR}/${DOMAIN} ..."
#$CHMOD -R g+ws ${SVN_DIR}/${DOMAIN}
#_CHECKOK
echo -n "Mudando as permissoes de usuario do diretorio ${SVN_DIR}/${DOMAIN} ..."
$CHOWN -R ${WWW_USER} ${SVN_DIR}/${DOMAIN}
_CHECKOK
elif [ "$OPT" = "Excluir Dominio" ]; then
if [ -d ${SVN_DIR}/${DOMAIN} ]; then
echo -n "Removendo repositorio SVN do dominio ${DOMAIN}..."
$RM -rf ${SVN_DIR}/${DOMAIN}
_CHECKOK
fi
if [ -f ${SVN_APACHE}/${DOMAIN} ]; then
echo -n "Removendo entradas do repositorio SVN do dominio ${DOMAIN} do apache..."
$RM -f ${SVN_APACHE}/${DOMAIN}
_CHECKOK
fi
fi
echo -n "Relendo as configuracoes do apache..."
/etc/init.d/apache2 reload 2>&1 > /dev/null
_CHECKOK
}
#------------------------------------------------------------------------------
#-FUNCAO _DNS_BIND ------------------------------------------------------------
_DNS_BIND () {
if [ "$OPT" = "Criar Dominio" ]; then
echo -n "Adicionando dominio $DOMAIN no DNS..."
$CAT << EOF >> $DNS_FILE
zone "${DOMAIN}" {
type master;
file "db.${DOMAIN}";
allow-transfer { none; };
};
EOF
_CHECKOK
echo -n "Adicionando entradas do dominio $DOMAIN no DNS..."
$CAT << EOF > $DNS_DATA/db.${DOMAIN}
\$TTL 86400
@ IN SOA dns.${DOMAIN}. root.dns.${DOMAIN}. (
`$DATE +%Y%m%d`01 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ) ; Negative Cache TTL
; NS
@ IN NS ns1.${DOMAIN}.
@ IN NS ns2.${DOMAIN}.
@ IN MX 0 mail.${DOMAIN}.
; NAME SERVERS
@ IN A ${IP_WWW}
ns1 IN A ${IP_NS1}
ns2 IN A ${IP_NS2}
dns IN A ${IP_WWW}
; MAIL
mail IN A ${IP_WWW}
; WEB
www IN A ${IP_WWW}
adm IN A ${IP_WWW}
dbadmin IN A ${IP_WWW}
EOF
_CHECKOK
elif [ "$OPT" = "Excluir Dominio" ]; then
echo -n "Removendo dominio $DOMAIN no DNS..."
$SED "/$DOMAIN/,/^};/d" $DNS_FILE > ${DNS_FILE}.tmp
_CHECKOK && $RM -f $DNS_FILE && $MV ${DNS_FILE}.tmp $DNS_FILE
if [ -f $DNS_DATA/db.${DOMAIN} ]; then
echo -n "Removendo entradas do dominio $DOMAIN do DNS..."
$RM -f $DNS_DATA/db.${DOMAIN}
_CHECKOK
fi
fi
echo -n "Relendo as configuracoes do DNS..."
/etc/init.d/bind9 reload 2>&1 > /dev/null
_CHECKOK
}
#------------------------------------------------------------------------------
#- FUNCAO _APACHE -------------------------------------------------------------
_APACHE () {
if [ "$OPT" = "Criar Dominio" ]; then
echo
echo -n -e "\\033[1;33mO dominio tem area administrativa? (s/N) \\033[0;39m"
read SN
if [ -z $SN ] || [ $SN != s ] || [ $SN = n ] || [ $SN = N ]; then
LIST_DIRS="manutencao"
echo -n "Adicionando entradas do dominio ${DOMAIN} do apache..."
$CAT << EOF > $WWW_VIRT/$DOMAIN
<VirtualHost www.$DOMAIN:80>
ServerAdmin webmaster@$DOMAIN
ServerName www.$DOMAIN
ServerAlias $DOMAIN
DocumentRoot $WWW_DIR/$DOMAIN
<Directory $WWW_DIR/$DOMAIN>
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ "$WWW_DIR/$DOMAIN/cgi-bin/"
<Directory "$WWW_DIR/$DOMAIN/cgi-bin/">
AllowOverride All
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ServerSignature Off
</VirtualHost>
EOF
_CHECKOK
elif [ $SN = s ] || [ $SN = S ]; then
LIST_DIRS="backend frontend manutencao"
echo -n "Adicionando entradas do dominio ${DOMAIN} do apache..."
$CAT << EOF > $WWW_VIRT/$DOMAIN
<VirtualHost adm.$DOMAIN:80>
ServerAdmin webmaster@$DOMAIN
ServerAlias adm.$DOMAIN
ServerName adm.$DOMAIN
DocumentRoot $WWW_DIR/$DOMAIN/backend
<Directory $WWW_DIR/$DOMAIN/backend>
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ "$WWW_DIR/$DOMAIN/backend/cgi-bin/"
<Directory "$WWW_DIR/$DOMAIN/backend/cgi-bin/">
AllowOverride All
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ServerSignature Off
</VirtualHost>
<VirtualHost www.$DOMAIN:80>
ServerAdmin webmaster@$DOMAIN
ServerName www.$DOMAIN
ServerAlias $DOMAIN
DocumentRoot $WWW_DIR/$DOMAIN/frontend
<Directory $WWW_DIR/$DOMAIN/frontend>
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ "$WWW_DIR/$DOMAIN/frontend/cgi-bin/"
<Directory "$WWW_DIR/$DOMAIN/frontend/cgi-bin/">
AllowOverride All
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ServerSignature Off
</VirtualHost>
EOF
_CHECKOK
fi
for DIRS in $LIST_DIRS
do
echo -n "Criando diretorio $WWW_DIR/$DOMAIN/$DIRS..."
$MKDIR -p $WWW_DIR/$DOMAIN/$DIRS
_CHECKOK
done
if [ -d $WWW_DIR/$DOMAIN ]; then
echo -n "Setando permissoes de usuario e grupo no diretorio $WWW_DIR/$DOMAIN..."
$CHOWN -R ${WWW_USER}.${DESENV_GROUP} $WWW_DIR/$DOMAIN
_CHECKOK
echo -n "Setando permissoes de escrita no diretorio $WWW_DIR/$DOMAIN..."
$CHMOD -R 2775 $WWW_DIR/$DOMAIN
_CHECKOK
fi
echo -n "Ativando o dominio $DOMAIN no apache..."
$A2ENSITE $DOMAIN 2>&1 > /dev/null
_CHECKOK
elif [ "$OPT" = "Excluir Dominio" ]; then
if [ -d $WWW_DIR/$DOMAIN ]; then
echo -n "Removendo diretorio $WWW_DIR/$DOMAIN..."
$RM -rf $WWW_DIR/$DOMAIN
_CHECKOK
fi
if [ -f $WWW_VIRT/$DOMAIN ]; then
echo -n "Desativando o dominio $DOMAIN no apache..."
$A2DISSITE $DOMAIN 2>&1 > /dev/null
_CHECKOK
echo -n "Removendo entradas do dominio ${DOMAIN} do apache2..."
$RM -f $WWW_VIRT/$DOMAIN
_CHECKOK
fi
fi
echo -n "Relendo as configuracoes do apache2..."
/etc/init.d/apache2 reload 2>&1 > /dev/null
_CHECKOK
}
#------------------------------------------------------------------------------
#- FUNCAO _CREATE_DOMAIN ------------------------------------------------------
_CREATE_DOMAIN () {
_GET_DOMAIN
if [ -d $WWW_DIR/$DOMAIN ]; then
echo -e "\\033[1;33mDominio ja existe!!!\\033[0;39m"
else
_SUBVERSION
_DNS_BIND
_APACHE
fi
echo
echo -e "\\033[1;32mAntes de fazer upload dos arquivos,\\033[0;39m"
echo -e "\\033[1;32mnao esqueca de fazer checkout da pasta no SVN.\\033[0;39m"
}
#------------------------------------------------------------------------------
#- FUNCAO _LIST_DOMAIN --------------------------------------------------------
_LIST_DOMAIN () {
echo
echo -e "\\033[1;33mLista de dominios existentes:\\033[0;39m"
for WWW_LIST in `$LS ${WWW_DIR} 2> /dev/null`
do
echo -e "-> \\033[1;34m$WWW_LIST\\033[0;39m"
done
}
#------------------------------------------------------------------------------
#- FUNCAO _DELETE_DOMAIN ------------------------------------------------------
_DELETE_DOMAIN () {
_LIST_DOMAIN
_GET_DOMAIN
if [ ! -d $WWW_DIR/$DOMAIN ]; then
echo -e "\\033[1;31mDominio nao removido!!!\\033[0;39m"
echo -e "\\033[1;33mDominio inexistente!!!\\033[0;39m"
else
echo -n "Deseja remover o dominio? (s/n): "
read SN
if [ -z $SN ] || [ $SN != s ]; then
echo -e "\\033[1;31mDominio nao removido!!!\\033[0;39m"
else
_SUBVERSION
_DNS_BIND
_APACHE
fi
fi
}
#------------------------------------------------------------------------------
#- FUNCAO _SET_PERMISSIONS ----------------------------------------------------
_SET_PERMISSIONS () {
_LIST_DOMAIN
_GET_DOMAIN
echo -n "Voce ja fez upload de todos os arquivos do site? (s/n) "
read SN
if [ -z $SN ] || [ $SN != s ]; then
echo -e "\\033[1;31mPermissoes nao configuradas!!!\\033[0;39m"
else
CONT_DIRS="acabamentos amostras artes padroes produtos publicacoes"
for CONTDIRS in $CONT_DIRS
do
if [ -d $WWW_DIR/$DOMAIN/backend/arquivos/$CONTDIRS ]; then
echo -n "Setando permissoes em $WWW_DIR/$DOMAIN/backend/arquivos/$CONTDIRS..."
$SETFACL -m g:${CONTENT_GROUP}:rwx $WWW_DIR/$DOMAIN/backend/arquivos/$CONTDIRS
_CHECKOK
fi
done
fi
}
#------------------------------------------------------------------------------
#- FUNCAO _MENU ---------------------------------------------------------------
_MENU () {
unset DOMAIN
echo
echo "Escolha uma opcao a seguir:"
select OPT in "Criar Dominio" "Listar Dominios" "Excluir Dominio" "Setar Permissoes" "Sair";
do
case $OPT in
"Criar Dominio") _CREATE_DOMAIN; _MENU ;;
"Listar Dominios") _LIST_DOMAIN; _MENU ;;
"Excluir Dominio") _DELETE_DOMAIN; _MENU ;;
"Setar Permissoes") _SET_PERMISSIONS; _MENU ;;
"Sair") exit 0;;
*) echo -e "\\033[1;33mForneca uma opcao valida.\\033[0;39m" ;;
esac
done
}
#------------------------------------------------------------------------------
#- EXEC -----------------------------------------------------------------------
clear
echo -e "\\033[1;33m-------------------------------------------------------------\\033[0;39m"
echo -e "\\033[1;33m SISTEMA DE GERENCIAMENTO DO SERVIDOR WEB \\033[0;39m"
echo -e "\\033[1;33m-------------------------------------------------------------\\033[0;39m"
_MENU
#------------------------------------------------------------------------------