File "srvwebadmin.sh"

Full path: /www/wwwroot/fabriciovc.eti.br/downloads/scripts/srvwebadmin.sh
File size: 13.04 KiB (13350 bytes)
MIME-type: text/x-shellscript
Charset: utf-8

Download   Open   Back

#!/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
#------------------------------------------------------------------------------

PHP File Manager