Installing web environment with shell script

Asked

Viewed 133 times

1

The shell script below performs some simple tasks for me, however, I would like to leave the code a little but elegant:

#!/bin/bash

echo "#######################"
echo "Preparando servidor web"
echo "#######################"

verificar() {
    if [ $1 = 0 ]; then
            echo -e "\033[32m-> Sucesso\033[0m";
    else
            echo -e "\033[31m-> Erro\033[0m";
    fi
}

echo "Configurando idioma pt_BR"
localedef -c -i pt_BR -f UTF-8 pt_BR.UTF-8 > /dev/null
verificar $?

export LANG=pt_BR.UTF-8

echo "Alterando timezone para America/Sao_Paulo"
timedatectl set-timezone America/Sao_Paulo  > /dev/null
verificar $?

echo "Atualizando lista de pacotes"
apt-get update > /dev/null
verificar $?

echo "Instalando NGINX"
apt-get install nginx -y > /dev/null
verificar $?

echo "Definindo www-data como owner do diretório /var/www"
chown -R www-data:www-data /var/www
verificar $?

echo "Instalando banco de dados MySQL"
apt-get install mysql-server -y > /dev/null
verificar $?

echo "Instalando PHP e modulos essencias"
apt-get install php-fpm php-mysql php-curl php-json php-mcrypt php-mbstring php-xml php-imagick -y > /dev/null
verificar $?

echo "Ajustando configuração de segurança do PHP-FPM"
sed -i -e 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/7.0/fpm/php.ini
verificar $?

echo "Reiniciando NGINX"
service nginx restart > /dev/null
verificar $?

echo "Reiniciando PHP-FPM"
service php7.0-fpm restart > /dev/null
verificar $?

echo "Instalando o GIT"
apt-get install git -y > /dev/null
verificar $?

echo "Instalando UNZIP"
apt-get install unzip -y > /dev/null
verificar $?

echo "Ajustando configurações essenciais do MySQL"
sleep 3
SENHA=1QAZxsw2 && echo -e "\n\n$SENHA\n$SENHA\n\nn\n\n" | mysql_secure_installation

Tips, recommendations and guidelines?

  • Will the Code participate in any fashion show? : -) Jokes aside, it is very relative to this business of "elegant code", even more in bash, if it is already commented, spaced and organized, is enough, the rest is Fru-Fru.

  • kkkk. Forgive me for the word "elegant". I would actually like to try to leave the code but functional and practical, however, I’m out of ideas.

  • Suggestions: Write variable statements at the beginning of the script. Write a function with the proper name for each functional part of the script, so you won’t need comments. Implement a flag to enable a debug mode, and not redirect outputs to /dev/null. Enable outputs from stderr for an error file. If possible, do not leave your database password in cleartext.

1 answer

2


I would make a Frufru+ or - like, sorry if there are any mistakes, but I did in the race here. But from what I understand, you can take advantage of the idea

#!/bin/bash
# Nome do script
name="meu_script"
# Diretório de log do mesmo
log_dir="/var/log/$name"
# Arquivo de log
log_file="/$log_dir/$name.log"
# Arquivo de log das instalações
log_install="/$log_dir/$name.apt"
# Pacotes que seram instalados
pkg_install="nginx mysql-server php-fpm php-mysql php-curl php-json php-mcrypt php-mbstring php-xml php-imagick git unzip"
# Nível de log 0="não gera log" 1="gera aquivo de log" 2="gera arquivo de log e saida no terminal" 3="debug"
registra=0
# Cria diretório de log caso não exista
if [[ ! -d $log_dir ]]; then
    mkdir $log_dir
fi
# Debug
if [[ $registra -eq 3 ]]; then
    set -x
