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