# Alltomatos SETUP 0.2.b #!/bin/bash # Exibe a barra de progresso no início # Variável para a versão do setup inicio_instalacao # A seguir, o código que você deseja rodar durante a instalação # Vamos simular uma instalação básica com alguns comandos { apt update > /dev/null 2>&1 echo 20 apt install -y curl > /dev/null 2>&1 echo 30 apt install -y dialog > /dev/null 2>&1 echo 45 apt install -y jq > /dev/null 2>&1 echo 60 apt install -y apt-utils > /dev/null 2>&1 echo 80 apt install -y apparmor-utils > /dev/null 2>&1 echo 100 } | whiptail --gauge "instalando pacotes basicos..." 6 60 0 # Continuar o script de instalação ou outras operações clear whiptail --msgbox "Instalação pacotes concluída com sucesso! Clik em ok e aguarde..." 8 40 sleep 5 # Modificar o arquivo MOTD echo "#####################################" > /etc/motd echo "#### Alltomatos SETUP 0.1-beta ###" >> /etc/motd echo "#####################################" >> /etc/motd echo >> /etc/motdexit echo "Informações:" >> /etc/motd echo >> /etc/motd echo "Acesse: https://alltomatos.com.br/docker/setup-alltomatos/" >> /etc/motd echo >> /etc/motd echo "FAÇA UMA DOAÇÃO: pix@alltomatos.com.br" >> /etc/motd echo >> /etc/motd echo >> /etc/motd # Função para exibir o menu principal show_menu() { option=$(dialog --title "Menu Principal Versao: 0.2.b" --menu "Escolha uma opção:" 15 50 3 \ 1 "Iniciar Instalação" \ 2 "Limpar VPS (apaga tudo)" \ 3 "Reiniciar Portainer" \ 4 "Mudar Porta SSH" \ 5 "Backup e Migração" \ 3>&1 1>&2 2>&3) # Verifica se a opção é nula (usuário clicou em Cancelar) if [ $? -eq 1 ]; then exit 0 fi case $option in 1) iniciar_instalacao ;; 2) limpar_vps ;; 3) reiniciar_portainer ;; 4) mudar_porta_ssh ;; 5) backup_migracao ;; *) dialog --msgbox "Opção inválida. Tente novamente." 5 40 show_menu ;; esac } # Função para a primeira etapa primeira_etapa() { # Verifica se o arquivo alltomatos.ver já existe if [ -f /root/alltomatos.ver ]; then whiptail --msgbox "Instalação já realizada. Indo para a Etapa 2." 8 60 show_menu exit 0 fi # Atualizar o sistema e faz upgrade whiptail --infobox "Atualizando o sistema, por favor aguarde..." 5 60 apt update && apt upgrade -y # Configurar hostname hostname=$(whiptail --inputbox "Qual será o nome do hostname da máquina?" 8 40 3>&1 1>&2 2>&3) echo "$hostname" > /etc/hostname hostnamectl set-hostname "$hostname" # Criar o arquivo alltomatos.ver echo "Data de instalação: $(date)" > /root/alltomatos.ver echo "Versão: 0.1-beta" >> /root/alltomatos.ver echo "Doação: pix@alltomatos.com.br" >> /root/alltomatos.ver echo "Informações" >> /root/alltomatos.ver echo "https://alltomatos.com.br/docker/setup-alltomatos/" >> /root/alltomatos.ver # Mensagem final da primeira etapa whiptail --msgbox "Primeira etapa concluída!\nTecle Enter ou clique em OK para reiniciar o servidor." 8 60 # Reiniciar o sistema reboot } # Função para iniciar a instalação (Etapa 2) iniciar_instalacao() { if [ ! -f /root/alltomatos.ver ]; then dialog --msgbox "A primeira etapa ainda não foi concluída. Execute a primeira etapa antes de continuar." 6 60 exit 1 fi # Criar arquivo de versão echo "Data de instalação: $(date)" > /root/alltomatos.ver echo "Versão: 0.1-beta" >> /root/alltomatos.ver echo "Doação: pix@alltomatos.com.br" >> /root/alltomatos.ver # Instalar Docker dialog --infobox "Instalando o Docker, aguarde e demorado..." 5 40 curl -fsSL https://get.docker.com | bash systemctl enable docker systemctl start docker # Iniciar Docker Swarm dialog --infobox "Iniciando o Docker Swarm..." 5 40 docker swarm init # Criar rede overlay dialog --infobox "Criando rede overlay chamada 'proxy'..." 5 50 docker network create --driver overlay --attachable proxy # Perguntar URL do Portainer dominio_portainer=$(dialog --inputbox "Qual URL você irá usar para o Portainer?" 8 40 3>&1 1>&2 2>&3) # Baixar o arquivo traefik.yaml dialog --infobox "Baixando o arquivo traefik.yaml..." 5 40 curl -o traefik.yaml https://get.alltomatos.com.br/traefik.yaml # Baixar o arquivo redis.yaml dialog --infobox "Baixando o arquivo redis.yaml..." 5 40 curl -o redis.yaml https://get.alltomatos.com.br/redis.yaml # Criar arquivo portainer.yaml dialog --infobox "Criando arquivo portainer.yaml..." 5 40 cat < portainer.yaml version: "3.7" services: agent: image: portainer/agent:2.21.2 volumes: - /var/run/docker.sock:/var/run/docker.sock - /var/lib/docker/volumes:/var/lib/docker/volumes networks: - proxy deploy: mode: global placement: constraints: [node.platform.os == linux] portainer: image: portainer/portainer-ce:2.21.2 command: -H tcp://tasks.agent:9001 --tlsskipverify volumes: - portainer_data:/data networks: - proxy deploy: mode: replicated replicas: 1 placement: constraints: [node.role == manager] labels: - "traefik.enable=true" - "traefik.docker.network=proxy" - "traefik.http.routers.portainer.rule=Host(\`$dominio_portainer\`)" - "traefik.http.routers.portainer.entrypoints=websecure" - "traefik.http.routers.portainer.priority=1" - "traefik.http.routers.portainer.tls.certresolver=letsencryptresolver" - "traefik.http.routers.portainer.service=portainer" - "traefik.http.services.portainer.loadbalancer.server.port=9000" networks: proxy: external: true attachable: true name: proxy volumes: portainer_data: external: true name: portainer_data EOL # Fazer deploy do Traefik dialog --infobox "Fazendo deploy do Traefik..." 5 40 docker stack deploy -c traefik.yaml traefik sleep 10 # Fazer deploy do redis dialog --infobox "Fazendo deploy do redis..." 5 40 docker stack deploy -c redis.yaml redis sleep 10 # Fazer deploy do Portainer dialog --infobox "Fazendo deploy do Portainer..." 5 40 docker stack deploy -c portainer.yaml portainer # Mensagem final dialog --msgbox "Portainer foi instalado com sucesso!\nAguarde 1 min\nAcesse a URL do Portainer em: http://$dominio_portainer\nPor favor, crie um usuário administrador." 10 60 clear } # Função para limpar a VPS limpar_vps() { dialog --msgbox "Essa opção irá apagar todos os containers, volumes e redes.\nVocê tem certeza que deseja continuar?" 10 60 docker system prune -af docker volume prune -f docker network prune -f docker swarm leave --force systemctl stop docker rm -rf /root/alltomatos.ver rm -rf /var/lib/docker dialog --msgbox "VPS limpa com sucesso." 5 40 } # Função para reiniciar o Portainer reiniciar_portainer() { dialog --infobox "Reiniciando o Portainer..." 5 40 docker service update --force portainer_portainer dialog --msgbox "Portainer reiniciado com sucesso." 5 40 } # Função para mudar a porta do SSH mudar_porta_ssh() { nova_porta=$(dialog --inputbox "Digite a nova porta para o SSH:" 8 40 3>&1 1>&2 2>&3) # Verifica se a porta é um número válido if ! [[ "$nova_porta" =~ ^[0-9]+$ ]]; then dialog --msgbox "Porta inválida. Por favor, insira um número válido." 5 40 return fi # Modificar o arquivo de configuração do SSH sed -i "s/^#Port 22/Port $nova_porta/" /etc/ssh/sshd_config sed -i "s/^Port [0-9]\+/Port $nova_porta/" /etc/ssh/sshd_config # Exibir mensagem com a nova porta e informar que o servidor será reiniciado dialog --msgbox "Porta do SSH alterada para $nova_porta com sucesso!\nPressione OK para reiniciar o servidor." 7 50 # Reiniciar o servidor reboot } # Função para exibir a mensagem de "Em Desenvolvimento" com o botão "Voltar" backup_migracao() { dialog --msgbox "Em Desenvolvimento!" 6 40 show_menu } # Verifica se estamos na primeira execução (Etapa 1) if [ ! -f /root/alltomatos.ver ]; then primeira_etapa else show_menu fi