Script para Gerencia de Domínios no Apache

Prezados colegas,
Primeiramente saudações “pinguianas” a todos!
No artigo anterior eu fiquei de disponibilizar um script no qual a função é fazer a gerência de domínios e subdomínios no Apache com múltiplas versões de PHP no CentOS 7.
Irei disponibilizar nesse post, porém para que ele funcione corretamente, além de você ter configurado o webserver exatamente como ensinei no post anterior, é necessário que tenhamos um servidor de FTP rodando.

Então, antes de disponibilizar o script vou explicar os procedimentos de instalação e configuração do proftpd. É bem simples e rápido.
Vamos colocar a mão na massa! Primeiro, vamos instalar o serviço com o comando abaixo:
yum install proftpd
Agora vamos habilitá-lo para subir no boot sempre que o servidor reiniciar. Faça o comando abaixo:
systemctl enable proftpd
Agora precisamos fazer uma única alteração na configuração de umask, para que sempre que alguém subir um arquivo, ele tem a permissão 644. E se alguém criar algum diretório, ele fique com a permissão 770.
Essas são as permissões que eu considero ideal para o Apache. Mas se desejar, você pode mudar conforme seu conhecimento e sua necessidade.
Para alterar as permissões conforme indiquei, faça-o comando abaixo:
sed -i 's/022/022 007/' /etc/proftpd.conf
Agora, precisamos iniciar o serviço:
systemctl start proftpd
E para finalizar, precisamos liberar a porta do FTP no firewall. Caso você esteja utilizando firewall nativo do CentOS 7, faça os dois comandos abaixo:
firewall-cmd --permanent --zone=public --add-service=ftp firewall-cmd --reload
Com isso, o serviço de FTP estará operacional e devidamente configurado para funcionar de acordo com o nosso script.
Agora, finalmente segue o script. Para baixá-lo, clique aqui. Mas se preferir conferir o código fonte, segue abaixo:
#!/bin/bash
Principal() {
clear ; read -p '
####################################################
######## SISTEMA DE MANIPULAÇÃO DE DOMÍNIOS ########
## ##
## Esse sistema foi escrito por Henrique Fagundes ##
## todos os direitos são reservardos. ##
## ##
############## www.aprendendolinux.com #############
####################################################
O que deseja fazer?
1. Adicionar um novo domínio
2. Adicionar um sub-domínio
3. Remover um domínio
4. Remover um sub-domínio
5. Listar domínios
6. Sair
Qual a opção desejada? ' opcao
case $opcao in
1) Adicionar_Dominio ;;
2) Adicionar_Subdominio ;;
3) Remover_Dominio ;;
4) Remover_Subdominio ;;
5) Listar_Dominios ;;
6) exit ;;
*) echo ; echo 'Opção desconhecida, tente novamente!' ; sleep 3 ; clear ; Principal ;;
esac
}
Adicionar_Dominio() {
clear ; read -p '
####################################################
# Aqui você vai inserir o PREFIXO do domínio que #
# deseja ADICIONAR. Por exemplo: se seu dominio #
# for "linux.com.br", o PREFIXO é "linux". #
####################################################
Então, qual o PREFIXO do domínio que deseja ADICIONAR? ' prefixo
clear ; read -p '
####################################################
# Agora você deve inserir o SUFIXO do domínio que #
# deseja ADICIONAR. Por exemplo: se seu domínio #
# for "linux.com.br", o SUFIXO é "com.br". #
####################################################
Então, qual o SUFIXO do domínio que deseja ADICIONAR? ' sufixo
useradd $prefixo -m -d /var/www/$prefixo.$sufixo -k /etc/skel -s /bin/bash
usermod -g apache $prefixo
clear ; read -p '
####################################################
# Muito bem, agora precisamos definir a senha para #
# o seu domínio. A senha aparecera em texto puro, #
# entao, tenha certeza que nao tenha ninguem por #
# perto olhando, ok? Cuide da seguranca! #
####################################################
Qual a senha que você deseja para esse domínio? ' senha
echo "$prefixo":"$senha" | chpasswd
mkdir /var/log/httpd/$prefixo.$sufixo /etc/httpd/conf.d/$prefixo.$sufixo /var/www/$prefixo.$sufixo/www
versao_php_raiz_do_site() {
clear ; read -p '
Qual versão do PHP a raiz do site (www.'$prefixo'.'$sufixo') vai usar?
1. 5.6
2. 7.3
Qual a opção desejada? ' opcao
case $opcao in
1) 5.6 ;;
2) 7.3 ;;
*) echo ; echo 'Opção desconhecida, tente novamente!' ; versao_php_raiz_do_site ;;
esac
}
5.6() {
versao_php="56"
}
7.3() {
versao_php="73"
}
versao_php_raiz_do_site
cat > /etc/httpd/conf.d/$prefixo.$sufixo/www.conf << EOF
<VirtualHost *:80>
ServerName www.$prefixo.$sufixo
DocumentRoot /var/www/$prefixo.$sufixo/www
<Directory /var/www/$prefixo.$sufixo/www>
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:90$versao_php"
</FilesMatch>
DirectoryIndex index.php index.htm index.html
</Directory>
ErrorLog /var/log/httpd/$prefixo.$sufixo/www-error.log
CustomLog /var/log/httpd/$prefixo.$sufixo/www-access.log combined
</VirtualHost>
EOF
chmod -R 755 /var/www/$prefixo.$sufixo
chown apache:apache /var/www/$prefixo.$sufixo
chown -R $prefixo:apache /var/www/$prefixo.$sufixo/*
chown $prefixo:$prefixo /var/www/$prefixo.$sufixo/.bas* 2>&- 1>&-
chown $prefixo:$prefixo /var/www/$prefixo.$sufixo/.profile 2>&- 1>&-
systemctl restart httpd
clear ; echo "Domínio $prefixo.$sufixo adicionado com sucesso" ; sleep 3 ; clear ; Principal
}
Adicionar_Subdominio() {
clear ; read -p '
####################################################
# Aqui você vai inserir o PREFIXO do domínio no #
# qual deseja ADICIONAR um SUB-DOMÍNIO. Por #
# exemplo: Se seu dominio for "linux.com.br", o #
# PREFIXO é "linux". #
####################################################
Então, qual o PREFIXO do domínio no qual você pretende adicionar o SUB-DOMÍNIO? ' prefixo
clear ; read -p '
####################################################
# Agora você deve inserir o SUFIXO do domínio no #
# qual deseja ADICIONAR um SUB-DOMÍNIO. Por #
# exemplo: se seu domínio "linux.com.br", o SUFIXO #
# é "com.br". #
####################################################
Então, qual o SUFIXO do domínio no qual você pretende adicionar o SUB-DOMÍNIO? ' sufixo
clear ; read -p '
####################################################
# Agora você deve inserir o PREFIXO DO SUBDOMÍNIO. #
# Por exemplo, se você deseja criar o sub-domínio #
# centos.linux.com.br, insira o PREFIXO "centos". #
####################################################
Então, qual o PREFIXO do SUB-DOMÍNIO que deseja criar? ' subdominio
VERIFICA=$(ls -l /etc/httpd/conf.d/ | awk '/^d/ { print $9 }' | grep $prefixo.$sufixo)
if [ "$VERIFICA" = "$prefixo.$sufixo" ]
then
mkdir /var/www/$prefixo.$sufixo/$subdominio
chmod -R 775 /var/www/$prefixo.$sufixo/$subdominio
versao_php_do_subdominio() {
clear ; read -p '
Qual versão do PHP a raiz do site ('$subdominio'.'$prefixo'.'$sufixo') vai usar?
1. 5.6
2. 7.3
Qual a opção desejada? ' opcao
case $opcao in
1) 5.6 ;;
2) 7.3 ;;
*) echo ; echo 'Opção desconhecida, tente novamente!' ; versao_php_do_subdominio ;;
esac
}
5.6() {
versao_php="56"
}
7.3() {
versao_php="73"
}
versao_php_do_subdominio
cat > /etc/httpd/conf.d/$prefixo.$sufixo/$subdominio.conf << EOF
<VirtualHost *:80>
ServerName $subdominio.$prefixo.$sufixo
ServerAlias $subdominio
DocumentRoot /var/www/$prefixo.$sufixo/$subdominio
<Directory /var/www/$prefixo.$sufixo/$subdominio>
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:90$versao_php"
</FilesMatch>
DirectoryIndex index.php index.htm index.html
</Directory>
ErrorLog /var/log/httpd/$prefixo.$sufixo/$subdominio-error.log
CustomLog /var/log/httpd/$prefixo.$sufixo/$subdominio-access.log combined
</VirtualHost>
EOF
chmod -R 755 /var/www/$prefixo.$sufixo
chown apache:apache /var/www/$prefixo.$sufixo
chown -R $prefixo:apache /var/www/$prefixo.$sufixo/*
chown $prefixo:$prefixo /var/www/$prefixo.$sufixo/.bas* 2>&- 1>&-
chown $prefixo:$prefixo /var/www/$prefixo.$sufixo/.profile 2>&- 1>&-
systemctl restart httpd
clear ; echo "Você criou com sucesso o sub-domínio $subdominio.$prefixo.$sufixo" ; sleep 3 ; clear ; Principal
else
clear ; echo ; echo "Não foi possível criar o sub-domínio desejado porque o domínio $prefixo.$sufixo não existe.
Tente novamente, dessa vez com mais atenção!" ; sleep 3 ; clear ; Principal
fi
}
Remover_Dominio() {
clear ; read -p '
####################################################
# Aqui você vai inserir o PREFIXO do domínio que #
# deseja REMOVER. Por exemplo: se seu dominio for #
# "linux.com.br", o PREFIXO é "linux". #
####################################################
Então, qual o PREFIXO do domínio que deseja remover? ' prefixo
clear ; read -p '
####################################################
# Agora você deve inserir o SUFIXO do domínio que #
# deseja REMOVER. Por exemplo: se seu domínio for #
# "linux.com.br", o SUFIXO é "com.br". #
####################################################
Então, qual o SUFIXO do domínio que deseja remover? ' sufixo
VERIFICA=$(ls -l /etc/httpd/conf.d/ | awk '/^d/ { print $9 }' | grep $prefixo.$sufixo)
if [ "$VERIFICA" = "$prefixo.$sufixo" ]
then
echo ; echo "Removendo o domínio $prefixo.$sufixo, por favor aguarde..." ; sleep 3
groupdel $prefixo
userdel -f $prefixo 2>&- 1>&-
rm -rf /var/www/$prefixo.$sufixo /var/log/httpd/$prefixo.$sufixo /etc/httpd/conf.d/$prefixo.$sufixo
systemctl restart httpd
clear ; echo "Domínio $prefixo.$sufixo removido com sucesso!" ; sleep 3 ; clear ; Principal
else
clear ; echo ; echo "O domínio que você tentou remover foi "$prefixo.$sufixo" e esse domínio não foi encontrado.
Tente novamente, digitando corretamente o prefixo e o sufixo do domínio." ; sleep 3 ; clear ; Principal
fi
}
Remover_Subdominio() {
clear ; read -p '
####################################################
# Aqui você vai inserir o NOME COMPLETO do domínio #
# no qual deseja REMOVER um SUB-DOMÍNIO. Por #
# exemplo: "linux.com.br". #
####################################################
Então, qual o NOME COMPLETO do DOMÍNIO no qual deseja remover o SUB-DOMÍNIO? ' dominio
clear ; read -p '
####################################################
# Agora você deve inserir o PREFIXO DO SUBDOMÍNIO #
# que deseja remover. Por exemplo, se você deseja #
# remover o sub-domínio debian.linux.com.br, #
# insira o PREFIXO "debian". #
####################################################
Então, qual o PREFIXO do SUB-DOMÍNIO que deseja remover? ' subdominio
VERIFICA=$(ls /etc/httpd/conf.d/$dominio/ | grep $subdominio.conf | awk '{ print $1 }')
if [ "$VERIFICA" = "$subdominio.conf" ]
then
echo ; echo "Removendo o sub-domínio $subdominio.$dominio, por favor aguarde..." ; sleep 3
rm -rf /var/www/$dominio/$subdominio /etc/httpd/conf.d/$dominio/$subdominio.conf /var/log/httpd/$dominio/$subdominio_*
systemctl restart httpd
clear ; echo "O sub-domínio $subdominio.$dominio foi removido com sucesso!" ; sleep 3 ; clear ; Principal
else
clear ; echo ; echo "O Sub-domínio que você tentou remover foi "$subdominio.$dominio" e esse sub-domínio não foi encontrado.
Tente novamente, digitando corretamente o domínio completo e o prefixo do sub-domínio." ; sleep 3 ; clear ; Principal
fi
}
Listar_Dominios(){
clear ; echo '
####################################################
# Esse é o resultado do comando abaixo: #
# $ sudo ls /etc/httpd/conf.d/ #
# Essa lista contém todos os domínios hospedados #
# nesse servidor. #
####################################################
'
ls -l /etc/httpd/conf.d/ | awk '/^d/ { print $9 }'
Voltar(){
read -p '
Digite "1" para voltar e "2" para sair: ' listar
case $listar in
1) opcao_1 ;;
2) opcao_2 ;;
esac
}
opcao_1() {
clear
Principal
}
opcao_2() {
exit
}
Voltar
}
clear ; Principal
Isso é tudo!
Esse artigo foi útil? Colabore com o nosso site para podermos continuar dando mais dicas como essa!

Formas de doação:
- Boleto / Cartão de crédito: https//bit.ly/AprendendoLinux
- Pix: [email protected]
- PicPay: @henrique_fagundes
- PayPal: [email protected]
- Bitcoin: bc1qtnn5z058htzy799dslwrpjcdpm0vuta3vrj28l

Favorecido: Luiz Henrique Marques Fagundes