fi
# Função de log
Log_apt() {
    if [[ $registra -eq 1 ]]; then
        echo -e "`date "+%h %d %H:%M:%S"` $HOSTNAME $name $1" >> $log_install
    elif [[ $registra -eq 2 ]]; then
        echo -e "`date "+%h %d %H:%M:%S"` $HOSTNAME $name $1" >> $log_install
        echo -e "`date "+%h %d %H:%M:%S"` $HOSTNAME $name $1"
    fi
}
Log() {
    if [[ $registra -eq 1 ]]; then
        echo -e "`date "+%h %d %H:%M:%S"` $HOSTNAME $name $1" >> $log_install
    elif [[ $registra -eq 2 ]]; then
        echo -e "`date "+%h %d %H:%M:%S"` $HOSTNAME $name $1" >> $log_install
        echo -e "`date "+%h %d %H:%M:%S"` $HOSTNAME $name $1"
    fi
}
# Cores
# Verde
c1() {
    echo -e "\e[32;1m$1\e[m"
}
# Vermelho
c2() {
    echo -e "\e[31;1m$1\e[m"
}
# Amarelo
c3() {
    echo -e "\e[33;1m$1\e[m"
}
# Azul claro
c4() {
    echo -e "\e[36;1m$1\e[m"
}
# Linha em branco
l1() {
    echo -e " " >> $LogFile
}
# Loga
Log "`c3 "praparando o servidor web..."`"
Log "`c3 "Configurando idioma pt_BR"`"
# Função que será executada
cmd=$(localedef -c -i pt_BR -f UTF-8 pt_BR.UTF-8 2>&1)
# Caso a função acima de algum erro, registra o erro que ocorreu no arquivo de log
# sem erro registra sucesso
if [[ $? -ne 0 ]]; then
    Log "`c2 "error"` $cmd"
else
    Log "`c1 "sucesso"`"
fi

export LANG=pt_BR.UTF-8
# Loga
Log "`c3 "Alterando timezone para America/Sao_Paulo"`"
# Função que será executada
cmd=$(timedatectl set-timezone America/Sao_Paulo)
# Caso a função acima de algum erro, registra o erro que ocorreu no arquivo de log
# sem erro registra sucesso
if [[ $? -ne 0 ]]; then
    Log "`c2 "error"` $cmd"
else
    Log "`c1 "sucesso"`"
fi
# Esse for irá instalar todos os pacotes definido na variável $pkg_install
for i in $pkg_install; do
    # Registra no arquivo de log de instalação
    Log_apt "`c3 "apt-get install"` `c4 "$i"`"
    # Loga
    Log "`c3 "apt-get install"` `c4 "$i"`"
    # Instala o pacote $i
    apt-get install -y $i >> $log_install 2>&1
    # Loga se a instalação foi bem ou mal sucedida
    if [[ $? -ne 0 ]]; then
        Log "`c1 "apt-get install"` sucesso ao instalar `c1 "$i"`"
    else
        Log "`c2 "apt-get install"` falha ao instalar `c2 "$i"`"
    fi
done
# Loga
Log "`c3 "chown"` definindo www-data como owner do diretório /var/www"
# Função que será executada
cmd=$(chown -R www-data:www-data /var/www 2>&1)
# Caso a função acima de algum erro, registra o erro que ocorreu no arquivo de log
# sem erro registra sucesso
if [[ $? -ne 0 ]]; then
    Log "`c2 "error"` $cmd"
else
    Log "`c1 "sucesso"`"
fi
# Loga
Log "`c3 "reiniciando NGINX"`"
# Função que será executada
cmd=$(service nginx restart 2>&1)
# Caso a função acima de algum erro, registra o erro que ocorreu no arquivo de log
# sem erro registra sucesso
if [[ $? -ne 0 ]]; then
    Log "`c2 "error"` $cmd"
else
    Log "`c1 "sucesso"`"
fi
# Loga
Log "`c3 "reiniciando PHP-FPM"`"
# Função que será executada
cmd=$(service php7.0-fpm restart 2>&1)
# Caso a função acima de algum erro, registra o erro que ocorreu no arquivo de log
# sem erro registra sucesso
if [[ $? -ne 0 ]]; then
    Log "`c2 "error"` $cmd"
else
    Log "`c1 "sucesso"`"
fi
# Loga
Log "`c3 "reiniciando PHP-FPM"`"
# Caso a função acima de algum erro, registra o erro que ocorreu no arquivo de log
# sem erro registra sucesso
cmd=$(service php7.0-fpm restart 2>&1)
if [[ $? -ne 0 ]]; then
    Log "`c2 "error"` $cmd"
else
    Log "`c1 "sucesso"`"
fi
# Loga
Log "`c3 "Ajustando configurações essenciais do MySQL"`"
# Espera
sleep 3
SENHA=1QAZxsw2 && echo -e "\n\n$SENHA\n$SENHA\n\nn\n\n" | mysql_secure_installation
  • Later add comments that help understand the code and help in a web search for the question or answer, including marking keywords in bold, involving words with 2 arteriscos

  • @Alexandrecavaloti code commented, I hope you are better for understanding all.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.