Skip to content

Instantly share code, notes, and snippets.

@PauloLuan
Last active August 26, 2024 12:34
Show Gist options
  • Save PauloLuan/6181b43785d0122a8328780fd77262aa to your computer and use it in GitHub Desktop.
Save PauloLuan/6181b43785d0122a8328780fd77262aa to your computer and use it in GitHub Desktop.
setup.sh
#!/bin/bash
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
versao() {
echo -e " \e[97mVersão do SetupOrion: \e[32mv. 2.5.9\e[0m "
echo -e "\e[32moriondesign.art.br/whatsapp1 \e[97m<----- Grupos no WhatsApp -----> \e[32moriondesign.art.br/whatsapp2\e[0m"
}
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## Cores do Setup
amarelo="\e[33m"
verde="\e[32m"
branco="\e[97m"
bege="\e[93m"
vermelho="\e[91m"
reset="\e[0m"
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
menu_instalador="1"
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
home_directory="$HOME"
dados_vps="${home_directory}/dados_vps/dados_vps"
dados() {
nome_servidor=$(grep "Nome do Servidor:" "$dados_vps" | awk -F': ' '{print $2}')
nome_rede_interna=$(grep "Rede interna:" "$dados_vps" | awk -F': ' '{print $2}')
}
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## Licença do Setup
## copia
direitos_setup() {
echo -e "$amarelo===================================================================================================\e[0m"
echo -e "$amarelo= =\e[0m"
echo -e "$amarelo= $branco Este auto instalador foi desenvolvido para auxiliar na instalação das principais aplicações $amarelo =\e[0m"
echo -e "$amarelo= $branco disponíveis no mercado open source. Já deixo todos os créditos aos desenvolvedores de cada $amarelo =\e[0m"
echo -e "$amarelo= $branco aplicação disponíveis aqui. Este Setup é licenciado sob a Licença MIT (MIT). Você pode usar, $amarelo =\e[0m"
echo -e "$amarelo= $branco copiar, modificar, integrar, publicar, distribuir e/ou vender cópias dos produtos finais, $amarelo =\e[0m"
echo -e "$amarelo= $branco mas deve sempre declarar que OrionDesign ([email protected]) é o autor original $amarelo =\e[0m"
echo -e "$amarelo= $branco destes códigos e atribuir um link para https://oriondesign.art.br/setup $amarelo =\e[0m"
echo -e "$amarelo= =\e[0m"
echo -e "$amarelo===================================================================================================\e[0m"
echo ""
echo ""
}
direitos_instalador() {
echo -e "$amarelo===================================================================================================\e[0m"
echo -e "$amarelo= =\e[0m"
echo -e "$amarelo= $branco Este auto instalador foi desenvolvido para auxiliar na instalação das principais aplicações $amarelo =\e[0m"
echo -e "$amarelo= $branco disponíveis no mercado open source. Já deixo todos os créditos aos desenvolvedores de cada $amarelo =\e[0m"
echo -e "$amarelo= $branco aplicação disponíveis aqui. Este Setup é licenciado sob a Licença MIT (MIT). Você pode usar, $amarelo =\e[0m"
echo -e "$amarelo= $branco copiar, modificar, integrar, publicar, distribuir e/ou vender cópias dos produtos finais, $amarelo =\e[0m"
echo -e "$amarelo= $branco mas deve sempre declarar que OrionDesign ([email protected]) é o autor original $amarelo =\e[0m"
echo -e "$amarelo= $branco destes códigos e atribuir um link para https://oriondesign.art.br/setup $amarelo =\e[0m"
echo -e "$amarelo= =\e[0m"
echo -e "$amarelo===================================================================================================\e[0m"
echo ""
echo ""
read -p "Ao digitar Y você aceita e concorda com as orientações passadas acima (Y/N): " choice
while true; do
case $choice in
Y|y)
return
;;
N|n)
clear
nome_finalizado
echo "Que pena que você não concorda, então estarei encerrando o instalador. Até mais."
sleep 2
clear
exit 1
;;
*)
clear
erro_msg
echo ""
echo ""
echo "Por favor, digite apenas Y ou N."
sleep 2
clear
nome_instalador
direitos_setup
;;
esac
read -p "Ao digitar Y você aceita e concorda com as orientações passadas acima (Y/N): " choice
done
}
## Credenciais Portainerv2.5.0+
info_credenciais(){
echo -e "$amarelo===================================================================================================\e[0m"
echo -e "$amarelo= =\e[0m"
echo -e "$amarelo= $branco A partir da versão 2.5.0 deste Setup foi implementado uma função para realizar deploy dentro $amarelo =\e[0m"
echo -e "$amarelo= $branco do proprio portainer através de uma requisição api. Para que esta nova função funcione em $amarelo =\e[0m"
echo -e "$amarelo= $branco suas proximas instalações, você precisará informar às credenciais de acesso do seu portainer $amarelo =\e[0m"
echo -e "$amarelo= =\e[0m"
echo -e "$amarelo===================================================================================================\e[0m"
echo ""
echo ""
}
## Credito do Setup
creditos_msg() {
echo ""
echo ""
echo -e "$amarelo===================================================================================================\e[0m"
echo -e "$amarelo= $amarelo=\e[0m"
echo -e "$amarelo= $branco Gostaria de contribuir para continuarmos o desenvolvimento deste projeto? $amarelo=\e[0m"
echo -e "$amarelo= $branco Você pode fazer uma doação via PIX: $amarelo=\e[0m"
echo -e "$amarelo= $amarelo=\e[0m"
echo -e "$amarelo= $amarelo [email protected] $amarelo=\e[0m"
echo -e "$amarelo= $amarelo=\e[0m"
echo -e "$amarelo= $branco Se precisar de ajuda/mentoria ou quiser deixar seu feedback $amarelo=\e[0m"
echo -e "$amarelo= $branco Nossa comunidade:$amarelo https://discord.gg/MD5dgNR8My $amarelo=\e[0m"
echo -e "$amarelo= $amarelo=\e[0m"
echo -e "$amarelo= $branco ou via WhatsApp (comunidade SetupOrion) $amarelo=\e[0m"
echo -e "$amarelo= $amarelo https://oriondesign.art.br/whatsapp1 $branco<-- ou -->$amarelo https://oriondesign.art.br/whatsapp2 $amarelo=\e[0m"
echo -e "$amarelo= $amarelo=\e[0m"
echo -e "$amarelo===================================================================================================\e[0m"
echo ""
echo ""
}
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## Mensagens gerais
## Mensagem pedindo para preencher as informações
preencha_as_info() {
echo -e "$amarelo===================================================================================================\e[0m"
echo -e "$amarelo= $amarelo=\e[0m"
echo -e "$amarelo= $branco Preencha as informações solicitadas abaixo $amarelo=\e[0m"
echo -e "$amarelo= $amarelo=\e[0m"
echo -e "$amarelo===================================================================================================\e[0m"
echo ""
echo ""
}
## Mensagem pedindo para verificar se as informações estão certas
conferindo_as_info() {
echo -e "$amarelo===================================================================================================\e[0m"
echo -e "$amarelo= $amarelo=\e[0m"
echo -e "$amarelo= $branco Verifique se os dados abaixos estão certos $amarelo=\e[0m"
echo -e "$amarelo= $amarelo=\e[0m"
echo -e "$amarelo===================================================================================================\e[0m"
echo ""
echo ""
}
## Mensagem de Guarde os dados
guarde_os_dados_msg() {
echo -e "$amarelo===================================================================================================\e[0m"
echo -e "$amarelo= $amarelo=\e[0m"
echo -e "$amarelo= $branco Guarde todos os dados abaixo para evitar futuros transtornos $amarelo=\e[0m"
echo -e "$amarelo= $amarelo=\e[0m"
echo -e "$amarelo===================================================================================================\e[0m"
echo ""
echo ""
}
## Mensagem de Instalando
instalando_msg() {
echo""
echo -e "$amarelo===================================================================================================\e[0m"
echo -e "$amarelo= =\e[0m"
echo -e "$amarelo= $branco ██╗███╗ ██╗███████╗████████╗ █████╗ ██╗ █████╗ ███╗ ██╗██████╗ ██████╗ $amarelo = \e[0m"
echo -e "$amarelo= $branco ██║████╗ ██║██╔════╝╚══██╔══╝██╔══██╗██║ ██╔══██╗████╗ ██║██╔══██╗██╔═══██╗ $amarelo =\e[0m"
echo -e "$amarelo= $branco ██║██╔██╗ ██║███████╗ ██║ ███████║██║ ███████║██╔██╗ ██║██║ ██║██║ ██║ $amarelo =\e[0m"
echo -e "$amarelo= $branco ██║██║╚██╗██║╚════██║ ██║ ██╔══██║██║ ██╔══██║██║╚██╗██║██║ ██║██║ ██║ $amarelo =\e[0m"
echo -e "$amarelo= $branco ██║██║ ╚████║███████║ ██║ ██║ ██║███████╗██║ ██║██║ ╚████║██████╔╝╚██████╔╝ $amarelo =\e[0m"
echo -e "$amarelo= $branco ╚═╝╚═╝ ╚═══╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ ╚═════╝ $amarelo =\e[0m"
echo -e "$amarelo= =\e[0m"
echo -e "$amarelo===================================================================================================\e[0m"
echo ""
echo ""
}
## Mensagem de Erro
erro_msg() {
echo -e "$amarelo===================================================================================================\e[0m"
echo -e "$amarelo= =\e[0m"
echo -e "$amarelo= $branco███████╗██████╗ ██████╗ ██████╗ $amarelo=\e[0m"
echo -e "$amarelo= $branco██╔════╝██╔══██╗██╔══██╗██╔═══██╗ $amarelo=\e[0m"
echo -e "$amarelo= $branco█████╗ ██████╔╝██████╔╝██║ ██║ $amarelo=\e[0m"
echo -e "$amarelo= $branco██╔══╝ ██╔══██╗██╔══██╗██║ ██║ $amarelo=\e[0m"
echo -e "$amarelo= $branco███████╗██║ ██║██║ ██║╚██████╔╝ $amarelo=\e[0m"
echo -e "$amarelo= $branco╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ $amarelo=\e[0m"
echo -e "$amarelo= =\e[0m"
echo -e "$amarelo===================================================================================================\e[0m"
}
## Mensagem de Instalado
instalado_msg() {
clear
echo ""
echo -e "$amarelo===================================================================================================\e[0m"
echo ""
echo -e "$branco ██╗ ██╗███╗ ██╗███████╗████████╗ █████╗ ██╗ █████╗ ██████╗ ██████╗ ██╗\e[0m"
echo -e "$branco ╚██╗ ██║████╗ ██║██╔════╝╚══██╔══╝██╔══██╗██║ ██╔══██╗██╔══██╗██╔═══██╗ ██╔╝\e[0m"
echo -e "$branco ╚██╗ ██║██╔██╗ ██║███████╗ ██║ ███████║██║ ███████║██║ ██║██║ ██║ ██╔╝ \e[0m"
echo -e "$branco ██╔╝ ██║██║╚██╗██║╚════██║ ██║ ██╔══██║██║ ██╔══██║██║ ██║██║ ██║ ╚██╗ \e[0m"
echo -e "$branco ██╔╝ ██║██║ ╚████║███████║ ██║ ██║ ██║███████╗██║ ██║██████╔╝╚██████╔╝ ╚██╗\e[0m"
echo -e "$branco ╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═════╝ ╚═════╝ ╚═╝\e[0m"
echo ""
echo -e "$amarelo===================================================================================================\e[0m"
echo ""
echo ""
}
## Mensagem de Testando
nome_testando() {
clear
echo ""
echo -e "$branco ████████╗███████╗███████╗████████╗ █████╗ ███╗ ██╗██████╗ ██████╗ \e[0m"
echo -e "$branco ╚══██╔══╝██╔════╝██╔════╝╚══██╔══╝██╔══██╗████╗ ██║██╔══██╗██╔═══██╗\e[0m"
echo -e "$branco ██║ █████╗ ███████╗ ██║ ███████║██╔██╗ ██║██║ ██║██║ ██║\e[0m"
echo -e "$branco ██║ ██╔══╝ ╚════██║ ██║ ██╔══██║██║╚██╗██║██║ ██║██║ ██║\e[0m"
echo -e "$branco ██║ ███████╗███████║ ██║ ██║ ██║██║ ╚████║██████╔╝╚██████╔╝\e[0m"
echo -e "$branco ╚═╝ ╚══════╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ ╚═════╝ \e[0m"
echo ""
echo ""
}
nome_credenciais() {
clear
echo ""
echo -e "$branco ██████╗██████╗ ███████╗██████╗ ███████╗███╗ ██╗ ██████╗██╗ █████╗ ██╗███████╗ \e[0m"
echo -e "$branco ██╔════╝██╔══██╗██╔════╝██╔══██╗██╔════╝████╗ ██║██╔════╝██║██╔══██╗██║██╔════╝ \e[0m"
echo -e "$branco ██║ ██████╔╝█████╗ ██║ ██║█████╗ ██╔██╗ ██║██║ ██║███████║██║███████╗ \e[0m"
echo -e "$branco ██║ ██╔══██╗██╔══╝ ██║ ██║██╔══╝ ██║╚██╗██║██║ ██║██╔══██║██║╚════██║ \e[0m"
echo -e "$branco ╚██████╗██║ ██║███████╗██████╔╝███████╗██║ ╚████║╚██████╗██║██║ ██║██║███████║ \e[0m"
echo -e "$branco ╚═════╝╚═╝ ╚═╝╚══════╝╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═════╝╚═╝╚═╝ ╚═╝╚═╝╚══════╝ \e[0m"
echo -e "$branco \e[0m"
echo -e "$branco ██████╗ ██████╗ ██████╗ ██████╗ ██████╗ ████████╗ █████╗ ██╗███╗ ██╗███████╗██████╗ \e[0m"
echo -e "$branco ██╔══██╗██╔═══██╗ ██╔══██╗██╔═══██╗██╔══██╗╚══██╔══╝██╔══██╗██║████╗ ██║██╔════╝██╔══██╗\e[0m"
echo -e "$branco ██║ ██║██║ ██║ ██████╔╝██║ ██║██████╔╝ ██║ ███████║██║██╔██╗ ██║█████╗ ██████╔╝\e[0m"
echo -e "$branco ██║ ██║██║ ██║ ██╔═══╝ ██║ ██║██╔══██╗ ██║ ██╔══██║██║██║╚██╗██║██╔══╝ ██╔══██╗\e[0m"
echo -e "$branco ██████╔╝╚██████╔╝ ██║ ╚██████╔╝██║ ██║ ██║ ██║ ██║██║██║ ╚████║███████╗██║ ██║\e[0m"
echo -e "$branco ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝\e[0m"
echo ""
echo ""
info_credenciais
}
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## Titulos
## Nome do instalador
nome_instalador() {
clear
echo ""
echo -e "$branco ███████╗███████╗████████╗██╗ ██╗██████╗ ██████╗ ██████╗ ██╗ ██████╗ ███╗ ██╗\e[0m"
echo -e "$branco ██╔════╝██╔════╝╚══██╔══╝██║ ██║██╔══██╗ ██╔═══██╗██╔══██╗██║██╔═══██╗████╗ ██║\e[0m"
echo -e "$branco ███████╗█████╗ ██║ ██║ ██║██████╔╝ ██║ ██║██████╔╝██║██║ ██║██╔██╗ ██║\e[0m"
echo -e "$branco ╚════██║██╔══╝ ██║ ██║ ██║██╔═══╝ ██║ ██║██╔══██╗██║██║ ██║██║╚██╗██║\e[0m"
echo -e "$branco ███████║███████╗ ██║ ╚██████╔╝██║ ╚██████╔╝██║ ██║██║╚██████╔╝██║ ╚████║\e[0m"
echo -e "$branco ╚══════╝╚══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═══╝\e[0m"
echo -e "$branco \e[0m"
echo -e "$branco ██████╗ ███████╗ █████╗ \e[0m"
echo -e "$branco ╚════██╗ ██╔════╝ ██╔══██╗ \e[0m"
echo -e "$branco █████╗ █████╔╝ ███████╗ ╚██████║ █████╗ \e[0m"
echo -e "$branco ╚════╝ ██╔═══╝ ╚════██║ ╚═══██║ ╚════╝ \e[0m"
echo -e "$branco ███████╗██╗███████║██╗█████╔╝ \e[0m"
echo -e "$branco ╚══════╝╚═╝╚══════╝╚═╝╚════╝ \e[0m"
echo ""
}
## Menu de ferramentas
nome_menu() {
clear
echo -e "$amarelo===================================================================================================\e[0m"
echo ""
echo -e "$branco ███╗ ███╗███████╗███╗ ██╗██╗ ██╗ ██████╗ ███████╗ \e[0m"
echo -e "$branco ████╗ ████║██╔════╝████╗ ██║██║ ██║ ██╔══██╗██╔════╝ \e[0m"
echo -e "$branco ██╔████╔██║█████╗ ██╔██╗ ██║██║ ██║ ██║ ██║█████╗ \e[0m"
echo -e "$branco ██║╚██╔╝██║██╔══╝ ██║╚██╗██║██║ ██║ ██║ ██║██╔══╝ \e[0m"
echo -e "$branco ██║ ╚═╝ ██║███████╗██║ ╚████║╚██████╔╝ ██████╔╝███████╗ \e[0m"
echo -e "$branco ╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚══════╝ \e[0m"
echo -e "$branco \e[0m"
echo -e "$branco ███████╗███████╗██████╗ ██████╗ █████╗ ███╗ ███╗███████╗███╗ ██╗████████╗ █████╗ ███████╗\e[0m"
echo -e "$branco ██╔════╝██╔════╝██╔══██╗██╔══██╗██╔══██╗████╗ ████║██╔════╝████╗ ██║╚══██╔══╝██╔══██╗██╔════╝\e[0m"
echo -e "$branco █████╗ █████╗ ██████╔╝██████╔╝███████║██╔████╔██║█████╗ ██╔██╗ ██║ ██║ ███████║███████╗\e[0m"
echo -e "$branco ██╔══╝ ██╔══╝ ██╔══██╗██╔══██╗██╔══██║██║╚██╔╝██║██╔══╝ ██║╚██╗██║ ██║ ██╔══██║╚════██║\e[0m"
echo -e "$branco ██║ ███████╗██║ ██║██║ ██║██║ ██║██║ ╚═╝ ██║███████╗██║ ╚████║ ██║ ██║ ██║███████║\e[0m"
echo -e "$branco ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚══════╝\e[0m"
echo ""
echo -e "$amarelo===================================================================================================\e[0m"
versao
echo ""
}
## Titulo Teste de Email [0]
nome_testeemail() {
clear
echo ""
echo -e "$branco ████████╗███████╗███████╗████████╗███████╗ ██████╗ ███████╗\e[0m"
echo -e "$branco ╚══██╔══╝██╔════╝██╔════╝╚══██╔══╝██╔════╝ ██╔══██╗██╔════╝\e[0m"
echo -e "$branco ██║ █████╗ ███████╗ ██║ █████╗ ██║ ██║█████╗ \e[0m"
echo -e "$branco ██║ ██╔══╝ ╚════██║ ██║ ██╔══╝ ██║ ██║██╔══╝ \e[0m"
echo -e "$branco ██║ ███████╗███████║ ██║ ███████╗ ██████╔╝███████╗\e[0m"
echo -e "$branco ╚═╝ ╚══════╝╚══════╝ ╚═╝ ╚══════╝ ╚═════╝ ╚══════╝\e[0m"
echo -e "$branco \e[0m"
echo -e "$branco ███████╗███╗ ███╗ █████╗ ██╗██╗ \e[0m"
echo -e "$branco ██╔════╝████╗ ████║██╔══██╗██║██║ \e[0m"
echo -e "$branco █████╗ ██╔████╔██║███████║██║██║ \e[0m"
echo -e "$branco ██╔══╝ ██║╚██╔╝██║██╔══██║██║██║ \e[0m"
echo -e "$branco ███████╗██║ ╚═╝ ██║██║ ██║██║███████╗ \e[0m"
echo -e "$branco ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚══════╝ \e[0m"
echo ""
echo ""
}
## Titulo Traefik e Portainer [1]
nome_traefik_e_portainer() {
clear
echo ""
echo -e "$branco ████████╗██████╗ █████╗ ███████╗███████╗██╗██╗ ██╗ ███████╗ \e[0m"
echo -e "$branco ╚══██╔══╝██╔══██╗██╔══██╗██╔════╝██╔════╝██║██║ ██╔╝ ██╔════╝ \e[0m"
echo -e "$branco ██║ ██████╔╝███████║█████╗ █████╗ ██║█████╔╝ █████╗ \e[0m"
echo -e "$branco ██║ ██╔══██╗██╔══██║██╔══╝ ██╔══╝ ██║██╔═██╗ ██╔══╝ \e[0m"
echo -e "$branco ██║ ██║ ██║██║ ██║███████╗██║ ██║██║ ██╗ ███████╗ \e[0m"
echo -e "$branco ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚══════╝ \e[0m"
echo -e "$branco \e[0m"
echo -e "$branco ██████╗ ██████╗ ██████╗ ████████╗ █████╗ ██╗███╗ ██╗███████╗██████╗ \e[0m"
echo -e "$branco ██╔══██╗██╔═══██╗██╔══██╗╚══██╔══╝██╔══██╗██║████╗ ██║██╔════╝██╔══██╗ \e[0m"
echo -e "$branco ██████╔╝██║ ██║██████╔╝ ██║ ███████║██║██╔██╗ ██║█████╗ ██████╔╝ \e[0m"
echo -e "$branco ██╔═══╝ ██║ ██║██╔══██╗ ██║ ██╔══██║██║██║╚██╗██║██╔══╝ ██╔══██╗ \e[0m"
echo -e "$branco ██║ ╚██████╔╝██║ ██║ ██║ ██║ ██║██║██║ ╚████║███████╗██║ ██║ \e[0m"
echo -e "$branco ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝ \e[0m"
echo ""
echo ""
}
## Titulo Chatwoot [2]
nome_chatwoot(){
clear
echo ""
echo -e "$branco ██████╗██╗ ██╗ █████╗ ████████╗██╗ ██╗ ██████╗ ██████╗ ████████╗\e[0m"
echo -e "$branco ██╔════╝██║ ██║██╔══██╗╚══██╔══╝██║ ██║██╔═══██╗██╔═══██╗╚══██╔══╝\e[0m"
echo -e "$branco ██║ ███████║███████║ ██║ ██║ █╗ ██║██║ ██║██║ ██║ ██║ \e[0m"
echo -e "$branco ██║ ██╔══██║██╔══██║ ██║ ██║███╗██║██║ ██║██║ ██║ ██║ \e[0m"
echo -e "$branco ╚██████╗██║ ██║██║ ██║ ██║ ╚███╔███╔╝╚██████╔╝╚██████╔╝ ██║ \e[0m"
echo -e "$branco ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══╝╚══╝ ╚═════╝ ╚═════╝ ╚═╝ \e[0m"
echo ""
echo ""
}
## Titulo Evolution [3]
nome_evolution() {
clear
echo ""
echo -e "$branco ███████╗██╗ ██╗ ██████╗ ██╗ ██╗ ██╗████████╗██╗ ██████╗ ███╗ ██╗ █████╗ ██████╗ ██╗\e[0m"
echo -e "$branco ██╔════╝██║ ██║██╔═══██╗██║ ██║ ██║╚══██╔══╝██║██╔═══██╗████╗ ██║ ██╔══██╗██╔══██╗██║\e[0m"
echo -e "$branco █████╗ ██║ ██║██║ ██║██║ ██║ ██║ ██║ ██║██║ ██║██╔██╗ ██║ ███████║██████╔╝██║\e[0m"
echo -e "$branco ██╔══╝ ╚██╗ ██╔╝██║ ██║██║ ██║ ██║ ██║ ██║██║ ██║██║╚██╗██║ ██╔══██║██╔═══╝ ██║\e[0m"
echo -e "$branco ███████╗ ╚████╔╝ ╚██████╔╝███████╗╚██████╔╝ ██║ ██║╚██████╔╝██║ ╚████║ ██║ ██║██║ ██║\e[0m"
echo -e "$branco ╚══════╝ ╚═══╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Evolution [2.beta]
nome_evolution_v2() {
clear
echo ""
echo -e "$branco ███████╗██╗ ██╗ ██████╗ ██╗ ██╗ ██╗████████╗██╗ ██████╗ ███╗ ██╗ █████╗ ██████╗ ██╗\e[0m"
echo -e "$branco ██╔════╝██║ ██║██╔═══██╗██║ ██║ ██║╚══██╔══╝██║██╔═══██╗████╗ ██║ ██╔══██╗██╔══██╗██║\e[0m"
echo -e "$branco █████╗ ██║ ██║██║ ██║██║ ██║ ██║ ██║ ██║██║ ██║██╔██╗ ██║ ███████║██████╔╝██║\e[0m"
echo -e "$branco ██╔══╝ ╚██╗ ██╔╝██║ ██║██║ ██║ ██║ ██║ ██║██║ ██║██║╚██╗██║ ██╔══██║██╔═══╝ ██║\e[0m"
echo -e "$branco ███████╗ ╚████╔╝ ╚██████╔╝███████╗╚██████╔╝ ██║ ██║╚██████╔╝██║ ╚████║ ██║ ██║██║ ██║\e[0m"
echo -e "$branco ╚══════╝ ╚═══╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝\e[0m"
echo -e "$branco \e[0m"
echo -e "$branco ██╗ ██╗██████╗ ██████╗ \e[0m"
echo -e "$branco ██║ ██║╚════██╗ ██╔═████╗ \e[0m"
echo -e "$branco ██║ ██║ █████╔╝ ██║██╔██║ \e[0m"
echo -e "$branco ╚██╗ ██╔╝██╔═══╝ ████╔╝██║ \e[0m"
echo -e "$branco ╚████╔╝ ███████╗██╗╚██████╔╝ \e[0m"
echo -e "$branco ╚═══╝ ╚══════╝╚═╝ ╚═════╝ \e[0m"
echo ""
echo ""
echo -e "$amarelo===================================================================================================\e[0m"
echo -e "$amarelo= =\e[0m"
echo -e "$amarelo= $branco Esta é uma versão Alfa e não deve ser usada em produção. $amarel=\e[0m"
echo -e "$amarelo= =\e[0m"
echo -e "$amarelo===================================================================================================\e[0m"
echo ""
echo ""
}
## Titulo Minio [4]
nome_minio() {
clear
echo ""
echo -e "$branco ███╗ ███╗██╗███╗ ██╗██╗ ██████╗ \e[0m"
echo -e "$branco ████╗ ████║██║████╗ ██║██║██╔═══██╗\e[0m"
echo -e "$branco ██╔████╔██║██║██╔██╗ ██║██║██║ ██║\e[0m"
echo -e "$branco ██║╚██╔╝██║██║██║╚██╗██║██║██║ ██║\e[0m"
echo -e "$branco ██║ ╚═╝ ██║██║██║ ╚████║██║╚██████╔╝\e[0m"
echo -e "$branco ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝ ╚═════╝ \e[0m"
echo ""
echo ""
}
## Titulo Typebot [5]
nome_typebot() {
clear
echo ""
echo -e "$branco ████████╗██╗ ██╗██████╗ ███████╗██████╗ ██████╗ ████████╗\e[0m"
echo -e "$branco ╚══██╔══╝╚██╗ ██╔╝██╔══██╗██╔════╝██╔══██╗██╔═══██╗╚══██╔══╝\e[0m"
echo -e "$branco ██║ ╚████╔╝ ██████╔╝█████╗ ██████╔╝██║ ██║ ██║ \e[0m"
echo -e "$branco ██║ ╚██╔╝ ██╔═══╝ ██╔══╝ ██╔══██╗██║ ██║ ██║ \e[0m"
echo -e "$branco ██║ ██║ ██║ ███████╗██████╔╝╚██████╔╝ ██║ \e[0m"
echo -e "$branco ╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═════╝ ╚═════╝ ╚═╝ \e[0m"
echo ""
echo ""
}
## Titulo N8N [6]
nome_n8n() {
clear
echo ""
echo -e "$branco ███╗ ██╗ █████╗ ███╗ ██╗\e[0m"
echo -e "$branco ████╗ ██║██╔══██╗████╗ ██║\e[0m"
echo -e "$branco ██╔██╗ ██║╚█████╔╝██╔██╗ ██║\e[0m"
echo -e "$branco ██║╚██╗██║██╔══██╗██║╚██╗██║\e[0m"
echo -e "$branco ██║ ╚████║╚█████╔╝██║ ╚████║\e[0m"
echo -e "$branco ╚═╝ ╚═══╝ ╚════╝ ╚═╝ ╚═══╝\e[0m"
echo ""
echo ""
}
## Titulo Flowise [7]
nome_flowise() {
clear
echo ""
echo -e "$branco ███████╗██╗ ██████╗ ██╗ ██╗██╗███████╗███████╗\e[0m"
echo -e "$branco ██╔════╝██║ ██╔═══██╗██║ ██║██║██╔════╝██╔════╝\e[0m"
echo -e "$branco █████╗ ██║ ██║ ██║██║ █╗ ██║██║███████╗█████╗ \e[0m"
echo -e "$branco ██╔══╝ ██║ ██║ ██║██║███╗██║██║╚════██║██╔══╝ \e[0m"
echo -e "$branco ██║ ███████╗╚██████╔╝╚███╔███╔╝██║███████║███████╗\e[0m"
echo -e "$branco ╚═╝ ╚══════╝ ╚═════╝ ╚══╝╚══╝ ╚═╝╚══════╝╚══════╝\e[0m"
echo ""
echo ""
}
## Titulo PgAdmin [8]
nome_pgAdmin_4() {
clear
echo ""
echo -e "$branco ██████╗ ██████╗ █████╗ ██████╗ ███╗ ███╗██╗███╗ ██╗ ██╗ ██╗\e[0m"
echo -e "$branco ██╔══██╗██╔════╝ ██╔══██╗██╔══██╗████╗ ████║██║████╗ ██║ ██║ ██║\e[0m"
echo -e "$branco ██████╔╝██║ ███╗███████║██║ ██║██╔████╔██║██║██╔██╗ ██║ ███████║\e[0m"
echo -e "$branco ██╔═══╝ ██║ ██║██╔══██║██║ ██║██║╚██╔╝██║██║██║╚██╗██║ ╚════██║\e[0m"
echo -e "$branco ██║ ╚██████╔╝██║ ██║██████╔╝██║ ╚═╝ ██║██║██║ ╚████║ ██║\e[0m"
echo -e "$branco ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Nocobase [9]
nome_nocobase() {
clear
echo ""
echo -e "$branco ███╗ ██╗ ██████╗ ██████╗ ██████╗ ██████╗ █████╗ ███████╗███████╗\e[0m"
echo -e "$branco ████╗ ██║██╔═══██╗██╔════╝██╔═══██╗██╔══██╗██╔══██╗██╔════╝██╔════╝\e[0m"
echo -e "$branco ██╔██╗ ██║██║ ██║██║ ██║ ██║██████╔╝███████║███████╗█████╗ \e[0m"
echo -e "$branco ██║╚██╗██║██║ ██║██║ ██║ ██║██╔══██╗██╔══██║╚════██║██╔══╝ \e[0m"
echo -e "$branco ██║ ╚████║╚██████╔╝╚██████╗╚██████╔╝██████╔╝██║ ██║███████║███████╗\e[0m"
echo -e "$branco ╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝\e[0m"
echo ""
echo ""
}
## Titulo Botpress [10]
nome_botpress() {
clear
echo ""
echo -e "$branco ██████╗ ██████╗ ████████╗██████╗ ██████╗ ███████╗███████╗███████╗\e[0m"
echo -e "$branco ██╔══██╗██╔═══██╗╚══██╔══╝██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝\e[0m"
echo -e "$branco ██████╔╝██║ ██║ ██║ ██████╔╝██████╔╝█████╗ ███████╗███████╗\e[0m"
echo -e "$branco ██╔══██╗██║ ██║ ██║ ██╔═══╝ ██╔══██╗██╔══╝ ╚════██║╚════██║\e[0m"
echo -e "$branco ██████╔╝╚██████╔╝ ██║ ██║ ██║ ██║███████╗███████║███████║\e[0m"
echo -e "$branco ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝\e[0m"
echo ""
echo ""
}
## Titulo Wordpress [11]
nome_wordpress() {
clear
echo ""
echo -e "$branco ██╗ ██╗ ██████╗ ██████╗ ██████╗ ██████╗ ██████╗ ███████╗███████╗███████╗\e[0m"
echo -e "$branco ██║ ██║██╔═══██╗██╔══██╗██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝\e[0m"
echo -e "$branco ██║ █╗ ██║██║ ██║██████╔╝██║ ██║██████╔╝██████╔╝█████╗ ███████╗███████╗\e[0m"
echo -e "$branco ██║███╗██║██║ ██║██╔══██╗██║ ██║██╔═══╝ ██╔══██╗██╔══╝ ╚════██║╚════██║\e[0m"
echo -e "$branco ╚███╔███╔╝╚██████╔╝██║ ██║██████╔╝██║ ██║ ██║███████╗███████║███████║\e[0m"
echo -e "$branco ╚══╝╚══╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝\e[0m"
echo ""
echo ""
}
## Titulo Baserow [12]
nome_baserow() {
clear
echo ""
echo -e "$branco ██████╗ █████╗ ███████╗███████╗██████╗ ██████╗ ██╗ ██╗\e[0m"
echo -e "$branco ██╔══██╗██╔══██╗██╔════╝██╔════╝██╔══██╗██╔═══██╗██║ ██║\e[0m"
echo -e "$branco ██████╔╝███████║███████╗█████╗ ██████╔╝██║ ██║██║ █╗ ██║\e[0m"
echo -e "$branco ██╔══██╗██╔══██║╚════██║██╔══╝ ██╔══██╗██║ ██║██║███╗██║\e[0m"
echo -e "$branco ██████╔╝██║ ██║███████║███████╗██║ ██║╚██████╔╝╚███╔███╔╝\e[0m"
echo -e "$branco ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚══╝╚══╝ \e[0m"
echo ""
echo ""
}
## Titulo MongoDB [13]
nome_mongodb() {
clear
echo ""
echo -e "$branco ███╗ ███╗ ██████╗ ███╗ ██╗ ██████╗ ██████╗ ██████╗ ██████╗ \e[0m"
echo -e "$branco ████╗ ████║██╔═══██╗████╗ ██║██╔════╝ ██╔═══██╗ ██╔══██╗██╔══██╗\e[0m"
echo -e "$branco ██╔████╔██║██║ ██║██╔██╗ ██║██║ ███╗██║ ██║ ██║ ██║██████╔╝\e[0m"
echo -e "$branco ██║╚██╔╝██║██║ ██║██║╚██╗██║██║ ██║██║ ██║ ██║ ██║██╔══██╗\e[0m"
echo -e "$branco ██║ ╚═╝ ██║╚██████╔╝██║ ╚████║╚██████╔╝╚██████╔╝ ██████╔╝██████╔╝\e[0m"
echo -e "$branco ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ \e[0m"
echo ""
echo ""
}
## Titulo RabbitMQ [14]
nome_rabbitmq() {
clear
echo ""
echo -e "$branco ██████╗ █████╗ ██████╗ ██████╗ ██╗████████╗ ███╗ ███╗ ██████╗ \e[0m"
echo -e "$branco ██╔══██╗██╔══██╗██╔══██╗██╔══██╗██║╚══██╔══╝ ████╗ ████║██╔═══██╗\e[0m"
echo -e "$branco ██████╔╝███████║██████╔╝██████╔╝██║ ██║ ██╔████╔██║██║ ██║\e[0m"
echo -e "$branco ██╔══██╗██╔══██║██╔══██╗██╔══██╗██║ ██║ ██║╚██╔╝██║██║▄▄ ██║\e[0m"
echo -e "$branco ██║ ██║██║ ██║██████╔╝██████╔╝██║ ██║ ██║ ╚═╝ ██║╚██████╔╝\e[0m"
echo -e "$branco ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══▀▀═╝ \e[0m"
echo ""
echo ""
}
## Titulo UptimeKuma [15]
nome_uptimekuma() {
clear
echo ""
echo -e "$branco ██╗ ██╗██████╗ ████████╗██╗███╗ ███╗███████╗ ██╗ ██╗██╗ ██╗███╗ ███╗ █████╗ \e[0m"
echo -e "$branco ██║ ██║██╔══██╗╚══██╔══╝██║████╗ ████║██╔════╝ ██║ ██╔╝██║ ██║████╗ ████║██╔══██╗\e[0m"
echo -e "$branco ██║ ██║██████╔╝ ██║ ██║██╔████╔██║█████╗ █████╔╝ ██║ ██║██╔████╔██║███████║\e[0m"
echo -e "$branco ██║ ██║██╔═══╝ ██║ ██║██║╚██╔╝██║██╔══╝ ██╔═██╗ ██║ ██║██║╚██╔╝██║██╔══██║\e[0m"
echo -e "$branco ╚██████╔╝██║ ██║ ██║██║ ╚═╝ ██║███████╗ ██║ ██╗╚██████╔╝██║ ╚═╝ ██║██║ ██║\e[0m"
echo -e "$branco ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Calcom [16]
nome_calcom() {
clear
echo ""
echo -e "$branco ██████╗ █████╗ ██╗ ██████╗ ██████╗ ███╗ ███╗\e[0m"
echo -e "$branco ██╔════╝██╔══██╗██║ ██╔════╝██╔═══██╗████╗ ████║\e[0m"
echo -e "$branco ██║ ███████║██║ ██║ ██║ ██║██╔████╔██║\e[0m"
echo -e "$branco ██║ ██╔══██║██║ ██║ ██║ ██║██║╚██╔╝██║\e[0m"
echo -e "$branco ╚██████╗██║ ██║███████╗██╗╚██████╗╚██████╔╝██║ ╚═╝ ██║\e[0m"
echo -e "$branco ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Mautic [17]
nome_mautic(){
clear
echo ""
echo -e "$branco ███╗ ███╗ █████╗ ██╗ ██╗████████╗██╗ ██████╗\e[0m"
echo -e "$branco ████╗ ████║██╔══██╗██║ ██║╚══██╔══╝██║██╔════╝\e[0m"
echo -e "$branco ██╔████╔██║███████║██║ ██║ ██║ ██║██║ \e[0m"
echo -e "$branco ██║╚██╔╝██║██╔══██║██║ ██║ ██║ ██║██║ \e[0m"
echo -e "$branco ██║ ╚═╝ ██║██║ ██║╚██████╔╝ ██║ ██║╚██████╗\e[0m"
echo -e "$branco ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝\e[0m"
echo ""
echo ""
}
## Titulo Appsmith [18]
nome_appsmith() {
clear
echo ""
echo -e "$branco █████╗ ██████╗ ██████╗ ███████╗███╗ ███╗██╗████████╗██╗ ██╗\e[0m"
echo -e "$branco ██╔══██╗██╔══██╗██╔══██╗██╔════╝████╗ ████║██║╚══██╔══╝██║ ██║\e[0m"
echo -e "$branco ███████║██████╔╝██████╔╝███████╗██╔████╔██║██║ ██║ ███████║\e[0m"
echo -e "$branco ██╔══██║██╔═══╝ ██╔═══╝ ╚════██║██║╚██╔╝██║██║ ██║ ██╔══██║\e[0m"
echo -e "$branco ██║ ██║██║ ██║ ███████║██║ ╚═╝ ██║██║ ██║ ██║ ██║\e[0m"
echo -e "$branco ╚═╝ ╚═╝╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Qdrant [19]
nome_qdrant() {
clear
echo ""
echo -e "$branco ██████╗ ██████╗ ██████╗ █████╗ ███╗ ██╗████████╗\e[0m"
echo -e "$branco ██╔═══██╗██╔══██╗██╔══██╗██╔══██╗████╗ ██║╚══██╔══╝\e[0m"
echo -e "$branco ██║ ██║██║ ██║██████╔╝███████║██╔██╗ ██║ ██║ \e[0m"
echo -e "$branco ██║▄▄ ██║██║ ██║██╔══██╗██╔══██║██║╚██╗██║ ██║ \e[0m"
echo -e "$branco ╚██████╔╝██████╔╝██║ ██║██║ ██║██║ ╚████║ ██║ \e[0m"
echo -e "$branco ╚══▀▀═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ \e[0m"
echo ""
echo ""
}
## Titulo WoofedCRM [20]
nome_woofedcrm() {
clear
echo ""
echo -e "$branco ██╗ ██╗ ██████╗ ██████╗ ███████╗███████╗██████╗ ██████╗██████╗ ███╗ ███╗\e[0m"
echo -e "$branco ██║ ██║██╔═══██╗██╔═══██╗██╔════╝██╔════╝██╔══██╗ ██╔════╝██╔══██╗████╗ ████║\e[0m"
echo -e "$branco ██║ █╗ ██║██║ ██║██║ ██║█████╗ █████╗ ██║ ██║ ██║ ██████╔╝██╔████╔██║\e[0m"
echo -e "$branco ██║███╗██║██║ ██║██║ ██║██╔══╝ ██╔══╝ ██║ ██║ ██║ ██╔══██╗██║╚██╔╝██║\e[0m"
echo -e "$branco ╚███╔███╔╝╚██████╔╝╚██████╔╝██║ ███████╗██████╔╝ ╚██████╗██║ ██║██║ ╚═╝ ██║\e[0m"
echo -e "$branco ╚══╝╚══╝ ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝╚═════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Formbricks [21]
nome_formbricks() {
clear
echo ""
echo -e "$branco ███████╗ ██████╗ ██████╗ ███╗ ███╗██████╗ ██████╗ ██╗ ██████╗██╗ ██╗███████╗\e[0m"
echo -e "$branco ██╔════╝██╔═══██╗██╔══██╗████╗ ████║██╔══██╗██╔══██╗██║██╔════╝██║ ██╔╝██╔════╝\e[0m"
echo -e "$branco █████╗ ██║ ██║██████╔╝██╔████╔██║██████╔╝██████╔╝██║██║ █████╔╝ ███████╗\e[0m"
echo -e "$branco ██╔══╝ ██║ ██║██╔══██╗██║╚██╔╝██║██╔══██╗██╔══██╗██║██║ ██╔═██╗ ╚════██║\e[0m"
echo -e "$branco ██║ ╚██████╔╝██║ ██║██║ ╚═╝ ██║██████╔╝██║ ██║██║╚██████╗██║ ██╗███████║\e[0m"
echo -e "$branco ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝\e[0m"
echo ""
echo ""
}
## Titulo NocoDB [22]
nome_nocodb() {
clear
echo ""
echo -e "$branco ███╗ ██╗ ██████╗ ██████╗ ██████╗ ██████╗ ██████╗ \e[0m"
echo -e "$branco ████╗ ██║██╔═══██╗██╔════╝██╔═══██╗██╔══██╗██╔══██╗\e[0m"
echo -e "$branco ██╔██╗ ██║██║ ██║██║ ██║ ██║██║ ██║██████╔╝\e[0m"
echo -e "$branco ██║╚██╗██║██║ ██║██║ ██║ ██║██║ ██║██╔══██╗\e[0m"
echo -e "$branco ██║ ╚████║╚██████╔╝╚██████╗╚██████╔╝██████╔╝██████╔╝\e[0m"
echo -e "$branco ╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ \e[0m"
echo ""
echo ""
}
## Titulo Langfuse [23]
nome_langfuse() {
clear
echo ""
echo -e "$branco ██╗ █████╗ ███╗ ██╗ ██████╗ ███████╗██╗ ██╗███████╗███████╗\e[0m"
echo -e "$branco ██║ ██╔══██╗████╗ ██║██╔════╝ ██╔════╝██║ ██║██╔════╝██╔════╝\e[0m"
echo -e "$branco ██║ ███████║██╔██╗ ██║██║ ███╗█████╗ ██║ ██║███████╗█████╗ \e[0m"
echo -e "$branco ██║ ██╔══██║██║╚██╗██║██║ ██║██╔══╝ ██║ ██║╚════██║██╔══╝ \e[0m"
echo -e "$branco ███████╗██║ ██║██║ ╚████║╚██████╔╝██║ ╚██████╔╝███████║███████╗\e[0m"
echo -e "$branco ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝╚══════╝\e[0m"
echo ""
echo ""
}
## Titulo Metabase [24]
nome_metabase() {
clear
echo ""
echo -e "$branco ███╗ ███╗███████╗████████╗ █████╗ ██████╗ █████╗ ███████╗███████╗\e[0m"
echo -e "$branco ████╗ ████║██╔════╝╚══██╔══╝██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔════╝\e[0m"
echo -e "$branco ██╔████╔██║█████╗ ██║ ███████║██████╔╝███████║███████╗█████╗ \e[0m"
echo -e "$branco ██║╚██╔╝██║██╔══╝ ██║ ██╔══██║██╔══██╗██╔══██║╚════██║██╔══╝ \e[0m"
echo -e "$branco ██║ ╚═╝ ██║███████╗ ██║ ██║ ██║██████╔╝██║ ██║███████║███████╗\e[0m"
echo -e "$branco ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝\e[0m"
echo ""
echo ""
}
## Titulo Odoo [25]
nome_odoo() {
clear
echo ""
echo -e "$branco ██████╗ ██████╗ ██████╗ ██████╗ \e[0m"
echo -e "$branco ██╔═══██╗██╔══██╗██╔═══██╗██╔═══██╗\e[0m"
echo -e "$branco ██║ ██║██║ ██║██║ ██║██║ ██║\e[0m"
echo -e "$branco ██║ ██║██║ ██║██║ ██║██║ ██║\e[0m"
echo -e "$branco ╚██████╔╝██████╔╝╚██████╔╝╚██████╔╝\e[0m"
echo -e "$branco ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ \e[0m"
echo ""
echo ""
}
## Titulo Chatwoot Nestor [26]
nome_unoapi() {
clear
echo ""
echo -e "$branco ██╗ ██╗███╗ ██╗ ██████╗ █████╗ ██████╗ ██╗\e[0m"
echo -e "$branco ██║ ██║████╗ ██║██╔═══██╗ ██╔══██╗██╔══██╗██║\e[0m"
echo -e "$branco ██║ ██║██╔██╗ ██║██║ ██║ ███████║██████╔╝██║\e[0m"
echo -e "$branco ██║ ██║██║╚██╗██║██║ ██║ ██╔══██║██╔═══╝ ██║\e[0m"
echo -e "$branco ╚██████╔╝██║ ╚████║╚██████╔╝ ██║ ██║██║ ██║\e[0m"
echo -e "$branco ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Uno API [27]
nome_n8n_quepasa(){
clear
echo ""
echo -e "$branco ███╗ ██╗ █████╗ ███╗ ██╗ ███╗ ██╗ ██████╗ ██████╗ ███████╗███████╗\e[0m"
echo -e "$branco ████╗ ██║██╔══██╗████╗ ██║ ████╗ ██║██╔═══██╗██╔══██╗██╔════╝██╔════╝\e[0m"
echo -e "$branco ██╔██╗ ██║╚█████╔╝██╔██╗ ██║ ██╔██╗ ██║██║ ██║██║ ██║█████╗ ███████╗\e[0m"
echo -e "$branco ██║╚██╗██║██╔══██╗██║╚██╗██║ ██║╚██╗██║██║ ██║██║ ██║██╔══╝ ╚════██║\e[0m"
echo -e "$branco ██║ ╚████║╚█████╔╝██║ ╚████║ ██║ ╚████║╚██████╔╝██████╔╝███████╗███████║\e[0m"
echo -e "$branco ╚═╝ ╚═══╝ ╚════╝ ╚═╝ ╚═══╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚══════╝╚══════╝\e[0m"
echo -e "$branco \e[0m"
echo -e "$branco ██████╗ ██████╗ ██████╗ ██╗ ██╗███████╗██████╗ █████╗ ███████╗ █████╗ \e[0m"
echo -e "$branco ██╔══██╗██╔═══██╗ ██╔═══██╗██║ ██║██╔════╝██╔══██╗██╔══██╗██╔════╝██╔══██╗\e[0m"
echo -e "$branco ██║ ██║██║ ██║ ██║ ██║██║ ██║█████╗ ██████╔╝███████║███████╗███████║\e[0m"
echo -e "$branco ██║ ██║██║ ██║ ██║▄▄ ██║██║ ██║██╔══╝ ██╔═══╝ ██╔══██║╚════██║██╔══██║\e[0m"
echo -e "$branco ██████╔╝╚██████╔╝ ╚██████╔╝╚██████╔╝███████╗██║ ██║ ██║███████║██║ ██║\e[0m"
echo -e "$branco ╚═════╝ ╚═════╝ ╚══▀▀═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Quepasa API [29]
nome_quepasa() {
clear
echo ""
echo -e "$branco ██████╗ ██╗ ██╗███████╗██████╗ █████╗ ███████╗ █████╗ \e[0m"
echo -e "$branco ██╔═══██╗██║ ██║██╔════╝██╔══██╗██╔══██╗██╔════╝██╔══██╗\e[0m"
echo -e "$branco ██║ ██║██║ ██║█████╗ ██████╔╝███████║███████╗███████║\e[0m"
echo -e "$branco ██║▄▄ ██║██║ ██║██╔══╝ ██╔═══╝ ██╔══██║╚════██║██╔══██║\e[0m"
echo -e "$branco ╚██████╔╝╚██████╔╝███████╗██║ ██║ ██║███████║██║ ██║\e[0m"
echo -e "$branco ╚══▀▀═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Docuseal [30]
nome_docuseal(){
clear
echo ""
echo -e "$branco ██████╗ ██████╗ ██████╗██╗ ██╗███████╗███████╗ █████╗ ██╗ \e[0m"
echo -e "$branco ██╔══██╗██╔═══██╗██╔════╝██║ ██║██╔════╝██╔════╝██╔══██╗██║ \e[0m"
echo -e "$branco ██║ ██║██║ ██║██║ ██║ ██║███████╗█████╗ ███████║██║ \e[0m"
echo -e "$branco ██║ ██║██║ ██║██║ ██║ ██║╚════██║██╔══╝ ██╔══██║██║ \e[0m"
echo -e "$branco ██████╔╝╚██████╔╝╚██████╗╚██████╔╝███████║███████╗██║ ██║███████╗\e[0m"
echo -e "$branco ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚══════╝╚═╝ ╚═╝╚══════╝\e[0m"
echo ""
echo ""
}
## Titulo Grafana + Prometheus + cAdvisor [31]
nome_monitor() {
clear
echo ""
echo -e "$branco ██████╗ ██████╗ █████╗ ███████╗ █████╗ ███╗ ██╗ █████╗ \e[0m"
echo -e "$branco ██╔════╝ ██╔══██╗██╔══██╗██╔════╝██╔══██╗████╗ ██║██╔══██╗\e[0m"
echo -e "$branco ██║ ███╗██████╔╝███████║█████╗ ███████║██╔██╗ ██║███████║\e[0m"
echo -e "$branco ██║ ██║██╔══██╗██╔══██║██╔══╝ ██╔══██║██║╚██╗██║██╔══██║\e[0m"
echo -e "$branco ╚██████╔╝██║ ██║██║ ██║██║ ██║ ██║██║ ╚████║██║ ██║\e[0m"
echo -e "$branco ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Dify AI [32]
nome_dify() {
clear
echo ""
echo -e "$branco ██████╗ ██╗███████╗██╗ ██╗ █████╗ ██╗\e[0m"
echo -e "$branco ██╔══██╗██║██╔════╝╚██╗ ██╔╝██╔══██╗██║\e[0m"
echo -e "$branco ██║ ██║██║█████╗ ╚████╔╝ ███████║██║\e[0m"
echo -e "$branco ██║ ██║██║██╔══╝ ╚██╔╝ ██╔══██║██║\e[0m"
echo -e "$branco ██████╔╝██║██║ ██║██╗██║ ██║██║\e[0m"
echo -e "$branco ╚═════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Ollama [33]
nome_ollama() {
clear
echo ""
echo -e "$branco ██████╗ ██╗ ██╗ █████╗ ███╗ ███╗ █████╗ \e[0m"
echo -e "$branco ██╔═══██╗██║ ██║ ██╔══██╗████╗ ████║██╔══██╗\e[0m"
echo -e "$branco ██║ ██║██║ ██║ ███████║██╔████╔██║███████║\e[0m"
echo -e "$branco ██║ ██║██║ ██║ ██╔══██║██║╚██╔╝██║██╔══██║\e[0m"
echo -e "$branco ╚██████╔╝███████╗███████╗██║ ██║██║ ╚═╝ ██║██║ ██║\e[0m"
echo -e "$branco ╚═════╝ ╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Affine [34]
nome_affine(){
clear
echo ""
echo -e "$branco █████╗ ███████╗███████╗██╗███╗ ██╗███████╗\e[0m"
echo -e "$branco ██╔══██╗██╔════╝██╔════╝██║████╗ ██║██╔════╝\e[0m"
echo -e "$branco ███████║█████╗ █████╗ ██║██╔██╗ ██║█████╗ \e[0m"
echo -e "$branco ██╔══██║██╔══╝ ██╔══╝ ██║██║╚██╗██║██╔══╝ \e[0m"
echo -e "$branco ██║ ██║██║ ██║ ██║██║ ╚████║███████╗\e[0m"
echo -e "$branco ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝\e[0m"
echo ""
echo ""
}
## Titulo Directus [35]
nome_directus(){
clear
echo ""
echo -e "$branco ██████╗ ██╗██████╗ ███████╗ ██████╗████████╗██╗ ██╗███████╗\e[0m"
echo -e "$branco ██╔══██╗██║██╔══██╗██╔════╝██╔════╝╚══██╔══╝██║ ██║██╔════╝\e[0m"
echo -e "$branco ██║ ██║██║██████╔╝█████╗ ██║ ██║ ██║ ██║███████╗\e[0m"
echo -e "$branco ██║ ██║██║██╔══██╗██╔══╝ ██║ ██║ ██║ ██║╚════██║\e[0m"
echo -e "$branco ██████╔╝██║██║ ██║███████╗╚██████╗ ██║ ╚██████╔╝███████║\e[0m"
echo -e "$branco ╚═════╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝\e[0m"
echo ""
echo ""
}
## Titulo VaultWarden [36]
nome_vaultwarden() {
clear
echo ""
echo -e "$branco ██╗ ██╗ █████╗ ██╗ ██╗██╗ ████████╗██╗ ██╗ █████╗ ██████╗ ██████╗ ███████╗███╗ ██╗\e[0m"
echo -e "$branco ██║ ██║██╔══██╗██║ ██║██║ ╚══██╔══╝██║ ██║██╔══██╗██╔══██╗██╔══██╗██╔════╝████╗ ██║\e[0m"
echo -e "$branco ██║ ██║███████║██║ ██║██║ ██║ ██║ █╗ ██║███████║██████╔╝██║ ██║█████╗ ██╔██╗ ██║\e[0m"
echo -e "$branco ╚██╗ ██╔╝██╔══██║██║ ██║██║ ██║ ██║███╗██║██╔══██║██╔══██╗██║ ██║██╔══╝ ██║╚██╗██║\e[0m"
echo -e "$branco ╚████╔╝ ██║ ██║╚██████╔╝███████╗██║ ╚███╔███╔╝██║ ██║██║ ██║██████╔╝███████╗██║ ╚████║\e[0m"
echo -e "$branco ╚═══╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚══╝╚══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚══════╝╚═╝ ╚═══╝\e[0m"
echo ""
echo ""
}
## Titulo NextCloud [37]
nome_nextcloud() {
clear
echo ""
echo -e "$branco ███╗ ██╗███████╗██╗ ██╗████████╗ ██████╗██╗ ██████╗ ██╗ ██╗██████╗ \e[0m"
echo -e "$branco ████╗ ██║██╔════╝╚██╗██╔╝╚══██╔══╝██╔════╝██║ ██╔═══██╗██║ ██║██╔══██╗\e[0m"
echo -e "$branco ██╔██╗ ██║█████╗ ╚███╔╝ ██║ ██║ ██║ ██║ ██║██║ ██║██║ ██║\e[0m"
echo -e "$branco ██║╚██╗██║██╔══╝ ██╔██╗ ██║ ██║ ██║ ██║ ██║██║ ██║██║ ██║\e[0m"
echo -e "$branco ██║ ╚████║███████╗██╔╝ ██╗ ██║ ╚██████╗███████╗╚██████╔╝╚██████╔╝██████╔╝\e[0m"
echo -e "$branco ╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ \e[0m"
echo ""
echo ""
}
## Titulo Strapi [38]
nome_strapi() {
clear
echo ""
echo -e "$branco ███████╗████████╗██████╗ █████╗ ██████╗ ██╗\e[0m"
echo -e "$branco ██╔════╝╚══██╔══╝██╔══██╗██╔══██╗██╔══██╗██║\e[0m"
echo -e "$branco ███████╗ ██║ ██████╔╝███████║██████╔╝██║\e[0m"
echo -e "$branco ╚════██║ ██║ ██╔══██╗██╔══██║██╔═══╝ ██║\e[0m"
echo -e "$branco ███████║ ██║ ██║ ██║██║ ██║██║ ██║\e[0m"
echo -e "$branco ╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo PhpMyAdmin [39]
nome_phpmyadmin(){
clear
echo ""
echo -e "$branco ██████╗ ██╗ ██╗██████╗ ███╗ ███╗██╗ ██╗ █████╗ ██████╗ ███╗ ███╗██╗███╗ ██╗\e[0m"
echo -e "$branco ██╔══██╗██║ ██║██╔══██╗ ████╗ ████║╚██╗ ██╔╝ ██╔══██╗██╔══██╗████╗ ████║██║████╗ ██║\e[0m"
echo -e "$branco ██████╔╝███████║██████╔╝ ██╔████╔██║ ╚████╔╝ ███████║██║ ██║██╔████╔██║██║██╔██╗ ██║\e[0m"
echo -e "$branco ██╔═══╝ ██╔══██║██╔═══╝ ██║╚██╔╝██║ ╚██╔╝ ██╔══██║██║ ██║██║╚██╔╝██║██║██║╚██╗██║\e[0m"
echo -e "$branco ██║ ██║ ██║██║ ██║ ╚═╝ ██║ ██║ ██║ ██║██████╔╝██║ ╚═╝ ██║██║██║ ╚████║\e[0m"
echo -e "$branco ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝\e[0m"
echo ""
echo ""
}
## Titulo Supabase [40]
nome_supabase(){
clear
echo ""
echo -e "$branco ███████╗██╗ ██╗██████╗ █████╗ ██████╗ █████╗ ███████╗███████╗\e[0m"
echo -e "$branco ██╔════╝██║ ██║██╔══██╗██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔════╝\e[0m"
echo -e "$branco ███████╗██║ ██║██████╔╝███████║██████╔╝███████║███████╗█████╗ \e[0m"
echo -e "$branco ╚════██║██║ ██║██╔═══╝ ██╔══██║██╔══██╗██╔══██║╚════██║██╔══╝ \e[0m"
echo -e "$branco ███████║╚██████╔╝██║ ██║ ██║██████╔╝██║ ██║███████║███████╗\e[0m"
echo -e "$branco ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝\e[0m"
echo ""
echo ""
}
## Titulo Ntfy [41]
nome_ntfy(){
clear
echo ""
echo -e "$branco ███╗ ██╗████████╗███████╗██╗ ██╗\e[0m"
echo -e "$branco ████╗ ██║╚══██╔══╝██╔════╝╚██╗ ██╔╝\e[0m"
echo -e "$branco ██╔██╗ ██║ ██║ █████╗ ╚████╔╝ \e[0m"
echo -e "$branco ██║╚██╗██║ ██║ ██╔══╝ ╚██╔╝ \e[0m"
echo -e "$branco ██║ ╚████║ ██║ ██║ ██║ \e[0m"
echo -e "$branco ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝ \e[0m"
echo ""
echo ""
}
## Titulo Lowcoder [42]
nome_lowcoder(){
clear
echo ""
echo -e "$branco ██╗ ██████╗ ██╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗██████╗ \e[0m"
echo -e "$branco ██║ ██╔═══██╗██║ ██║██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔══██╗\e[0m"
echo -e "$branco ██║ ██║ ██║██║ █╗ ██║██║ ██║ ██║██║ ██║█████╗ ██████╔╝\e[0m"
echo -e "$branco ██║ ██║ ██║██║███╗██║██║ ██║ ██║██║ ██║██╔══╝ ██╔══██╗\e[0m"
echo -e "$branco ███████╗╚██████╔╝╚███╔███╔╝╚██████╗╚██████╔╝██████╔╝███████╗██║ ██║\e[0m"
echo -e "$branco ╚══════╝ ╚═════╝ ╚══╝╚══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Langflow [43]
nome_langflow() {
clear
echo ""
echo -e "$branco ██╗ █████╗ ███╗ ██╗ ██████╗ ███████╗██╗ ██████╗ ██╗ ██╗\e[0m"
echo -e "$branco ██║ ██╔══██╗████╗ ██║██╔════╝ ██╔════╝██║ ██╔═══██╗██║ ██║\e[0m"
echo -e "$branco ██║ ███████║██╔██╗ ██║██║ ███╗█████╗ ██║ ██║ ██║██║ █╗ ██║\e[0m"
echo -e "$branco ██║ ██╔══██║██║╚██╗██║██║ ██║██╔══╝ ██║ ██║ ██║██║███╗██║\e[0m"
echo -e "$branco ███████╗██║ ██║██║ ╚████║╚██████╔╝██║ ███████╗╚██████╔╝╚███╔███╔╝\e[0m"
echo -e "$branco ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚══════╝ ╚═════╝ ╚══╝╚══╝ \e[0m"
echo ""
echo ""
}
## Titulo OpenProject [44]
nome_openproject() {
clear
echo ""
echo -e "$branco ██████╗ ██████╗ ███████╗███╗ ██╗ ██████╗ ██████╗ ██████╗ ██╗███████╗ ██████╗████████╗\e[0m"
echo -e "$branco ██╔═══██╗██╔══██╗██╔════╝████╗ ██║ ██╔══██╗██╔══██╗██╔═══██╗ ██║██╔════╝██╔════╝╚══██╔══╝\e[0m"
echo -e "$branco ██║ ██║██████╔╝█████╗ ██╔██╗ ██║ ██████╔╝██████╔╝██║ ██║ ██║█████╗ ██║ ██║ \e[0m"
echo -e "$branco ██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██╔═══╝ ██╔══██╗██║ ██║██ ██║██╔══╝ ██║ ██║ \e[0m"
echo -e "$branco ╚██████╔╝██║ ███████╗██║ ╚████║ ██║ ██║ ██║╚██████╔╝╚█████╔╝███████╗╚██████╗ ██║ \e[0m"
echo -e "$branco ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚════╝ ╚══════╝ ╚═════╝ ╚═╝ \e[0m"
echo ""
echo ""
}
## Titulo Zep [45]
nome_zep() {
clear
echo ""
echo -e "$branco ███████╗███████╗██████╗ \e[0m"
echo -e "$branco ╚══███╔╝██╔════╝██╔══██╗\e[0m"
echo -e "$branco ███╔╝ █████╗ ██████╔╝\e[0m"
echo -e "$branco ███╔╝ ██╔══╝ ██╔═══╝ \e[0m"
echo -e "$branco ███████╗███████╗██║ \e[0m"
echo -e "$branco ╚══════╝╚══════╝╚═╝ \e[0m"
echo ""
echo ""
}
## Titulo HumHub [46]
nome_humhub() {
clear
echo ""
echo -e "$branco ██╗ ██╗██╗ ██╗███╗ ███╗██╗ ██╗██╗ ██╗██████╗ \e[0m"
echo -e "$branco ██║ ██║██║ ██║████╗ ████║██║ ██║██║ ██║██╔══██╗\e[0m"
echo -e "$branco ███████║██║ ██║██╔████╔██║███████║██║ ██║██████╔╝\e[0m"
echo -e "$branco ██╔══██║██║ ██║██║╚██╔╝██║██╔══██║██║ ██║██╔══██╗\e[0m"
echo -e "$branco ██║ ██║╚██████╔╝██║ ╚═╝ ██║██║ ██║╚██████╔╝██████╔╝\e[0m"
echo -e "$branco ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ \e[0m"
echo ""
echo ""
}
## Titulo Yourls [47]
nome_yourls() {
clear
echo ""
echo -e "$branco ██╗ ██╗ ██████╗ ██╗ ██╗██████╗ ██╗ ███████╗\e[0m"
echo -e "$branco ╚██╗ ██╔╝██╔═══██╗██║ ██║██╔══██╗██║ ██╔════╝\e[0m"
echo -e "$branco ╚████╔╝ ██║ ██║██║ ██║██████╔╝██║ ███████╗\e[0m"
echo -e "$branco ╚██╔╝ ██║ ██║██║ ██║██╔══██╗██║ ╚════██║\e[0m"
echo -e "$branco ██║ ╚██████╔╝╚██████╔╝██║ ██║███████╗███████║\e[0m"
echo -e "$branco ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝\e[0m"
echo ""
echo ""
}
## Titulo TwentyCRM [48]
nome_twentycrm() {
clear
echo ""
echo -e "$branco ████████╗██╗ ██╗███████╗███╗ ██╗████████╗██╗ ██╗ ██████╗██████╗ ███╗ ███╗\e[0m"
echo -e "$branco ╚══██╔══╝██║ ██║██╔════╝████╗ ██║╚══██╔══╝╚██╗ ██╔╝██╔════╝██╔══██╗████╗ ████║\e[0m"
echo -e "$branco ██║ ██║ █╗ ██║█████╗ ██╔██╗ ██║ ██║ ╚████╔╝ ██║ ██████╔╝██╔████╔██║\e[0m"
echo -e "$branco ██║ ██║███╗██║██╔══╝ ██║╚██╗██║ ██║ ╚██╔╝ ██║ ██╔══██╗██║╚██╔╝██║\e[0m"
echo -e "$branco ██║ ╚███╔███╔╝███████╗██║ ╚████║ ██║ ██║ ╚██████╗██║ ██║██║ ╚═╝ ██║\e[0m"
echo -e "$branco ╚═╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Mattermost [49]
nome_mattermost() {
clear
echo ""
echo -e "$branco ███╗ ███╗ █████╗ ████████╗████████╗███████╗██████╗ ███╗ ███╗ ██████╗ ███████╗████████╗\e[0m"
echo -e "$branco ████╗ ████║██╔══██╗╚══██╔══╝╚══██╔══╝██╔════╝██╔══██╗████╗ ████║██╔═══██╗██╔════╝╚══██╔══╝\e[0m"
echo -e "$branco ██╔████╔██║███████║ ██║ ██║ █████╗ ██████╔╝██╔████╔██║██║ ██║███████╗ ██║ \e[0m"
echo -e "$branco ██║╚██╔╝██║██╔══██║ ██║ ██║ ██╔══╝ ██╔══██╗██║╚██╔╝██║██║ ██║╚════██║ ██║ \e[0m"
echo -e "$branco ██║ ╚═╝ ██║██║ ██║ ██║ ██║ ███████╗██║ ██║██║ ╚═╝ ██║╚██████╔╝███████║ ██║ \e[0m"
echo -e "$branco ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═╝ \e[0m"
echo ""
echo ""
}
## Titulo Outline [50]
nome_outline() {
clear
echo ""
echo -e "$branco ██████╗ ██╗ ██╗████████╗██╗ ██╗███╗ ██╗███████╗\e[0m"
echo -e "$branco ██╔═══██╗██║ ██║╚══██╔══╝██║ ██║████╗ ██║██╔════╝\e[0m"
echo -e "$branco ██║ ██║██║ ██║ ██║ ██║ ██║██╔██╗ ██║█████╗ \e[0m"
echo -e "$branco ██║ ██║██║ ██║ ██║ ██║ ██║██║╚██╗██║██╔══╝ \e[0m"
echo -e "$branco ╚██████╔╝╚██████╔╝ ██║ ███████╗██║██║ ╚████║███████╗\e[0m"
echo -e "$branco ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝╚═╝╚═╝ ╚═══╝╚══════╝\e[0m"
echo ""
echo ""
}
## Titulo FocalBoard [51]
nome_focalboard() {
clear
echo ""
echo -e "$branco ███████╗ ██████╗ ██████╗ █████╗ ██╗ ██████╗ ██████╗ █████╗ ██████╗ ██████╗ \e[0m"
echo -e "$branco ██╔════╝██╔═══██╗██╔════╝██╔══██╗██║ ██╔══██╗██╔═══██╗██╔══██╗██╔══██╗██╔══██╗\e[0m"
echo -e "$branco █████╗ ██║ ██║██║ ███████║██║ ██████╔╝██║ ██║███████║██████╔╝██║ ██║\e[0m"
echo -e "$branco ██╔══╝ ██║ ██║██║ ██╔══██║██║ ██╔══██╗██║ ██║██╔══██║██╔══██╗██║ ██║\e[0m"
echo -e "$branco ██║ ╚██████╔╝╚██████╗██║ ██║███████╗██████╔╝╚██████╔╝██║ ██║██║ ██║██████╔╝\e[0m"
echo -e "$branco ╚═╝ ╚═════╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ \e[0m"
echo ""
echo ""
}
## Titulo GLPI [52]
nome_glpi() {
clear
echo ""
echo -e "$branco ██████╗ ██╗ ██████╗ ██╗\e[0m"
echo -e "$branco ██╔════╝ ██║ ██╔══██╗██║\e[0m"
echo -e "$branco ██║ ███╗██║ ██████╔╝██║\e[0m"
echo -e "$branco ██║ ██║██║ ██╔═══╝ ██║\e[0m"
echo -e "$branco ╚██████╔╝███████╗██║ ██║\e[0m"
echo -e "$branco ╚═════╝ ╚══════╝╚═╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Anything LLM [53]
nome_anythingllm() {
clear
echo ""
echo ""
echo -e "$branco █████╗ ███╗ ██╗██╗ ██╗████████╗██╗ ██╗██╗███╗ ██╗ ██████╗ ██╗ ██╗ ███╗ ███╗\e[0m"
echo -e "$branco ██╔══██╗████╗ ██║╚██╗ ██╔╝╚══██╔══╝██║ ██║██║████╗ ██║██╔════╝ ██║ ██║ ████╗ ████║\e[0m"
echo -e "$branco ███████║██╔██╗ ██║ ╚████╔╝ ██║ ███████║██║██╔██╗ ██║██║ ███╗ ██║ ██║ ██╔████╔██║\e[0m"
echo -e "$branco ██╔══██║██║╚██╗██║ ╚██╔╝ ██║ ██╔══██║██║██║╚██╗██║██║ ██║ ██║ ██║ ██║╚██╔╝██║\e[0m"
echo -e "$branco ██║ ██║██║ ╚████║ ██║ ██║ ██║ ██║██║██║ ╚████║╚██████╔╝ ███████╗███████╗██║ ╚═╝ ██║\e[0m"
echo -e "$branco ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚══════╝╚══════╝╚═╝ ╚═╝\e[0m"
echo ""
echo ""
}
## Titulo Excalidraw [54]
nome_excalidraw() {
clear
echo ""
echo ""
echo -e "$branco ███████╗██╗ ██╗ ██████╗ █████╗ ██╗ ██╗██████╗ ██████╗ █████╗ ██╗ ██╗\e[0m"
echo -e "$branco ██╔════╝╚██╗██╔╝██╔════╝██╔══██╗██║ ██║██╔══██╗██╔══██╗██╔══██╗██║ ██║\e[0m"
echo -e "$branco █████╗ ╚███╔╝ ██║ ███████║██║ ██║██║ ██║██████╔╝███████║██║ █╗ ██║\e[0m"
echo -e "$branco ██╔══╝ ██╔██╗ ██║ ██╔══██║██║ ██║██║ ██║██╔══██╗██╔══██║██║███╗██║\e[0m"
echo -e "$branco ███████╗██╔╝ ██╗╚██████╗██║ ██║███████╗██║██████╔╝██║ ██║██║ ██║╚███╔███╔╝\e[0m"
echo -e "$branco ╚══════╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚══╝╚══╝ \e[0m"
echo ""
echo ""
}
## Titulo Excalidraw [55]
nome_easyappointments() {
clear
echo ""
echo ""
echo -e "$branco ███████╗ █████╗ ███████╗██╗ ██╗██╗ \e[0m"
echo -e "$branco ██╔════╝██╔══██╗██╔════╝╚██╗ ██╔╝██║ \e[0m"
echo -e "$branco █████╗ ███████║███████╗ ╚████╔╝ ██║ \e[0m"
echo -e "$branco ██╔══╝ ██╔══██║╚════██║ ╚██╔╝ ╚═╝ \e[0m"
echo -e "$branco ███████╗██║ ██║███████║ ██║ ██╗ \e[0m"
echo -e "$branco ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ \e[0m"
echo -e "$branco \e[0m"
echo -e "$branco █████╗ ██████╗ ██████╗ ██████╗ ██╗███╗ ██╗████████╗███╗ ███╗███████╗███╗ ██╗████████╗███████╗\e[0m"
echo -e "$branco██╔══██╗██╔══██╗██╔══██╗██╔═══██╗██║████╗ ██║╚══██╔══╝████╗ ████║██╔════╝████╗ ██║╚══██╔══╝██╔════╝\e[0m"
echo -e "$branco███████║██████╔╝██████╔╝██║ ██║██║██╔██╗ ██║ ██║ ██╔████╔██║█████╗ ██╔██╗ ██║ ██║ ███████╗\e[0m"
echo -e "$branco██╔══██║██╔═══╝ ██╔═══╝ ██║ ██║██║██║╚██╗██║ ██║ ██║╚██╔╝██║██╔══╝ ██║╚██╗██║ ██║ ╚════██║\e[0m"
echo -e "$branco██║ ██║██║ ██║ ╚██████╔╝██║██║ ╚████║ ██║ ██║ ╚═╝ ██║███████╗██║ ╚████║ ██║ ███████║\e[0m"
echo -e "$branco╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚══════╝\e[0m"
echo ""
echo ""
}
## Titulo Documenso [56]
nome_documenso() {
clear
echo ""
echo ""
echo -e "$branco ██████╗ ██████╗ ██████╗██╗ ██╗███╗ ███╗███████╗███╗ ██╗███████╗ ██████╗ \e[0m"
echo -e "$branco ██╔══██╗██╔═══██╗██╔════╝██║ ██║████╗ ████║██╔════╝████╗ ██║██╔════╝██╔═══██╗\e[0m"
echo -e "$branco ██║ ██║██║ ██║██║ ██║ ██║██╔████╔██║█████╗ ██╔██╗ ██║███████╗██║ ██║\e[0m"
echo -e "$branco ██║ ██║██║ ██║██║ ██║ ██║██║╚██╔╝██║██╔══╝ ██║╚██╗██║╚════██║██║ ██║\e[0m"
echo -e "$branco ██████╔╝╚██████╔╝╚██████╗╚██████╔╝██║ ╚═╝ ██║███████╗██║ ╚████║███████║╚██████╔╝\e[0m"
echo -e "$branco ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝╚══════╝ ╚═════╝ \e[0m"
echo ""
echo ""
}
## Titulo Moodle [57]
nome_moodle() {
clear
echo ""
echo ""
echo -e "$branco ███╗ ███╗ ██████╗ ██████╗ ██████╗ ██╗ ███████╗\e[0m"
echo -e "$branco ████╗ ████║██╔═══██╗██╔═══██╗██╔══██╗██║ ██╔════╝\e[0m"
echo -e "$branco ██╔████╔██║██║ ██║██║ ██║██║ ██║██║ █████╗ \e[0m"
echo -e "$branco ██║╚██╔╝██║██║ ██║██║ ██║██║ ██║██║ ██╔══╝ \e[0m"
echo -e "$branco ██║ ╚═╝ ██║╚██████╔╝╚██████╔╝██████╔╝███████╗███████╗\e[0m"
echo -e "$branco ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚══════╝\e[0m"
echo ""
echo ""
}
## Titulo ToolJet [58]
nome_tooljet() {
clear
echo ""
echo ""
echo -e "$branco ████████╗ ██████╗ ██████╗ ██╗ ██╗███████╗████████╗\e[0m"
echo -e "$branco ╚══██╔══╝██╔═══██╗██╔═══██╗██║ ██║██╔════╝╚══██╔══╝\e[0m"
echo -e "$branco ██║ ██║ ██║██║ ██║██║ ██║█████╗ ██║ \e[0m"
echo -e "$branco ██║ ██║ ██║██║ ██║██║ ██ ██║██╔══╝ ██║ \e[0m"
echo -e "$branco ██║ ╚██████╔╝╚██████╔╝███████╗╚█████╔╝███████╗ ██║ \e[0m"
echo -e "$branco ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝ ╚════╝ ╚══════╝ ╚═╝ \e[0m"
echo ""
echo ""
}
# ===================================================================================================
## Titulo Saindo do setup
nome_saindo() {
clear
echo ""
echo -e "$branco ███████╗ █████╗ ██╗███╗ ██╗██████╗ ██████╗ ██████╗ ██████╗ \e[0m"
echo -e "$branco ██╔════╝██╔══██╗██║████╗ ██║██╔══██╗██╔═══██╗ ██╔══██╗██╔═══██╗\e[0m"
echo -e "$branco ███████╗███████║██║██╔██╗ ██║██║ ██║██║ ██║ ██║ ██║██║ ██║\e[0m"
echo -e "$branco ╚════██║██╔══██║██║██║╚██╗██║██║ ██║██║ ██║ ██║ ██║██║ ██║\e[0m"
echo -e "$branco ███████║██║ ██║██║██║ ╚████║██████╔╝╚██████╔╝ ██████╔╝╚██████╔╝\e[0m"
echo -e "$branco ╚══════╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ \e[0m"
echo -e "$branco \e[0m"
echo -e "$branco ███████╗███████╗████████╗██╗ ██╗██████╗ \e[0m"
echo -e "$branco ██╔════╝██╔════╝╚══██╔══╝██║ ██║██╔══██╗ \e[0m"
echo -e "$branco ███████╗█████╗ ██║ ██║ ██║██████╔╝ \e[0m"
echo -e "$branco ╚════██║██╔══╝ ██║ ██║ ██║██╔═══╝ \e[0m"
echo -e "$branco ███████║███████╗ ██║ ╚██████╔╝██║ \e[0m"
echo -e "$branco ╚══════╝╚══════╝ ╚═╝ ╚═════╝ ╚═╝ \e[0m"
echo ""
echo ""
}
## Titulo Remover Stack
nome_remover_stack() {
clear
echo -e "$amarelo===================================================================================================\e[0m"
echo ""
echo ""
echo -e "$branco ██████╗ ███████╗███╗ ███╗ ██████╗ ██╗ ██╗███████╗██████╗ \e[0m"
echo -e "$branco ██╔══██╗██╔════╝████╗ ████║██╔═══██╗██║ ██║██╔════╝██╔══██╗\e[0m"
echo -e "$branco ██████╔╝█████╗ ██╔████╔██║██║ ██║██║ ██║█████╗ ██████╔╝\e[0m"
echo -e "$branco ██╔══██╗██╔══╝ ██║╚██╔╝██║██║ ██║╚██╗ ██╔╝██╔══╝ ██╔══██╗\e[0m"
echo -e "$branco ██║ ██║███████╗██║ ╚═╝ ██║╚██████╔╝ ╚████╔╝ ███████╗██║ ██║\e[0m"
echo -e "$branco ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝\e[0m"
echo -e "$branco \e[0m"
echo -e "$branco ███████╗████████╗ █████╗ ██████╗██╗ ██╗ \e[0m"
echo -e "$branco ██╔════╝╚══██╔══╝██╔══██╗██╔════╝██║ ██╔╝ \e[0m"
echo -e "$branco ███████╗ ██║ ███████║██║ █████╔╝ \e[0m"
echo -e "$branco ╚════██║ ██║ ██╔══██║██║ ██╔═██╗ \e[0m"
echo -e "$branco ███████║ ██║ ██║ ██║╚██████╗██║ ██╗ \e[0m"
echo -e "$branco ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ \e[0m"
echo ""
echo ""
echo -e "$amarelo===================================================================================================\e[0m"
echo""
}
nome_portainer.reset() {
echo ""
echo ""
echo -e "$branco ██████╗ ███████╗███████╗███████╗████████╗ █████╗ ███╗ ██╗██████╗ ██████╗ \e[0m"
echo -e "$branco ██╔══██╗██╔════╝██╔════╝██╔════╝╚══██╔══╝██╔══██╗████╗ ██║██╔══██╗██╔═══██╗\e[0m"
echo -e "$branco ██████╔╝█████╗ ███████╗█████╗ ██║ ███████║██╔██╗ ██║██║ ██║██║ ██║\e[0m"
echo -e "$branco ██╔══██╗██╔══╝ ╚════██║██╔══╝ ██║ ██╔══██║██║╚██╗██║██║ ██║██║ ██║\e[0m"
echo -e "$branco ██║ ██║███████╗███████║███████╗ ██║ ██║ ██║██║ ╚████║██████╔╝╚██████╔╝\e[0m"
echo -e "$branco ╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ ╚═════╝ \e[0m"
echo -e "$branco \e[0m"
echo -e "$branco ███████╗███████╗███╗ ██╗██╗ ██╗ █████╗ \e[0m"
echo -e "$branco ██╔════╝██╔════╝████╗ ██║██║ ██║██╔══██╗ \e[0m"
echo -e "$branco ███████╗█████╗ ██╔██╗ ██║███████║███████║ \e[0m"
echo -e "$branco ╚════██║██╔══╝ ██║╚██╗██║██╔══██║██╔══██║ \e[0m"
echo -e "$branco ███████║███████╗██║ ╚████║██║ ██║██║ ██║ \e[0m"
echo -e "$branco ╚══════╝╚══════╝╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝ \e[0m"
echo ""
echo ""
}
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## Defasados
nome_trocar_logos() {
clear
echo ""
echo -e "$branco████████╗██████╗ ██████╗ ██████╗ █████╗ ██████╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗\e[0m"
echo -e "$branco╚══██╔══╝██╔══██╗██╔═══██╗██╔════╝██╔══██╗██╔══██╗ ██║ ██╔═══██╗██╔════╝ ██╔═══██╗██╔════╝\e[0m"
echo -e "$branco ██║ ██████╔╝██║ ██║██║ ███████║██████╔╝ ██║ ██║ ██║██║ ███╗██║ ██║███████╗\e[0m"
echo -e "$branco ██║ ██╔══██╗██║ ██║██║ ██╔══██║██╔══██╗ ██║ ██║ ██║██║ ██║██║ ██║╚════██║\e[0m"
echo -e "$branco ██║ ██║ ██║╚██████╔╝╚██████╗██║ ██║██║ ██║ ███████╗╚██████╔╝╚██████╔╝╚██████╔╝███████║\e[0m"
echo -e "$branco ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝\e[0m"
echo -e "$branco \e[0m"
echo -e "$branco ██████╗ ██████╗ ██████╗██╗ ██╗ █████╗ ████████╗██╗ ██╗ ██████╗ ██████╗ ████████╗ \e[0m"
echo -e "$branco ██╔══██╗██╔═══██╗ ██╔════╝██║ ██║██╔══██╗╚══██╔══╝██║ ██║██╔═══██╗██╔═══██╗╚══██╔══╝ \e[0m"
echo -e "$branco ██║ ██║██║ ██║ ██║ ███████║███████║ ██║ ██║ █╗ ██║██║ ██║██║ ██║ ██║ \e[0m"
echo -e "$branco ██║ ██║██║ ██║ ██║ ██╔══██║██╔══██║ ██║ ██║███╗██║██║ ██║██║ ██║ ██║ \e[0m"
echo -e "$branco ██████╔╝╚██████╔╝ ╚██████╗██║ ██║██║ ██║ ██║ ╚███╔███╔╝╚██████╔╝╚██████╔╝ ██║ \e[0m"
echo -e "$branco ╚═════╝ ╚═════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══╝╚══╝ ╚═════╝ ╚═════╝ ╚═╝ \e[0m"
echo ""
echo ""
}
nome_finalizado() {
clear
echo ""
echo -e "$branco ███████╗██╗███╗ ██╗ █████╗ ██╗ ██╗███████╗ █████╗ ██████╗ ██████╗ \e[0m"
echo -e "$branco ██╔════╝██║████╗ ██║██╔══██╗██║ ██║╚══███╔╝██╔══██╗██╔══██╗██╔═══██╗\e[0m"
echo -e "$branco █████╗ ██║██╔██╗ ██║███████║██║ ██║ ███╔╝ ███████║██║ ██║██║ ██║\e[0m"
echo -e "$branco ██╔══╝ ██║██║╚██╗██║██╔══██║██║ ██║ ███╔╝ ██╔══██║██║ ██║██║ ██║\e[0m"
echo -e "$branco ██║ ██║██║ ╚████║██║ ██║███████╗██║███████╗██║ ██║██████╔╝╚██████╔╝\e[0m"
echo -e "$branco ╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚══════╝╚═╝╚══════╝╚═╝ ╚═╝╚═════╝ ╚═════╝ \e[0m"
echo ""
echo ""
}
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## Menu de opções
#menu_instalador(){
# echo -e "${amarelo}[ 00 ]${reset} - ${branco}Testar SMTP ${verde}| ${reset} ${amarelo}[ 21 ]${reset} - ${branco}Formbricks${reset}"
# echo -e "${amarelo}[ 01 ]${reset} - ${branco}Traefik & Portainer ${verde}| ${reset} ${amarelo}[ 22 ]${reset} - ${branco}NocoDB${reset}"
# echo -e "${amarelo}[ 02 ]${reset} - ${branco}Chatwoot ${verde}| ${reset} ${amarelo}[ 23 ]${reset} - ${branco}Langfuse${reset}"
# echo -e "${branco} '-->${amarelo}[ 2.1 ]${reset} - ${branco}Chatwoot (ARM) ${verde}| ${reset} ${amarelo}[ 24 ]${reset} - ${branco}Metabase${reset}"
# echo -e "${amarelo}[ 03 ]${reset} - ${branco}Evolution API ${verde}| ${reset} ${amarelo}[ 25 ]${reset} - ${branco}Odoo${reset}"
# echo -e "${branco} '-->${amarelo}[ 3.1 ]${reset} - ${branco}Evolution API (ARM) ${verde}| ${reset} ${amarelo}[ 26 ]${reset} - ${branco}Chatwoot Nestor${reset}"
# echo -e "${amarelo}[ 04 ]${reset} - ${branco}MinIO ${verde}| ${reset} ${amarelo}[ 27 ]${reset} - ${branco}Uno API${reset}"
# echo -e "${amarelo}[ 05 ]${reset} - ${branco}Typebot ${verde}| ${reset} ${amarelo}[ 28 ]${reset} - ${branco}N8N + Nodes Quepasa $vermelho[OFF]${reset}"
# echo -e "${amarelo}[ 06 ]${reset} - ${branco}N8N ${verde}| ${reset} ${amarelo}[ 29 ]${reset} - ${branco}Quepasa API $vermelho[OFF]${reset}"
# echo -e "${amarelo}[ 07 ]${reset} - ${branco}Flowise ${verde}| ${reset} ${amarelo}[ 30 ]${reset} - ${branco}Docuseal${reset}"
# echo -e "${amarelo}[ 08 ]${reset} - ${branco}PgAdmin 4 ${verde}| ${reset} ${amarelo}[ 31 ]${reset} - ${branco}Grafana + Prometheus + cAdvisor${reset}"
# echo -e "${amarelo}[ 09 ]${reset} - ${branco}Nocobase ${verde}| ${reset} ${amarelo}[ 32 ]${reset} - ${branco}Dify AI${reset}"
# echo -e "${amarelo}[ 10 ]${reset} - ${branco}Botpress ${verde}| ${reset} ${amarelo}[ 33 ]${reset} - ${branco}Ollama${reset}"
# echo -e "${amarelo}[ 11 ]${reset} - ${branco}Wordpress ${verde}| ${reset} ${amarelo}[ 34 ]${reset} - ${branco}Affine${reset}"
# echo -e "${amarelo}[ 12 ]${reset} - ${branco}Baserow ${verde}| ${reset} ${amarelo}[ 35 ]${reset} - ${branco}Directus${reset}"
# echo -e "${amarelo}[ 13 ]${reset} - ${branco}MongoDB ${verde}| ${reset} ${amarelo}[ 36 ]${reset} - ${branco}VaultWarden${reset}"
# echo -e "${amarelo}[ 14 ]${reset} - ${branco}RabbitMQ ${verde}| ${reset} ${amarelo}[ 37 ]${reset} - ${branco}NextCloud${reset}"
# echo -e "${amarelo}[ 15 ]${reset} - ${branco}Uptime Kuma ${verde}| ${reset} ${amarelo}[ 38 ]${reset} - ${branco}Strapi${reset}"
# echo -e "${amarelo}[ 16 ]${reset} - ${branco}Cal.com ${verde}| ${reset} ${amarelo}[ 39 ]${reset} - ${branco}PhpMyAdmin${reset}"
# echo -e "${amarelo}[ 17 ]${reset} - ${branco}Mautic ${verde}| ${reset} ${amarelo}[ 40 ]${reset} - ${branco}Supabase${reset}"
# echo -e "${amarelo}[ 18 ]${reset} - ${branco}Appsmith ${verde}| ${reset} ${amarelo}[ 41 ]${reset} - ${branco}Ntfy ${verde}[NOVO]${reset}"
# echo -e "${amarelo}[ 19 ]${reset} - ${branco}Qdrant ${verde}| ${reset} ${amarelo}[ 42 ]${reset} - ${branco}REMOVER STACK${reset}"
# echo -e "${amarelo}[ 20 ]${reset} - ${branco}Woofed CRM ${verde}| ${reset} ${amarelo}[ 43 ]${reset} - ${branco}Sair do instalador${reset}"
# echo""
#}
menu_instalador() {
case $menu_instalador in
1) menu_instalador_pg_1 ;;
2) menu_instalador_pg_2 ;;
*) echo "Erro ao listar menu..." ;;
esac
}
menu_instalador_pg_1(){
echo -e "${amarelo}[ 00 ]${reset} - ${branco}Testar SMTP ${verde}| ${reset} ${amarelo}[ 22 ]${reset} - ${branco}NocoDB${reset}"
echo -e "${amarelo}[ 01 ]${reset} - ${branco}Traefik & Portainer ${verde}| ${reset} ${amarelo}[ 23 ]${reset} - ${branco}Langfuse${reset}"
echo -e "${amarelo}[ 02 ]${reset} - ${branco}Chatwoot ${verde}| ${reset} ${amarelo}[ 24 ]${reset} - ${branco}Metabase${reset}"
echo -e "${branco} '-->${amarelo}[ 2.1 ]${reset} - ${branco}Chatwoot (ARM) ${verde}| ${reset} ${amarelo}[ 25 ]${reset} - ${branco}Odoo${reset}"
echo -e "${amarelo}[ 03 ]${reset} - ${branco}Evolution API ${verde}| ${reset} ${amarelo}[ 26 ]${reset} - ${branco}Chatwoot Nestor${reset}"
echo -e "${amarelo}[ 04 ]${reset} - ${branco}MinIO ${verde}| ${reset} ${amarelo}[ 27 ]${reset} - ${branco}Uno API${reset}"
echo -e "${amarelo}[ 05 ]${reset} - ${branco}Typebot ${verde}| ${reset} ${amarelo}[ 28 ]${reset} - ${branco}N8N + Nodes Quepasa${reset}"
echo -e "${amarelo}[ 06 ]${reset} - ${branco}N8N ${verde}| ${reset} ${amarelo}[ 29 ]${reset} - ${branco}Quepasa API${reset}"
echo -e "${amarelo}[ 07 ]${reset} - ${branco}Flowise ${verde}| ${reset} ${amarelo}[ 30 ]${reset} - ${branco}Docuseal${reset}"
echo -e "${amarelo}[ 08 ]${reset} - ${branco}PgAdmin 4 ${verde}| ${reset} ${amarelo}[ 31 ]${reset} - ${branco}Grafana + Prometheus + cAdvisor${reset}"
echo -e "${amarelo}[ 09 ]${reset} - ${branco}Nocobase ${verde}| ${reset} ${amarelo}[ 32 ]${reset} - ${branco}Dify AI${reset}"
echo -e "${amarelo}[ 10 ]${reset} - ${branco}Botpress ${verde}| ${reset} ${amarelo}[ 33 ]${reset} - ${branco}Ollama${reset}"
echo -e "${amarelo}[ 11 ]${reset} - ${branco}Wordpress ${verde}| ${reset} ${amarelo}[ 34 ]${reset} - ${branco}Affine${reset}"
echo -e "${amarelo}[ 12 ]${reset} - ${branco}Baserow ${verde}| ${reset} ${amarelo}[ 35 ]${reset} - ${branco}Directus${reset}"
echo -e "${amarelo}[ 13 ]${reset} - ${branco}MongoDB ${verde}| ${reset} ${amarelo}[ 36 ]${reset} - ${branco}VaultWarden${reset}"
echo -e "${amarelo}[ 14 ]${reset} - ${branco}RabbitMQ ${verde}| ${reset} ${amarelo}[ 37 ]${reset} - ${branco}NextCloud${reset}"
echo -e "${amarelo}[ 15 ]${reset} - ${branco}Uptime Kuma ${verde}| ${reset} ${amarelo}[ 38 ]${reset} - ${branco}Strapi${reset}"
echo -e "${amarelo}[ 16 ]${reset} - ${branco}Cal.com ${verde}| ${reset} ${amarelo}[ 39 ]${reset} - ${branco}PhpMyAdmin${reset}"
echo -e "${amarelo}[ 17 ]${reset} - ${branco}Mautic ${verde}| ${reset} ${amarelo}[ 40 ]${reset} - ${branco}Supabase${reset}"
echo -e "${amarelo}[ 18 ]${reset} - ${branco}Appsmith ${verde}| ${reset} ${amarelo}[ 41 ]${reset} - ${branco}Ntfy${reset}"
echo -e "${amarelo}[ 19 ]${reset} - ${branco}Qdrant ${verde}| ${reset} ${amarelo}[ 42 ]${reset} - ${branco}LowCoder ${reset}"
echo -e "${amarelo}[ 20 ]${reset} - ${branco}Woofed CRM ${verde}| ${reset} ${amarelo}[ 43 ]${reset} - ${branco}LangFlow${reset}"
echo -e "${amarelo}[ 21 ]${reset} - ${branco}Formbricks ${verde}| ${reset} ${amarelo}[ 44 ]${reset} - ${branco}OpenProject${reset}"
echo -e ""
echo -e "${branco}<-- Digite ${amarelo}P1 ${branco}para ir para pagina 1 ${amarelo}|${branco} Digite ${amarelo}P2${branco} para ir para pagina 2 -->${reset}"
echo -e ""
}
menu_instalador_pg_2(){
echo -e "${amarelo}[ 45 ]${reset} - ${branco}ZEP ${verde}| ${reset} ${amarelo}[ 68 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 46 ]${reset} - ${branco}HumHub ${verde}| ${reset} ${amarelo}[ 69 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 47 ]${reset} - ${branco}Yourls ${verde}| ${reset} ${amarelo}[ 70 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 48 ]${reset} - ${branco}TwentyCRM ${verde}| ${reset} ${amarelo}[ 71 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 49 ]${reset} - ${branco}Mattermost ${verde}| ${reset} ${amarelo}[ 72 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 50 ]${reset} - ${branco}Outline ${verde}| ${reset} ${amarelo}[ 73 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 51 ]${reset} - ${branco}Focalboard ${verde}| ${reset} ${amarelo}[ 74 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 52 ]${reset} - ${branco}GLPI ${verde}| ${reset} ${amarelo}[ 75 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 53 ]${reset} - ${branco}Anything LLM ${verde}[NOVO] ${verde}| ${reset} ${amarelo}[ 76 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 54 ]${reset} - ${branco}Excalidraw ${verde}[NOVO] ${verde}| ${reset} ${amarelo}[ 77 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 55 ]${reset} - ${branco}Easy!Apointments ${verde}[NOVO] ${verde}| ${reset} ${amarelo}[ 78 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 56 ]${reset} - ${branco}Documenso ${verde}[NOVO] ${verde}| ${reset} ${amarelo}[ 79 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 57 ]${reset} - ${branco}Moodle ${verde}[NOVO] ${verde}| ${reset} ${amarelo}[ 80 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 58 ]${reset} - ${branco}ToolJet ${verde}[NOVO] ${verde}| ${reset} ${amarelo}[ 81 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 59 ]${reset} - ${branco}EM BREVE... ${verde}| ${reset} ${amarelo}[ 82 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 60 ]${reset} - ${branco}EM BREVE... ${verde}| ${reset} ${amarelo}[ 83 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 61 ]${reset} - ${branco}EM BREVE... ${verde}| ${reset} ${amarelo}[ 84 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 62 ]${reset} - ${branco}EM BREVE... ${verde}| ${reset} ${amarelo}[ 85 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 63 ]${reset} - ${branco}EM BREVE... ${verde}| ${reset} ${amarelo}[ 86 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 64 ]${reset} - ${branco}EM BREVE... ${verde}| ${reset} ${amarelo}[ 87 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 65 ]${reset} - ${branco}EM BREVE... ${verde}| ${reset} ${amarelo}[ 88 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 66 ]${reset} - ${branco}EM BREVE... ${verde}| ${reset} ${amarelo}[ 89 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e "${amarelo}[ 67 ]${reset} - ${branco}EM BREVE... ${verde}| ${reset} ${amarelo}[ 90 ]${reset} - ${branco}EM BREVE...${reset}"
echo -e ""
echo -e ""
echo -e "${branco}<-- Digite ${amarelo}P1 ${branco}para ir para pagina 1 ${amarelo}|${branco} Digite ${amarelo}P2${branco} para ir para pagina 2 -->${reset}"
echo -e ""
}
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
stack_editavel(){
## Instalar jq
sudo apt install jq -y > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "2/10 - [ OK ] - Instalando JQ Método 1/2"
else
echo "2/10 - [ OFF ] - Erro ao instalar JQ Método 1/2"
fi
sudo apt-get install -y jq > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "3/10 - [ OK ] - Instalando JQ Método 2/2"
else
echo "3/10 - [ OFF ] - Erro ao instalar JQ Método 2/2"
fi
## Definindo o diretório do arquivo dados_portainer
arquivo="/root/dados_vps/dados_portainer"
## Verifica se o arquivo existe
if [ ! -f "$arquivo" ]; then
echo "Arquivo não encontrado: $arquivo"
sleep 2
## Cria o arquivo caso não exista
criar_arquivo
fi
## Remove o https:// caso existir
sed -i 's/Dominio do portainer: https:\/\/\(.*\)/Dominio do portainer: \1/' "$arquivo"
## Pega o usuario do portainer
USUARIO=$(grep "Usuario: " /root/dados_vps/dados_portainer | awk -F "Usuario: " '{print $2}')
if [ $? -eq 0 ]; then
echo -e "4/10 - [ OK ] - Pegando usuario do portainer: $bege$USUARIO$reset"
else
echo "4/10 - [ OFF ] - Erro ao pegar usuario do portainer"
fi
## Pega a senha do portainer
SENHA=$(grep "Senha: " /root/dados_vps/dados_portainer | awk -F "Senha: " '{print $2}')
if [ $? -eq 0 ]; then
echo -e "5/10 - [ OK ] - Pegando a senha do portainer: $bege$SENHA$reset"
else
echo "5/10 - [ OFF ] - Erro ao pegar senha do portainer"
fi
## Pega a URL do portainer
PORTAINER_URL=$(grep "Dominio do portainer: " /root/dados_vps/dados_portainer | awk -F "Dominio do portainer: " '{print $2}')
if [ $? -eq 0 ]; then
echo -e "6/10 - [ OK ] - Pegando dominio do Portainer: $bege$PORTAINER_URL$reset"
else
echo "6/10 - [ OFF ] - Erro ao pegar dominio do Portainer"
fi
## Usa o token do portainer
#TOKEN=$(grep "Token: " /root/dados_vps/dados_portainer | awk -F "Token: " '{print $2}')
## Pega um token do portainer
#TOKEN=$(curl -k -X POST -H "Content-Type: application/json" -d "{\"username\":\"$USUARIO\",\"password\":\"$SENHA\"}" https://$PORTAINER_URL/api/auth | jq -r .jwt)
TOKEN=""
Tentativa_atual=0
Maximo_de_tentativas=6
while [ -z "$TOKEN" ] || [ "$TOKEN" == "null" ]; do
TOKEN=$(curl -k -s -X POST -H "Content-Type: application/json" -d "{\"username\":\"$USUARIO\",\"password\":\"$SENHA\"}" https://$PORTAINER_URL/api/auth | jq -r .jwt)
Tentativa_atual=$((Tentativa_atual + 1))
## Verifica se atingiu o número máximo de tentativas
if [ "$Tentativa_atual" -ge "$Maximo_de_tentativas" ]; then
clear
erro_msg
echo "7/10 - [ OFF ] - Erro: Falha ao obter token após $Maximo_de_tentativas tentativas."
echo "Verifique suas credenciais do Portainer para conseguirmos realizar o deploy."
sleep 5
criar_arquivo
return
#exit 1
fi
## Se o token foi obtido com sucesso, sair do loop
if [ -n "$TOKEN" ] && [ "$TOKEN" != "null" ]; then
break
fi
## Aguarda alguns segundos antes de tentar novamente
echo -e "Tentando gerar token do portainer. Tentativa atual $bege$Tentativa_atual/5$reset"
sleep 5
done
if [ $? -eq 0 ]; then
echo -e "7/10 - [ OK ] - Pegando token do Portainer: $bege$TOKEN$reset"
fi
### Verifica se o token veio vazio
#if [ -z "$TOKEN" ] || [ "$TOKEN" == "null" ]; then
# echo "Erro: Falha ao obter token. Preencha com suas credenciais do portainer a seguir."
# sleep 5
# criar_arquivo
# #exit 1
#fi
## Salva dados no arquivo do portainer
echo -e "[ PORTAINER ]\nDominio do portainer: $PORTAINER_URL\n\nUsuario: $USUARIO\n\nSenha: $SENHA\n\nToken: $TOKEN" > "/root/dados_vps/dados_portainer"
## Pegando o id do portainer
ENDPOINT_ID=$(curl -k -s -X GET -H "Authorization: Bearer $TOKEN" https://$PORTAINER_URL/api/endpoints | jq -r '.[] | select(.Name == "primary") | .Id')
if [ $? -eq 0 ]; then
echo -e "8/10 - [ OK ] - Pegando ID do Portainer: $bege$ENDPOINT_ID$reset"
else
echo "8/10 - [ OFF ] - Erro ao pegar ID do Portainer"
fi
## Definindo id 1 do Portainer
#ENDPOINT_ID=1
## Pegando o ID do Swarm
SWARM_ID=$(curl -k -s -X GET -H "Authorization: Bearer $TOKEN" "https://$PORTAINER_URL/api/endpoints/$ENDPOINT_ID/docker/swarm" | jq -r .ID)
if [ $? -eq 0 ]; then
echo -e "9/10 - [ OK ] - Pegando ID do Swarm: $bege$SWARM_ID$reset"
else
echo "9/10 - [ OFF ] - Erro ao pegar ID do Swarm"
fi
## Testa o Swarm
SWARM_STATUS=$(docker info --format '{{.Swarm.LocalNodeState}}')
if [ "$SWARM_STATUS" != "active" ]; then
echo "Erro: Docker Swarm não está ativo."
exit 1
fi
# Arquivo temporário para capturar a saída de erro e a resposta
erro_output=$(mktemp)
response_output=$(mktemp)
## Fazendo deploy da stack pelo portainer
http_code=$(curl -s -o "$response_output" -w "%{http_code}" -k -X POST \
-H "Authorization: Bearer $TOKEN" \
-F "Name=$STACK_NAME" \
-F "file=@$(pwd)/$STACK_NAME.yaml" \
-F "SwarmID=$SWARM_ID" \
-F "endpointId=$ENDPOINT_ID" \
"https://$PORTAINER_URL/api/stacks/create/swarm/file" 2> "$erro_output")
response_body=$(cat "$response_output")
if [ "$http_code" -eq 200 ]; then
# Verifica o conteúdo da resposta para garantir que o deploy foi bem-sucedido
if echo "$response_body" | grep -q "\"Id\""; then
echo -e "10/10 - [ OK ] - Deploy da stack $bege$STACK_NAME$reset feito com sucesso!"
else
echo -e "10/10 - [ OFF ] - Erro, resposta inesperada do servidor ao tentar efetuar deploy da stack $bege$STACK_NAME$reset."
echo "Resposta do servidor: $(echo "$response_body" | jq .)"
fi
else
echo "10/10 - [ OFF ] - Erro ao efetuar deploy. Resposta HTTP: $http_code"
echo "Mensagem de erro: $(cat "$erro_output")"
echo "Detalhes: $(echo "$response_body" | jq .)"
fi
echo ""
# Remove os arquivos temporários
rm "$erro_output"
rm "$response_output"
}
## Função para verificar se o arquivo de dados do Portainer existe
verificar_arquivo() {
sudo apt install jq -y > /dev/null 2>&1
if [ ! -f "/root/dados_vps/dados_portainer" ]; then
nome_credenciais
criar_arquivo
else
verificar_campos
fi
}
## Função para criar o arquivo de dados do Portainer
criar_arquivo() {
if [ -f "/root/dados_vps/dados_portainer" ]; then
rm "/root/dados_vps/dados_portainer"
echo "Arquivo existente removido."
fi
## Caso não exista o arquivo ele vai pedir os dados para criar.
nome_credenciais
echo -e "\e[97mPasso$amarelo 1/3\e[0m"
#echo -e "\e[97mObs: Coloque o https:// antes do link do portainer\e[0m"
read -p "Digite a Url do Portainer (ex: portainer.oriondesign.art.br): " PORTAINER_URL
echo ""
echo -e "\e[97mPasso$amarelo 2/3\e[0m"
read -p "Digite seu Usuario (ex: admin): " USUARIO
echo ""
echo -e "\e[97mPasso$amarelo 3/3\e[0m"
echo -e "\e[97mObs: A Senha não aparecera ao digitar\e[0m"
read -s -p "Digite a Senha (ex: @Senha123_): " SENHA
echo ""
verificar_token "$PORTAINER_URL" "$USUARIO" "$SENHA" true
}
## Função para verificar os campos do arquivo de dados do Portainer
verificar_campos() {
PORTAINER_URL=$(grep -oP '(?<=Dominio do portainer: ).*' /root/dados_vps/dados_portainer)
USUARIO=$(grep -oP '(?<=Usuario: ).*' /root/dados_vps/dados_portainer)
SENHA=$(grep -oP '(?<=Senha: ).*' /root/dados_vps/dados_portainer)
## se por acaso não tiver login nem senha lá vem para ca
if [ -z "$USUARIO" ] || [ -z "$SENHA" ]; then
nome_credenciais
echo -e "\e[97mPasso$amarelo 1/3\e[0m"
#echo -e "\e[97mObs: Coloque o https:// antes do link do portainer\e[0m"
read -p "Digite a Url do Portainer (ex: portainer.oriondesign.art.br): " PORTAINER_URL
echo ""
echo -e "\e[97mPasso$amarelo 2/3\e[0m"
read -p "Digite seu Usuario (ex: admin): " USUARIO
echo ""
echo -e "\e[97mPasso$amarelo 3/3\e[0m"
echo -e "\e[97mObs: A Senha não aparecera ao digitar\e[0m"
read -s -p "Digite a Senha (ex: @Senha123_): " SENHA
echo ""
ATUALIZAR="true" ## Verificar se já existe TOKEN no arquivo
verificar_token "$PORTAINER_URL" "$USUARIO" "$SENHA" true
## Caso o usuario e senha estiver como "Precisa criar dentro do portainer" como o arquivo oficial vem para ca
elif [ "$USUARIO" == "Precisa criar dentro do portainer" ] || [ "$SENHA" == "Precisa criar dentro do portainer" ]; then
nome_credenciais
echo -e "\e[97mPasso$amarelo 1/3\e[0m"
#echo -e "\e[97mObs: Coloque o https:// antes do link do portainer\e[0m"
read -p "Digite a Url do Portainer (ex: portainer.oriondesign.art.br): " PORTAINER_URL
echo ""
echo -e "\e[97mPasso$amarelo 2/3\e[0m"
read -p "Digite seu Usuario (ex: admin): " USUARIO
echo ""
echo -e "\e[97mPasso$amarelo 3/3\e[0m"
echo -e "\e[97mObs: A Senha não aparecera ao digitar\e[0m"
read -s -p "Digite a Senha (ex: @Senha123_): " NOVA_SENHA
echo ""
verificar_token "$PORTAINER_URL" "$NOVO_USUARIO" "$NOVA_SENHA" true
else
verificar_token "$PORTAINER_URL" "$USUARIO" "$SENHA" false
fi
}
## Função para verificar se o token é válido
verificar_token() {
PORTAINER_URL="$1"
USUARIO="$2"
SENHA="$3"
ATUALIZAR="$4"
TENTATIVAS=0
MAX_TENTATIVAS=5
while [ $TENTATIVAS -lt $MAX_TENTATIVAS ]; do
TENTATIVAS=$((TENTATIVAS+1))
#echo -e "Dados a serem testados:"
#echo "Link do Portainer: $PORTAINER_URL"
#echo "Usuário: $USUARIO"
#echo "Senha: $SENHA"
RESPONSE=$(curl -s -w "\n%{http_code}" -k -X POST -H "Content-Type: application/json" -d "{\"username\":\"$USUARIO\",\"password\":\"$SENHA\"}" "https://$PORTAINER_URL/api/auth")
TOKEN=$(echo "$RESPONSE" | sed '$d' | jq -r '.jwt')
HTTP_STATUS=$(echo "$RESPONSE" | tail -n1)
if [ "$HTTP_STATUS" -eq 200 ] && [ ! -z "$TOKEN" ]; then
if [ "$ATUALIZAR" == true ]; then
atualizar_arquivo
fi
$APP_ORION
break
else
if [ $TENTATIVAS -gt 1 ]; then
clear
erro_msg
echo ""
echo ""
echo " Não foi possivel autenticar suas credenciais. Por favor tente novamente"
echo " Tentativa: $TENTATIVAS/$MAX_TENTATIVAS"
sleep 3
else
clear
nome_credenciais
fi
if [ $TENTATIVAS -lt $MAX_TENTATIVAS ]; then
nome_credenciais
echo -e "\e[97mPasso$amarelo 1/3\e[0m"
#echo -e "\e[97mObs: Coloque o https:// antes do link do portainer\e[0m"
read -p "Digite a Url do Portainer (ex: portainer.oriondesign.art.br): " PORTAINER_URL
echo ""
echo -e "\e[97mPasso$amarelo 2/3\e[0m"
read -p "Digite seu Usuario (ex: admin): " USUARIO
echo ""
echo -e "\e[97mPasso$amarelo 3/3\e[0m"
echo -e "\e[97mObs: A Senha não aparecera ao digitar\e[0m"
read -s -p "Digite a Senha (ex: @Senha123_): " SENHA
echo ""
ATUALIZAR="true"
else
clear
erro_msg
echo ""
echo ""
echo " Você atingiu o limite maximo de tentativas ($TENTATIVAS/$MAX_TENTATIVAS)."
echo " Tente novamente quando lembrar da sua credencial!"
echo 5
clear
break
fi
fi
done
}
## Função para atualizar o arquivo de dados do Portainer com o novo usuário e senha
atualizar_arquivo() {
echo -e "[ PORTAINER ]\nDominio do portainer: $PORTAINER_URL\n\nUsuario: $USUARIO\n\nSenha: $SENHA\n\nToken: $TOKEN" > "/root/dados_vps/dados_portainer"
echo -e "\nArquivo de dados do Portainer atualizado com sucesso!"
}
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## Verificadores
## Verifica se existe Docker, Portainer e Traefik na VPS
verificar_docker_e_portainer_traefik() {
## Verifica se o Docker está instalado
if ! command -v docker &> /dev/null; then
clear
erro_msg
echo -e "Ops, parece que você não instalou a opção \e[32m[1] Traefik e Portainer${reset} ${branco}do nosso instalador.${reset}"
echo "Instale antes de tentar instalar esta aplicação."
echo ""
echo "Voltando ao menu em 5 segundos."
sleep 5
nome_menu
menu_instalador
return 1
fi
## Verifica se o Portainer está instalado
if ! docker ps -a --format "{{.Names}}" | grep -q "portainer"; then
clear
erro_msg
echo -e "Ops, parece que você não instalou a opção \e[32m[1] Traefik e Portainer${reset} ${branco}do nosso instalador.${reset}"
echo "Instale antes de tentar instalar esta aplicação."
echo ""
echo "Voltando ao menu em 5 segundos."
sleep 5
nome_menu
menu_instalador
return 1
fi
## Verificar se o Traefik está instalado
if ! docker ps -a --format "{{.Names}}" | grep -q "traefik"; then
clear
erro_msg
echo -e "Ops, parece que você não instalou a opção \e[32m[1] Traefik e Portainer${reset} ${branco}do nosso instalador.${reset}"
echo "Instale antes de tentar instalar esta aplicação."
echo ""
echo "Voltando ao menu em 5 segundos."
sleep 5
nome_menu
menu_instalador
return 1
fi
return 0
}
## Verifica se existe Minio
verificar_antes_se_tem_minio() {
## Verifica se o Portainer está instalado
if ! docker ps -a --format "{{.Names}}" | grep -q "minio"; then
clear
erro_msg
echo -e "Ops, parece que você não instalou a opção \e[32m[ 4 ] - MinIO${reset} ${branco}do nosso instalador.${reset}"
echo "Instale antes de tentar instalar esta aplicação."
echo ""
echo "Voltando ao menu em 5 segundos."
sleep 5
nome_menu
menu_instalador
return 1
fi
return 0
}
## Verifica se existe rabbitMQ
verificar_antes_se_tem_rabbitmq() {
## Verifica se o Portainer está instalado
if ! docker ps -a --format "{{.Names}}" | grep -q "rabbitmq"; then
clear
erro_msg
echo -e "Ops, parece que você não instalou a opção \e[32m[ 14 ] - RabbitMQ${reset} ${branco}do nosso instalador.${reset}"
echo "Instale antes de tentar instalar esta aplicação."
echo ""
echo "Voltando ao menu em 5 segundos."
sleep 5
nome_menu
menu_instalador
return 1
fi
return 0
}
## Verifica se existe Minio RabbitMQ e Chatwoot
verificar_antes_se_tem_minio_e_rabbitmq_e_chatwoot() {
## Verifica se o minio está instalado
if ! docker ps -a --format "{{.Names}}" | grep -q "minio"; then
clear
erro_msg
echo -e "Ops, parece que você não instalou a opção \e[32m[ 4 ] - MinIO${reset} ${branco}do nosso instalador.${reset}"
echo "Instale antes de tentar instalar esta aplicação."
echo ""
echo "Voltando ao menu em 5 segundos."
sleep 5
nome_menu
menu_instalador
return 1
fi
## Verifica se o rabbitmq está instalado
if ! docker ps -a --format "{{.Names}}" | grep -q "rabbitmq"; then
clear
erro_msg
echo -e "Ops, parece que você não instalou a opção \e[32m[ 14 ] - RabbitMQ${reset} ${branco}do nosso instalador.${reset}"
echo "Instale antes de tentar instalar esta aplicação."
echo ""
echo "Voltando ao menu em 5 segundos."
sleep 5
nome_menu
menu_instalador
return 1
fi
## Verificar se o chatwoot está instalado
if ! docker ps -a --format "{{.Names}}" | grep -q "chatwoot"; then
clear
erro_msg
echo -e "Ops, parece que você não instalou a opção \e[32m[ 2 ] - Chatwoot${reset} ou \e[32m[ 26 ] - Chatwoot Nestor (ft. Francis) ${branco}do nosso instalador.${reset}"
echo "Instale antes de tentar instalar esta aplicação."
echo ""
echo "Voltando ao menu em 5 segundos."
sleep 5
nome_menu
menu_instalador
return 1
fi
return 0
}
## Verifica se existe Minio e Qdrant
verificar_antes_se_tem_minio_e_qdrant() {
## Verifica se o minio está instalado
if ! docker ps -a --format "{{.Names}}" | grep -q "minio"; then
clear
erro_msg
echo -e "Ops, parece que você não instalou a opção \e[32m[ 4 ] - MinIO${reset} ${branco}do nosso instalador.${reset}"
echo "Instale antes de tentar instalar esta aplicação."
echo ""
echo "Voltando ao menu em 5 segundos."
sleep 5
nome_menu
menu_instalador
return 1
fi
## Verifica se o rabbitmq está instalado
if ! docker ps -a --format "{{.Names}}" | grep -q "qdrant"; then
clear
erro_msg
echo -e "Ops, parece que você não instalou a opção \e[32m[ 19 ] - Qdrant${reset} ${branco}do nosso instalador.${reset}"
echo "Instale antes de tentar instalar esta aplicação."
echo ""
echo "Voltando ao menu em 5 segundos."
sleep 5
nome_menu
menu_instalador
return 1
fi
return 0
}
## Verifica se existe Minio
verificar_antes_se_tem_mongo() {
## Verifica se o Portainer está instalado
if ! docker ps -a --format "{{.Names}}" | grep -q "mongodb"; then
clear
erro_msg
echo -e "Ops, parece que você não instalou a opção \e[32m[ 13 ] - MongoDB${reset} ${branco}do nosso instalador.${reset}"
echo "Instale antes de tentar instalar esta aplicação."
echo ""
echo "Voltando ao menu em 5 segundos."
sleep 5
nome_menu
menu_instalador
return 1
fi
return 0
}
## Verificar Container Postgres
verificar_container_postgres() {
if docker ps -q --filter "name=postgres_postgres" | grep -q .; then
return 0
else
return 1
fi
}
## Verificar Container PgVector
verificar_container_pgvector() {
if docker ps -q --filter "name=pgvector" | grep -q .; then
return 0
else
return 1
fi
}
## Verificar Container Mysql
verificar_container_mysql() {
if docker ps -q --filter "name=mysql" | grep -q .; then
echo "Container MySQL está em execução."
return 0
else
echo "Container MySQL não está em execução."
return 1
fi
}
## Verificar Container Redis
verificar_container_redis() {
if docker ps -q --filter "name=redis" | grep -q .; then
return 0
else
return 1
fi
}
## Verificar Container Minio
verificar_container_minio() {
if docker ps -q --filter "name=minio" | grep -q .; then
return 0
else
return 1
fi
}
## Esperar Postgres estar pronto
wait_for_postgres() {
dados
local container_name="postgres_postgres"
echo "."
while true; do
CONTAINER_ID=$(docker ps -q --filter "name=.*$container_name.*")
if [ -n "$CONTAINER_ID" ]; then
echo "."
break
fi
sleep 5
done
}
## Verificar se o Traefik esta online
wait_30_sec() {
sleep 30
}
wait_stack() {
echo "Este processo pode demorar um pouco. Se levar mais de 5 minutos, cancele, pois algo deu errado."
while true; do
# Verifica se o serviço trarik está ativo
if docker service ls --filter "name=$1" | grep "1/1"; then
sleep 10
break
fi
sleep 5
done
}
requisitar_outra_instalacao(){
read -p "Deseja instalar outra aplicação? (Y/N): " choice
if [ "$choice" = "Y" ] || [ "$choice" = "y" ]; then
return
else
cd
cd
clear
exit 1
fi
}
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## Pegar informações
## Pegar senha Postgres
pegar_senha_postgres() {
while :; do
if [ -f /root/postgres.yaml ]; then
senha_postgres=$(grep "POSTGRES_PASSWORD" /root/postgres.yaml | awk -F '=' '{print $2}')
break
else
sleep 5
fi
done
}
pegar_senha_pgvector() {
while :; do
if [ -f /root/pgvector.yaml ]; then
senha_pgvector=$(grep "POSTGRES_PASSWORD" /root/pgvector.yaml | awk -F '=' '{print $2}')
break
else
sleep 5
fi
done
}
pegar_user_senha_rabbitmq() {
while :; do
if [ -f /root/rabbitmq.yaml ]; then
user_rabbit_mqs=$(grep "RABBITMQ_DEFAULT_USER" /root/rabbitmq.yaml | awk -F ': ' '{print $2}')
senha_rabbit_mqs=$(grep "RABBITMQ_DEFAULT_PASS" /root/rabbitmq.yaml | awk -F ': ' '{print $2}')
break
else
sleep 5
echo "erro"
fi
done
}
## Pegar senha Mysql
pegar_senha_mysql() {
while :; do
if [ -f /root/mysql.yaml ]; then
senha_mysql=$(grep "MYSQL_ROOT_PASSWORD" /root/mysql.yaml | awk -F '=' '{print $2}')
break
else
sleep 5
fi
done
}
## Pegar senha Minio
pegar_senha_minio() {
user_minio=$(grep "MINIO_ROOT_USER" /root/minio.yaml | awk -F '=' '{print $2}')
senha_minio=$(grep "MINIO_ROOT_PASSWORD" /root/minio.yaml | awk -F '=' '{print $2}')
url_minio=$(grep "MINIO_BROWSER_REDIRECT_URL" /root/minio.yaml | awk -F '=' '{print $2}' | sed 's/https:\/\///')
url_s3=$(grep "MINIO_SERVER_URL" /root/minio.yaml | awk -F '=' '{print $2}' | sed 's/https:\/\///')
}
## Pegar link S3
pegar_link_s3() {
url_s3=$(grep "MINIO_SERVER_URL" /root/minio.yaml | awk -F '=' '{print $2}' | sed 's/https:\/\///')
}
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## Criadores de banco de dados Postgres
## Criar banco do Chatwoot
criar_banco_postgres_da_stack() {
while :; do
if docker ps -q --filter "name=^postgres_postgres" | grep -q .; then
CONTAINER_ID=$(docker ps -q --filter "name=^postgres_postgres")
# Verificar se o banco de dados já existe
docker exec "$CONTAINER_ID" psql -U postgres -lqt | cut -d \| -f 1 | grep -qw "$1"
if [ $? -eq 0 ]; then
echo "O banco de dados $1 já existe."
read -p "Deseja apagar e criar um novo banco de dados? (Y/N): " resposta
if [ "$resposta" == "Y" ] || [ "$resposta" == "y" ]; then
# Apagar o banco de dados
docker exec "$CONTAINER_ID" psql -U postgres -c "DROP DATABASE IF EXISTS $1;"
echo "Banco de dados $1 apagado com sucesso."
# Criar o banco de dados novamente
docker exec "$CONTAINER_ID" psql -U postgres -c "CREATE DATABASE $1;"
echo "Banco de dados $1 criado com sucesso."
else
echo "Usando o banco de dados existente."
fi
break
else
# Criar o banco de dados
docker exec "$CONTAINER_ID" psql -U postgres -c "CREATE DATABASE $1;"
# Verificar novamente se o banco de dados foi criado com sucesso
docker exec "$CONTAINER_ID" psql -U postgres -lqt | cut -d \| -f 1 | grep -qw "$1"
if [ $? -eq 0 ]; then
echo "Banco de dados $1 criado com sucesso."
break
else
echo "Erro ao criar o banco de dados. Tentando novamente..."
fi
fi
else
sleep 5
fi
done
}
## Criar banco do Zep
criar_banco_pgvector_da_stack () {
while :; do
if docker ps -q --filter "name=^pgvector_pgvector" | grep -q .; then
CONTAINER_PGVECTOR_ID=$(docker ps -q --filter "name=^pgvector_pgvector")
# Verificar se o banco de dados já existe
docker exec "$CONTAINER_PGVECTOR_ID" psql -U postgres -lqt | cut -d \| -f 1 | grep -qw "$1"
if [ $? -eq 0 ]; then
echo "O banco de dados $1 já existe."
read -p "Deseja apagar e criar um novo banco de dados? (Y/N): " resposta
if [ "$resposta" == "Y" ] || [ "$resposta" == "y" ]; then
# Apagar o banco de dados
docker exec "$CONTAINER_PGVECTOR_ID" psql -U postgres -c "DROP DATABASE IF EXISTS $1;"
echo "Banco de dados $1 apagado com sucesso."
# Criar o banco de dados novamente
docker exec "$CONTAINER_PGVECTOR_ID" psql -U postgres -c "CREATE DATABASE $1;"
echo "Banco de dados $1 criado com sucesso."
else
echo "Usando o banco de dados existente."
fi
break
else
# Criar o banco de dados
docker exec "$CONTAINER_PGVECTOR_ID" psql -U postgres -c "CREATE DATABASE $1;"
# Verificar novamente se o banco de dados foi criado com sucesso
docker exec "$CONTAINER_PGVECTOR_ID" psql -U postgres -lqt | cut -d \| -f 1 | grep -qw "$1"
if [ $? -eq 0 ]; then
echo "Banco de dados $1 criado com sucesso."
break
else
echo "Erro ao criar o banco de dados. Tentando novamente..."
fi
fi
else
sleep 5
fi
done
}
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## Criadores de banco de dados Mysql
## Criar banco do Mautic
criar_banco_mysql_da_stack() {
dados
pegar_senha_mysql
while :; do
if CONTAINER_ID=$(docker ps -q --filter "name=^mysql_mysql"); then
if [ -n "$CONTAINER_ID" ]; then
# Verificar se o banco de dados já existe
if docker exec -it "$CONTAINER_ID" mysql -u root -p"$senha_mysql" -e "SHOW DATABASES LIKE '$1';" | grep -qw "$1"; then
echo "O banco de dados $1 já existe."
read -p "Deseja apagar e criar um novo banco de dados? (Y/N): " resposta
if [ "$resposta" == "Y" ] || [ "$resposta" == "y" ]; then
# Apagar o banco de dados
docker exec -it "$CONTAINER_ID" mysql -u root -p"$senha_mysql" -e "DROP DATABASE $1;"
echo "Banco de dados $1 apagado com sucesso."
# Criar o banco de dados novamente
docker exec -it "$CONTAINER_ID" mysql -u root -p"$senha_mysql" -e "CREATE DATABASE $1;"
echo "Banco de dados $1 criado com sucesso."
else
echo "Usando o banco de dados existente."
fi
break
else
# Criar o banco de dados
docker exec -it "$CONTAINER_ID" mysql -u root -p"$senha_mysql" -e "CREATE DATABASE $1;"
# Verificar novamente se o banco de dados foi criado com sucesso
if docker exec -it "$CONTAINER_ID" mysql -u root -p"$senha_mysql" -e "SHOW DATABASES LIKE '$1';" | grep -qw "$1"; then
echo "Banco de dados $1 criado com sucesso."
break
else
echo "Erro ao criar o banco de dados. Tentando novamente..."
fi
fi
else
echo "Container MySQL não encontrado. Tentando novamente..."
sleep 5
fi
else
echo "Container MySQL não encontrado. Tentando novamente..."
sleep 5
fi
done
}
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## Instalação das Ferramentas
## ████████╗███████╗███████╗████████╗███████╗ ███████╗███╗ ███╗████████╗██████╗
## ╚══██╔══╝██╔════╝██╔════╝╚══██╔══╝██╔════╝ ██╔════╝████╗ ████║╚══██╔══╝██╔══██╗
## ██║ █████╗ ███████╗ ██║ █████╗ ███████╗██╔████╔██║ ██║ ██████╔╝
## ██║ ██╔══╝ ╚════██║ ██║ ██╔══╝ ╚════██║██║╚██╔╝██║ ██║ ██╔═══╝
## ██║ ███████╗███████║ ██║ ███████╗ ███████║██║ ╚═╝ ██║ ██║ ██║
## ╚═╝ ╚══════╝╚══════╝ ╚═╝ ╚══════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝
ferramenta_testeemail() {
clear
dados
nome_testeemail
preencha_as_info
while true; do
echo -e "\e[97mPasso$amarelo 1/5\e[0m"
echo -en "\e[33mDigite o endereço de Email (ex: [email protected]): \e[0m" && read -r email_teste
echo ""
echo -e "\e[97mPasso$amarelo 2/5\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o usuário de Email (ex: oriondesign ou [email protected]): \e[0m" && read -r user_teste
echo ""
echo -e "\e[97mPasso$amarelo 3/5\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha do email (ex: @Senha123_): \e[0m" && read -r senha_teste
echo ""
echo -e "\e[97mPasso$amarelo 4/5\e[0m"
echo -en "\e[33mDigite o Host Smtp (ex: smtp.hostinger.com): \e[0m" && read -r host_teste
echo ""
echo -e "\e[97mPasso$amarelo 5/5\e[0m"
echo -en "\e[33mDigite a Porta Smtp (ex: 465): \e[0m" && read -r porta_teste
echo ""
clear
nome_testeemail
conferindo_as_info
echo -e "\e[33mEmail:\e[97m $email_teste\e[0m"
echo ""
echo -e "\e[33mUsuário:\e[97m $user_teste\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m $senha_teste\e[0m"
echo ""
echo -e "\e[33mHost:\e[97m $host_teste\e[0m"
echo ""
echo -e "\e[33mPorta:\e[97m $porta_teste\e[0m"
echo ""
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
clear
nome_testando
break
else
clear
nome_testeemail
preencha_as_info
fi
done
#MENSAGEM DE INICIANDO (PASSOS)
echo -e "\e[97m• INICIANDO VERIFICAÇÃO \e[33m[1/3]\e[0m"
echo ""
sudo apt-get update > /dev/null 2>&1
sudo apt-get install swaks -y > /dev/null 2>&1
msg="Se você está lendo isso, o seu SMTP está funcionando =D.
By: OrionDesign"
if swaks --to "$email_teste" --from "$email_teste" --server "$host_teste" --port "$porta_teste" --auth LOGIN --auth-user "$user_teste" --auth-password "$senha_teste" --tls --body "$msg"; then
sleep 2
clear
nome_testeemail
echo -e "\e[32m[Resultado do Teste SMTP]\e[0m"
echo ""
echo -e "\e[33mOs dados informados\e[92m estão funcionando corretamente\e[33m.\e[0m"
else
sleep 2
clear
nome_testeemail
echo -e "\e[32m[Resultado do Teste SMTP]\e[0m"
echo ""
echo -e "\e[33mOs dados informados\e[91m NÃO estão funcionando corretamente.\e[33m Por favor, verifique os dados e tente novamente.\e[0m"
fi
creditos_msg
read -p "Deseja instalar outra aplicação? (Y/N): " choice
if [ "$choice" = "Y" ] || [ "$choice" = "y" ]; then
return
else
cd
cd
clear
exit 1
fi
}
## ████████╗██████╗ █████╗ ███████╗███████╗██╗██╗ ██╗ ███████╗
## ╚══██╔══╝██╔══██╗██╔══██╗██╔════╝██╔════╝██║██║ ██╔╝ ██╔════╝
## ██║ ██████╔╝███████║█████╗ █████╗ ██║█████╔╝ █████╗
## ██║ ██╔══██╗██╔══██║██╔══╝ ██╔══╝ ██║██╔═██╗ ██╔══╝
## ██║ ██║ ██║██║ ██║███████╗██║ ██║██║ ██╗ ███████╗
## ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚══════╝
##
## ██████╗ ██████╗ ██████╗ ████████╗ █████╗ ██╗███╗ ██╗███████╗██████╗
## ██╔══██╗██╔═══██╗██╔══██╗╚══██╔══╝██╔══██╗██║████╗ ██║██╔════╝██╔══██╗
## ██████╔╝██║ ██║██████╔╝ ██║ ███████║██║██╔██╗ ██║█████╗ ██████╔╝
## ██╔═══╝ ██║ ██║██╔══██╗ ██║ ██╔══██║██║██║╚██╗██║██╔══╝ ██╔══██╗
## ██║ ╚██████╔╝██║ ██║ ██║ ██║ ██║██║██║ ╚████║███████╗██║ ██║
## ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝
ferramenta_traefik_e_portainer() {
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_traefik_e_portainer
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 1/4\e[0m"
echo -en "\e[33mDigite o Dominio para o Portainer (ex: portainer.oriondesign.art.br): \e[0m" && read -r url_portainer
echo ""
## Pergunta o Nome do Servidor
echo -e "\e[97mPasso$amarelo 2/4\e[0m"
echo -e "$amarelo--> Não pode conter Espaços e/ou cartacteres especiais"
echo -en "\e[33mEscolha um nome para o seu servidor (ex: OrionDesign): \e[0m" && read -r nome_servidor
echo ""
## Pergunta o nome da Rede Interna
echo -e "\e[97mPasso$amarelo 3/4\e[0m"
echo -e "$amarelo--> Não pode conter Espaços e/ou cartacteres especiais."
echo -en "\e[33mDigite um nome para sua rede interna (ex: OrionNet): \e[0m" && read -r nome_rede_interna
echo ""
## Pergunta o Email para informações sobre o certificado
echo -e "\e[97mPasso$amarelo 4/4\e[0m"
echo -en "\e[33mDigite um endereço de Email válido (ex: [email protected]): \e[0m" && read -r email_ssl
echo ""
## Limpa o termianl
clear
## Mostra o nome da aplicação
nome_traefik_e_portainer
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mLink do Portainer:\e[97m $url_portainer\e[0m"
echo ""
## Informação sobre Nome do Servidor
echo -e "\e[33mNome do Servidor:\e[97m $nome_servidor\e[0m"
echo ""
## Informação sobre Nome da Rede interna
echo -e "\e[33mRede interna:\e[97m $nome_rede_interna\e[0m"
echo ""
## Informação sobre Email
echo -e "\e[33mEmail:\e[97m $email_ssl\e[0m"
echo ""
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_traefik_e_portainer
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO TRAEFIK \e[33m[1/8]\e[0m"
echo ""
sleep 1
## Neste passo vamos estar salvando os dados preenchidos anteriormente para que o instalador possa usar posteriormente na instalação de qualquer ferramenta.
## Garante que o usuario esteja no /root/
cd
cd
## Verifica se já não existe uma pasta chamada "dados_vps", se existir ele ignora e se não existir ele cria uma
## Esta foi uma PR que veio do usuario Fabio => https://github.com/hipnologo
if [ ! -d "dados_vps" ]; then
mkdir dados_vps
fi
## Fim da PR
## Abre a pasta dados_vps
cd dados_vps
## Cria um arquivo chamado "dados_vps" com: "nome do servidor", "nome da rede interna", "email", "link do portainer"
cat > dados_vps << EOL
[DADOS DA VPS]
Estes dados foram preenchidos na hora que você foi instalar o Traefik e Portainer e
serão utilizados para realizar as instalações no do SetupOrion v.2
Nome do Servidor: $nome_servidor
Rede interna: $nome_rede_interna
Email para SSL: $email_ssl
Link do Portainer: $url_portainer
Obrigado por utilizar nosso AutoInstalador.
Caso esse conteudo foi util, não deixe de apoiar nosso projeto.
[email protected]
Bebam água!
EOL
## Volta para /root/
cd
cd
## Ativa a função dados para pegar os dados da vps
dados
## Mensagem de Passo
echo -e "\e[97m• ATUALIZANDO E CONFIGURANDO A VPS \e[33m[2/8]\e[0m"
echo ""
sleep 1
## Neste passo vamos estar Atualizando e configurando a vps para conseguir rodar nosso setup
## Todos os passo que estão com "> /dev/null 2>&1" São para não mostrar os logs.
## Fiz isso com o intuito de melhorar a visualização deixando o terminal apenas com os passos pré descritos
## Vou adicionar uma verificação com echo e o passo caso der algum problema para verificar.
sudo apt-get update > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "1/9 - [ OK ] - Update"
else
echo "1/9 - [ OFF ] - Update"
fi
sudo apt upgrade -y > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "2/9 - [ OK ] - Upgrade"
else
echo "2/9 - [ OFF ] - Upgrade"
fi
sudo timedatectl set-timezone America/Sao_Paulo > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "3/9 - [ OK ] - Timezone"
else
echo "3/9 - [ OFF ] - Timezone"
fi
sudo apt-get install -y apt-utils > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "4/9 - [ OK ] - Apt-Utils"
else
echo "4/9 - [ OFF ] - Apt-Utils"
fi
sudo apt-get update > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "5/9 - [ OK ] - Update"
else
echo "5/9 - [ OFF ] - Update"
fi
hostnamectl set-hostname $nome_servidor > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "6/9 - [ OK ] - Set Hostname"
else
echo "6/9 - [ OFF ] - Set Hostname"
fi
sudo sed -i "s/127.0.0.1[[:space:]]localhost/127.0.0.1 $nome_servidor/g" /etc/hosts > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "7/9 - [ OK ] - Adicionando nome do servidor em etc/hosts"
else
echo "7/9 - [ OFF ] - Adicionando nome do servidor em etc/hosts"
fi
sudo apt-get update > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "8/9 - [ OK ] - Update"
else
echo "8/9 - [ OFF ] - Update"
fi
sudo apt-get install -y apparmor-utils > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "9/9 - [ OK ] - Apparmor-Utils"
else
echo "9/9 - [ OFF ] - Apparmor-Utils"
fi
echo ""
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO DOCKER SWARM \e[33m[3/8]\e[0m"
echo ""
sleep 1
## Nesse passo vamos estar instalando docker no modo swarm
#ip=$(curl -s ifconfig.me)
read -r ip _ <<<$(hostname -I)
if [ $? -eq 0 ]; then
echo "1/3 - [ OK ] - Pegando IP $ip"
else
echo "1/3 - [ OFF ] - Pegando IP $ip"
fi
curl -fsSL https://get.docker.com | bash > /dev/null 2>&1
systemctl enable docker > /dev/null 2>&1
systemctl start docker > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "2/3 - [ OK ] - Baixando e Instalando Docker"
else
echo "2/3 - [ OFF ] - Baixando e Instalando Docker"
fi
sleep 5
max_attempts=3
attempt=0
while [ $attempt -le $max_attempts ]; do
docker swarm init --advertise-addr $ip > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "3/3 - [ OK ] - Iniciando Swarm"
break
else
echo "3/3 - [ OFF ] - Iniciando Swarm"
echo "Ops não foi possivel iniciar o swarm, tentativa $attempt de $max_attempts"
attempt=$((attempt + 1))
sleep 5
fi
done
if [ $attempt -gt $max_attempts ]; then
echo "Não foi possível iniciar o Swarm após $max_attempts tentativas..."
echo "Recomendo formatar a VPS e tentar novamente"
echo "Lembre-se que o primeiro requisito é estar usando uma VPS Vazia."
sleep 10
exit 1
fi
echo ""
## Mensagem de Passo
echo -e "\e[97m• CRIANDO REDE INTERNA \e[33m[4/8]\e[0m"
echo ""
sleep 1
## Neste passo vamos criar a rede interna para utilizar nas demais aplicações
docker network create --driver=overlay $nome_rede_interna > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Rede Interna"
else
echo "1/1 - [ OFF ] - Rede Interna"
fi
echo ""
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO TRAEFIK \e[33m[5/8]\e[0m"
echo ""
sleep 1
## Neste passo vamos estar criando a Stack yaml do traefik na pasta /root/
## Isso possibilitará que o usuario consiga edita-lo posteriormente
## Depois vamos instalar o traefik e verificar se esta tudo certo.
## Criando a stack
cat > traefik.yaml << EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
traefik:
image: traefik:v2.11.2
command:
- "--api.dashboard=true"
- "--providers.docker.swarmMode=true"
- "--providers.docker.endpoint=unix:///var/run/docker.sock"
- "--providers.docker.exposedbydefault=false"
- "--providers.docker.network=$nome_rede_interna" ## Nome da rede interna
- "--entrypoints.web.address=:80"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
- "--entrypoints.web.http.redirections.entrypoint.permanent=true"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.web.transport.respondingTimeouts.idleTimeout=3600"
- "--certificatesresolvers.letsencryptresolver.acme.httpchallenge=true"
- "--certificatesresolvers.letsencryptresolver.acme.httpchallenge.entrypoint=web"
- "--certificatesresolvers.letsencryptresolver.acme.storage=/etc/traefik/letsencrypt/acme.json"
- "--certificatesresolvers.letsencryptresolver.acme.email=$email_ssl" ## Email para receber as notificações
- "--log.level=DEBUG"
- "--log.format=common"
- "--log.filePath=/var/log/traefik/traefik.log"
- "--accesslog=true"
- "--accesslog.filepath=/var/log/traefik/access-log"
deploy:
placement:
constraints:
- node.role == manager
labels:
- "traefik.enable=true"
- "traefik.http.middlewares.redirect-https.redirectscheme.scheme=https"
- "traefik.http.middlewares.redirect-https.redirectscheme.permanent=true"
- "traefik.http.routers.http-catchall.rule=Host(\`{host:.+}\`)"
- "traefik.http.routers.http-catchall.entrypoints=web"
- "traefik.http.routers.http-catchall.middlewares=redirect-https@docker"
- "traefik.http.routers.http-catchall.priority=1"
volumes:
- "vol_certificates:/etc/traefik/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
ports:
- target: 80
published: 80
mode: host
- target: 443
published: 443
mode: host
networks:
- $nome_rede_interna ## Nome da rede interna
## --------------------------- ORION --------------------------- ##
volumes:
vol_shared:
external: true
name: volume_swarm_shared
vol_certificates:
external: true
name: volume_swarm_certificates
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
attachable: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Criando Stack"
else
echo "1/2 - [ OFF ] - Criando Stack"
echo "Ops, não foi possivel criar a stack do Traefik"
fi
docker stack deploy --prune --resolve-image always -c traefik.yaml traefik > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "2/2 - [ OK ] - Deploy Stack"
else
echo "2/2 - [ OFF ] - Deploy Stack"
echo "Ops, não foi possivel subir o Traefik."
fi
echo ""
## Mensagem de Passo
echo -e "\e[97m• ESPERANDO O TRAEFIK ESTAR ONLINE \e[33m[6/8]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "traefik" para verificar se o serviço esta online
wait_stack "traefik"
## Espera 30 segundos
wait_30_sec
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO PORTAINER \e[33m[7/8]\e[0m"
echo ""
sleep 1
## Neste passo vamos estar criando a Stack yaml do Portainer na pasta /root/
## Isso possibilitará que o usuario consiga edita-lo posteriormente
## Depois vamos instalar o Portainer e verificar se esta tudo certo.
## Criando a stack
cat > portainer.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
agent:
image: portainer/agent:latest ## Versão do portainer
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
networks:
- $nome_rede_interna ## Nome da rede interna
deploy:
mode: global
placement:
constraints: [node.platform.os == linux]
## --------------------------- ORION --------------------------- ##
portainer:
image: portainer/portainer-ce:latest
command: -H tcp://tasks.agent:9001 --tlsskipverify
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
networks:
- $nome_rede_interna ## Nome da rede interna
deploy:
mode: replicated
replicas: 1
placement:
constraints: [node.role == manager]
labels:
- "traefik.enable=true"
- "traefik.http.routers.portainer.rule=Host(\`$url_portainer\`)" ## Dominio da aplicação
- "traefik.http.services.portainer.loadbalancer.server.port=9000"
- "traefik.http.routers.portainer.tls.certresolver=letsencryptresolver"
- "traefik.http.routers.portainer.service=portainer"
- "traefik.docker.network=$nome_rede_interna" ## Nome da rede interna
- "traefik.http.routers.portainer.entrypoints=websecure"
- "traefik.http.routers.portainer.priority=1"
## --------------------------- ORION --------------------------- ##
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
attachable: true
name: $nome_rede_interna ## Nome da rede interna
volumes:
portainer_data:
external: true
name: portainer_data
EOL
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Criando Stack"
else
echo "1/2 - [ OFF ] - Criando Stack"
echo "Ops, não foi possivel criar a stack do Portainer"
fi
docker stack deploy --prune --resolve-image always -c portainer.yaml portainer > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Deploy Stack"
else
echo "1/2 - [ OFF ] - Deploy Stack"
echo "Ops, não foi possivel Subir a stack do Portainer"
fi
echo ""
## Mensagem de Passo
echo -e "\e[97m• ESPERANDO O PORTAINER ESTAR ONLINE \e[33m[8/8]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_portainer para verificar se o serviço esta online
wait_stack "portainer"
## Salvando informações da instalação dentro de /dados_vps/
cd dados_vps
cat > dados_portainer <<EOL
[ PORTAINER ]
Dominio do portainer: https://$url_portainer
Usuario: Precisa criar dentro do portainer
Senha: Precisa criar dentro do portainer
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ PORTAINER ]\e[0m"
echo ""
echo -e "\e[97mDominio do portainer:\e[33m https://$url_portainer\e[0m"
echo ""
echo -e "\e[97mUsuario:\e[33m Precisa criar dentro do portainer\e[0m"
echo ""
echo -e "\e[97mSenha:\e[33m Precisa criar dentro do portainer\e[0m"
echo ""
echo -e "\e[97mObservação:\e[33m Você tem menos de 5 minutos para criar uma conta no Portainer, caso\e[0m"
echo -e "\e[33mcaso exceda esse tempo, você precisara de voltar no menu anterior (digitando: Y)\e[0m"
echo -e "\e[33me no menu de ferramentas digitar: \e[97mportainer.restart\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██████╗ ███████╗████████╗ ██████╗ ██████╗ ███████╗███████╗
## ██╔══██╗██╔═══██╗██╔════╝╚══██╔══╝██╔════╝ ██╔══██╗██╔════╝██╔════╝
## ██████╔╝██║ ██║███████╗ ██║ ██║ ███╗██████╔╝█████╗ ███████╗
## ██╔═══╝ ██║ ██║╚════██║ ██║ ██║ ██║██╔══██╗██╔══╝ ╚════██║
## ██║ ╚██████╔╝███████║ ██║ ╚██████╔╝██║ ██║███████╗███████║
## ╚═╝ ╚═════╝ ╚══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝
ferramenta_postgres() {
## Ativa a função dados para pegar os dados da vps
dados
## Gerando uma senha aleatória para o Postgres
senha_postgres=$(openssl rand -hex 16)
## Criando a stack
cat > postgres.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
postgres:
image: postgres:14 ## Versão do postgres
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- $nome_rede_interna ## Nome da rede interna
## Descomente as linhas abaixo para uso externo
#ports:
# - 5432:5432
environment:
## Senha do postgres
- POSTGRES_PASSWORD=$senha_postgres
#- PG_MAX_CONNECTIONS=500
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
## --------------------------- ORION --------------------------- ##
volumes:
postgres_data:
external: true
name: postgres_data
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Postgres"
fi
STACK_NAME="postgres"
stack_editavel #> /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c postgres.yaml postgres > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Ops, não foi possivel subir a stack do Postgres."
#fi
## Salvando informações da instalação dentro de /dados_vps/
cd dados_vps
cat > dados_postgres <<EOL
[ POSTGRES ]
Dominio do postgres: postgres://postgres:5432
Usuario: postgres
Senha: $senha_postgres
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
}
## ██████╗ ██████╗ ██╗ ██╗███████╗ ██████╗████████╗ ██████╗ ██████╗
## ██╔══██╗██╔════╝ ██║ ██║██╔════╝██╔════╝╚══██╔══╝██╔═══██╗██╔══██╗
## ██████╔╝██║ ███╗ ██║ ██║█████╗ ██║ ██║ ██║ ██║██████╔╝
## ██╔═══╝ ██║ ██║ ╚██╗ ██╔╝██╔══╝ ██║ ██║ ██║ ██║██╔══██╗
## ██║ ╚██████╔╝ ╚████╔╝ ███████╗╚██████╗ ██║ ╚██████╔╝██║ ██║
## ╚═╝ ╚═════╝ ╚═══╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝
ferramenta_pgvector() {
## Ativa a função dados para pegar os dados da vps
dados
## Gerando uma senha aleatória para o Postgres
senha_pgvector=$(openssl rand -hex 16)
## Criando a stack
cat > pgvector.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
pgvector:
image: pgvector/pgvector:pg16
ports:
- 5433:5432
volumes:
- pgvector:/var/lib/postgresql/data
networks:
- $nome_rede_interna
environment:
- POSTGRES_PASSWORD=$senha_pgvector
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
## --------------------------- ORION --------------------------- ##
volumes:
pgvector:
external: true
name: pgvector
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do PgVector"
fi
STACK_NAME="pgvector"
stack_editavel #> /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Ops, não foi possivel subir a stack do PgVector."
#fi
#docker stack deploy --prune --resolve-image always -c pgvector.yaml pgvector > /dev/null 2>&1
## Salvando informações da instalação dentro de /dados_vps/
cd dados_vps
cat > dados_pgvector <<EOL
[ PGVECTOR ]
Dominio do pgvector: postgres://pgvector:5432
Usuario: postgres
Senha: $senha_pgvector
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
}
## ██████╗ ██████╗ ██╗ ██╗███████╗ ██████╗████████╗ ██████╗ ██████╗
## ██╔══██╗██╔════╝ ██║ ██║██╔════╝██╔════╝╚══██╔══╝██╔═══██╗██╔══██╗
## ██████╔╝██║ ███╗ ██║ ██║█████╗ ██║ ██║ ██║ ██║██████╔╝
## ██╔═══╝ ██║ ██║ ╚██╗ ██╔╝██╔══╝ ██║ ██║ ██║ ██║██╔══██╗
## ██║ ╚██████╔╝ ╚████╔╝ ███████╗╚██████╗ ██║ ╚██████╔╝██║ ██║
## ╚═╝ ╚═════╝ ╚═══╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝
ferramenta_pgvector_setup() {
## Ativa a função dados para pegar os dados da vps
dados
## Gerando uma senha aleatória para o Postgres
senha_pgvector=$(openssl rand -hex 16)
## Criando a stack
cat > pgvector.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
pgvector:
image: pgvector/pgvector:pg16
ports:
- 5433:5432
volumes:
- pgvector:/var/lib/postgresql/data
networks:
- $nome_rede_interna
environment:
- POSTGRES_PASSWORD=$senha_pgvector
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
## --------------------------- ORION --------------------------- ##
volumes:
pgvector:
external: true
name: pgvector
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do PgVector"
fi
STACK_NAME="pgvector"
stack_editavel #> /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Ops, não foi possivel subir a stack do PgVector."
#fi
#docker stack deploy --prune --resolve-image always -c pgvector.yaml pgvector > /dev/null 2>&1
## Salvando informações da instalação dentro de /dados_vps/
cd dados_vps
cat > dados_pgvector <<EOL
[ PGVECTOR ]
Dominio do pgvector: postgres://pgvector:5432
Usuario: postgres
Senha: $senha_pgvector
EOL
cd
cd
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ PGVECTOR ]\e[0m"
echo ""
echo -e "\e[97mDominio do PgVector:\e[33m postgres://pgvector:5432\e[0m"
echo ""
echo -e "\e[97mUsuario:\e[33m postgres\e[0m"
echo ""
echo -e "\e[97mSenha:\e[33m $senha_pgvector\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
cd
cd
## Espera 30 segundos
wait_30_sec
}
## ██████╗ ███████╗██████╗ ██╗███████╗
## ██╔══██╗██╔════╝██╔══██╗██║██╔════╝
## ██████╔╝█████╗ ██║ ██║██║███████╗
## ██╔══██╗██╔══╝ ██║ ██║██║╚════██║
## ██║ ██║███████╗██████╔╝██║███████║
## ╚═╝ ╚═╝╚══════╝╚═════╝ ╚═╝╚══════╝
ferramenta_redis() {
## Ativa a função dados para pegar os dados da vps
dados
## Criando a stack
cat > redis.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
redis:
image: redis:latest ## Versão do Redis
command: [
"redis-server",
"--appendonly",
"yes",
"--port",
"6379"
]
volumes:
- redis_data:/data
networks:
- $nome_rede_interna ## Nome da rede interna
#ports:
# - 6379:6379
deploy:
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 2048M
## --------------------------- ORION --------------------------- ##
volumes:
redis_data:
external: true
name: redis_data
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Redis"
fi
STACK_NAME="redis"
stack_editavel #> /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c redis.yaml redis
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Ops, não foi possivel subir a stack do Redis."
#fi
## Salvando informações da instalação dentro de /dados_vps/
cd dados_vps
cat > dados_redis <<EOL
[ REDIS ]
Dominio do Redis: redis://redis:6379
Usuario: redis
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
}
## ██████╗ ███████╗██████╗ ██╗███████╗
## ██╔══██╗██╔════╝██╔══██╗██║██╔════╝
## ██████╔╝█████╗ ██║ ██║██║███████╗
## ██╔══██╗██╔══╝ ██║ ██║██║╚════██║
## ██║ ██║███████╗██████╔╝██║███████║
## ╚═╝ ╚═╝╚══════╝╚═════╝ ╚═╝╚══════╝
ferramenta_redis_setup() {
## Ativa a função dados para pegar os dados da vps
dados
## Criando a stack
cat > redis.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
redis:
image: redis:latest ## Versão do Redis
command: [
"redis-server",
"--appendonly",
"yes",
"--port",
"6379"
]
volumes:
- redis_data:/data
networks:
- $nome_rede_interna ## Nome da rede interna
#ports:
# - 6379:6379
deploy:
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 2048M
## --------------------------- ORION --------------------------- ##
volumes:
redis_data:
external: true
name: redis_data
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Ops, não foi criar a stack do Redis."
fi
sleep 1
STACK_NAME="redis"
stack_editavel
#stack_editavel > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c redis.yaml redis
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Ops, não foi possivel subir a stack do Redis."
#fi
## Salvando informações da instalação dentro de /dados_vps/
cd dados_vps
cat > dados_redis <<EOL
[ REDIS ]
Dominio do Redis: redis://redis:6379
Usuario: redis
EOL
cd
cd
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ REDIS ]\e[0m"
echo ""
echo -e "\e[97mHost:\e[33m redis\e[0m"
echo ""
echo -e "\e[97mUsuario:\e[33m redis\e[0m"
echo ""
echo -e "\e[97mPorta:\e[33m 6379\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
cd
cd
## Espera 30 segundos
wait_30_sec
}
## ███╗ ███╗██╗ ██╗███████╗ ██████╗ ██╗
## ████╗ ████║╚██╗ ██╔╝██╔════╝██╔═══██╗██║
## ██╔████╔██║ ╚████╔╝ ███████╗██║ ██║██║
## ██║╚██╔╝██║ ╚██╔╝ ╚════██║██║▄▄ ██║██║
## ██║ ╚═╝ ██║ ██║ ███████║╚██████╔╝███████╗
## ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚══▀▀═╝ ╚══════╝
ferramenta_mysql() {
## Ativa a função dados para pegar os dados da vps
dados
## Gerando uma senha aleatória para o Mysql
senha_mysql=$(openssl rand -hex 16)
## Criando a stack
cat > mysql.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
mysql:
image: percona/percona-server:8.0 ## Versão do Mysql
volumes:
- mysql_data:/var/lib/mysql
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Senha MYSQL
- MYSQL_ROOT_PASSWORD=$senha_mysql
## TimeZone
- TZ=America/Sao_Paulo
deploy:
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: '1'
memory: 1024M
command:
[
"--character-set-server=utf8mb4",
"--collation-server=utf8mb4_general_ci",
"--sql-mode=",
"--default-authentication-plugin=caching_sha2_password",
"--max-allowed-packet=512MB",
]
## --------------------------- ORION --------------------------- ##
volumes:
mysql_data:
external: true
name: mysql_data
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do MySQL"
fi
STACK_NAME="mysql"
stack_editavel #> /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Ops, não foi possivel subir a stack do Postgres."
#fi
#docker stack deploy --prune --resolve-image always -c mysql.yaml mysql #> /dev/null 2>&1
## Salvando informações da instalação dentro de /dados_vps/
cd dados_vps
cat > dados_mysql <<EOL
[ MYSQL ]
Dominio do mysql: mysql
Usuario: mysql ou root
Senha: $senha_mysql
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
}
## ███╗ ███╗██╗ ██╗███████╗ ██████╗ ██╗
## ████╗ ████║╚██╗ ██╔╝██╔════╝██╔═══██╗██║
## ██╔████╔██║ ╚████╔╝ ███████╗██║ ██║██║
## ██║╚██╔╝██║ ╚██╔╝ ╚════██║██║▄▄ ██║██║
## ██║ ╚═╝ ██║ ██║ ███████║╚██████╔╝███████╗
## ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚══▀▀═╝ ╚══════╝
ferramenta_mysql_setup() {
## Ativa a função dados para pegar os dados da vps
dados
## Gerando uma senha aleatória para o Mysql
senha_mysql=$(openssl rand -hex 16)
## Criando a stack
cat > mysql.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
mysql:
image: percona/percona-server:8.0 ## Versão do Mysql
volumes:
- mysql_data:/var/lib/mysql
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Senha MYSQL
- MYSQL_ROOT_PASSWORD=$senha_mysql
## TimeZone
- TZ=America/Sao_Paulo
deploy:
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: '1'
memory: 1024M
command:
[
"--character-set-server=utf8mb4",
"--collation-server=utf8mb4_general_ci",
"--sql-mode=",
"--default-authentication-plugin=caching_sha2_password",
"--max-allowed-packet=512MB",
]
## --------------------------- ORION --------------------------- ##
volumes:
mysql_data:
external: true
name: mysql_data
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Ops, não foi criar a stack do Mysql."
fi
STACK_NAME="mysql"
stack_editavel
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Ops, não foi possivel subir a stack do Postgres."
#fi
#docker stack deploy --prune --resolve-image always -c mysql.yaml mysql #> /dev/null 2>&1
## Salvando informações da instalação dentro de /dados_vps/
cd dados_vps
cat > dados_mysql <<EOL
[ MYSQL ]
Dominio do mysql: mysql
Usuario: mysql ou root
Senha: $senha_mysql
EOL
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ MYSQL ]\e[0m"
echo ""
echo -e "\e[97mHost:\e[33m mysql\e[0m"
echo ""
echo -e "\e[97mUsuario:\e[33m root\e[0m"
echo ""
echo -e "\e[97mSenha:\e[33m $senha_mysql\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
cd
cd
## Espera 30 segundos
wait_30_sec
}
## ██████╗██╗ ██╗ █████╗ ████████╗██╗ ██╗ ██████╗ ██████╗ ████████╗
## ██╔════╝██║ ██║██╔══██╗╚══██╔══╝██║ ██║██╔═══██╗██╔═══██╗╚══██╔══╝
## ██║ ███████║███████║ ██║ ██║ █╗ ██║██║ ██║██║ ██║ ██║
## ██║ ██╔══██║██╔══██║ ██║ ██║███╗██║██║ ██║██║ ██║ ██║
## ╚██████╗██║ ██║██║ ██║ ██║ ╚███╔███╔╝╚██████╔╝╚██████╔╝ ██║
## ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══╝╚══╝ ╚═════╝ ╚═════╝ ╚═╝
ferramenta_chatwoot() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_chatwoot
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 1/6\e[0m"
echo -en "\e[33mDigite o Dominio para o Chatwoot (ex: chatwoot.oriondesign.art.br): \e[0m" && read -r url_chatwoot
echo ""
## Pega o nome do dominio para ser o nome da empresa
nome_empresa_chatwoot="$nome_servidor"
## Pergunta o email SMTP
echo -e "\e[97mPasso$amarelo 2/6\e[0m"
echo -en "\e[33mDigite o Email para SMTP (ex: [email protected]): \e[0m" && read -r email_admin_chatwoot
echo ""
## Define o dominio SMTP com o dominio do email
dominio_smtp_chatwoot=$(echo "$email_admin_chatwoot" | cut -d "@" -f 2)
##Pergunta o usuário do Email SMTP
echo -e "\e[97mPasso$amarelo 3/6\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o Usuário para SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r user_smtp_chatwoot
echo ""
## Pergunta a senha do SMTP
echo -e "\e[97mPasso$amarelo 4/6\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do Email (ex: @Senha123_): \e[0m" && read -r senha_email_chatwoot
echo ""
## Pergunta o Host SMTP do email
echo -e "\e[97mPasso$amarelo 5/6\e[0m"
echo -en "\e[33mDigite o Host SMTP do Email (ex: smtp.hostinger.com): \e[0m" && read -r smtp_email_chatwoot
echo ""
## Pergunta a porta SMTP do email
echo -e "\e[97mPasso$amarelo 6/6\e[0m"
echo -en "\e[33mDigite a porta SMTP do Email (ex: 465): \e[0m" && read -r porta_smtp_chatwoot
## Verifica se a porta é 465, se sim deixa o ssl true, se não, deixa false
if [ "$porta_smtp_chatwoot" -eq 465 ]; then
sobre_ssl=true
else
sobre_ssl=false
fi
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_chatwoot
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio do Chatwoot:\e[97m $url_chatwoot\e[0m"
echo ""
## Informação sobre Nome da Empresa
echo -e "\e[33mNome da Empresa:\e[97m $nome_empresa_chatwoot\e[0m"
echo ""
## Informação sobre Email de SMTP
echo -e "\e[33mEmail do SMTP:\e[97m $email_admin_chatwoot\e[0m"
echo ""
## Informação sobre Usuario do SMTP
echo -e "\e[33mUser do SMTP:\e[97m $user_smtp_chatwoot\e[0m"
echo ""
## Informação sobre Senha de SMTP
echo -e "\e[33mSenha do SMTP:\e[97m $senha_email_chatwoot\e[0m"
echo ""
## Informação sobre Host SMTP
echo -e "\e[33mHost SMTP:\e[97m $smtp_email_chatwoot\e[0m"
echo ""
## Informação sobre Porta SMTP
echo -e "\e[33mPorta SMTP:\e[97m $porta_smtp_chatwoot\e[0m"
echo ""
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_chatwoot
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO CHATWOOT \e[33m[1/6]\e[0m"
echo ""
sleep 1
## Ativa a função dados para pegar os dados da vps
dados
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES E REDIS \e[33m[2/6]\e[0m"
echo ""
sleep 1
## Aqui vamos fazer uma verificação se já existe Postgres e redis instalado
## Se tiver ele vai criar um banco de dados no postgres ou perguntar se deseja apagar o que já existe e criar outro
## Verifica container postgres e cria banco no postgres
verificar_container_postgres
if [ $? -eq 0 ]; then
pegar_senha_postgres > /dev/null 2>&1
criar_banco_postgres_da_stack "chatwoot"
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
criar_banco_postgres_da_stack "chatwoot"
fi
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Verificando/Instalando Postgres"
else
echo "1/2 - [ OFF ] - Verificando/Instalando Postgres"
fi
## Verifica container redis
verificar_container_redis
if [ $? -eq 0 ]; then
echo ""
else
ferramenta_redis > /dev/null 2>&1
fi
if [ $? -eq 0 ]; then
echo "2/2 - [ OK ] - Verificando/Instalando Redis"
else
echo "2/2 - [ OFF ] - Verificando/Instalando Redis"
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO CHATWOOT \e[33m[3/6]\e[0m"
echo ""
sleep 1
## Neste passo vamos estar criando a Stack yaml do Chatwoot na pasta /root/
## Isso possibilitará que o usuario consiga edita-lo posteriormente
## Depois vamos instalar o Chatwoot e verificar se esta tudo certo.
## Criando key aleatória
encryption_key=$(openssl rand -hex 16)
## Criando a stack
cat > chatwoot.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
chatwoot_app:
image: chatwoot/chatwoot:latest ## Versão do Chatwoot
command: bundle exec rails s -p 3000 -b 0.0.0.0
entrypoint: docker/entrypoints/rails.sh
volumes:
- chatwoot_storage:/app/storage ## Arquivos de conversa
- chatwoot_public:/app/public ## Arquivos de logos
- chatwoot_mailer:/app/app/views/devise/mailer ## Arquivos de email
- chatwoot_mailers:/app/app/views/mailers ## Arquivos de emails
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Qualquer Url com # no final
- CHATWOOT_HUB_URL=https://oriondesign.art.br/setup#
## Nome da Empresa
- INSTALLATION_NAME=$nome_empresa_chatwoot
## Secret key
- SECRET_KEY_BASE=$encryption_key
## Url Chatwoot
- FRONTEND_URL=https://$url_chatwoot
- FORCE_SSL=true
## Idioma/Localização padrão
- DEFAULT_LOCALE=pt_BR
- TZ=America/Brasil
## Google Cloud - Modifique de acordo com os seus dados (lembre-se de mudar no chatwoot_sidekiq)
#- GOOGLE_OAUTH_CLIENT_ID=369777777777-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
#- GOOGLE_OAUTH_CLIENT_SECRET=ABCDEF-GHijklmnoPqrstuvwX-yz1234567
#- GOOGLE_OAUTH_CALLBACK_URL=https://<your-server-domain>/omniauth/google_oauth2/callback
## Dados do Redis
- REDIS_URL=redis://redis:6379
## Dados do Postgres
- POSTGRES_HOST=postgres
- POSTGRES_USERNAME=postgres
- POSTGRES_PASSWORD=$senha_postgres ## Senha do postgres
- POSTGRES_DATABASE=chatwoot
## Armazenamento
- ACTIVE_STORAGE_SERVICE=local ## use s3_compatible para MinIO
#- STORAGE_BUCKET_NAME=chatwoot
#- STORAGE_ACCESS_KEY_ID=ACCESS_KEY_MINIO
#- STORAGE_SECRET_ACCESS_KEY=SECRET_KEY_MINIO
#- STORAGE_REGION=eu-south
#- STORAGE_ENDPOINT=https://s3.DOMINIO.COM
#- STORAGE_FORCE_PATH_STYLE=true
## Dados do SMTP
- MAILER_SENDER_EMAIL=$email_admin_chatwoot <$email_admin_chatwoot> ## Email SMTP
- SMTP_DOMAIN=$dominio_smtp_chatwoot ## Dominio do email
- SMTP_ADDRESS=$smtp_email_chatwoot ## Host SMTP
- SMTP_PORT=$porta_smtp_chatwoot ## Porta SMTP
- SMTP_SSL=$sobre_ssl ## Se a porta for 465 = true | Se a porta for 587 = false
- SMTP_USERNAME=$user_smtp_chatwoot ## Usuario SMTP
- SMTP_PASSWORD=$senha_email_chatwoot ## Senha do SMTP
- SMTP_AUTHENTICATION=login
- SMTP_ENABLE_STARTTLS_AUTO=true
- SMTP_OPENSSL_VERIFY_MODE=peer
- MAILER_INBOUND_EMAIL_DOMAIN=$email_admin_chatwoot ## Email SMTP
## Outras configurações
- NODE_ENV=production
- RAILS_ENV=production
- INSTALLATION_ENV=docker
- RAILS_LOG_TO_STDOUT=true
- USE_INBOX_AVATAR_FOR_BOT=true
- ENABLE_ACCOUNT_SIGNUP=false
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.chatwoot_app.rule=Host(\`$url_chatwoot\`)
- traefik.http.routers.chatwoot_app.entrypoints=websecure
- traefik.http.routers.chatwoot_app.tls.certresolver=letsencryptresolver
- traefik.http.routers.chatwoot_app.priority=1
- traefik.http.routers.chatwoot_app.service=chatwoot_app
- traefik.http.services.chatwoot_app.loadbalancer.server.port=3000
- traefik.http.services.chatwoot_app.loadbalancer.passhostheader=true
- traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https
- traefik.http.routers.chatwoot_app.middlewares=sslheader@docker
## --------------------------- ORION --------------------------- ##
chatwoot_sidekiq:
image: chatwoot/chatwoot:latest ## Versão do Chatwoot
command: bundle exec sidekiq -C config/sidekiq.yml
volumes:
- chatwoot_storage:/app/storage ## Arquivos de conversa
- chatwoot_public:/app/public ## Arquivos de logos
- chatwoot_mailer:/app/app/views/devise/mailer ## Arquivos de email
- chatwoot_mailers:/app/app/views/mailers ## Arquivos de emails
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Qualquer Url com # no final
- CHATWOOT_HUB_URL=https://oriondesign.art.br/setup#
## Nome da Empresa
- INSTALLATION_NAME=$nome_empresa_chatwoot
## Secret key
- SECRET_KEY_BASE=$encryption_key
## Url Chatwoot
- FRONTEND_URL=https://$url_chatwoot
- FORCE_SSL=true
## Idioma/Localização padrão
- DEFAULT_LOCALE=pt_BR
- TZ=America/Brasil
## Google Cloud - Modifique de acordo com os seus dados (lembre-se de mudar no chatwoot_sidekiq)
#- GOOGLE_OAUTH_CLIENT_ID=369777777777-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
#- GOOGLE_OAUTH_CLIENT_SECRET=ABCDEF-GHijklmnoPqrstuvwX-yz1234567
#- GOOGLE_OAUTH_CALLBACK_URL=https://<your-server-domain>/omniauth/google_oauth2/callback
## Dados do Redis
- REDIS_URL=redis://redis:6379
## Dados do Postgres
- POSTGRES_HOST=postgres
- POSTGRES_USERNAME=postgres
- POSTGRES_PASSWORD=$senha_postgres ## Senha do postgres
- POSTGRES_DATABASE=chatwoot
## Armazenamento
- ACTIVE_STORAGE_SERVICE=local ## use s3_compatible para MinIO
#- STORAGE_BUCKET_NAME=chatwoot
#- STORAGE_ACCESS_KEY_ID=ACCESS_KEY_MINIO
#- STORAGE_SECRET_ACCESS_KEY=SECRET_KEY_MINIO
#- STORAGE_REGION=eu-south
#- STORAGE_ENDPOINT=https://s3.DOMINIO.COM
#- STORAGE_FORCE_PATH_STYLE=true
## Dados do SMTP
- MAILER_SENDER_EMAIL=$email_admin_chatwoot <$email_admin_chatwoot> ## Email SMTP
- SMTP_DOMAIN=$dominio_smtp_chatwoot ## Dominio do email
- SMTP_ADDRESS=$smtp_email_chatwoot ## Host SMTP
- SMTP_PORT=$porta_smtp_chatwoot ## Porta SMTP
- SMTP_SSL=$sobre_ssl ## Se a porta for 465 = true | Se a porta for 587 = false
- SMTP_USERNAME=$user_smtp_chatwoot ## Usuario SMTP
- SMTP_PASSWORD=$senha_email_chatwoot ## Senha do SMTP
- SMTP_AUTHENTICATION=login
- SMTP_ENABLE_STARTTLS_AUTO=true
- SMTP_OPENSSL_VERIFY_MODE=peer
- MAILER_INBOUND_EMAIL_DOMAIN=$email_admin_chatwoot ## Email SMTP
## Outras configurações
- NODE_ENV=production
- RAILS_ENV=production
- INSTALLATION_ENV=docker
- RAILS_LOG_TO_STDOUT=true
- USE_INBOX_AVATAR_FOR_BOT=true
- ENABLE_ACCOUNT_SIGNUP=false
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
## --------------------------- ORION --------------------------- ##
volumes:
chatwoot_storage:
external: true
name: chatwoot_storage
chatwoot_public:
external: true
name: chatwoot_public
chatwoot_mailer:
external: true
name: chatwoot_mailer
chatwoot_mailers:
external: true
name: chatwoot_mailers
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Chatwoot"
fi
STACK_NAME="chatwoot"
stack_editavel #> /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c chatwoot.yaml chatwoot > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do Chatwoot"
#fi
## Mensagem de Passo
echo -e "\e[97m• ESPERANDO SERVIÇO DO CHATWOOT ESTAR PRONTO \e[33m[4/6]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_chatwoot para verificar se o serviço esta online
wait_stack "chatwoot"
## Mensagem de Passo
echo -e "\e[97m• MIGRANDO BANCO DE DADOS \e[33m[5/6]\e[0m"
echo ""
sleep 1
## Aqui vamos estar migrando o banco de dados usando o comando "bundle exec rails db:chatwoot_prepare"
## Basicamente voce poderia entrar no banco de dados do chatwoot e executar o comando por lá tambem
container_name="chatwoot_chatwoot_app"
max_wait_time=1200
wait_interval=60
elapsed_time=0
while [ $elapsed_time -lt $max_wait_time ]; do
CONTAINER_ID=$(docker ps -q --filter "name=$container_name")
if [ -n "$CONTAINER_ID" ]; then
break
fi
sleep $wait_interval
elapsed_time=$((elapsed_time + wait_interval))
done
if [ -z "$CONTAINER_ID" ]; then
echo "O contêiner não foi encontrado após $max_wait_time segundos."
exit 1
fi
docker exec -it "$CONTAINER_ID" bundle exec rails db:chatwoot_prepare
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Executando no container: bundle exec rails db:chatwoot_prepare"
else
echo "1/1 - [ OFF ] - Executando no container: bundle exec rails db:chatwoot_prepare"
echo "Não foi possivel migrar o banco de dados"
fi
## Mensagem de Passo
echo -e "\e[97m• ATIVANDO FUNÇÕES DO SUPER ADMIN \e[33m[6/6]\e[0m"
echo ""
sleep 1
## Aqui vamos alterar um dado no postgres para liberar algumas funções ocultas no painel de super admin
wait_for_postgres
docker exec -i $CONTAINER_ID psql -U postgres <<EOF
\c chatwoot;
update installation_configs set locked = false;
\q
EOF
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Desbloqueando tabela installation_configs no postgres"
else
echo "1/1 - [ OFF ] - Desbloqueando tabela installation_configs no postgres"
echo "Não foi possivel liberar as funções do super_admin"
fi
## Salvando informações da instalação dentro de /dados_vps/
cd dados_vps
cat > dados_chatwoot <<EOL
[ CHATWOOT ]
Dominio do Chatwoot: https://$url_chatwoot
Usuario: Precisa criar dentro do Chatwoot
Senha: Precisa criar dentro do Chatwoot
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ Chatwoot ]\e[0m"
echo ""
echo -e "\e[97mDominio:\e[33m https://$url_chatwoot\e[0m"
echo ""
echo -e "\e[97mUsuario:\e[33m Precisa criar dentro do Chatwoot\e[0m"
echo ""
echo -e "\e[97mSenha:\e[33m Precisa criar dentro do Chatwoot\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗██╗ ██╗ █████╗ ████████╗██╗ ██╗ ██████╗ ██████╗ ████████╗
## ██╔════╝██║ ██║██╔══██╗╚══██╔══╝██║ ██║██╔═══██╗██╔═══██╗╚══██╔══╝
## ██║ ███████║███████║ ██║ ██║ █╗ ██║██║ ██║██║ ██║ ██║
## ██║ ██╔══██║██╔══██║ ██║ ██║███╗██║██║ ██║██║ ██║ ██║
## ╚██████╗██║ ██║██║ ██║ ██║ ╚███╔███╔╝╚██████╔╝╚██████╔╝ ██║
## ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══╝╚══╝ ╚═════╝ ╚═════╝ ╚═╝
##
## █████╗ ██████╗ ███╗ ███╗
## ██╔══██╗██╔══██╗████╗ ████║
## ███████║██████╔╝██╔████╔██║
## ██╔══██║██╔══██╗██║╚██╔╝██║
## ██║ ██║██║ ██║██║ ╚═╝ ██║
## ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝
ferramenta_chatwoot_arm() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_chatwoot
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 1/5\e[0m"
echo -en "\e[33mDigite o Dominio para o Chatwoot (ex: chatwoot.oriondesign.art.br): \e[0m" && read -r url_chatwoot
echo ""
## Pega o nome do dominio para ser o nome da empresa
nome_empresa_chatwoot="$nome_servidor"
## Pergunta o email SMTP
echo -e "\e[97mPasso$amarelo 2/5\e[0m"
echo -en "\e[33mDigite o Email para SMTP (ex: [email protected]): \e[0m" && read -r email_admin_chatwoot
echo ""
## Define o dominio SMTP com o dominio do email
dominio_smtp_chatwoot=$(echo "$email_admin_chatwoot" | cut -d "@" -f 2)
## Pergunta a senha do SMTP
echo -e "\e[97mPasso$amarelo 3/5\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do Email (ex: @Senha123_): \e[0m" && read -r senha_email_chatwoot
echo ""
## Pergunta o Host SMTP do email
echo -e "\e[97mPasso$amarelo 4/5\e[0m"
echo -en "\e[33mDigite o Host SMTP do Email (ex: smtp.hostinger.com): \e[0m" && read -r smtp_email_chatwoot
echo ""
## Pergunta a porta SMTP do email
echo -e "\e[97mPasso$amarelo 5/5\e[0m"
echo -en "\e[33mDigite a porta SMTP do Email (ex: 465): \e[0m" && read -r porta_smtp_chatwoot
## Verifica se a porta é 465, se sim deixa o ssl true, se não, deixa false
if [ "$porta_smtp_chatwoot" -eq 465 ]; then
sobre_ssl=true
else
sobre_ssl=false
fi
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_chatwoot
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio do Chatwoot:\e[97m $url_chatwoot\e[0m"
echo ""
## Informação sobre Nome da Empresa
echo -e "\e[33mNome da Empresa:\e[97m $nome_empresa_chatwoot\e[0m"
echo ""
## Informação sobre Email de SMTP
echo -e "\e[33mEmail do SMTP:\e[97m $email_admin_chatwoot\e[0m"
echo ""
## Informação sobre Senha de SMTP
echo -e "\e[33mSenha do SMTP:\e[97m $senha_email_chatwoot\e[0m"
echo ""
## Informação sobre Host SMTP
echo -e "\e[33mHost SMTP:\e[97m $smtp_email_chatwoot\e[0m"
echo ""
## Informação sobre Porta SMTP
echo -e "\e[33mPorta SMTP:\e[97m $porta_smtp_chatwoot\e[0m"
echo ""
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_chatwoot
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO CHATWOOT ARM \e[33m[1/6]\e[0m"
echo ""
sleep 1
## Ativa a função dados para pegar os dados da vps
dados
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES E REDIS \e[33m[2/6]\e[0m"
echo ""
sleep 1
## Aqui vamos fazer uma verificação se já existe Postgres e redis instalado
## Se tiver ele vai criar um banco de dados no postgres ou perguntar se deseja apagar o que já existe e criar outro
## Verifica container postgres e cria banco no postgres
verificar_container_postgres
if [ $? -eq 0 ]; then
pegar_senha_postgres > /dev/null 2>&1
criar_banco_postgres_da_stack "chatwoot"
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
criar_banco_postgres_da_stack "chatwoot"
fi
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Verificando/Instalando Postgres"
else
echo "1/2 - [ OFF ] - Verificando/Instalando Postgres"
fi
## Verifica container redis
verificar_container_redis
if [ $? -eq 0 ]; then
echo ""
else
ferramenta_redis > /dev/null 2>&1
fi
if [ $? -eq 0 ]; then
echo "2/2 - [ OK ] - Verificando/Instalando Reids"
else
echo "2/2 - [ OFF ] - Verificando/Instalando Redis"
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO CHATWOOT \e[33m[3/6]\e[0m"
echo ""
sleep 1
## Neste passo vamos estar criando a Stack yaml do Chatwoot na pasta /root/
## Isso possibilitará que o usuario consiga edita-lo posteriormente
## Depois vamos instalar o Chatwoot e verificar se esta tudo certo.
## Criando key aleatória
encryption_key=$(openssl rand -hex 16)
## Criando a stack
cat > chatwoot.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
chatwoot_app:
image: sendingtk/chatwoot-arm:latest ## Versão do Chatwoot
command: bundle exec rails s -p 3000 -b 0.0.0.0
entrypoint: docker/entrypoints/rails.sh
volumes:
- chatwoot_storage:/app/storage ## Arquivos de conversa
- chatwoot_public:/app/public ## Arquivos de logos
- chatwoot_mailer:/app/app/views/devise/mailer ## Arquivos de email
- chatwoot_mailers:/app/app/views/mailers ## Arquivos de emails
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Qualquer Url com # no final
- CHATWOOT_HUB_URL=https://oriondesign.art.br/setup#
## Nome da Empresa
- INSTALLATION_NAME=$nome_empresa_chatwoot
## Secret key
- SECRET_KEY_BASE=$encryption_key
## Url Chatwoot
- FRONTEND_URL=https://$url_chatwoot
- FORCE_SSL=true
## Idioma padrão
- DEFAULT_LOCALE=pt_BR
## Google Cloud - Modifique de acordo com os seus dados (lembre-se de mudar no chatwoot_sidekiq)
#- GOOGLE_OAUTH_CLIENT_ID=369777777777-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
#- GOOGLE_OAUTH_CLIENT_SECRET=ABCDEF-GHijklmnoPqrstuvwX-yz1234567
#- GOOGLE_OAUTH_CALLBACK_URL=https://<your-server-domain>/omniauth/google_oauth2/callback
## Dados do Redis
- REDIS_URL=redis://redis:6379
## Dados do Postgres
- POSTGRES_HOST=postgres
- POSTGRES_USERNAME=postgres
- POSTGRES_PASSWORD=$senha_postgres ## Senha do postgres
- POSTGRES_DATABASE=chatwoot
## Armazenamento
- ACTIVE_STORAGE_SERVICE=local ## use s3_compatible para MinIO
#- STORAGE_BUCKET_NAME=chatwoot
#- STORAGE_ACCESS_KEY_ID=ACCESS_KEY_MINIO
#- STORAGE_SECRET_ACCESS_KEY=SECRET_KEY_MINIO
#- STORAGE_REGION=eu-south
#- STORAGE_ENDPOINT=https://s3.DOMINIO.COM
#- STORAGE_FORCE_PATH_STYLE=true
## Dados do SMTP
- MAILER_SENDER_EMAIL=$email_admin_chatwoot <$email_admin_chatwoot> ## Email SMTP
- SMTP_DOMAIN=$dominio_smtp_chatwoot ## Dominio do email
- SMTP_ADDRESS=$smtp_email_chatwoot ## Host SMTP
- SMTP_PORT=$porta_smtp_chatwoot ## Porta SMTP
- SMTP_SSL=$sobre_ssl ## Se a porta for 465 = true | Se a porta for 587 = false
- SMTP_USERNAME=$email_admin_chatwoot ## Email SMTP
- SMTP_PASSWORD=$senha_email_chatwoot ## Senha do SMTP
- SMTP_AUTHENTICATION=login
- SMTP_ENABLE_STARTTLS_AUTO=true
- SMTP_OPENSSL_VERIFY_MODE=peer
- MAILER_INBOUND_EMAIL_DOMAIN=$email_admin_chatwoot ## Email SMTP
## Outras configurações
- NODE_ENV=production
- RAILS_ENV=production
- INSTALLATION_ENV=docker
- RAILS_LOG_TO_STDOUT=true
- USE_INBOX_AVATAR_FOR_BOT=true
- ENABLE_ACCOUNT_SIGNUP=false
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.chatwoot_app.rule=Host(\`$url_chatwoot\`)
- traefik.http.routers.chatwoot_app.entrypoints=websecure
- traefik.http.routers.chatwoot_app.tls.certresolver=letsencryptresolver
- traefik.http.routers.chatwoot_app.priority=1
- traefik.http.routers.chatwoot_app.service=chatwoot_app
- traefik.http.services.chatwoot_app.loadbalancer.server.port=3000
- traefik.http.services.chatwoot_app.loadbalancer.passhostheader=true
- traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https
- traefik.http.routers.chatwoot_app.middlewares=sslheader@docker
## --------------------------- ORION --------------------------- ##
chatwoot_sidekiq:
image: sendingtk/chatwoot-arm:latest ## Versão do Chatwoot
command: bundle exec sidekiq -C config/sidekiq.yml
volumes:
- chatwoot_storage:/app/storage ## Arquivos de conversa
- chatwoot_public:/app/public ## Arquivos de logos
- chatwoot_mailer:/app/app/views/devise/mailer ## Arquivos de email
- chatwoot_mailers:/app/app/views/mailers ## Arquivos de emails
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Qualquer Url com # no final
- CHATWOOT_HUB_URL=https://oriondesign.art.br/setup#
## Nome da Empresa
- INSTALLATION_NAME=$nome_empresa_chatwoot
## Secret key
- SECRET_KEY_BASE=$encryption_key
## Url Chatwoot
- FRONTEND_URL=https://$url_chatwoot
- FORCE_SSL=true
## Idioma padrão
- DEFAULT_LOCALE=pt_BR
## Google Cloud - Modifique de acordo com os seus dados (lembre-se de mudar no chatwoot_sidekiq)
#- GOOGLE_OAUTH_CLIENT_ID=369777777777-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
#- GOOGLE_OAUTH_CLIENT_SECRET=ABCDEF-GHijklmnoPqrstuvwX-yz1234567
#- GOOGLE_OAUTH_CALLBACK_URL=https://<your-server-domain>/omniauth/google_oauth2/callback
## Dados do Redis
- REDIS_URL=redis://redis:6379
## Dados do Postgres
- POSTGRES_HOST=postgres
- POSTGRES_USERNAME=postgres
- POSTGRES_PASSWORD=$senha_postgres ## Senha do postgres
- POSTGRES_DATABASE=chatwoot
## Armazenamento
- ACTIVE_STORAGE_SERVICE=local ## use s3_compatible para MinIO
#- STORAGE_BUCKET_NAME=chatwoot
#- STORAGE_ACCESS_KEY_ID=ACCESS_KEY_MINIO
#- STORAGE_SECRET_ACCESS_KEY=SECRET_KEY_MINIO
#- STORAGE_REGION=eu-south
#- STORAGE_ENDPOINT=https://s3.DOMINIO.COM
#- STORAGE_FORCE_PATH_STYLE=true
## Dados do SMTP
- MAILER_SENDER_EMAIL=$email_admin_chatwoot <$email_admin_chatwoot> ## Email SMTP
- SMTP_DOMAIN=$dominio_smtp_chatwoot ## Dominio do email
- SMTP_ADDRESS=$smtp_email_chatwoot ## Host SMTP
- SMTP_PORT=$porta_smtp_chatwoot ## Porta SMTP
- SMTP_SSL=$sobre_ssl ## Se a porta for 465 = true | Se a porta for 587 = false
- SMTP_USERNAME=$email_admin_chatwoot ## Email SMTP
- SMTP_PASSWORD=$senha_email_chatwoot ## Senha do SMTP
- SMTP_AUTHENTICATION=login
- SMTP_ENABLE_STARTTLS_AUTO=true
- SMTP_OPENSSL_VERIFY_MODE=peer
- MAILER_INBOUND_EMAIL_DOMAIN=$email_admin_chatwoot ## Email SMTP
## Outras configurações
- NODE_ENV=production
- RAILS_ENV=production
- INSTALLATION_ENV=docker
- RAILS_LOG_TO_STDOUT=true
- USE_INBOX_AVATAR_FOR_BOT=true
- ENABLE_ACCOUNT_SIGNUP=false
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
## --------------------------- ORION --------------------------- ##
volumes:
chatwoot_storage:
external: true
name: chatwoot_storage
chatwoot_public:
external: true
name: chatwoot_public
chatwoot_mailer:
external: true
name: chatwoot_mailer
chatwoot_mailers:
external: true
name: chatwoot_mailers
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Chatwoot"
fi
STACK_NAME="chatwoot"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c chatwoot.yaml chatwoot > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do Chatwoot"
#fi
## Mensagem de Passo
echo -e "\e[97m• ESPERANDO SERVIÇO DO CHATWOOT ESTAR PRONTO \e[33m[4/6]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_chatwoot para verificar se o serviço esta online
wait_stack "chatwoot"
## Mensagem de Passo
echo -e "\e[97m• MIGRANDO BANCO DE DADOS \e[33m[5/6]\e[0m"
echo ""
sleep 1
## Aqui vamos estar migrando o banco de dados usando o comando "bundle exec rails db:chatwoot_prepare"
## Basicamente voce poderia entrar no banco de dados do chatwoot e executar o comando por lá tambem
container_name="chatwoot_chatwoot_app"
max_wait_time=1200
wait_interval=60
elapsed_time=0
while [ $elapsed_time -lt $max_wait_time ]; do
CONTAINER_ID=$(docker ps -q --filter "name=$container_name")
if [ -n "$CONTAINER_ID" ]; then
break
fi
sleep $wait_interval
elapsed_time=$((elapsed_time + wait_interval))
done
if [ -z "$CONTAINER_ID" ]; then
echo "O contêiner não foi encontrado após $max_wait_time segundos."
exit 1
fi
docker exec -it "$CONTAINER_ID" bundle exec rails db:chatwoot_prepare
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Executando no container: bundle exec rails db:chatwoot_prepare"
else
echo "1/1 - [ OFF ] - Executando no container: bundle exec rails db:chatwoot_prepare"
echo "Não foi possivel migrar o banco de dados"
fi
## Mensagem de Passo
echo -e "\e[97m• ATIVANDO FUNÇÕES DO SUPER ADMIN \e[33m[6/6]\e[0m"
echo ""
sleep 1
## Aqui vamos alterar um dado no postgres para liberar algumas funções ocultas no painel de super admin
wait_for_postgres
docker exec -i $CONTAINER_ID psql -U postgres <<EOF
\c chatwoot;
update installation_configs set locked = false;
\q
EOF
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Modificando tabela installation_configs no postgres"
else
echo "1/1 - [ OFF ] - Modificando tabela installation_configs no postgres"
echo "Não foi possivel liberar as funções do super_admin"
fi
## Salvando informações da instalação dentro de /dados_vps/
cd dados_vps
cat > dados_chatwoot_arm <<EOL
[ CHATWOOT ARM ]
Dominio do Chatwoot: https://$url_chatwoot
Usuario: Precisa criar dentro do Chatwoot
Senha: Precisa criar dentro do Chatwoot
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ CHATWOOT ARM ]\e[0m"
echo ""
echo -e "\e[97mDominio:\e[33m https://$url_chatwoot\e[0m"
echo ""
echo -e "\e[97mUsuario:\e[33m Precisa criar dentro do Chatwoot\e[0m"
echo ""
echo -e "\e[97mSenha:\e[33m Precisa criar dentro do Chatwoot\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███████╗██╗ ██╗ ██████╗ ██╗ ██╗ ██╗████████╗██╗ ██████╗ ███╗ ██╗ █████╗ ██████╗ ██╗
## ██╔════╝██║ ██║██╔═══██╗██║ ██║ ██║╚══██╔══╝██║██╔═══██╗████╗ ██║ ██╔══██╗██╔══██╗██║
## █████╗ ██║ ██║██║ ██║██║ ██║ ██║ ██║ ██║██║ ██║██╔██╗ ██║ ███████║██████╔╝██║
## ██╔══╝ ╚██╗ ██╔╝██║ ██║██║ ██║ ██║ ██║ ██║██║ ██║██║╚██╗██║ ██╔══██║██╔═══╝ ██║
## ███████╗ ╚████╔╝ ╚██████╔╝███████╗╚██████╔╝ ██║ ██║╚██████╔╝██║ ╚████║ ██║ ██║██║ ██║
## ╚══════╝ ╚═══╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝
ferramenta_evolution() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_evolution
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o Dominio para a Evolution API (ex: api.oriondesign.art.br): \e[0m" && read -r url_evolution
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_evolution
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio da Evolution API:\e[97m $url_evolution\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_evolution
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DA EVOLUTION API \e[33m[1/5]\e[0m"
echo ""
sleep 1
## Literalmente nada, apenas um espaço vazio caso precisar de adicionar alguma coisa
## Antes..
## E claro, para aparecer a mensagem do passo..
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/5]\e[0m"
echo ""
sleep 1
## Aqui vamos fazer uma verificação se já existe Postgres Instalado
## Se tiver ele vai criar um banco de dados no postgres ou perguntar se deseja apagar o que já existe e criar outro
## Verifica container postgres e cria banco no postgres
verificar_container_postgres
if [ $? -eq 0 ]; then
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "evolution"
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Verificando/Instalando Postgres"
else
echo "1/1 - [ OFF ] - Verificando/Instalando Postgres"
fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO REDIS \e[33m[3/5]\e[0m"
echo ""
sleep 1
## Verifica container redis
verificar_container_redis
if [ $? -eq 0 ]; then
echo ""
else
ferramenta_redis > /dev/null 2>&1
fi
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Verificando/Instalando Reids"
else
echo "1/1 - [ OFF ] - Verificando/Instalando Redis"
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO A EVOLUTION API \e[33m[4/5]\e[0m"
echo ""
sleep 1
## Aqui de fato vamos iniciar a instalação da Evolution API
## Criando uma Global Key Aleatória
apikeyglobal=$(openssl rand -hex 16)
## Criando a stack
cat > evolution.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
evolution:
image: atendai/evolution-api:v2.0.10
volumes:
- evolution_instances:/evolution/instances
networks:
- $nome_rede_interna
environment:
## Configurações Gerais
- SERVER_URL=https://$url_evolution
- AUTHENTICATION_API_KEY=$apikeyglobal
- AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=true
- DEL_INSTANCE=false
- QRCODE_LIMIT=1902
- LANGUAGE=pt-BR
## Configuração do Cliente
## Pegue a versão em: https://web.whatsapp.com/check-update?version=0&platform=web
- CONFIG_SESSION_PHONE_VERSION=2.3000.1015901307
- CONFIG_SESSION_PHONE_CLIENT=OrionDesign
- CONFIG_SESSION_PHONE_NAME=Chrome
## Configuração do Banco de Dados
- DATABASE_ENABLED=true
- DATABASE_PROVIDER=postgresql
- DATABASE_CONNECTION_URI=postgresql://postgres:$senha_postgres@postgres:5432/evolution
- DATABASE_CONNECTION_CLIENT_NAME=evolution
- DATABASE_SAVE_DATA_INSTANCE=true
- DATABASE_SAVE_DATA_NEW_MESSAGE=true
- DATABASE_SAVE_MESSAGE_UPDATE=true
- DATABASE_SAVE_DATA_CONTACTS=true
- DATABASE_SAVE_DATA_CHATS=true
- DATABASE_SAVE_DATA_LABELS=true
- DATABASE_SAVE_DATA_HISTORIC=true
## Integração com OpenAI
- OPENAI_ENABLED=true
## Integração com Dify
- DIFY_ENABLED=true
## Integração com Typebot
- TYPEBOT_ENABLED=true
- TYPEBOT_API_VERSION=latest
## Integração com Chatwoot
- CHATWOOT_ENABLED=true
- CHATWOOT_MESSAGE_READ=true
- CHATWOOT_MESSAGE_DELETE=true
- CHATWOOT_IMPORT_DATABASE_CONNECTION_URI=postgresql://postgres:$senha_postgres@postgres:5432/chatwoot?sslmode=disable
- CHATWOOT_IMPORT_PLACEHOLDER_MEDIA_MESSAGE=false
## Configuração do Cache
- CACHE_REDIS_ENABLED=true
- CACHE_REDIS_URI=redis://redis:6379/8
- CACHE_REDIS_PREFIX_KEY=evolution
- CACHE_REDIS_SAVE_INSTANCES=false
- CACHE_LOCAL_ENABLED=false
## Configuração do S3
- S3_ENABLED=false
- S3_ACCESS_KEY=
- S3_SECRET_KEY=
- S3_BUCKET=evolution
- S3_PORT=443
- S3_ENDPOINT=
- S3_USE_SSL=true
## Configuração do WhatsApp Business
- WA_BUSINESS_TOKEN_WEBHOOK=evolution
- WA_BUSINESS_URL=https://graph.facebook.com
- WA_BUSINESS_VERSION=v20.0
- WA_BUSINESS_LANGUAGE=pt_BR
## Telemetria
- TELEMETRY=false
- TELEMETRY_URL=
## Configuração do WebSocket
- WEBSOCKET_ENABLED=false
- WEBSOCKET_GLOBAL_EVENTS=false
## Configuração do SQS
- SQS_ENABLED=false
- SQS_ACCESS_KEY_ID=
- SQS_SECRET_ACCESS_KEY=
- SQS_ACCOUNT_ID=
- SQS_REGION=
## Configuração do RabbitMQ
- RABBITMQ_ENABLED=false
- RABBITMQ_URI=amqp://USER:PASS@rabbitmq:5672/default
- RABBITMQ_EXCHANGE_NAME=evolution
- RABBITMQ_GLOBAL_ENABLED=false
- RABBITMQ_EVENTS_APPLICATION_STARTUP=false
- RABBITMQ_EVENTS_INSTANCE_CREATE=false
- RABBITMQ_EVENTS_INSTANCE_DELETE=false
- RABBITMQ_EVENTS_QRCODE_UPDATED=false
- RABBITMQ_EVENTS_MESSAGES_SET=false
- RABBITMQ_EVENTS_MESSAGES_UPSERT=true
- RABBITMQ_EVENTS_MESSAGES_EDITED=false
- RABBITMQ_EVENTS_MESSAGES_UPDATE=false
- RABBITMQ_EVENTS_MESSAGES_DELETE=false
- RABBITMQ_EVENTS_SEND_MESSAGE=false
- RABBITMQ_EVENTS_CONTACTS_SET=false
- RABBITMQ_EVENTS_CONTACTS_UPSERT=false
- RABBITMQ_EVENTS_CONTACTS_UPDATE=false
- RABBITMQ_EVENTS_PRESENCE_UPDATE=false
- RABBITMQ_EVENTS_CHATS_SET=false
- RABBITMQ_EVENTS_CHATS_UPSERT=false
- RABBITMQ_EVENTS_CHATS_UPDATE=false
- RABBITMQ_EVENTS_CHATS_DELETE=false
- RABBITMQ_EVENTS_GROUPS_UPSERT=false
- RABBITMQ_EVENTS_GROUP_UPDATE=false
- RABBITMQ_EVENTS_GROUP_PARTICIPANTS_UPDATE=false
- RABBITMQ_EVENTS_CONNECTION_UPDATE=true
- RABBITMQ_EVENTS_CALL=false
- RABBITMQ_EVENTS_TYPEBOT_START=false
- RABBITMQ_EVENTS_TYPEBOT_CHANGE_STATUS=false
## Configuração do Webhook
- WEBHOOK_GLOBAL_ENABLED=false
- WEBHOOK_GLOBAL_URL=
- WEBHOOK_GLOBAL_WEBHOOK_BY_EVENTS=false
- WEBHOOK_EVENTS_APPLICATION_STARTUP=false
- WEBHOOK_EVENTS_QRCODE_UPDATED=false
- WEBHOOK_EVENTS_MESSAGES_SET=false
- WEBHOOK_EVENTS_MESSAGES_UPSERT=false
- WEBHOOK_EVENTS_MESSAGES_EDITED=false
- WEBHOOK_EVENTS_MESSAGES_UPDATE=false
- WEBHOOK_EVENTS_MESSAGES_DELETE=false
- WEBHOOK_EVENTS_SEND_MESSAGE=false
- WEBHOOK_EVENTS_CONTACTS_SET=false
- WEBHOOK_EVENTS_CONTACTS_UPSERT=false
- WEBHOOK_EVENTS_CONTACTS_UPDATE=false
- WEBHOOK_EVENTS_PRESENCE_UPDATE=false
- WEBHOOK_EVENTS_CHATS_SET=false
- WEBHOOK_EVENTS_CHATS_UPSERT=false
- WEBHOOK_EVENTS_CHATS_UPDATE=false
- WEBHOOK_EVENTS_CHATS_DELETE=false
- WEBHOOK_EVENTS_GROUPS_UPSERT=false
- WEBHOOK_EVENTS_GROUPS_UPDATE=false
- WEBHOOK_EVENTS_GROUP_PARTICIPANTS_UPDATE=false
- WEBHOOK_EVENTS_CONNECTION_UPDATE=false
- WEBHOOK_EVENTS_LABELS_EDIT=false
- WEBHOOK_EVENTS_LABELS_ASSOCIATION=false
- WEBHOOK_EVENTS_CALL=false
- WEBHOOK_EVENTS_TYPEBOT_START=false
- WEBHOOK_EVENTS_TYPEBOT_CHANGE_STATUS=false
- WEBHOOK_EVENTS_ERRORS=false
- WEBHOOK_EVENTS_ERRORS_WEBHOOK=
## Configuração do Provider
- PROVIDER_ENABLED=false
- PROVIDER_HOST=127.0.0.1
- PROVIDER_PORT=5656
- PROVIDER_PREFIX=evolution
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=1
- traefik.http.routers.evolution.rule=Host(\`$url_evolution\`) ## Url da aplicação
- traefik.http.routers.evolution.entrypoints=websecure
- traefik.http.routers.evolution.priority=1
- traefik.http.routers.evolution.tls.certresolver=letsencryptresolver
- traefik.http.routers.evolution.service=evolution
- traefik.http.services.evolution.loadbalancer.server.port=8080
- traefik.http.services.evolution.loadbalancer.passHostHeader=true
## --------------------------- ORION --------------------------- ##
volumes:
evolution_instances:
external: true
name: evolution_instances
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack da Evolution API"
fi
STACK_NAME="evolution"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c evolution.yaml evolution > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack da Evolution API"
#fi
sleep 10
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[5/5]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_evolution para verificar se o serviço esta online
wait_stack "evolution"
cd dados_vps
cat > dados_evolution <<EOL
[ EVOLUTION API ]
Manager Evolution: https://$url_evolution/manager
URL: https://$url_evolution
Global API Key: $apikeyglobal
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ EVOLUTION API ]\e[0m"
echo ""
echo -e "\e[97mLink do Manager:\e[33m https://$url_evolution/manager\e[0m"
echo ""
echo -e "\e[97mAPI URL:\e[33m https://$url_evolution\e[0m"
echo ""
echo -e "\e[97mGLOBAL API KEY:\e[33m $apikeyglobal\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███████╗██╗ ██╗ ██████╗ ██╗ ██╗ ██╗████████╗██╗ ██████╗ ███╗ ██╗ ██╗ ██╗ ██╗
## ██╔════╝██║ ██║██╔═══██╗██║ ██║ ██║╚══██╔══╝██║██╔═══██╗████╗ ██║ ██║ ██║███║
## █████╗ ██║ ██║██║ ██║██║ ██║ ██║ ██║ ██║██║ ██║██╔██╗ ██║ ██║ ██║╚██║
## ██╔══╝ ╚██╗ ██╔╝██║ ██║██║ ██║ ██║ ██║ ██║██║ ██║██║╚██╗██║ ╚██╗ ██╔╝ ██║
## ███████╗ ╚████╔╝ ╚██████╔╝███████╗╚██████╔╝ ██║ ██║╚██████╔╝██║ ╚████║ ╚████╔╝ ██║
## ╚══════╝ ╚═══╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═══╝ ╚═╝
ferramenta_evolution_v1() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_evolution
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o Dominio para a Evolution API (ex: api.oriondesign.art.br): \e[0m" && read -r url_evolution
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_evolution
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio da Evolution API:\e[97m $url_evolution\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_evolution
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DA EVOLUTION API \e[33m[1/3]\e[0m"
echo ""
sleep 1
## Literalmente nada, apenas um espaço vazio caso precisar de adicionar alguma coisa
## Antes..
## E claro, para aparecer a mensagem do passo..
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO A EVOLUTION API \e[33m[2/3]\e[0m"
echo ""
sleep 1
## Verifica se existe postgres
verificar_container_postgres
if [ $? -eq 0 ]; then
pegar_senha_postgres > /dev/null 2>&1
senha_do_postgres=$senha_postgres
else
senha_do_postgres=SENHA_DO_POSTGRES_AQUI
fi
## Aqui de fato vamos iniciar a instalação da Evolution API
## Criando uma Global Key Aleatória
apikeyglobal=$(openssl rand -hex 16)
## Criando a stack
cat > evolution_v1.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
evolution_oriondesign:
image: atendai/evolution-api:latest ## Versão da Evolution API
command: ["node", "./dist/src/main.js"]
volumes:
- evolution_oriondesign_instances:/evolution/instances
- evolution_oriondesign_store:/evolution/store
- evolution_oriondesign_views:/evolution/views
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Url da Evolution API
- SERVER_URL=https://$url_evolution ## Url da aplicação
## Dados de Autenticação
- AUTHENTICATION_TYPE=apikey
- AUTHENTICATION_API_KEY=$apikeyglobal ## GLOBAL API KEY
- AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=true
## Configurações
- CONFIG_SESSION_PHONE_CLIENT=OrionDesign ## Nome que aparece no celular
- CONFIG_SESSION_PHONE_NAME=chrome
## Definir versão do Whatsapp Web
## pegue a versão em: https://web.whatsapp.com/check-update?version=0&platform=web
- CONFIG_SESSION_PHONE_VERSION=2,3000,1015901307
## Sobre os QR-Codes
- QRCODE_LIMIT=1902
- QRCODE_COLOR=#000000
# Ativer o RabbitMQ
- RABBITMQ_ENABLED=false ## Colocar true se quiser usar | Recomendado | Necessario instalar RabbitMQ antes
- RABBITMQ_URI=amqp://USER:PASS@rabbitmq:5672
# Aivar Banco de Dados MongoDB
- DATABASE_ENABLED=false ## Colocar true se quiser usar | Recomendado | Necessario instalar MongoDB antes
- DATABASE_CONNECTION_URI=mongodb://USUARIO:SENHA@IP_VPS:27017/?authSource=admin&readPreference=primary&ssl=false&directConnection=true ## Colocar a URL do MongoDB
- DATABASE_CONNECTION_DB_PREFIX_NAME=evolution
- DATABASE_SAVE_DATA_INSTANCE=true
- DATABASE_SAVE_DATA_NEW_MESSAGE=true
- DATABASE_SAVE_MESSAGE_UPDATE=true
- DATABASE_SAVE_DATA_CONTACTS=true
- DATABASE_SAVE_DATA_CHATS=true
## Ativar o Redis
- REDIS_ENABLED=false ## Colocar true se quiser usar | Não recomendado
- REDIS_URI=redis://redis:6379
## Ativar o Cache Redis (Em testes)
- CACHE_REDIS_ENABLED=false
- CACHE_REDIS_URI=redis://redis:6379
- CACHE_REDIS_PREFIX_KEY=evolution
- CACHE_REDIS_TTL=604800
- CACHE_REDIS_SAVE_INSTANCES=false
- CACHE_LOCAL_ENABLED=false
- CACHE_LOCAL_TTL=604800
## Novas variaveis para o Typebot
- TYPEBOT_KEEP_OPEN=true
- TYPEBOT_API_VERSION=latest
## Novas variaveis para o Chatwoot
- CHATWOOT_MESSAGE_DELETE=true
- CHATWOOT_MESSAGE_READ=true
## Importar mensagens para o Chawoot | Descomente para usar
## Se estiver usando Chatwoot do Nestor mude o a parte "chatwoot" para "chatwoot_nestor"
#- CHATWOOT_IMPORT_DATABASE_CONNECTION_URI=postgresql://postgres:$senha_do_postgres@postgres:5432/chatwoot?sslmode=disable
#- CHATWOOT_IMPORT_DATABASE_PLACEHOLDER_MEDIA_MESSAGE=false ## true = Importar midia | false = Não importar midia
## Informações do Webhook
- WEBHOOK_GLOBAL_ENABLED=false
- WEBHOOK_GLOBAL_URL=
- WEBHOOK_GLOBAL_WEBHOOK_BY_EVENTS=false
- WEBHOOK_EVENTS_APPLICATION_STARTUP=false
- WEBHOOK_EVENTS_QRCODE_UPDATED=true
- WEBHOOK_EVENTS_MESSAGES_SET=false
- WEBHOOK_EVENTS_MESSAGES_UPSERT=true
- WEBHOOK_EVENTS_MESSAGES_UPDATE=true
- WEBHOOK_EVENTS_CONTACTS_SET=true
- WEBHOOK_EVENTS_CONTACTS_UPSERT=true
- WEBHOOK_EVENTS_CONTACTS_UPDATE=true
- WEBHOOK_EVENTS_PRESENCE_UPDATE=true
- WEBHOOK_EVENTS_CHATS_SET=true
- WEBHOOK_EVENTS_CHATS_UPSERT=true
- WEBHOOK_EVENTS_CHATS_UPDATE=true
- WEBHOOK_EVENTS_CHATS_DELETE=true
- WEBHOOK_EVENTS_GROUPS_UPSERT=true
- WEBHOOK_EVENTS_GROUPS_UPDATE=true
- WEBHOOK_EVENTS_GROUP_PARTICIPANTS_UPDATE=true
- WEBHOOK_EVENTS_CONNECTION_UPDATE=true
## Sobre as instancias
- DEL_INSTANCE=false
- DEL_TEMP_INSTANCES=false
- STORE_MESSAGES=true
- STORE_MESSAGE_UP=true
- STORE_CONTACTS=true
- STORE_CHATS=true
- CLEAN_STORE_CLEANING_INTERVAL=7200 # seconds === 2h
- CLEAN_STORE_MESSAGES=true
- CLEAN_STORE_MESSAGE_UP=true
- CLEAN_STORE_CONTACTS=true
- CLEAN_STORE_CHATS=true
## Outros dados
- DOCKER_ENV=true
- LOG_LEVEL=ERROR
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=1
- traefik.http.routers.evolution_oriondesign.rule=Host(\`$url_evolution\`) ## Url da aplicação
- traefik.http.routers.evolution_oriondesign.entrypoints=websecure
- traefik.http.routers.evolution_oriondesign.priority=1
- traefik.http.routers.evolution_oriondesign.tls.certresolver=letsencryptresolver
- traefik.http.routers.evolution_oriondesign.service=evolution_oriondesign
- traefik.http.services.evolution_oriondesign.loadbalancer.server.port=8080
- traefik.http.services.evolution_oriondesign.loadbalancer.passHostHeader=1
## --------------------------- ORION --------------------------- ##
volumes:
evolution_oriondesign_instances:
external: true
name: evolution_oriondesign_instances
evolution_oriondesign_store:
external: true
name: evolution_oriondesign_store
evolution_oriondesign_views:
external: true
name: evolution_oriondesign_views
networks:
$nome_rede_interna: ## Nome da rede interna
name: $nome_rede_interna ## Nome da rede interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack da Evolution API"
fi
STACK_NAME="evolution_v1"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c evolution_v1.yaml evolution > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack da Evolution API"
#fi
sleep 10
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_evolution para verificar se o serviço esta online
wait_stack "evolution"
cd dados_vps
cat > dados_evolution_v1 <<EOL
[ EVOLUTION API ]
Manager Evolution: https://$url_evolution/manager
URL: https://$url_evolution
Global API Key: $apikeyglobal
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ Evolution API ]\e[0m"
echo ""
echo -e "\e[97mLink do Manager:\e[33m https://$url_evolution/manager\e[0m"
echo ""
echo -e "\e[97mAPI URL:\e[33m https://$url_evolution\e[0m"
echo ""
echo -e "\e[97mGLOBAL API KEY:\e[33m $apikeyglobal\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███████╗██╗ ██╗ ██████╗ ██╗ ██╗ ██╗████████╗██╗ ██████╗ ███╗ ██╗ ██╗ ██╗██████╗
## ██╔════╝██║ ██║██╔═══██╗██║ ██║ ██║╚══██╔══╝██║██╔═══██╗████╗ ██║ ██║ ██║╚════██╗
## █████╗ ██║ ██║██║ ██║██║ ██║ ██║ ██║ ██║██║ ██║██╔██╗ ██║ ██║ ██║ █████╔╝
## ██╔══╝ ╚██╗ ██╔╝██║ ██║██║ ██║ ██║ ██║ ██║██║ ██║██║╚██╗██║ ╚██╗ ██╔╝██╔═══╝
## ███████╗ ╚████╔╝ ╚██████╔╝███████╗╚██████╔╝ ██║ ██║╚██████╔╝██║ ╚████║ ╚████╔╝ ███████╗
## ╚══════╝ ╚═══╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═══╝ ╚══════╝
ferramenta_evolution_v2() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_evolution
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o Dominio para a Evolution API (ex: api.oriondesign.art.br): \e[0m" && read -r url_evolution
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_evolution
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio da Evolution API:\e[97m $url_evolution\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_evolution
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DA EVOLUTION API \e[33m[1/5]\e[0m"
echo ""
sleep 1
## Literalmente nada, apenas um espaço vazio caso precisar de adicionar alguma coisa
## Antes..
## E claro, para aparecer a mensagem do passo..
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/5]\e[0m"
echo ""
sleep 1
## Aqui vamos fazer uma verificação se já existe Postgres Instalado
## Se tiver ele vai criar um banco de dados no postgres ou perguntar se deseja apagar o que já existe e criar outro
## Verifica container postgres e cria banco no postgres
verificar_container_postgres
if [ $? -eq 0 ]; then
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "evolution"
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Verificando/Instalando Postgres"
else
echo "1/1 - [ OFF ] - Verificando/Instalando Postgres"
fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO REDIS \e[33m[3/5]\e[0m"
echo ""
sleep 1
## Verifica container redis
verificar_container_redis
if [ $? -eq 0 ]; then
echo ""
else
ferramenta_redis > /dev/null 2>&1
fi
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Verificando/Instalando Reids"
else
echo "1/1 - [ OFF ] - Verificando/Instalando Redis"
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO A EVOLUTION API \e[33m[4/5]\e[0m"
echo ""
sleep 1
## Aqui de fato vamos iniciar a instalação da Evolution API
## Criando uma Global Key Aleatória
apikeyglobal=$(openssl rand -hex 16)
## Criando a stack
cat > evolution_v2.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
evolution:
image: atendai/evolution-api:v2.0.9
volumes:
- evolution_instances:/evolution/instances
networks:
- $nome_rede_interna
environment:
## Configurações Gerais
- SERVER_URL=https://$url_evolution
- AUTHENTICATION_API_KEY=$apikeyglobal
- AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=true
- DEL_INSTANCE=false
- QRCODE_LIMIT=1902
- LANGUAGE=pt-BR
## Configuração do Cliente
## Pegue a versão em: https://web.whatsapp.com/check-update?version=0&platform=web
- CONFIG_SESSION_PHONE_VERSION=2.3000.1015901307
- CONFIG_SESSION_PHONE_CLIENT=OrionDesign
- CONFIG_SESSION_PHONE_NAME=Chrome
## Configuração do Banco de Dados
- DATABASE_ENABLED=true
- DATABASE_PROVIDER=postgresql
- DATABASE_CONNECTION_URI=postgresql://postgres:$senha_postgres@postgres:5432/evolution
- DATABASE_CONNECTION_CLIENT_NAME=evolution
- DATABASE_SAVE_DATA_INSTANCE=true
- DATABASE_SAVE_DATA_NEW_MESSAGE=true
- DATABASE_SAVE_MESSAGE_UPDATE=true
- DATABASE_SAVE_DATA_CONTACTS=true
- DATABASE_SAVE_DATA_CHATS=true
- DATABASE_SAVE_DATA_LABELS=true
- DATABASE_SAVE_DATA_HISTORIC=true
## Integração com OpenAI
- OPENAI_ENABLED=true
## Integração com Dify
- DIFY_ENABLED=true
## Integração com Typebot
- TYPEBOT_ENABLED=true
- TYPEBOT_API_VERSION=latest
## Integração com Chatwoot
- CHATWOOT_ENABLED=true
- CHATWOOT_MESSAGE_READ=true
- CHATWOOT_MESSAGE_DELETE=true
- CHATWOOT_IMPORT_DATABASE_CONNECTION_URI=postgresql://postgres:$senha_postgres@postgres:5432/chatwoot?sslmode=disable
- CHATWOOT_IMPORT_PLACEHOLDER_MEDIA_MESSAGE=false
## Configuração do Cache
- CACHE_REDIS_ENABLED=true
- CACHE_REDIS_URI=redis://redis:6379/8
- CACHE_REDIS_PREFIX_KEY=evolution
- CACHE_REDIS_SAVE_INSTANCES=false
- CACHE_LOCAL_ENABLED=false
## Configuração do S3
- S3_ENABLED=false
- S3_ACCESS_KEY=
- S3_SECRET_KEY=
- S3_BUCKET=evolution
- S3_PORT=443
- S3_ENDPOINT=
- S3_USE_SSL=true
## Configuração do WhatsApp Business
- WA_BUSINESS_TOKEN_WEBHOOK=evolution
- WA_BUSINESS_URL=https://graph.facebook.com
- WA_BUSINESS_VERSION=v20.0
- WA_BUSINESS_LANGUAGE=pt_BR
## Telemetria
- TELEMETRY=false
- TELEMETRY_URL=
## Configuração do WebSocket
- WEBSOCKET_ENABLED=false
- WEBSOCKET_GLOBAL_EVENTS=false
## Configuração do SQS
- SQS_ENABLED=false
- SQS_ACCESS_KEY_ID=
- SQS_SECRET_ACCESS_KEY=
- SQS_ACCOUNT_ID=
- SQS_REGION=
## Configuração do RabbitMQ
- RABBITMQ_ENABLED=false
- RABBITMQ_URI=amqp://USER:PASS@rabbitmq:5672/default
- RABBITMQ_EXCHANGE_NAME=evolution
- RABBITMQ_GLOBAL_ENABLED=false
- RABBITMQ_EVENTS_APPLICATION_STARTUP=false
- RABBITMQ_EVENTS_INSTANCE_CREATE=false
- RABBITMQ_EVENTS_INSTANCE_DELETE=false
- RABBITMQ_EVENTS_QRCODE_UPDATED=false
- RABBITMQ_EVENTS_MESSAGES_SET=false
- RABBITMQ_EVENTS_MESSAGES_UPSERT=true
- RABBITMQ_EVENTS_MESSAGES_EDITED=false
- RABBITMQ_EVENTS_MESSAGES_UPDATE=false
- RABBITMQ_EVENTS_MESSAGES_DELETE=false
- RABBITMQ_EVENTS_SEND_MESSAGE=false
- RABBITMQ_EVENTS_CONTACTS_SET=false
- RABBITMQ_EVENTS_CONTACTS_UPSERT=false
- RABBITMQ_EVENTS_CONTACTS_UPDATE=false
- RABBITMQ_EVENTS_PRESENCE_UPDATE=false
- RABBITMQ_EVENTS_CHATS_SET=false
- RABBITMQ_EVENTS_CHATS_UPSERT=false
- RABBITMQ_EVENTS_CHATS_UPDATE=false
- RABBITMQ_EVENTS_CHATS_DELETE=false
- RABBITMQ_EVENTS_GROUPS_UPSERT=false
- RABBITMQ_EVENTS_GROUP_UPDATE=false
- RABBITMQ_EVENTS_GROUP_PARTICIPANTS_UPDATE=false
- RABBITMQ_EVENTS_CONNECTION_UPDATE=true
- RABBITMQ_EVENTS_CALL=false
- RABBITMQ_EVENTS_TYPEBOT_START=false
- RABBITMQ_EVENTS_TYPEBOT_CHANGE_STATUS=false
## Configuração do Webhook
- WEBHOOK_GLOBAL_ENABLED=false
- WEBHOOK_GLOBAL_URL=
- WEBHOOK_GLOBAL_WEBHOOK_BY_EVENTS=false
- WEBHOOK_EVENTS_APPLICATION_STARTUP=false
- WEBHOOK_EVENTS_QRCODE_UPDATED=false
- WEBHOOK_EVENTS_MESSAGES_SET=false
- WEBHOOK_EVENTS_MESSAGES_UPSERT=false
- WEBHOOK_EVENTS_MESSAGES_EDITED=false
- WEBHOOK_EVENTS_MESSAGES_UPDATE=false
- WEBHOOK_EVENTS_MESSAGES_DELETE=false
- WEBHOOK_EVENTS_SEND_MESSAGE=false
- WEBHOOK_EVENTS_CONTACTS_SET=false
- WEBHOOK_EVENTS_CONTACTS_UPSERT=false
- WEBHOOK_EVENTS_CONTACTS_UPDATE=false
- WEBHOOK_EVENTS_PRESENCE_UPDATE=false
- WEBHOOK_EVENTS_CHATS_SET=false
- WEBHOOK_EVENTS_CHATS_UPSERT=false
- WEBHOOK_EVENTS_CHATS_UPDATE=false
- WEBHOOK_EVENTS_CHATS_DELETE=false
- WEBHOOK_EVENTS_GROUPS_UPSERT=false
- WEBHOOK_EVENTS_GROUPS_UPDATE=false
- WEBHOOK_EVENTS_GROUP_PARTICIPANTS_UPDATE=false
- WEBHOOK_EVENTS_CONNECTION_UPDATE=false
- WEBHOOK_EVENTS_LABELS_EDIT=false
- WEBHOOK_EVENTS_LABELS_ASSOCIATION=false
- WEBHOOK_EVENTS_CALL=false
- WEBHOOK_EVENTS_TYPEBOT_START=false
- WEBHOOK_EVENTS_TYPEBOT_CHANGE_STATUS=false
- WEBHOOK_EVENTS_ERRORS=false
- WEBHOOK_EVENTS_ERRORS_WEBHOOK=
## Configuração do Provider
- PROVIDER_ENABLED=false
- PROVIDER_HOST=127.0.0.1
- PROVIDER_PORT=5656
- PROVIDER_PREFIX=evolution
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=1
- traefik.http.routers.evolution.rule=Host(\`$url_evolution\`) ## Url da aplicação
- traefik.http.routers.evolution.entrypoints=websecure
- traefik.http.routers.evolution.priority=1
- traefik.http.routers.evolution.tls.certresolver=letsencryptresolver
- traefik.http.routers.evolution.service=evolution
- traefik.http.services.evolution.loadbalancer.server.port=8080
- traefik.http.services.evolution.loadbalancer.passHostHeader=true
## --------------------------- ORION --------------------------- ##
volumes:
evolution_instances:
external: true
name: evolution_instances
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack da Evolution API"
fi
STACK_NAME="evolution_v2"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c evolution_v2.yaml evolution > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack da Evolution API"
#fi
sleep 10
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[5/5]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_evolution para verificar se o serviço esta online
wait_stack "evolution"
cd dados_vps
cat > dados_evolution_v2 <<EOL
[ EVOLUTION API ]
Manager Evolution: https://$url_evolution/manager
URL: https://$url_evolution
Global API Key: $apikeyglobal
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ EVOLUTION API ]\e[0m"
echo ""
echo -e "\e[97mLink do Manager:\e[33m https://$url_evolution/manager\e[0m"
echo ""
echo -e "\e[97mAPI URL:\e[33m https://$url_evolution\e[0m"
echo ""
echo -e "\e[97mGLOBAL API KEY:\e[33m $apikeyglobal\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███╗ ███╗██╗███╗ ██╗██╗ ██████╗
## ████╗ ████║██║████╗ ██║██║██╔═══██╗
## ██╔████╔██║██║██╔██╗ ██║██║██║ ██║
## ██║╚██╔╝██║██║██║╚██╗██║██║██║ ██║
## ██║ ╚═╝ ██║██║██║ ╚████║██║╚██████╔╝
## ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝ ╚═════╝
ferramenta_minio() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_minio
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio do Minio
echo -e "\e[97mPasso$amarelo 1/4\e[0m"
echo -en "\e[33mDigite o Dominio para o MinIO (ex: minio.oriondesign.art.br): \e[0m" && read -r url_minio
echo ""
##Pergunta o Dominio para o S3 do Minio
echo -e "\e[97mPasso$amarelo 2/4\e[0m"
echo -en "\e[33mDigite o Dominio para o Minio S3 (ex: s3.oriondesign.art.br): \e[0m" && read -r url_s3
echo ""
##Pergunta o Usuario para o Minio
echo -e "\e[97mPasso$amarelo 3/4\e[0m"
echo -e "$amarelo--> Evite os caracteres especiais: \!#$ e/ou espaço"
echo -en "\e[33mDigite um usuario para o MinIO (ex: OrionDesign): \e[0m" && read -r user_minio
echo ""
##Pergunta a Senha para o Minio
echo -e "\e[97mPasso$amarelo 4/4\e[0m"
echo -e "$amarelo--> Minimo 8 caracteres. Use Letras MAIUSCULAS e minusculas, numero e um caractere especial @ ou _"
echo -e "$amarelo--> Evite os caracteres especiais: \!#$"
echo -en "\e[33mDigite uma senha para o MinIO (ex: @Senha123_): \e[0m" && read -r senha_minio
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_minio
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do Minio
echo -e "\e[33mDominio do MinIO:\e[97m $url_minio\e[0m"
echo ""
## Informação sobre URL para o S# do Minio
echo -e "\e[33mDominio do S3:\e[97m $url_s3\e[0m"
echo ""
## Informação sobre Usuario do Minio
echo -e "\e[33mUsuario do MinIO:\e[97m $user_minio\e[0m"
echo ""
## Informação sobre Senha do Minio
echo -e "\e[33mSenha do MinIO:\e[97m $senha_minio\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_minio
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO MINIO \e[33m[1/3]\e[0m"
echo ""
sleep 1
## NADA
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO MINIO \e[33m[2/3]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > minio.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
minio:
image: quay.io/minio/minio:RELEASE.2024-01-13T07-53-03Z-cpuv1 ## Versão do Minio
command: server /data --console-address ":9001"
volumes:
- minio_data:/data
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados de acesso
- MINIO_ROOT_USER=$user_minio
- MINIO_ROOT_PASSWORD=$senha_minio
## Url do minio
- MINIO_BROWSER_REDIRECT_URL=https://$url_minio ## Url do minio
- MINIO_SERVER_URL=https://$url_s3 ## Url do s3 | Comente esta linha caso tiver erro ao fazer login
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.minio_public.rule=Host(\`$url_s3\`) ## Url do s3
- traefik.http.routers.minio_public.entrypoints=websecure
- traefik.http.routers.minio_public.tls.certresolver=letsencryptresolver
- traefik.http.services.minio_public.loadbalancer.server.port=9000
- traefik.http.services.minio_public.loadbalancer.passHostHeader=true
- traefik.http.routers.minio_public.service=minio_public
- traefik.http.routers.minio_console.rule=Host(\`$url_minio\`) ## Url do minio
- traefik.http.routers.minio_console.entrypoints=websecure
- traefik.http.routers.minio_console.tls.certresolver=letsencryptresolver
- traefik.http.services.minio_console.loadbalancer.server.port=9001
- traefik.http.services.minio_console.loadbalancer.passHostHeader=true
- traefik.http.routers.minio_console.service=minio_console
## --------------------------- ORION --------------------------- ##
volumes:
minio_data:
external: true
name: minio_data
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do MinIO"
fi
sleep 1
STACK_NAME="minio"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c minio.yaml minio
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do Minio"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_minio para verificar se o serviço esta online
wait_stack "minio"
cd dados_vps
cat > dados_minio <<EOL
[ MINIO ]
Dominio do Minio: https://$url_minio
Dominio do S3: https://$url_s3
Usuario: $user_minio
Senha: $senha_minio
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ MinIO ]\e[0m"
echo ""
echo -e "\e[33mDominio MinIO:\e[97m https://$url_minio\e[0m"
echo ""
echo -e "\e[33mDominio S3:\e[97m https://$url_s3\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m $user_minio\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m $senha_minio\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ████████╗██╗ ██╗██████╗ ███████╗██████╗ ██████╗ ████████╗
## ╚══██╔══╝╚██╗ ██╔╝██╔══██╗██╔════╝██╔══██╗██╔═══██╗╚══██╔══╝
## ██║ ╚████╔╝ ██████╔╝█████╗ ██████╔╝██║ ██║ ██║
## ██║ ╚██╔╝ ██╔═══╝ ██╔══╝ ██╔══██╗██║ ██║ ██║
## ██║ ██║ ██║ ███████╗██████╔╝╚██████╔╝ ██║
## ╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═════╝ ╚═════╝ ╚═╝
ferramenta_typebot() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_typebot
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio do Builder
echo -e "\e[97mPasso$amarelo 1/10\e[0m"
echo -en "\e[33mDigite o Dominio para o Builder do Typebot (ex: typebot.oriondesign.art.br): \e[0m" && read -r url_typebot
echo ""
##Pergunta o Dominio do Viewer
echo -e "\e[97mPasso$amarelo 2/10\e[0m"
echo -en "\e[33mDigite o Dominio para o Viewer do Typebot (ex: bot.oriondesign.art.br): \e[0m" && read -r url_viewer
echo ""
##Pergunta a versão da ferramenta
echo -e "\e[97mPasso$amarelo 3/10\e[0m"
echo -en "\e[33mDigite a versão que deseja do Typebot (ex: 2.21.3 ou latest): \e[0m" && read -r versao_typebot
echo ""
##Pergunta o Email SMTP
echo -e "\e[97mPasso$amarelo 4/10\e[0m"
echo -en "\e[33mDigite o Email para SMTP (ex: [email protected]): \e[0m" && read -r email_typebot
echo ""
##Pergunta o usuário do Email SMTP
echo -e "\e[97mPasso$amarelo 5/10\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o Usuário para SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r usuario_email_typebot
echo ""
## Pergunta a senha do SMTP
echo -e "\e[97mPasso$amarelo 6/10\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do Email (ex: @Senha123_): \e[0m" && read -r senha_email_typebot
echo ""
## Pergunta o Host SMTP do email
echo -e "\e[97mPasso$amarelo 7/10\e[0m"
echo -en "\e[33mDigite o Host SMTP do Email (ex: smtp.hostinger.com): \e[0m" && read -r smtp_email_typebot
echo ""
## Pergunta a porta SMTP do email
echo -e "\e[97mPasso$amarelo 8/10\e[0m"
echo -en "\e[33mDigite a porta SMTP do Email (ex: 465): \e[0m" && read -r porta_smtp_typebot
echo ""
## Verifica se a porta é 465, se sim deixa o ssl true, se não, deixa false
if [ "$porta_smtp_typebot" -eq 465 ]; then
smtp_secure_typebot=true
else
smtp_secure_typebot=false
fi
## Pergunta qual é o Access Key do minio
echo -e "\e[97mPasso$amarelo 9/10\e[0m"
echo -en "\e[33mAccess Key Minio: \e[0m" && read -r S3_ACCESS_KEY
echo ""
## Pergunta qual é a Secret Key do minio
echo -e "\e[97mPasso$amarelo 10/10\e[0m"
echo -en "\e[33mSecret Key Minio: \e[0m" && read -r S3_SECRET_KEY
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_typebot
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do Builder
echo -e "\e[33mDominio do Typebot Builder:\e[97m $url_typebot\e[0m"
echo ""
## Informação sobre URL do Viewer
echo -e "\e[33mDominio do Typebot Viewer:\e[97m $url_viewer\e[0m"
echo ""
## Informação sobre a versão da ferramenta
echo -e "\e[33mVersão do Typebot:\e[97m $versao_typebot\e[0m"
echo ""
## Informação sobre Email
echo -e "\e[33mEmail do SMTP:\e[97m $email_typebot\e[0m"
echo ""
## Informação sobre Email
echo -e "\e[33mUsuário do SMTP:\e[97m $usuario_email_typebot\e[0m"
echo ""
## Informação sobre Senha do Email
echo -e "\e[33mSenha do Email:\e[97m $senha_email_typebot\e[0m"
echo ""
## Informação sobre Host SMTP
echo -e "\e[33mHost SMTP do Email:\e[97m $smtp_email_typebot\e[0m"
echo ""
## Informação sobre Porta SMTP
echo -e "\e[33mPorta SMTP do Email:\e[97m $porta_smtp_typebot\e[0m"
echo ""
## Informação sobre Secure SMTP
echo -e "\e[33mSecure SMTP do Email:\e[97m $smtp_secure_typebot\e[0m"
echo ""
## Informação sobre Access Key
echo -e "\e[33mAccess Key Minio:\e[97m $S3_ACCESS_KEY\e[0m"
echo ""
## Informação sobre Secret Key
echo -e "\e[33mSecret Key Minio:\e[97m $S3_SECRET_KEY\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_typebot
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO TYPEBOT \e[33m[1/5]\e[0m"
echo ""
sleep 1
## Nada nada nada.. só para aparecer a mensagem de passo..
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/5]\e[0m"
echo ""
sleep 1
## Aqui vamos fazer uma verificação se já existe Postgres e redis instalado
## Se tiver ele vai criar um banco de dados no postgres ou perguntar se deseja apagar o que já existe e criar outro
## Verifica container postgres e cria banco no postgres
verificar_container_postgres
if [ $? -eq 0 ]; then
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "typebot"
## Mensagem de Passo
echo -e "\e[97m• PEGANDO DADOS DO MINIO \e[33m[3/5]\e[0m"
echo ""
sleep 1
pegar_senha_minio
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Pegando Senha do MinIO"
else
echo "1/2 - [ OFF ] - Pegando Senha do MinIO"
echo "Não foi possivel pegar a senha do minio"
fi
pegar_link_s3
if [ $? -eq 0 ]; then
echo "2/2 - [ OK ] - Pegando URL do S3"
else
echo "2/2 - [ OFF ] - Pegando URL do S3"
echo "Não foi possivel pegar o link do S3"
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO TYPEBOT \e[33m[4/5]\e[0m"
echo ""
sleep 1
## Criando key Aleatória
key_typebot=$(openssl rand -hex 16)
## Criando a stack
cat > typebot.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
typebot_builder:
image: baptistearno/typebot-builder:$versao_typebot ## Versão do Typebot
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados do Postgres
- DATABASE_URL=postgresql://postgres:$senha_postgres@postgres:5432/typebot
## Encryption key
- ENCRYPTION_SECRET=$key_typebot
## Plano Padrão (das novas contas)
- DEFAULT_WORKSPACE_PLAN=UNLIMITED
## Urls do typebot
- NEXTAUTH_URL=https://$url_typebot ## URL Builder
- NEXT_PUBLIC_VIEWER_URL=https://$url_viewer ## URL Viewer
- NEXTAUTH_URL_INTERNAL=http://localhost:3000
## Desativer/ativar novos cadastros
- DISABLE_SIGNUP=false
## Dados do SMTP
- ADMIN_EMAIL=$email_typebot ## Email SMTP
- NEXT_PUBLIC_SMTP_FROM='Suporte' <$email_typebot>
- SMTP_AUTH_DISABLED=false
- SMTP_USERNAME=$usuario_email_typebot
- SMTP_PASSWORD=$senha_email_typebot
- SMTP_HOST=$smtp_email_typebot
- SMTP_PORT=$porta_smtp_typebot
- SMTP_SECURE=$smtp_secure_typebot
## Dados Google Cloud
#- GOOGLE_CLIENT_ID=
#- GOOGLE_CLIENT_SECRET=
#- NEXT_PUBLIC_GOOGLE_API_KEY=
## Dados do Minio/S3
- S3_ACCESS_KEY=$S3_ACCESS_KEY
- S3_SECRET_KEY=$S3_SECRET_KEY
- S3_BUCKET=typebot
- S3_ENDPOINT=$url_s3
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- io.portainer.accesscontrol.users=admin
- traefik.enable=true
- traefik.http.routers.typebot_builder.rule=Host(\`$url_typebot\`)
- traefik.http.routers.typebot_builder.entrypoints=websecure
- traefik.http.routers.typebot_builder.tls.certresolver=letsencryptresolver
- traefik.http.services.typebot_builder.loadbalancer.server.port=3000
- traefik.http.services.typebot_builder.loadbalancer.passHostHeader=true
- traefik.http.routers.typebot_builder.service=typebot_builder
## --------------------------- ORION --------------------------- ##
typebot_viewer:
image: baptistearno/typebot-viewer:$versao_typebot ## Versão do Typebot
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados do Postgres
- DATABASE_URL=postgresql://postgres:$senha_postgres@postgres:5432/typebot
## Encryption key
- ENCRYPTION_SECRET=$key_typebot
## Plano Padrão (das novas contas)
- DEFAULT_WORKSPACE_PLAN=UNLIMITED
## Urls do typebot
- NEXTAUTH_URL=https://$url_typebot ## URL Builder
- NEXT_PUBLIC_VIEWER_URL=https://$url_viewer ## URL Viewer
- NEXTAUTH_URL_INTERNAL=http://localhost:3000
## Desativer/ativar novos cadastros
- DISABLE_SIGNUP=false
## Dados do SMTP
- ADMIN_EMAIL=$email_typebot ## Email SMTP
- NEXT_PUBLIC_SMTP_FROM='Suporte' <$email_typebot>
- SMTP_AUTH_DISABLED=false
- SMTP_USERNAME=$usuario_email_typebot
- SMTP_PASSWORD=$senha_email_typebot
- SMTP_HOST=$smtp_email_typebot
- SMTP_PORT=$porta_smtp_typebot
- SMTP_SECURE=$smtp_secure_typebot
## Dados Google Cloud
#- GOOGLE_CLIENT_ID=
#- GOOGLE_CLIENT_SECRET=
#- NEXT_PUBLIC_GOOGLE_API_KEY=
## Dados do Minio/S3
- S3_ACCESS_KEY=$S3_ACCESS_KEY
- S3_SECRET_KEY=$S3_SECRET_KEY
- S3_BUCKET=typebot
- S3_ENDPOINT=$url_s3
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- io.portainer.accesscontrol.users=admin
- traefik.enable=true
- traefik.http.routers.typebot_viewer.rule=Host(\`$url_viewer\`)
- traefik.http.routers.typebot_viewer.entrypoints=websecure
- traefik.http.routers.typebot_viewer.tls.certresolver=letsencryptresolver
- traefik.http.services.typebot_viewer.loadbalancer.server.port=3000
- traefik.http.services.typebot_viewer.loadbalancer.passHostHeader=true
- traefik.http.routers.typebot_viewer.service=typebot_viewer
## --------------------------- ORION --------------------------- ##
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Typebot"
fi
STACK_NAME="typebot"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c typebot.yaml typebot > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do Typebot"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[5/5]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_typebot para verificar se o serviço esta online
wait_stack "typebot"
cd dados_vps
cat > dados_typebot <<EOL
[ TYPEBOT ]
Dominio do Typebot: https://$url_typebot
Email: Qualquer um (cada email é um workspace)
Senha: Não tem senha, chega no seu email o link magico de acesso
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ TYPEBOT ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_typebot\e[0m"
echo ""
echo -e "\e[33mEmail:\e[97m Qualquer um (não precisa ser o mesmo que usou na instalação)\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Não tem senha, chega no seu email um link magico de acesso.\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███╗ ██╗ █████╗ ███╗ ██╗
## ████╗ ██║██╔══██╗████╗ ██║
## ██╔██╗ ██║╚█████╔╝██╔██╗ ██║
## ██║╚██╗██║██╔══██╗██║╚██╗██║
## ██║ ╚████║╚█████╔╝██║ ╚████║
## ╚═╝ ╚═══╝ ╚════╝ ╚═╝ ╚═══╝
ferramenta_n8n() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_n8n
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio do N8N
echo -e "\e[97mPasso$amarelo 1/7\e[0m"
echo -en "\e[33mDigite o dominio para o N8N (ex: n8n.oriondesign.art.br): \e[0m" && read -r url_editorn8n
echo ""
##Pergunta o Dominio do Webhook
echo -e "\e[97mPasso$amarelo 2/7\e[0m"
echo -en "\e[33mDigite o dominio para o Webhook do N8N (ex: webhook.oriondesign.art.br): \e[0m" && read -r url_webhookn8n
echo ""
##Pergunta o Email SMTP
echo -e "\e[97mPasso$amarelo 3/7\e[0m"
echo -en "\e[33mDigite o Email para SMTP (ex: [email protected]): \e[0m" && read -r email_smtp_n8n
echo ""
##Pergunta o usuário do Email SMTP
echo -e "\e[97mPasso$amarelo 4/7\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o Usuário para SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r usuario_smtp_n8n
echo ""
## Pergunta a senha do SMTP
echo -e "\e[97mPasso$amarelo 5/7\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do Email (ex: @Senha123_): \e[0m" && read -r senha_smtp_n8n
echo ""
## Pergunta o Host SMTP do email
echo -e "\e[97mPasso$amarelo 6/7\e[0m"
echo -en "\e[33mDigite o Host SMTP do Email (ex: smtp.hostinger.com): \e[0m" && read -r host_smtp_n8n
echo ""
## Pergunta a porta SMTP do email
echo -e "\e[97mPasso$amarelo 7/7\e[0m"
echo -en "\e[33mDigite a porta SMTP do Email (ex: 465): \e[0m" && read -r porta_smtp_n8n
echo ""
## Verifica se a porta é 465, se sim deixa o ssl true, se não, deixa false
if [ "$porta_smtp_typebot" -eq 465 ]; then
smtp_secure_smtp_n8n=true
else
smtp_secure_smtp_n8n=false
fi
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_n8n
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do N8N
echo -e "\e[33mDominio do N8N:\e[97m $url_editorn8n\e[0m"
echo ""
## Informação sobre URL do Webhook
echo -e "\e[33mDominio para o Webhook:\e[97m $url_webhookn8n\e[0m"
echo ""
## Informação sobre Email
echo -e "\e[33mEmail do SMTP:\e[97m $email_smtp_n8n\e[0m"
echo ""
## Informação sobre Email
echo -e "\e[33mUsuário do SMTP:\e[97m $usuario_smtp_n8n\e[0m"
echo ""
## Informação sobre Senha do Email
echo -e "\e[33mSenha do Email:\e[97m $senha_smtp_n8n\e[0m"
echo ""
## Informação sobre Host SMTP
echo -e "\e[33mHost SMTP do Email:\e[97m $host_smtp_n8n\e[0m"
echo ""
## Informação sobre Porta SMTP
echo -e "\e[33mPorta SMTP do Email:\e[97m $porta_smtp_n8n\e[0m"
echo ""
## Informação sobre Secure SMTP
echo -e "\e[33mSecure SMTP do Email:\e[97m $smtp_secure_smtp_n8n\e[0m"
echo ""
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_n8n
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO N8N \e[33m[1/4]\e[0m"
echo ""
sleep 1
## NADA
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES E REDIS \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Verifica se tem postgres, se sim pega a senha e cria um banco nele, se não instala, pega a senha e cria o banco
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "n8n_queue"
## Verifica se tem redis, se tiver, continua, se não tiver instala
verificar_container_redis
if [ $? -eq 0 ]; then
sleep 1
else
ferramenta_redis > /dev/null 2>&1
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO N8N \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando key Aleatória
encryption_key=$(openssl rand -hex 16)
## Criando a stack
cat > n8n.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
n8n_editor:
image: n8nio/n8n:latest ## Versão do N8N
command: start
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados do postgres
- DB_TYPE=postgresdb
- DB_POSTGRESDB_DATABASE=n8n_queue
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_USER=postgres
- DB_POSTGRESDB_PASSWORD=$senha_postgres
## Encryption Key
- N8N_ENCRYPTION_KEY=$encryption_key
## Url do N8N
- N8N_HOST=$url_editorn8n
- N8N_EDITOR_BASE_URL=https://$url_editorn8n/
- WEBHOOK_URL=https://$url_webhookn8n/
- N8N_PROTOCOL=https
## Modo do Node
- NODE_ENV=production
## Modo de execução (deletar caso deseje em modo regular)
- EXECUTIONS_MODE=queue
## Community Nodes
- N8N_REINSTALL_MISSING_PACKAGES=true
- N8N_COMMUNITY_PACKAGES_ENABLED=true
- N8N_NODE_PATH=/home/note/.n8n/nodes
## Dados SMTP
- N8N_SMTP_SENDER=$email_smtp_n8n
- N8N_SMTP_USER=$usuario_smtp_n8n
- N8N_SMTP_PASS=$senha_smtp_n8n
- N8N_SMTP_HOST=$host_smtp_n8n
- N8N_SMTP_PORT=$porta_smtp_n8n
- N8N_SMTP_SSL=$smtp_secure_smtp_n8n
## Dados do Redis
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- QUEUE_BULL_REDIS_DB=2
- NODE_FUNCTION_ALLOW_EXTERNAL=moment,lodash,moment-with-locales
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=336
## Timezone
- GENERIC_TIMEZONE=America/Sao_Paulo
- TZ=America/Sao_Paulo
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.n8n_editor.rule=Host(\`$url_editorn8n\`)
- traefik.http.routers.n8n_editor.entrypoints=websecure
- traefik.http.routers.n8n_editor.priority=1
- traefik.http.routers.n8n_editor.tls.certresolver=letsencryptresolver
- traefik.http.routers.n8n_editor.service=n8n_editor
- traefik.http.services.n8n_editor.loadbalancer.server.port=5678
- traefik.http.services.n8n_editor.loadbalancer.passHostHeader=1
## --------------------------- ORION --------------------------- ##
n8n_webhook:
image: n8nio/n8n:latest ## Versão do N8N
command: webhook
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados do postgres
- DB_TYPE=postgresdb
- DB_POSTGRESDB_DATABASE=n8n_queue
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_USER=postgres
- DB_POSTGRESDB_PASSWORD=$senha_postgres
## Encryption Key
- N8N_ENCRYPTION_KEY=$encryption_key
## Url do N8N
- N8N_HOST=$url_editorn8n
- N8N_EDITOR_BASE_URL=https://$url_editorn8n/
- WEBHOOK_URL=https://$url_webhookn8n/
- N8N_PROTOCOL=https
## Modo do Node
- NODE_ENV=production
## Modo de execução (deletar caso deseje em modo regular)
- EXECUTIONS_MODE=queue
## Community Nodes
- N8N_REINSTALL_MISSING_PACKAGES=true
- N8N_COMMUNITY_PACKAGES_ENABLED=true
- N8N_NODE_PATH=/home/note/.n8n/nodes
## Dados SMTP
- N8N_SMTP_SENDER=$email_smtp_n8n
- N8N_SMTP_USER=$usuario_smtp_n8n
- N8N_SMTP_PASS=$senha_smtp_n8n
- N8N_SMTP_HOST=$host_smtp_n8n
- N8N_SMTP_PORT=$porta_smtp_n8n
- N8N_SMTP_SSL=$smtp_secure_smtp_n8n
## Dados do Redis
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- QUEUE_BULL_REDIS_DB=2
- NODE_FUNCTION_ALLOW_EXTERNAL=moment,lodash,moment-with-locales
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=336
## Timezone
- GENERIC_TIMEZONE=America/Sao_Paulo
- TZ=America/Sao_Paulo
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.n8n_webhook.rule=(Host(\`$url_webhookn8n\`))
- traefik.http.routers.n8n_webhook.entrypoints=websecure
- traefik.http.routers.n8n_webhook.priority=1
- traefik.http.routers.n8n_webhook.tls.certresolver=letsencryptresolver
- traefik.http.routers.n8n_webhook.service=n8n_webhook
- traefik.http.services.n8n_webhook.loadbalancer.server.port=5678
- traefik.http.services.n8n_webhook.loadbalancer.passHostHeader=1
## --------------------------- ORION --------------------------- ##
n8n_worker:
image: n8nio/n8n:latest ## Versão do N8N
command: worker --concurrency=10
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados do postgres
- DB_TYPE=postgresdb
- DB_POSTGRESDB_DATABASE=n8n_queue
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_USER=postgres
- DB_POSTGRESDB_PASSWORD=$senha_postgres
## Encryption Key
- N8N_ENCRYPTION_KEY=$encryption_key
## Url do N8N
- N8N_HOST=$url_editorn8n
- N8N_EDITOR_BASE_URL=https://$url_editorn8n/
- WEBHOOK_URL=https://$url_webhookn8n/
- N8N_PROTOCOL=https
## Modo do Node
- NODE_ENV=production
## Modo de execução (deletar caso deseje em modo regular)
- EXECUTIONS_MODE=queue
## Community Nodes
- N8N_REINSTALL_MISSING_PACKAGES=true
- N8N_COMMUNITY_PACKAGES_ENABLED=true
- N8N_NODE_PATH=/home/note/.n8n/nodes
## Dados SMTP
- N8N_SMTP_SENDER=$email_smtp_n8n
- N8N_SMTP_USER=$usuario_smtp_n8n
- N8N_SMTP_PASS=$senha_smtp_n8n
- N8N_SMTP_HOST=$host_smtp_n8n
- N8N_SMTP_PORT=$porta_smtp_n8n
- N8N_SMTP_SSL=$smtp_secure_smtp_n8n
## Dados do Redis
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- QUEUE_BULL_REDIS_DB=2
- NODE_FUNCTION_ALLOW_EXTERNAL=moment,lodash,moment-with-locales
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=336
## Timezone
- GENERIC_TIMEZONE=America/Sao_Paulo
- TZ=America/Sao_Paulo
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
## --------------------------- ORION --------------------------- ##
networks:
$nome_rede_interna:
name: $nome_rede_interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do N8N"
fi
STACK_NAME="n8n"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c n8n.yaml n8n > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do N8N"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_n8n para verificar se o serviço esta online
wait_stack "n8n"
cd dados_vps
cat > dados_n8n <<EOL
[ N8N ]
Dominio do N8N: https://$url_editorn8n
Dominio do N8N: https://$url_webhookn8n
Email: Precisa criar no primeiro acesso do N8N
Senha: Precisa criar no primeiro acesso do N8N
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ N8N ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_editorn8n\e[0m"
echo ""
echo -e "\e[33mEmail:\e[97m Precisa criar no primeiro acesso do N8N\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do N8N\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███████╗██╗ ██████╗ ██╗ ██╗██╗███████╗███████╗
## ██╔════╝██║ ██╔═══██╗██║ ██║██║██╔════╝██╔════╝
## █████╗ ██║ ██║ ██║██║ █╗ ██║██║███████╗█████╗
## ██╔══╝ ██║ ██║ ██║██║███╗██║██║╚════██║██╔══╝
## ██║ ███████╗╚██████╔╝╚███╔███╔╝██║███████║███████╗
## ╚═╝ ╚══════╝ ╚═════╝ ╚══╝╚══╝ ╚═╝╚══════╝╚══════╝
ferramenta_flowise() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_flowise
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/3\e[0m"
echo -en "\e[33mDigite o dominio para o Flowise (ex: flowise.oriondesign.art.br): \e[0m" && read -r url_flowise
echo ""
##Pergunta o Usuario para a ferramenta
echo -e "\e[97mPasso$amarelo 2/3\e[0m"
echo -e "$amarelo--> Minimo 5 caracteres. Evite os caracteres especiais: \!#$ e/ou espaço"
echo -en "\e[33mDigite um usuario para o Flowise (ex: admin): \e[0m" && read -r user_flowise
echo ""
##Pergunta a Senha para a ferramenta
echo -e "\e[97mPasso$amarelo 3/3\e[0m"
echo -e "$amarelo--> Minimo 8 caracteres. Use Letras MAIUSCULAS e minusculas, numero e um caractere especial @ ou _"
echo -e "$amarelo--> Evite os caracteres especiais: \!#$"
echo -en "\e[33mDigite uma senha para o usuario (ex: @Senha123_): \e[0m" && read -r pass_flowise
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_flowise
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do Flowise
echo -e "\e[33mDominio do Flowise\e[97m $url_flowise\e[0m"
echo ""
## Informação sobre Usuario do Flowise
echo -e "\e[33mUsuario:\e[97m $user_flowise\e[0m"
echo ""
## Informação sobre a Senha do Usuario do Flowise
echo -e "\e[33mSenha:\e[97m $pass_flowise\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_flowise
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO FLOWISE \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Já sabe né ksk
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "flowise"
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO FLOWISE \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando uma Encryption Key Aleatória
encryption_key=$(openssl rand -hex 16)
## Criando a stack
cat > flowise.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
flowise:
image: flowiseai/flowise:latest ## Versão do Flowise
#command: flowise start
volumes:
- flowise_data:/root/.flowise
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados de acesso
- FLOWISE_USERNAME=$user_flowise
- FLOWISE_PASSWORD=$pass_flowise
## Dados do Postgres
- DATABASE_TYPE=postgres
- DATABASE_HOST=postgres
- DATABASE_PORT=5432
- DATABASE_USER=postgres
- DATABASE_PASSWORD=$senha_postgres
- DATABASE_NAME=flowise
## Encryption Key
- FLOWISE_SECRETKEY_OVERWRITE=$encryption_key
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.flowise.rule=Host(\`$url_flowise\`) ## Url da aplicação
- traefik.http.services.flowise.loadBalancer.server.port=3000
- traefik.http.routers.flowise.service=flowise
- traefik.http.routers.flowise.entrypoints=websecure
- traefik.http.routers.flowise.tls.certresolver=letsencryptresolver
## --------------------------- ORION --------------------------- ##
volumes:
flowise_data:
external: true
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Flowise"
fi
STACK_NAME="flowise"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c flowise.yaml flowise > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do Flowise"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_flowise para verificar se o serviço esta online
wait_stack "flowise"
cd dados_vps
cat > dados_flowise <<EOL
[ FLOWISE ]
Dominio do Flowise: https://$url_flowise
Usuario: $user_flowise
Senha: $pass_flowise
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ Flowise ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_flowise\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m $user_flowise\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m $pass_flowise\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██████╗ █████╗ ██████╗ ███╗ ███╗██╗███╗ ██╗ ██╗ ██╗
## ██╔══██╗██╔════╝ ██╔══██╗██╔══██╗████╗ ████║██║████╗ ██║ ██║ ██║
## ██████╔╝██║ ███╗ ███████║██║ ██║██╔████╔██║██║██╔██╗ ██║ ███████║
## ██╔═══╝ ██║ ██║ ██╔══██║██║ ██║██║╚██╔╝██║██║██║╚██╗██║ ╚════██║
## ██║ ╚██████╔╝ ██║ ██║██████╔╝██║ ╚═╝ ██║██║██║ ╚████║ ██║
## ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═╝
ferramenta_pgAdmin_4() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_pgAdmin_4
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/3\e[0m"
echo -en "\e[33mDigite o dominio para o PgAdmin 4 (ex: pgadmin.oriondesign.art.br): \e[0m" && read -r url_PgAdmin_4
echo ""
##Pergunta o Email para a ferramenta
echo -e "\e[97mPasso$amarelo 2/3\e[0m"
echo -en "\e[33mDigite um email para o PgAdmin 4 (ex: [email protected]): \e[0m" && read -r user_PgAdmin_4
echo ""
##Pergunta a Senha para a ferramenta
echo -e "\e[97mPasso$amarelo 3/3\e[0m"
echo -e "$amarelo--> Minimo 8 caracteres. Use Letras MAIUSCULAS e minusculas, numero e um caractere especial @ ou _"
echo -e "$amarelo--> Evite os caracteres especiais: \!#$"
echo -en "\e[33mDigite uma senha para o usuario (ex: @Senha123_): \e[0m" && read -r pass_PgAdmin_4
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_pgAdmin_4
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do PgAdmin
echo -e "\e[33mDominio do PgAdmin 4\e[97m $url_PgAdmin_4\e[0m"
echo ""
## Informação sobre email do PgAdmin
echo -e "\e[33mEmail:\e[97m $user_PgAdmin_4\e[0m"
echo ""
## Informação sobre a senha do PgAdmin
echo -e "\e[33mSenha:\e[97m $pass_PgAdmin_4\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_minio
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO PGADMIN4 \e[33m[1/3]\e[0m"
echo ""
sleep 1
## NADA
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO PGADMIN4 \e[33m[2/3]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > pgadmin.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
pgadmin:
image: dpage/pgadmin4:latest ## Versão do PgAdmin 4
volumes:
- pgadmin_data:/var/lib/pgadmin
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados de Acesso
- PGADMIN_DEFAULT_EMAIL=$user_PgAdmin_4
- PGADMIN_DEFAULT_PASSWORD=$pass_PgAdmin_4
## Dados de SMTP (testando)
#- MAIL_USERNAME=
#- MAIL_PASSWORD=
#- MAIL_SERVER=
#- MAIL_PORT=587
#- MAIL_USE_SSL=False
#- MAIL_USE_TLS=False
#- MAIL_DEBUG=False
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: '0.4'
memory: 256M
labels:
- traefik.enable=true
- traefik.http.routers.pgadmin.rule=Host(\`$url_PgAdmin_4\`) ## Url da Ferramenta
- traefik.http.services.pgadmin.loadbalancer.server.port=80
- traefik.http.routers.pgadmin.service=pgadmin
- traefik.http.routers.pgadmin.tls.certresolver=letsencryptresolver
- traefik.http.routers.pgadmin.entrypoints=websecure
- traefik.http.routers.pgadmin.tls=true
## --------------------------- ORION --------------------------- ##
networks:
$nome_rede_interna: ## Nome da rede interna
name: $nome_rede_interna ## Nome da rede interna
external: true
volumes:
pgadmin_data:
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do PgAdmin 4"
fi
STACK_NAME="pgadmin"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c pgadmin.yaml pgadmin > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do PgAdmin 4"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_pgadmin_4 para verificar se o serviço esta online
wait_stack "pgadmin"
cd dados_vps
cat > dados_pgadmin <<EOL
[ PgAdmin 4 ]
Dominio do pgadmin: https://$url_PgAdmin_4
Usuario: $user_PgAdmin_4
Senha: $pass_PgAdmin_4
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ PgAdmin 4 ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_PgAdmin_4\e[0m"
echo ""
echo -e "\e[33mEmail:\e[97m $user_PgAdmin_4\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m $pass_PgAdmin_4\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███╗ ██╗ ██████╗ ██████╗ ██████╗ ██████╗ █████╗ ███████╗███████╗
## ████╗ ██║██╔═══██╗██╔════╝██╔═══██╗██╔══██╗██╔══██╗██╔════╝██╔════╝
## ██╔██╗ ██║██║ ██║██║ ██║ ██║██████╔╝███████║███████╗█████╗
## ██║╚██╗██║██║ ██║██║ ██║ ██║██╔══██╗██╔══██║╚════██║██╔══╝
## ██║ ╚████║╚██████╔╝╚██████╗╚██████╔╝██████╔╝██║ ██║███████║███████╗
## ╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝
ferramenta_nocobase() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_nocobase
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/4\e[0m"
echo -en "\e[33mDigite o dominio para o Nocobase (ex: nocobase.oriondesign.art.br): \e[0m" && read -r url_nocobase
echo ""
##Pergunta o Email para a ferramenta
echo -e "\e[97mPasso$amarelo 2/4\e[0m"
echo -en "\e[33mDigite um email para o Nocobase (ex: [email protected]): \e[0m" && read -r mail_nocobase
echo ""
##Pergunta um Usuario para a ferramenta
echo -e "\e[97mPasso$amarelo 3/4\e[0m"
echo -en "\e[33mDigite um nome de usuario para o Nocobase (ex: OrionDesign): \e[0m" && read -r user_nocobase
echo ""
##Pergunta a Senha para a ferramenta
echo -e "\e[97mPasso$amarelo 4/4\e[0m"
echo -e "$amarelo--> Minimo 8 caracteres. Use Letras MAIUSCULAS e minusculas, numero e um caractere especial @ ou _"
echo -e "$amarelo--> Evite os caracteres especiais: \!#$"
echo -en "\e[33mDigite uma senha para o usuario (ex: @Senha123_): \e[0m" && read -r pass_nocobase
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_nocobase
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do Nocobase
echo -e "\e[33mDominio do Nocobase:\e[97m $url_nocobase\e[0m"
echo ""
## Informação sobre Email do Nocobase
echo -e "\e[33mEmail:\e[97m $mail_nocobase\e[0m"
echo ""
## Informação sobre Usuario do Nocobase
echo -e "\e[33mUsuario:\e[97m $user_nocobase\e[0m"
echo ""
## Informação sobre Senha do Nocobase
echo -e "\e[33mSenha:\e[97m $pass_nocobase\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_minio
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO NOCOBASE \e[33m[1/4]\e[0m"
echo ""
sleep 1
## NADA
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Cansei já de explicar o que isso faz kkkk
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
criar_banco_postgres_da_stack "nocobase"
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
criar_banco_postgres_da_stack "nocobase"
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO NOCOBASE \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando uma Encryption Key Aleatória
nocobase_key=$(openssl rand -hex 16)
## Criando a stack
cat > nocobase.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
nocobase:
image: nocobase/nocobase:0.19.0-alpha.7 ## Versão do Nocobase
volumes:
- nocobase_storage:/app/nocobase/storage
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Url da ferramenta
- API_BASE_URL=$url_nocobase
- PROXY_TARGET_URL=$url_nocobase
## Dados de acesso
- INIT_ROOT_EMAIL=$mail_nocobase
- INIT_ROOT_PASSWORD=$pass_nocobase
- INIT_ROOT_NICKNAME=$user_nocobase
- INIT_ROOT_USERNAME=$user_nocobase
## Dados do Postgres
- DB_DIALECT=postgres
- DB_HOST=postgres
- DB_DATABASE=nocobase
- DB_USER=postgres
- DB_PASSWORD=$senha_postgres
## Paths de URL
- LOCAL_STORAGE_BASE_URL=/storage/uploads
- API_BASE_PATH=/api/
## Encryption Key
- APP_KEY=$nocobase_key
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.nocobase.rule=Host(\`$url_nocobase\`) ## Url da aplicação
- traefik.http.services.nocobase.loadbalancer.server.port=80
- traefik.http.routers.nocobase.service=nocobase
- traefik.http.routers.nocobase.tls.certresolver=letsencryptresolver
- traefik.http.routers.nocobase.entrypoints=websecure
- traefik.http.routers.nocobase.tls=true
## --------------------------- ORION --------------------------- ##
volumes:
nocobase_storage:
external: true
networks:
$nome_rede_interna: ## Nome da rede interna
name: $nome_rede_interna ## Nome da rede interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Nocobase"
fi
STACK_NAME="nocobase"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c nocobase.yaml nocobase > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do Nocobase"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "nocobase" para verificar se o serviço esta online
wait_stack "nocobase"
cd dados_vps
cat > dados_nocobase<<EOL
[ NOCOBASE ]
Dominio do Nocobase: https://$url_nocobase
Email: $mail_nocobase
Usuario: $user_nocobase
Senha: $pass_nocobase
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ Nocobase ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_nocobase\e[0m"
echo ""
echo -e "\e[33mEmail:\e[97m $mail_nocobase\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m $user_nocobase\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m $pass_nocobase\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██████╗ ████████╗██████╗ ██████╗ ███████╗███████╗███████╗
## ██╔══██╗██╔═══██╗╚══██╔══╝██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝
## ██████╔╝██║ ██║ ██║ ██████╔╝██████╔╝█████╗ ███████╗███████╗
## ██╔══██╗██║ ██║ ██║ ██╔═══╝ ██╔══██╗██╔══╝ ╚════██║╚════██║
## ██████╔╝╚██████╔╝ ██║ ██║ ██║ ██║███████╗███████║███████║
## ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝
ferramenta_botpress() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_botpress
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o dominio para o Botpress (ex: botpress.oriondesign.art.br): \e[0m" && read -r url_botpress
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_botpress
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do Botpress
echo -e "\e[33mDominio do Botpress:\e[97m $url_botpress\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_botpress
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO BOTPRESS \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES E REDIS \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Cansei já de explicar o que isso faz kkkk
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "botpress"
verificar_container_redis
if [ $? -eq 0 ]; then
sleep 1
else
ferramenta_redis > /dev/null 2>&1
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO BOTPRESS \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > botpress.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
botpress:
image: botpress/server:latest
volumes:
- botpress_data:/botpress/data
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Url Botpress
- EXTERNAL_URL=https://$url_botpress
## Modo
- BP_PRODUCTION=true
## Dados Postgres
- DATABASE_URL=postgresql://postgres:$senha_postgres@postgres:5432/botpress
## Dados Redis
- REDIS_URL=redis://redis:6379
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.botpress.rule=Host(\`$url_botpress\`)
- traefik.http.services.botpress.loadbalancer.server.port=3000
- traefik.http.routers.botpress.service=botpress
- traefik.http.routers.botpress.tls.certresolver=letsencryptresolver
- traefik.http.routers.botpress.entrypoints=websecure
- traefik.http.routers.botpress.tls=true
## --------------------------- ORION --------------------------- ##
volumes:
botpress_data:
external: true
name: botpress_data
networks:
$nome_rede_interna: ## Nome da rede interna
name: $nome_rede_interna ## Nome da rede interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Botpress"
fi
STACK_NAME="botpress"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c botpress.yaml botpress > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do Botpress"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_botpress para verificar se o serviço esta online
wait_stack "botpress"
cd dados_vps
cat > dados_botpress <<EOL
[ BOTPRESS ]
Dominio do Botpress: https://$url_botpress
Usuario: Precisa criar no primeiro acesso do Botpress
Senha: Precisa criar no primeiro acesso do Botpress
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ Botpress ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_botpress\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar no primeiro acesso do Botpress\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do Botpress\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██╗ ██╗ ██████╗ ██████╗ ██████╗ ██████╗ ██████╗ ███████╗███████╗███████╗
## ██║ ██║██╔═══██╗██╔══██╗██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝
## ██║ █╗ ██║██║ ██║██████╔╝██║ ██║██████╔╝██████╔╝█████╗ ███████╗███████╗
## ██║███╗██║██║ ██║██╔══██╗██║ ██║██╔═══╝ ██╔══██╗██╔══╝ ╚════██║╚════██║
## ╚███╔███╔╝╚██████╔╝██║ ██║██████╔╝██║ ██║ ██║███████╗███████║███████║
## ╚══╝╚══╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝
ferramenta_wordpress() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_wordpress
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/2\e[0m"
echo -en "\e[33mDigite o dominio para o Wordpress (ex: oriondesign.art.br ou loja.oriondesign.art.br): \e[0m" && read -r url_wordpress
echo ""
##Pergunta o nome do site
echo -e "\e[97mPasso$amarelo 2/2\e[0m"
echo -e "$amarelo--> Use apenas letras minusculas, sem espaço ou caracteres especiais"
echo -en "\e[33mDigite o nome do Site (ex: lojaorion): \e[0m" && read -r nome_site_wordpress
echo ""
##Trata informações
nome_da_stack_mysql="${nome_site_wordpress}_mysql.yaml"
nome_da_stack_mysql_subir="${nome_site_wordpress}_mysql"
nome_da_stack_wordpress="${nome_site_wordpress}_wordpress.yaml"
nome_da_stack_wordpress_subir="${nome_site_wordpress}_wordpress"
nome_do_servico_mysql="${nome_site_wordpress}_mysql"
nome_da_date_mysql="${nome_site_wordpress}_mysql_data"
nome_do_servico_wordpress="${nome_site_wordpress}_wordpress"
nome_da_date_wordpress="${nome_site_wordpress}_data"
nome_da_date_wordpress_php="${nome_site_wordpress}_php"
STACK_NAME="$nome_da_stack_wordpress_subir"
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_wordpress
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do Wordpress
echo -e "\e[33mDominio do Wordpress:\e[97m $url_wordpress\e[0m"
echo ""
## Informação sobre Nome do site
echo -e "\e[33mNome do Site:\e[97m $nome_site_wordpress\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_minio
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO WORDPRESS \e[33m[1/7]\e[0m"
echo ""
sleep 1
## NADA
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO REDIS \e[33m[2/7]\e[0m"
echo ""
sleep 1
## Cansei já de explicar o que isso faz kkkk
verificar_container_redis
if [ $? -eq 0 ]; then
sleep 1
else
ferramenta_redis > /dev/null 2>&1
fi
sleep 3
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO MYSQL \e[33m[3/7]\e[0m"
echo ""
sleep 1
## Cansei já de explicar o que isso faz kkkk
verificar_container_mysql
if [ $? -eq 0 ]; then
pegar_senha_mysql > /dev/null 2>&1
else
ferramenta_mysql > /dev/null 2>&1
pegar_senha_mysql > /dev/null 2>&1
fi
## Espera 30 segundos
wait_30_sec
## Cria banco de dados do site no mysql
dados
criar_banco_mysql_da_stack "$nome_site_wordpress"
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO WORDPRESS \e[33m[4/7]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > $nome_da_stack_wordpress <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
$nome_do_servico_wordpress:
image: wordpress:latest ## Versão do Wordpress
volumes:
- $nome_da_date_wordpress:/var/www/html
- $nome_da_date_wordpress_php:/usr/local/etc/php
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados do Mysql
- WORDPRESS_DB_NAME=$nome_site_wordpress
- WORDPRESS_DB_HOST=mysql
- WORDPRESS_DB_PORT=3306
- WORDPRESS_DB_USER=root
- WORDPRESS_DB_PASSWORD=$senha_mysql
## Redis
- WP_REDIS_HOST=redis
- WP_REDIS_DATABASE=6
## Url do Wordpress
- VIRTUAL_HOST=$url_wordpress
## Localização
- WP_LOCALE=pt_BR
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.$nome_do_servico_wordpress.rule=Host(\`$url_wordpress\`)
- traefik.http.routers.$nome_do_servico_wordpress.entrypoints=websecure
- traefik.http.routers.$nome_do_servico_wordpress.tls.certresolver=letsencryptresolver
- traefik.http.routers.$nome_do_servico_wordpress.service=$nome_do_servico_wordpress
- traefik.http.services.$nome_do_servico_wordpress.loadbalancer.server.port=80
- traefik.http.services.$nome_do_servico_wordpress.loadbalancer.passHostHeader=true
## --------------------------- ORION --------------------------- ##
volumes:
$nome_da_date_wordpress:
external: true
name: $nome_da_date_wordpress
$nome_da_date_wordpress_php:
external: true
name: $nome_da_date_wordpress_php
networks:
$nome_rede_interna: ## Nome da rede interna
name: $nome_rede_interna ## Nome da rede interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Wordpress"
fi
STACK_NAME="$nome_da_stack_wordpress_subir"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c $nome_da_stack_wordpress $nome_da_stack_wordpress_subir #> /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do Wordpress"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[5/7]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_wordpress para verificar se o serviço esta online
wait_stack "$nome_do_servico_wordpress"
## Mensagem de Passo
echo -e "\e[97m• EDITANDO PHP.INI \e[33m[6/7]\e[0m"
echo ""
sleep 1
## Editando o PHP.INI
cp /var/lib/docker/volumes/$nome_da_date_wordpress_php/_data/php.ini-production /var/lib/docker/volumes/$nome_da_date_wordpress_php/_data/php.ini
#
caminho_php_ini="/var/lib/docker/volumes/$nome_da_date_wordpress_php/_data/php.ini"
caminho_arquivos_site="/var/lib/docker/volumes/$nome_da_date_wordpress_php/_data/php.ini"
#
sed -i "s/^upload_max_filesize =.*/upload_max_filesize = 1024M/" "$caminho_php_ini"
sed -i "s/^max_execution_time =.*/max_execution_time = 450/" "$caminho_php_ini"
sed -i "s/^memory_limit =.*/memory_limit = 1024M/" "$caminho_php_ini"
cd
docker service update --force ${nome_do_servico_wordpress}_${nome_do_servico_wordpress}
STACK_NAME="$nome_da_stack_wordpress_subir"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c $nome_da_stack_wordpress $nome_da_stack_wordpress_subir
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[7/7]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_wordpress para verificar se o serviço esta online
wait_stack "wordpress"
cd dados_vps
cat > $nome_do_servico_wordpress <<EOL
[ WORDPRESS ]
Dominio do Wordpress: https://$url_nocobase
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[Wordpress]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_wordpress\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ █████╗ ███████╗███████╗██████╗ ██████╗ ██╗ ██╗
## ██╔══██╗██╔══██╗██╔════╝██╔════╝██╔══██╗██╔═══██╗██║ ██║
## ██████╔╝███████║███████╗█████╗ ██████╔╝██║ ██║██║ █╗ ██║
## ██╔══██╗██╔══██║╚════██║██╔══╝ ██╔══██╗██║ ██║██║███╗██║
## ██████╔╝██║ ██║███████║███████╗██║ ██║╚██████╔╝╚███╔███╔╝
## ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚══╝╚══╝
ferramenta_baserow() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_baserow
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/6\e[0m"
echo -en "\e[33mDigite o dominio para o Baserow (ex: baserow.oriondesign.art.br): \e[0m" && read -r url_baserow
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 2/6\e[0m"
echo -en "\e[33mDigite o Email para SMTP (ex: [email protected]): \e[0m" && read -r mail_baserow
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 3/6\e[0m"
echo -en "\e[33mDigite o Usuário para SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r user_baserow
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 4/6\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do Email (ex: @Senha123_): \e[0m" && read -r pass_baserow
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 5/6\e[0m"
echo -en "\e[33mDigite o Host SMTP do Email (ex: smtp.hostinger.com): \e[0m" && read -r host_baserow
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 6/6\e[0m"
echo -en "\e[33mDigite a Porta SMTP do Email (ex: 465): \e[0m" && read -r porta_baserow
echo ""
## Verifica se a porta é 465, se sim deixa o ssl true, se não, deixa false
if [ "$porta_baserow" -eq 465 ]; then
ssl_baserow_environments="- EMAIL_SMTP_USE_SSL=true"
else
ssl_baserow_environments="- EMAIL_SMTP_USE_TLS=true"
fi
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_baserow
## Mostra mensagem para verificar as informações
conferindo_as_info
##Informação do Dominio
echo -e "\e[33mDominio para o Baserow:\e[97m $url_baserow\e[0m"
echo ""
##Informação do Dominio
echo -e "\e[33mEmail do SMTP:\e[97m $mail_baserow\e[0m"
echo ""
##Informação do Dominio
echo -e "\e[33mUsuário do SMTP:\e[97m $user_baserow\e[0m"
echo ""
##Informação do Dominio
echo -e "\e[33mSenha do SMTP:\e[97m $pass_baserow\e[0m"
echo ""
##Informação do Dominio
echo -e "\e[33mHost do SMTP:\e[97m $host_baserow\e[0m"
echo ""
##Informação do Dominio
echo -e "\e[33mPorta do SMTP:\e[97m $porta_baserow\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_baserow
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO BASEROW \e[33m[1/4]\e[0m"
echo ""
sleep 1
## NADA
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES E REDIS \e[33m[2/4]\e[0m"
echo ""
sleep 1
verificar_container_postgres
if [ $? -eq 0 ]; then
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "baserow"
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Verificando/Instalando Postgres"
else
echo "1/2 - [ OFF ] - Verificando/Instalando Postgres"
fi
## Verifica container redis
verificar_container_redis
if [ $? -eq 0 ]; then
echo ""
else
ferramenta_redis > /dev/null 2>&1
fi
if [ $? -eq 0 ]; then
echo "2/2 - [ OK ] - Verificando/Instalando Redis"
else
echo "2/2 - [ OFF ] - Verificando/Instalando Redis"
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO BASEROW \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > baserow.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
baserow:
image: baserow/baserow:latest ## Versão do Baserow
volumes:
- baserow_data:/baserow/data
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Url do baserow
- BASEROW_PUBLIC_URL=https://$url_baserow
## Porta do baserow
- BASEROW_CADDY_ADDRESSES=:80
## Dados SMTP
- EMAIL_SMTP=true ## Ativar/Desativar SMTP
- FROM_EMAIL=$mail_baserow ## Email
- EMAIL_SMTP_USER=$user_baserow ## Email (ou usuario)
- EMAIL_SMTP_PASSWORD=$pass_baserow ## Senha do SMTP
- EMAIL_SMTP_HOST=$host_baserow ## Host SMTP
- EMAIL_SMTP_PORT=$porta_baserow ## Porta SMTP
$ssl_baserow_environments
## Dados Redis
- REDIS_URL=redis://redis:6379/4
## Dados postgres:
- DATABASE_URL=postgresql://postgres:$senha_postgres@postgres:5432/baserow
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
#resources:
# limits:
# cpus: "1"
# memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.baserow.rule=Host(\`$url_baserow\`)
- traefik.http.services.baserow.loadbalancer.server.port=80
- traefik.http.routers.baserow.service=baserow
- traefik.http.routers.baserow.tls.certresolver=letsencryptresolver
- traefik.http.routers.baserow.entrypoints=websecure
- traefik.http.routers.baserow.tls=true
## --------------------------- ORION --------------------------- ##
networks:
$nome_rede_interna: ## Nome da rede interna
name: $nome_rede_interna ## Nome da rede interna
external: true
volumes:
baserow_data:
external: true
name: baserow_data
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Baserow"
fi
STACK_NAME="baserow"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c baserow.yaml baserow #> /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do Baserow"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_baserow para verificar se o serviço esta online
wait_stack "baserow"
cd dados_vps
cat > dados_baserow <<EOL
[ BASEROW ]
Dominio do Baserow: https://$url_baserow
Usuario: Precisa criar no primeiro acesso do Baserow
Senha: Precisa criar no primeiro acesso do Baserow
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ BASEROW ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_baserow\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar no primeiro acesso do Baserow\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do Baserow\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███╗ ███╗ ██████╗ ███╗ ██╗ ██████╗ ██████╗ ██████╗ ██████╗
## ████╗ ████║██╔═══██╗████╗ ██║██╔════╝ ██╔═══██╗██╔══██╗██╔══██╗
## ██╔████╔██║██║ ██║██╔██╗ ██║██║ ███╗██║ ██║██║ ██║██████╔╝
## ██║╚██╔╝██║██║ ██║██║╚██╗██║██║ ██║██║ ██║██║ ██║██╔══██╗
## ██║ ╚═╝ ██║╚██████╔╝██║ ╚████║╚██████╔╝╚██████╔╝██████╔╝██████╔╝
## ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝
ferramenta_mongodb() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_mongodb
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
## Pergunta o nome de usuario
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -e "$amarelo--> Evite os caracteres especiais: @\!#$ e/ou espaço"
echo -en "\e[33mDigite o nome de usuario (ex: oriondesign): \e[0m" && read -r user_mongo
echo ""
## Gera a senha aleatória
pass_mongo=$(openssl rand -hex 16)
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_mongodb
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação do Usuario
echo -e "\e[33mUsuario:\e[97m $user_mongo\e[0m"
echo ""
## Informação da Senha gerada
echo -e "\e[33mSenha gerada:\e[97m $pass_mongo\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_mongodb
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO MONGO DB \e[33m[1/3]\e[0m"
echo ""
sleep 1
## NADA NADA NADA
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO MONGO DB \e[33m[2/3]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > mongodb.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
mongodb:
image: mongo:latest
command: mongod --port 27017
volumes:
- mongodb_data:/data/db
- mongodb_dump:/dump
- mongodb_configdb_data:/data/configdb
networks:
- $nome_rede_interna
ports:
- 27017:27017
environment:
## Dados de acesso
- MONGO_INITDB_ROOT_USERNAME=$user_mongo
- MONGO_INITDB_ROOT_PASSWORD=$pass_mongo
- PUID=1000
- PGID=1000
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: '1'
memory: 2048M
## --------------------------- ORION --------------------------- ##
volumes:
mongodb_data:
external: true
name: mongodb_data
mongodb_dump:
external: true
name: mongodb_dump
mongodb_configdb_data:
external: true
name: mongodb_configdb_data
networks:
$nome_rede_interna:
name: $nome_rede_interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do MongoDB"
fi
STACK_NAME="mongodb"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c mongodb.yaml mongodb > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do MongoDB"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "mongodb" para verificar se o serviço esta online
wait_stack "mongodb"
cd dados_vps
read -r ip _ <<<$(hostname -I)
ip_vps=$ip
cat > dados_mongodb <<EOL
[ MONGODB ]
Dominio do MongoDB: MongoDB://$user_mongo:$pass_mongo@$ip_vps:27017/?authSource=admin&readPreference=primary&ssl=false&directConnection=true
Usuario: $user_mongo
Senha: $pass_mongo
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[MongoDB]\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m $user_mongo\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m $pass_mongo\e[0m"
echo ""
echo -e "\e[33mUrl Database:\e[97m mongodb://$user_mongo:$pass_mongo@$ip_vps:27017/?authSource=admin&readPreference=primary&ssl=false&directConnection=true\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ █████╗ ██████╗ ██████╗ ██╗████████╗███╗ ███╗ ██████╗
## ██╔══██╗██╔══██╗██╔══██╗██╔══██╗██║╚══██╔══╝████╗ ████║██╔═══██╗
## ██████╔╝███████║██████╔╝██████╔╝██║ ██║ ██╔████╔██║██║ ██║
## ██╔══██╗██╔══██║██╔══██╗██╔══██╗██║ ██║ ██║╚██╔╝██║██║▄▄ ██║
## ██║ ██║██║ ██║██████╔╝██████╔╝██║ ██║ ██║ ╚═╝ ██║╚██████╔╝
## ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══▀▀═╝
ferramenta_rabbitmq() {
# Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_rabbitmq
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
## Pergunta o Dominio do RabbitMq
echo -e "\e[97mPasso$amarelo 1/2\e[0m"
echo -en "\e[33mDigite o dominio para o RabbitMQ (ex: rabbitmq.oriondesign.art.br): \e[0m" && read -r url_rabbitmq
echo ""
echo -e "\e[97mPasso$amarelo 2/2\e[0m"
echo -e "$amarelo--> Evite os caracteres especiais: @\!#$ e/ou espaço"
echo -en "\e[33mDigite o nome de usuario (ex: OrionDesign): \e[0m" && read -r user_rabbitmq
echo ""
## Gera a senha aleatória
pass_rabbitmq=$(openssl rand -hex 16)
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_rabbitmq
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação do Dominio do RabbitMQ
echo -e "\e[33mDominio do RabbitMQ:\e[97m $url_rabbitmq\e[0m"
echo ""
## Informação do Usuario do RabbitMQ
echo -e "\e[33mUsario:\e[97m $user_rabbitmq\e[0m"
echo ""
## Informação da Senha do RabbitMQ
echo -e "\e[33mSenha:\e[97m $pass_rabbitmq\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_rabbitmq
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO RABBITMQ \e[33m[1/3]\e[0m"
echo ""
sleep 1
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO RABBITMQ \e[33m[2/3]\e[0m"
echo ""
sleep 1
#Key aleatória cookie
key_cookie=$(openssl rand -hex 16)
## Criando a stack
cat > rabbitmq.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
rabbitmq:
image: rabbitmq:management
command: rabbitmq-server
hostname: rabbitmq
volumes:
- rabbitmq_data:/var/lib/rabbitmq
networks:
- $nome_rede_interna
ports:
- 5672:5672
- 15672:15672
environment:
## Dados de acesso
RABBITMQ_DEFAULT_USER: $user_rabbitmq
RABBITMQ_DEFAULT_PASS: $pass_rabbitmq
RABBITMQ_ERLANG_COOKIE: $key_cookie
RABBITMQ_DEFAULT_VHOST: "/"
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 512M
labels:
- traefik.enable=true
- traefik.http.routers.rabbitmq.rule=Host(\`$url_rabbitmq\`)
- traefik.http.routers.rabbitmq.entrypoints=websecure
- traefik.http.routers.rabbitmq.tls.certresolver=letsencryptresolver
- traefik.http.routers.rabbitmq.service=rabbitmq
- traefik.http.services.rabbitmq.loadbalancer.server.port=15672
## --------------------------- ORION --------------------------- ##
volumes:
rabbitmq_data:
external: true
networks:
$nome_rede_interna:
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do RabbitMQ"
fi
STACK_NAME="rabbitmq"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c rabbitmq.yaml rabbitmq > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do RabbitMQ"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "pgadmin_4" para verificar se o serviço esta online
wait_stack "rabbit"
cd dados_vps
ip_vps=$(curl -s ifconfig.me)
cat > dados_rabbitmq <<EOL
[ RABBITMQ ]
Dominio do RabbitMq: $url_rabbitmq
Usuario: $user_rabbitmq
Senha: $pass_rabbitmq
URL: amqp://$user_rabbitmq:$pass_rabbitmq@rabbitmq:5672
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[RabbitMQ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_rabbitmq\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m $user_rabbitmq\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m $pass_rabbitmq\e[0m"
echo ""
echo -e "\e[33mURL:\e[97m amqp://$user_rabbitmq:$pass_rabbitmq@rabbitmq:5672\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██╗ ██╗██████╗ ████████╗██╗███╗ ███╗███████╗ ██╗ ██╗██╗ ██╗███╗ ███╗ █████╗
## ██║ ██║██╔══██╗╚══██╔══╝██║████╗ ████║██╔════╝ ██║ ██╔╝██║ ██║████╗ ████║██╔══██╗
## ██║ ██║██████╔╝ ██║ ██║██╔████╔██║█████╗ █████╔╝ ██║ ██║██╔████╔██║███████║
## ██║ ██║██╔═══╝ ██║ ██║██║╚██╔╝██║██╔══╝ ██╔═██╗ ██║ ██║██║╚██╔╝██║██╔══██║
## ╚██████╔╝██║ ██║ ██║██║ ╚═╝ ██║███████╗ ██║ ██╗╚██████╔╝██║ ╚═╝ ██║██║ ██║
## ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
ferramenta_uptimekuma() {
# Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_uptimekuma
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
## Pergunta o Dominio do uptime kuma
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o dominio para o Uptime Kuma (ex: uptimekuma.oriondesign.art.br): \e[0m" && read -r url_uptimekuma
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_uptimekuma
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação do Dominio do uptimekuma
echo -e "\e[33mDominio do Uptime Kuma:\e[97m $url_uptimekuma\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_mongodb
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO UPTIME KUMA \e[33m[1/3]\e[0m"
echo ""
sleep 1
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO UPTIME KUMA \e[33m[2/3]\e[0m"
echo ""
sleep 1
cat > uptimekuma.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
uptimekuma:
image: louislam/uptime-kuma:latest
volumes:
- uptimekuma:/app/data
networks:
- $nome_rede_interna
ports:
- "3001:3001"
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.uptimekuma.rule=Host(\`$url_uptimekuma\`)
- traefik.http.routers.uptimekuma.entrypoints=websecure
- traefik.http.routers.uptimekuma.tls.certresolver=letsencryptresolver
- traefik.http.services.uptimekuma.loadBalancer.server.port=3001
- traefik.http.routers.uptimekuma.service=uptimekuma
## --------------------------- ORION --------------------------- ##
volumes:
uptimekuma:
external: true
name: uptimekuma
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Uptime Kuma"
fi
STACK_NAME="uptimekuma"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c uptimekuma.yaml uptimekuma #> /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do Uptime Kuma"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "uptimekuma" para verificar se o serviço esta online
wait_stack "uptime"
cd dados_vps
ip_vps=$(curl -s ifconfig.me)
cat > dados_uptimekuma <<EOL
[ UPTIME KUMA ]
Dominio do Uptime Kuma: $url_uptimekuma
Usuario: Precisa criar dentro do Uptime Kuma
Senha: Precisa criar dentro do Uptime Kuma
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ UPTIME KUMA ] \e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_uptimekuma\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar dentro do Uptime Kuma\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar dentro do Uptime Kuma\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ █████╗ ██╗ ██████╗ ██████╗ ███╗ ███╗
## ██╔════╝██╔══██╗██║ ██╔════╝██╔═══██╗████╗ ████║
## ██║ ███████║██║ ██║ ██║ ██║██╔████╔██║
## ██║ ██╔══██║██║ ██║ ██║ ██║██║╚██╔╝██║
## ╚██████╗██║ ██║███████╗╚██████╗╚██████╔╝██║ ╚═╝ ██║
## ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝
ferramenta_calcom() {
# Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_calcom
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
## Pergunta o Dominio da ferramenta
echo -e "\e[97mPasso$amarelo 1/6\e[0m"
echo -en "\e[33mDigite o dominio para o Cal (ex: calcom.oriondesign.art.br): \e[0m" && read -r url_calcom
echo ""
## Pergunta o email SMTP
echo -e "\e[97mPasso$amarelo 2/6\e[0m"
echo -en "\e[33mDigite o Email para SMTP (ex: [email protected]): \e[0m" && read -r email_calcom
echo ""
## Pergunta o Ususario SMTP
echo -e "\e[97mPasso$amarelo 3/6\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o Usuario para SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r user_calcom
echo ""
## Pergunta a senha do SMTP
echo -e "\e[97mPasso$amarelo 4/6\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do Email (ex: @Senha123_): \e[0m" && read -r senha_email_calcom
echo ""
## Pergunta o Host SMTP do email
echo -e "\e[97mPasso$amarelo 5/6\e[0m"
echo -en "\e[33mDigite o Host SMTP do Email (ex: smtp.hostinger.com): \e[0m" && read -r smtp_email_calcom
echo ""
## Pergunta a porta SMTP do email
echo -e "\e[97mPasso$amarelo 6/6\e[0m"
echo -en "\e[33mDigite a porta SMTP do Email (ex: 465): \e[0m" && read -r porta_smtp_calcom
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_calcom
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio do Cal.com\e[97m $url_calcom\e[0m"
echo ""
## Informação sobre Email SMTP
echo -e "\e[33mEmail SMTP:\e[97m $email_calcom\e[0m"
echo ""
## Informação sobre Email SMTP
echo -e "\e[33mUser SMTP:\e[97m $user_calcom\e[0m"
echo ""
## Informação sobre Senha SMTP
echo -e "\e[33mSenha SMTP:\e[97m $senha_email_calcom\e[0m"
echo ""
## Informação sobre Host SMTP
echo -e "\e[33mHost SMTP:\e[97m $smtp_email_calcom\e[0m"
echo ""
## Informação sobre Porta SMTP
echo -e "\e[33mPorta SMTP:\e[97m $porta_smtp_calcom\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_calcom
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO CALCOM \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/4]\e[0m"
echo ""
sleep 1
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "calcom"
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO CAL.COM \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando key aleatória
secret=$(openssl rand -hex 16)
## Criando a stack
cat > calcom.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
calcom:
image: calcom/cal.com:v3.7.11
networks:
- $nome_rede_interna
environment:
## Licenças
- NEXT_PUBLIC_LICENSE_CONSENT=agree
- LICENSE=agree
#- CALCOM_LICENSE_KEY= ## Descomente este campo caso tenha licença do mesmo
## URLs
- NEXT_PUBLIC_WEBAPP_URL=https://$url_calcom
- BASE_URL=https://$url_calcom
- NEXTAUTH_URL=https://$url_calcom
- NEXT_PUBLIC_CONSOLE_URL=https://$url_calcom
- NEXT_PUBLIC_APP_URL=https://$url_calcom
- NEXT_PUBLIC_WEBSITE_URL=https://$url_calcom
- WEB_APP=https://$url_calcom
## Encrypition
- NEXTAUTH_SECRET=$secret
- CALENDSO_ENCRYPTION_KEY=$secret
## Dados Postgress
- DATABASE_URL=postgresql://postgres:$senha_postgres@postgres:5432/calcom
## Configurações de Email e SMTP
- EMAIL_FROM=$email_calcom
- EMAIL_SERVER_HOST=$smtp_email_calcom
- EMAIL_SERVER_PORT=$porta_smtp_calcom
- EMAIL_SERVER_USER=$user_calcom
- EMAIL_SERVER_PASSWORD=$senha_email_calcom
## Nodes
- NODE_ENV=production
#- NODE_TLS_REJECT_UNAUTHORIZED=0
## Brand
#- NEXT_PUBLIC_APP_NAME="Cal.com"
#- NEXT_PUBLIC_SUPPORT_MAIL_ADDRESS="[email protected]"
#- NEXT_PUBLIC_COMPANY_NAME="Cal.com, Inc."
#- NEXT_PUBLIC_DISABLE_SIGNUP=false ## false = novas inscrições permitidas | true = novas incrições fechadas
## Integração com Microsoft 365
#- MS_GRAPH_CLIENT_ID=
#- MS_GRAPH_CLIENT_SECRET=
## Integração com Zoom
#- ZOOM_CLIENT_ID=
#- ZOOM_CLIENT_SECRET=
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.calcom.rule=Host(\`$url_calcom\`)
- traefik.http.routers.calcom.entrypoints=websecure
- traefik.http.routers.calcom.priority=1
- traefik.http.routers.calcom.tls.certresolver=letsencryptresolver
- traefik.http.routers.calcom.service=calcom
- traefik.http.services.calcom.loadbalancer.server.port=3000
- traefik.http.services.calcom.loadbalancer.passHostHeader=1
## --------------------------- ORION --------------------------- ##
networks:
$nome_rede_interna:
name: $nome_rede_interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do CalCom"
fi
STACK_NAME="calcom"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c calcom.yaml calcom > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do CalCom"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "calcom" para verificar se o serviço esta online
wait_stack "calcom"
cd dados_vps
cat > dados_calcom <<EOL
[ CAL.COM ]
Dominio do CalCom: $url_calcom
Usuario: Precisa criar dentro do Calcom
Senha: Precisa criar dentro do Calcom
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ CAL.COM ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_calcom\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar dentro do Calcom\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar dentro do Calcom\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███╗ ███╗ █████╗ ██╗ ██╗████████╗██╗ ██████╗
## ████╗ ████║██╔══██╗██║ ██║╚══██╔══╝██║██╔════╝
## ██╔████╔██║███████║██║ ██║ ██║ ██║██║
## ██║╚██╔╝██║██╔══██║██║ ██║ ██║ ██║██║
## ██║ ╚═╝ ██║██║ ██║╚██████╔╝ ██║ ██║╚██████╗
## ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝
ferramenta_mautic() {
# Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_mautic
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
## Pergunta o Dominio da ferramenta
echo -e "\e[97mPasso$amarelo 1/4\e[0m"
echo -en "\e[33mDigite o Dominio para o Mautic (ex: mautic.oriondesign.art.br): \e[0m" && read -r url_mautic
echo ""
## Pergunta o usuario da ferramenta
echo -e "\e[97mPasso$amarelo 2/4\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ e/ou espaços"
echo -en "\e[33mDigite um usuario (ex: OrionDesign): \e[0m" && read -r user_mautic
echo ""
## Pergunta o email da ferramenta
echo -e "\e[97mPasso$amarelo 3/4\e[0m"
echo -en "\e[33mDigite o Email de admin: (ex: [email protected]): \e[0m" && read -r email_mautic
echo ""
## Pergunta o senha da ferramenta
echo -e "\e[97mPasso$amarelo 4/4\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$"
echo -en "\e[33mDigite uma Senha (ex: @Senha123_): \e[0m" && read -r senha_email_mautic
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_mautic
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio do Mautic:\e[97m $url_mautic\e[0m"
echo ""
## Informação sobre Usuario Admin
echo -e "\e[33mUsuario admin:\e[97m $user_mautic\e[0m"
echo ""
## Informação sobre Email Admin
echo -e "\e[33mEmail do admin:\e[97m $email_mautic\e[0m"
echo ""
## Informação sobre Senha Admin
echo -e "\e[33mSenha do Admin:\e[97m $senha_email_mautic\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_mautic
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO MAUTIC \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO MYSQL \e[33m[2/4]\e[0m"
echo ""
sleep 1
dados
verificar_container_mysql
if [ $? -eq 0 ]; then
pegar_senha_mysql > /dev/null 2>&1
else
ferramenta_mysql
pegar_senha_mysql > /dev/null 2>&1
fi
criar_banco_mysql_da_stack "mautic"
## Espera 30 segundos
wait_30_sec
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO MAUTIC \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > mautic.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
mautic_web:
image: mautic/mautic:v4-apache ## Versão do Mautic
volumes:
- mautic_config:/var/www/html/config
- mautic_docroot:/var/www/html/docroot
- mautic_media:/var/www/html/docroot/media
- mautic_logs:/var/www/html/var/logs
- mautic_cron:/opt/mautic/cron
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados MySQL
- MAUTIC_DB_NAME=mautic
- MAUTIC_DB_HOST=mysql
- MAUTIC_DB_PORT=3306
- MAUTIC_DB_USER=root
- MAUTIC_DB_PASSWORD=$senha_mysql
## Dados de acesso
- MAUTIC_ADMIN_EMAIL=$email_mautic
- MAUTIC_ADMIN_USERNAME=$user_mautic
- MAUTIC_ADMIN_PASSWORD=$senha_email_mautic
- MAUTIC_URL=https://$url_mautic
## Configurações
- MAUTIC_TRUSTED_PROXIES=["0.0.0.0/0"]
- DOCKER_MAUTIC_ROLE=mautic_web
- DOCKER_MAUTIC_WORKERS_CONSUME_EMAIL=2
- DOCKER_MAUTIC_WORKERS_CONSUME_HIT=2
- DOCKER_MAUTIC_WORKERS_CONSUME_FAILED=2
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "2"
memory: 2048M
labels:
- traefik.enable=true
- traefik.http.routers.mautic.rule=Host(\`$url_mautic\`) # substitua SeuDominio.com.br pelo seu domínio
- traefik.http.services.mautic.loadbalancer.server.port=80
- traefik.http.routers.mautic.entrypoints=websecure
- traefik.http.routers.mautic.service=mautic
- traefik.http.routers.mautic.tls.certresolver=letsencryptresolver
- traefik.http.services.mautic.loadbalancer.passHostHeader=true
## --------------------------- ORION --------------------------- ##
mautic_worker:
image: mautic/mautic:v4-apache ## Versão do Mautic
networks:
- $nome_rede_interna ## Nome da rede interna
volumes:
- mautic_config:/var/www/html/config
- mautic_docroot:/var/www/html/docroot
- mautic_media:/var/www/html/docroot/media
- mautic_logs:/var/www/html/var/logs
- mautic_cron:/opt/mautic/cron
environment:
## Dados MySQL
- MAUTIC_DB_NAME=mautic
- MAUTIC_DB_HOST=mysql
- MAUTIC_DB_PORT=3306
- MAUTIC_DB_USER=root
- MAUTIC_DB_PASSWORD=$senha_mysql
## Dados de acesso
- MAUTIC_ADMIN_EMAIL=$email_mautic
- MAUTIC_ADMIN_USERNAME=$user_mautic
- MAUTIC_ADMIN_PASSWORD=$senha_email_mautic
- MAUTIC_URL=https://$url_mautic
## Configurações
- MAUTIC_TRUSTED_PROXIES=["0.0.0.0/0"]
- DOCKER_MAUTIC_ROLE=mautic_worker
- DOCKER_MAUTIC_WORKERS_CONSUME_EMAIL=2
- DOCKER_MAUTIC_WORKERS_CONSUME_HIT=2
- DOCKER_MAUTIC_WORKERS_CONSUME_FAILED=2
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "2"
memory: 2048M
## --------------------------- ORION --------------------------- ##
mautic_cron:
image: mautic/mautic:v4-apache ## Versão do Mautic
networks:
- $nome_rede_interna ## Nome da rede interna
volumes:
- mautic_config:/var/www/html/config
- mautic_docroot:/var/www/html/docroot
- mautic_media:/var/www/html/docroot/media
- mautic_logs:/var/www/html/var/logs
- mautic_cron:/opt/mautic/cron
environment:
## Dados MySQL
- MAUTIC_DB_NAME=mautic
- MAUTIC_DB_HOST=mysql
- MAUTIC_DB_PORT=3306
- MAUTIC_DB_USER=root
- MAUTIC_DB_PASSWORD=$senha_mysql
## Dados de acesso
- MAUTIC_ADMIN_EMAIL=$email_mautic
- MAUTIC_ADMIN_USERNAME=$user_mautic
- MAUTIC_ADMIN_PASSWORD=$senha_email_mautic
- MAUTIC_URL=https://$url_mautic
## Configurações
- MAUTIC_TRUSTED_PROXIES=["0.0.0.0/0"]
- DOCKER_MAUTIC_ROLE=mautic_cron
- DOCKER_MAUTIC_WORKERS_CONSUME_EMAIL=2
- DOCKER_MAUTIC_WORKERS_CONSUME_HIT=2
- DOCKER_MAUTIC_WORKERS_CONSUME_FAILED=2
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 512M
## --------------------------- ORION --------------------------- ##
volumes:
mautic_config:
name: mautic_config
external: true
mautic_docroot:
name: mautic_docroot
external: true
mautic_media:
name: mautic_media
external: true
mautic_logs:
name: mautic_logs
external: true
mautic_cron:
name: mautic_cron
external: true
networks:
$nome_rede_interna: ## Nome da rede interna
name: $nome_rede_interna ## Nome da rede interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Mautic"
fi
STACK_NAME="mautic"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c mautic.yaml mautic > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do Mautic"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "mautic" para verificar se o serviço esta online
wait_stack "mautic"
cd dados_vps
cat > dados_mautic <<EOL
[ MAUTIC ]
Dominio do Mautic: $url_mautic
Usuario: $user_mautic
Email: $email_mautic
Senha: $senha_email_mautic
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ MAUTIC ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_mautic\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m $user_mautic\e[0m"
echo ""
echo -e "\e[33mEmail:\e[97m $email_mautic\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m $senha_email_mautic\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## █████╗ ██████╗ ██████╗ ███████╗███╗ ███╗██╗████████╗██╗ ██╗
## ██╔══██╗██╔══██╗██╔══██╗██╔════╝████╗ ████║██║╚══██╔══╝██║ ██║
## ███████║██████╔╝██████╔╝███████╗██╔████╔██║██║ ██║ ███████║
## ██╔══██║██╔═══╝ ██╔═══╝ ╚════██║██║╚██╔╝██║██║ ██║ ██╔══██║
## ██║ ██║██║ ██║ ███████║██║ ╚═╝ ██║██║ ██║ ██║ ██║
## ╚═╝ ╚═╝╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝
ferramenta_appsmith() {
# Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_appsmith
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
## Pergunta o Dominio da ferramenta
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o dominio para o Appsmith (ex: appsmith.oriondesign.art.br): \e[0m" && read -r url_appsmith
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_appsmith
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio do Appsmith\e[97m $url_appsmith\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_appsmith
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO APPSMITH \e[33m[1/3]\e[0m"
echo ""
sleep 1
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO APPSMITH \e[33m[2/3]\e[0m"
echo ""
sleep 1
## Criando uma Encryption Key Aleatória
secret=$(openssl rand -hex 16)
## Criando a stack
cat > appsmith.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
appsmith:
image: appsmith/appsmith-ee:latest
volumes:
- appsmith_data:/appsmith-stacks
networks:
- $nome_rede_interna
environment:
## Url Appsmith
- APPSMITH_CUSTOM_DOMAIN=https://$url_appsmith
## Ativar/Desativar Novas Inscrições
- APPSMITH_SIGNUP_DISABLED=false
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "2"
memory: 2048M
labels:
- traefik.enable=true
- traefik.http.routers.appsmith.rule=Host(\`$url_appsmith\`)
- traefik.http.routers.appsmith.entrypoints=websecure
- traefik.http.routers.appsmith.tls.certresolver=letsencryptresolver
- traefik.http.routers.appsmith.service=appsmith
- traefik.http.services.appsmith.loadbalancer.server.port=80
- traefik.http.services.appsmith.loadbalancer.passHostHeader=true
## --------------------------- ORION --------------------------- ##
volumes:
appsmith_data:
external: true
name: appsmith_data
networks:
$nome_rede_interna:
name: $nome_rede_interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Appsmith"
fi
STACK_NAME="appsmith"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c appsmith.yaml appsmith > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do Appsmith"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "nocobase" para verificar se o serviço esta online
wait_stack "appsmith"
cd dados_vps
cat > dados_appsmith <<EOL
[ APPSMITH ]
Dominio do Appsmith: https://$url_nocobase
Usuario: Precisa criar no primeiro acesso do Appsmith
Senha: Precisa criar no primeiro acesso do Appsmith
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[Appsmith]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_appsmith\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar no primeiro acesso do Appsmith\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do Appsmith\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██████╗ ██████╗ █████╗ ███╗ ██╗████████╗
## ██╔═══██╗██╔══██╗██╔══██╗██╔══██╗████╗ ██║╚══██╔══╝
## ██║ ██║██║ ██║██████╔╝███████║██╔██╗ ██║ ██║
## ██║▄▄ ██║██║ ██║██╔══██╗██╔══██║██║╚██╗██║ ██║
## ╚██████╔╝██████╔╝██║ ██║██║ ██║██║ ╚████║ ██║
## ╚══▀▀═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝
ferramenta_qdrant() {
# Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_qdrant
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
## Pergunta o Dominio da ferramenta
read -r ip _ <<<$(hostname -I)
echo -e "\e[97mPasso$amarelo 1/2\e[0m"
echo -en "\e[33mDigite o ip da vps (seu ip: $ip) ou dominio para Qdrant (ex: qdrant.oriondesign.art.br): \e[0m" && read -r ip_vps
echo ""
## Pergunta quandos nodes deseja
echo -e "\e[97mPasso$amarelo 2/2\e[0m"
echo -en "\e[33mDigite quantos Nodes você deseja (recomendado: 5): \e[0m" && read -r nodes_qdrant
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_qdrant
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mIp da VPS ou Dominio:\e[97m $ip_vps\e[0m"
echo ""
## Informação sobre quantidade de nodes
echo -e "\e[33mQuantidade de Nodes:\e[97m $nodes_qdrant\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_qdrant
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO QDRANT \e[33m[1/3]\e[0m"
echo ""
sleep 1
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO QDRANT \e[33m[2/3]\e[0m"
echo ""
sleep 1
## Criando a stack
cat <<EOL > qdrant.yaml
version: "3.7"
services:
EOL
for ((i=0; i< $nodes_qdrant; i++)); do
node_name="qdrant_node_$i"
volume_name="qdrant_data_$i"
cat <<EOL >> qdrant.yaml
## --------------------------- ORION --------------------------- ##
$node_name:
image: qdrant/qdrant:latest
volumes:
- $volume_name:/qdrant
networks:
- $nome_rede_interna
ports:
- "$((6333 + i * 10)):6333"
- "$((6334 + i * 10)):6334"
environment:
- QDRANT__SERVICE__GRPC_PORT=6334
- QDRANT__CLUSTER__ENABLED=true
- QDRANT__CLUSTER__P2P__PORT=6335
- QDRANT__CLUSTER__CONSENSUS__MAX_MESSAGE_QUEUE_SIZE=5000
- QDRANT__LOG_LEVEL=debug,raft=info
deploy:
resources:
limits:
cpus: "0.3"
EOL
if ((i == 0)); then
echo " command: ./qdrant --uri 'http://qdrant_node_0:6335'" >> qdrant.yaml
else
echo " command: bash -c \"sleep $((10 + i * 3)) && ./qdrant --bootstrap 'http://qdrant_node_0:6335' --uri 'http://qdrant_node_$i:6335'\"" >> qdrant.yaml
fi
echo "" >> qdrant.yaml
done
cat <<EOL >> qdrant.yaml
## --------------------------- ORION --------------------------- ##
volumes:
EOL
for ((i=0; i< $nodes_qdrant; i++)); do
volume_name="qdrant_data_$i"
echo " $volume_name:" >> qdrant.yaml
done
cat <<EOL >> qdrant.yaml
networks:
$nome_rede_interna:
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Qdrant"
fi
STACK_NAME="qdrant"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c qdrant.yaml qdrant > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do Qdrant"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "qdrant" para verificar se o serviço esta online
wait_stack "qdrant"
cd dados_vps
cat > dados_qdrant <<EOL
[ QDRANT ]
Dominio do Qdrant: https://$ip_vps:6333/dashboard
Usuario: Não Tem
Senha: Não Tem
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[QDrant]\e[0m"
echo ""
echo -e "\e[33mDashboard:\e[97m http://$ip_vps:6333/dashboard\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Não Tem\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Não Tem\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██╗ ██╗ ██████╗ ██████╗ ███████╗███████╗██████╗ ██████╗██████╗ ███╗ ███╗
## ██║ ██║██╔═══██╗██╔═══██╗██╔════╝██╔════╝██╔══██╗ ██╔════╝██╔══██╗████╗ ████║
## ██║ █╗ ██║██║ ██║██║ ██║█████╗ █████╗ ██║ ██║ ██║ ██████╔╝██╔████╔██║
## ██║███╗██║██║ ██║██║ ██║██╔══╝ ██╔══╝ ██║ ██║ ██║ ██╔══██╗██║╚██╔╝██║
## ╚███╔███╔╝╚██████╔╝╚██████╔╝██║ ███████╗██████╔╝ ╚██████╗██║ ██║██║ ╚═╝ ██║
## ╚══╝╚══╝ ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝╚═════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝
ferramenta_woofed() {
# Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_woofedcrm
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
## Pergunta o Dominio da ferramenta
echo -e "\e[97mPasso$amarelo 1/3\e[0m"
echo -en "\e[33mDigite o Dominio para o WoofedCRM (ex: woofedcrm.oriondesign.art.br): \e[0m" && read -r url_woofed
echo ""
## Pergunta o nome do Usuario do Motor
echo -e "\e[97mPasso$amarelo 2/3\e[0m"
echo -e "$amarelo--> Evite os caracteres especiais: @\!#$ e/ou espaço"
echo -en "\e[33mDigite o User do MOTOR (ex: oriondesign): \e[0m" && read -r email_admin_woofed
echo ""
## Pergunta o nome do Senha do Motor
echo -e "\e[97mPasso$amarelo 3/3\e[0m"
echo -e "$amarelo--> Evite os caracteres especiais: \!#$ e/ou espaço"
echo -en "\e[33mDigite a Senha do MOTOR (ex: @Senha123_): \e[0m" && read -r senha_email_woofed
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_woofedcrm
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre o dominio
echo -e "\e[33mDominio:\e[97m $url_woofed\e[0m"
echo ""
## Informação sobre o usuario
echo -e "\e[33mUser MOTOR:\e[97m $email_admin_woofed\e[0m"
echo ""
## Informação sobre a senha
echo -e "\e[33mSenha MOTOR:\e[97m $senha_email_woofed\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_woofedcrm
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO WOOFED CRM \e[33m[1/7]\e[0m"
echo ""
sleep 1
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES VECTOR \e[33m[2/7]\e[0m"
echo ""
sleep 1
dados
verificar_container_pgvector
if [ $? -eq 0 ]; then
echo ""
pegar_senha_pgvector > /dev/null 2>&1
criar_banco_pgvector_da_stack "woofedcrm" #> /dev/null 2>&1
else
ferramenta_pgvector #> /dev/null 2>&1
pegar_senha_pgvector > /dev/null 2>&1
criar_banco_pgvector_da_stack "woofedcrm" #> /dev/null 2>&1
fi
sleep 5
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO REDIS \e[33m[3/7]\e[0m"
echo ""
verificar_container_redis
if [ $? -eq 0 ]; then
echo ""
else
ferramenta_redis
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO WOOFED CRM \e[33m[4/7]\e[0m"
echo ""
sleep 1
## Criando uma Encryption Key Aleatória
encryption_key_woofed=$(openssl rand -hex 16)
# Verifica se o arquivo evolution.yaml existe
if [ -f "/root/evolution.yaml" ]; then
# Extrai os valores do arquivo evolution.yaml e formata no estilo desejado
EVOLUTION_API_ENDPOINT="- EVOLUTION_API_ENDPOINT=$(grep -oP '(?<=- SERVER_URL=)[^#]*' /root/evolution.yaml | sed 's/ //g')"
EVOLUTION_API_ENDPOINT_TOKEN="- EVOLUTION_API_ENDPOINT_TOKEN=$(grep -oP '(?<=- AUTHENTICATION_API_KEY=)[^#]*' /root/evolution.yaml | sed 's/ //g')"
else
# Define os valores padrão se o arquivo não existir
EVOLUTION_API_ENDPOINT="#- EVOLUTION_API_ENDPOINT="
EVOLUTION_API_ENDPOINT_TOKEN="#- EVOLUTION_API_ENDPOINT_TOKEN="
fi
## Criando a stack
cat > woofedcrm.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
woofedcrm_web_orion:
image: douglara/woofedcrm:latest
command: bundle exec rails s -p 3000 -b 0.0.0.0
volumes:
- woofedcrm_data:/app/public/assets
networks:
- $nome_rede_interna
environment:
## Url WoofedCRM
- FRONTEND_URL=https://$url_woofed
- SECRET_KEY_BASE=$encryption_key_woofed
## Idioma
- LANGUAGE=pt-BR
## Permitir/Bloquear novas Inscrições
- ENABLE_USER_SIGNUP=true
## Credenciais Motor
- MOTOR_AUTH_USERNAME=$email_admin_woofed
- MOTOR_AUTH_PASSWORD=$senha_email_woofed
## Endpoints Evolution API
$EVOLUTION_API_ENDPOINT ## BaseUrl
$EVOLUTION_API_ENDPOINT_TOKEN ## Global Api Key
## Timezone
- DEFAULT_TIMEZONE=Brasilia
## Dados OpenAI
#- OPENAI_API_KEY=
## Dados PgVector
- DATABASE_URL=postgres://postgres:$senha_pgvector@pgvector:5432/woofedcrm
## Dados Redis
- REDIS_URL=redis://redis:6379/0
## Dados Storage
- ACTIVE_STORAGE_SERVICE=local
## Modo de Produção
- RAILS_ENV=production
- RACK_ENV=production
- NODE_ENV=production
- RAILS_LOG_LEVEL=debug
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.woofedcrm.rule=Host(\`$url_woofed\`)
- traefik.http.routers.woofedcrm.entrypoints=websecure
- traefik.http.routers.woofedcrm.tls.certresolver=letsencryptresolver
- traefik.http.routers.woofedcrm.priority=1
- traefik.http.routers.woofedcrm.service=woofedcrm
- traefik.http.services.woofedcrm.loadbalancer.server.port=3000
- traefik.http.services.woofedcrm.loadbalancer.passhostheader=true
- traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https
- traefik.http.routers.woofedcrm.middlewares=sslheader@docker
## --------------------------- ORION --------------------------- ##
woofedcrm_sidekiq_orion:
image: douglara/woofedcrm:latest
command: bundle exec sidekiq -C config/sidekiq.yml
volumes:
- woofedcrm_data:/app/public/assets
networks:
- $nome_rede_interna
environment:
## Url WoofedCRM
- FRONTEND_URL=https://$url_woofed
- SECRET_KEY_BASE=$encryption_key_woofed
## Idioma
- LANGUAGE=pt-BR
## Permitir/Bloquear novas Inscrições
- ENABLE_USER_SIGNUP=true
## Credenciais Motor
- MOTOR_AUTH_USERNAME=$email_admin_woofed
- MOTOR_AUTH_PASSWORD=$senha_email_woofed
## Endpoints Evolution API
$EVOLUTION_API_ENDPOINT ## BaseUrl
$EVOLUTION_API_ENDPOINT_TOKEN ## Global Api Key
## Timezone
- DEFAULT_TIMEZONE=Brasilia
## Dados OpenAI
#- OPENAI_API_KEY=
## Dados PgVector
- DATABASE_URL=postgres://postgres:$senha_pgvector@pgvector:5432/woofedcrm
## Dados Redis
- REDIS_URL=redis://redis:6379/0
## Dados Storage
- ACTIVE_STORAGE_SERVICE=local
## Modo de Produção
- RAILS_ENV=production
- RACK_ENV=production
- NODE_ENV=production
- RAILS_LOG_LEVEL=debug
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
## --------------------------- ORION --------------------------- ##
woofedcrm_job_orion:
image: douglara/woofedcrm:latest
command: bundle exec good_job
volumes:
- woofedcrm_data:/app/public/assets
networks:
- $nome_rede_interna
environment:
## Url WoofedCRM
- FRONTEND_URL=https://$url_woofed
- SECRET_KEY_BASE=$encryption_key_woofed
## Idioma
- LANGUAGE=pt-BR
## Permitir/Bloquear novas Inscrições
- ENABLE_USER_SIGNUP=true
## Credenciais Motor
- MOTOR_AUTH_USERNAME=$email_admin_woofed
- MOTOR_AUTH_PASSWORD=$senha_email_woofed
## Endpoints Evolution API
$EVOLUTION_API_ENDPOINT ## BaseUrl
$EVOLUTION_API_ENDPOINT_TOKEN ## Global Api Key
## Timezone
- DEFAULT_TIMEZONE=Brasilia
## Dados OpenAI
#- OPENAI_API_KEY=
## Dados PgVector
- DATABASE_URL=postgres://postgres:$senha_pgvector@pgvector:5432/woofedcrm
## Dados Redis
- REDIS_URL=redis://redis:6379/0
## Dados Storage
- ACTIVE_STORAGE_SERVICE=local
## Modo de Produção
- RAILS_ENV=production
- RACK_ENV=production
- NODE_ENV=production
- RAILS_LOG_LEVEL=debug
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
## --------------------------- ORION --------------------------- ##
volumes:
woofedcrm_data:
external: true
name: woofedcrm_data
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do WoofedCRM"
fi
STACK_NAME="woofedcrm"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c woofedcrm.yaml woofedcrm #> /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do WoofedCRM"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[5/7]\e[0m"
wait_30_sec
echo ""
sleep 1
## Usa o serviço wait_stack "woofedcrm" para verificar se o serviço esta online
wait_stack "woofedcrm"
## Mensagem de Passo
echo -e "\e[97m• CONFIGURANDO E MIGRANDO BANCO DE DADOS \e[33m[6/7]\e[0m"
echo ""
sleep 1
#MIGRANDO BANCO DE DADOS DO WOOFED CRM
container_name=" woofedcrm_web_orion"
max_wait_time=1200
wait_interval=60
elapsed_time=0
while [ $elapsed_time -lt $max_wait_time ]; do
CONTAINER_ID=$(docker ps -q --filter "name=$container_name")
if [ -n "$CONTAINER_ID" ]; then
break
fi
sleep $wait_interval
elapsed_time=$((elapsed_time + wait_interval))
done
if [ -z "$CONTAINER_ID" ]; then
echo "O contêiner não foi encontrado após $max_wait_time segundos."
exit 1
fi
docker exec -it "$CONTAINER_ID" bundle exec rails db:create
docker exec -it "$CONTAINER_ID" bundle exec rails db:migrate
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[7/7]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "woofedcrm" para verificar se o serviço esta online
wait_stack "woofedcrm"
cd dados_vps
cat > dados_woofedcrm <<EOL
[ WOOFED CRM ]
Dominio do WoofedCRM: https://$url_woofed
Email: Precisa criar dentro do WoofedCRM
Senha: Precisa criar dentro do WoofedCRM
Acesso ao Motor: https://$url_woofed/motor_admin
Usuario do Motor: $email_admin_woofed
Senha do Motor: $senha_email_woofed
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ WOOFED CRM ]\e[0m"
echo ""
echo -e "\e[97mDominio:\e[33m https://$url_woofed\e[0m"
echo ""
echo -e "\e[97mEmail:\e[33m Precisa criar dentro do WoofedCRM\e[0m"
echo ""
echo -e "\e[97mSenha:\e[33m Precisa criar dentro do WoofedCRM\e[0m"
echo ""
echo -e "\e[97mURL MOTOR:\e[33m https://$url_woofed/motor_admin\e[0m"
echo ""
echo -e "\e[97mUser MOTOR:\e[33m $email_admin_woofed\e[0m"
echo ""
echo -e "\e[97mSenha MOTOR:\e[33m $senha_email_woofed\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███████╗ ██████╗ ██████╗ ███╗ ███╗██████╗ ██████╗ ██╗ ██████╗██╗ ██╗███████╗
## ██╔════╝██╔═══██╗██╔══██╗████╗ ████║██╔══██╗██╔══██╗██║██╔════╝██║ ██╔╝██╔════╝
## █████╗ ██║ ██║██████╔╝██╔████╔██║██████╔╝██████╔╝██║██║ █████╔╝ ███████╗
## ██╔══╝ ██║ ██║██╔══██╗██║╚██╔╝██║██╔══██╗██╔══██╗██║██║ ██╔═██╗ ╚════██║
## ██║ ╚██████╔╝██║ ██║██║ ╚═╝ ██║██████╔╝██║ ██║██║╚██████╗██║ ██╗███████║
## ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝
ferramenta_formbricks() {
# Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_formbricks
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
## Pergunta o Dominio da ferramenta
echo -e "\e[97mPasso$amarelo 1/6\e[0m"
echo -en "\e[33mDigite o Dominio para o Formbricks (ex: formbricks.oriondesign.art.br): \e[0m" && read -r url_formbricks
echo ""
## Pergunta o Email SMTP
echo -e "\e[97mPasso$amarelo 2/6\e[0m"
echo -en "\e[33mDigite um Email para o SMTP (ex: [email protected]): \e[0m" && read -r email_formbricks
echo ""
## Pergunta o User SMTP
echo -e "\e[97mPasso$amarelo 3/6\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o Usuario do SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r user_smtp_formbricks
echo ""
## Pergunta a Senha SMTP
echo -e "\e[97mPasso$amarelo 4/6\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do email (ex: @Senha123_): \e[0m" && read -r senha_formbricks
echo ""
## Pergunta o Host SMTP
echo -e "\e[97mPasso$amarelo 5/6\e[0m"
echo -en "\e[33mDigite o Host SMTP do email (ex: smtp.hostinger.com): \e[0m" && read -r host_formbricks
echo ""
## Pergunta a Porta SMTP
echo -e "\e[97mPasso$amarelo 6/6\e[0m"
echo -en "\e[33mDigite a Porta SMTP do email (ex: 465): \e[0m" && read -r porta_formbricks
echo ""
if [ "$porta_formbricks" -eq 465 ] || [ "$porta_formbricks" -eq 25 ]; then
ssl_formbricks=1
else
ssl_formbricks=0
fi
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_formbricks
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio:\e[97m $url_formbricks\e[0m"
echo ""
## Informação sobre Email
echo -e "\e[33mEmail SMTP:\e[97m $email_formbricks\e[0m"
echo ""
## Informação sobre UserSMTP
echo -e "\e[33mUser SMTP:\e[97m $user_smtp_formbricks\e[0m"
echo ""
## Informação sobre Senha
echo -e "\e[33mSenha SMTP:\e[97m $senha_formbricks\e[0m"
echo ""
## Informação sobre Host
echo -e "\e[33mHost SMTP:\e[97m $host_formbricks\e[0m"
echo ""
## Informação sobre Porta
echo -e "\e[33mPorta SMTP:\e[97m $porta_formbricks\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_formbricks
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO FORMBRICKS \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Nada nada nada.. só para aparecer a mensagem de passo..
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/4]\e[0m"
echo ""
sleep 1
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "formbricks"
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO FORMBRICKS \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Gera keys aleatórias
encryption_key_form=$(openssl rand -hex 16)
next_key_form=$(openssl rand -hex 16)
cron_key_form=$(openssl rand -hex 16)
## Criando a stack
cat > formbricks.yaml <<-EOF
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
formbricks:
image: formbricks/formbricks:latest
volumes:
- formbricks_data:/home/nextjs/apps/web/uploads/
networks:
- $nome_rede_interna
environment:
## Url da aplicação
- WEBAPP_URL=https://$url_formbricks
- NEXTAUTH_URL=https://$url_formbricks
## Banco de dados Postgres
- DATABASE_URL=postgresql://postgres:$senha_postgres@postgres:5432/formbricks
## Licença Enterprise ou Self-hosting
## Solicitar licenta Self-hosting --> https://oriondesign.art.br/formbricks_licence/ <-- ##
- ENTERPRISE_LICENSE_KEY=
## Keys aleatórias 32 caracteres
- ENCRYPTION_KEY=$encryption_key_form
- NEXTAUTH_SECRET=$next_key_form
- CRON_SECRET=$cron_key_form
## Dados do SMTP
- MAIL_FROM=$email_formbricks
- SMTP_HOST=$host_formbricks
- SMTP_PORT=$porta_formbricks
- SMTP_SECURE_ENABLED=$ssl_formbricks #(0= false | 1= true)
- SMTP_USER=$user_smtp_formbricks
- SMTP_PASSWORD=$senha_formbricks
## Ativar/Desativar registros e convites (0= false | 1= true)
- SIGNUP_DISABLED=0
- INVITE_DISABLED=0
- EMAIL_VERIFICATION_DISABLED=0
- PASSWORD_RESET_DISABLED=0
## Dados do Formbricks (para pesquisa)
- NEXT_PUBLIC_FORMBRICKS_API_HOST=
- NEXT_PUBLIC_FORMBRICKS_ENVIRONMENT_ID=
- NEXT_PUBLIC_FORMBRICKS_ONBOARDING_SURVEY_ID=
## Login Google Cloud
- GOOGLE_AUTH_ENABLED=0
- GOOGLE_CLIENT_ID=
- GOOGLE_CLIENT_SECRET=
## Google Sheets
- GOOGLE_SHEETS_CLIENT_ID=
- GOOGLE_SHEETS_CLIENT_SECRET=
- GOOGLE_SHEETS_REDIRECT_URL=
## Login Github
- GITHUB_AUTH_ENABLED=0
- GITHUB_ID=
- GITHUB_SECRET=
## Login Github
- NOTION_OAUTH_CLIENT_ID=
- NOTION_OAUTH_CLIENT_SECRET=
## Login Airtable
- AIRTABLE_CLIENT_ID=
## Termos e politica de privacidade
#- PRIVACY_URL=
#- TERMS_URL=
#- IMPRINT_URL=
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.formbricks.rule=Host(\`$url_formbricks\`)
- traefik.http.services.formbricks.loadbalancer.server.port=3000
- traefik.http.routers.formbricks.service=formbricks
- traefik.http.routers.formbricks.tls.certresolver=letsencryptresolver
- traefik.http.routers.formbricks.entrypoints=websecure
- traefik.http.routers.formbricks.tls=true
## --------------------------- ORION --------------------------- ##
networks:
$nome_rede_interna:
name: $nome_rede_interna
external: true
volumes:
formbricks_data:
external: true
EOF
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Formbricks"
fi
STACK_NAME="formbricks"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c formbricks.yaml formbricks > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do Formbricks"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "formbricks" para verificar se o serviço esta online
wait_stack "formbricks"
cd dados_vps
cat > dados_formbricks <<EOL
[ FORMBRICKS ]
Dominio do Formbricks: https://$url_formbricks
Email: Precisa de criar dentro do Formbricks
Senha: Precisa de criar dentro do Formbricks
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ FORMBRICKS ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_formbricks\e[0m"
echo ""
echo -e "\e[33mEmail:\e[97m Precisa de criar dentro do Formbricks\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa de criar dentro do Formbricks\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███╗ ██╗ ██████╗ ██████╗ ██████╗ ██████╗ ██████╗
## ████╗ ██║██╔═══██╗██╔════╝██╔═══██╗██╔══██╗██╔══██╗
## ██╔██╗ ██║██║ ██║██║ ██║ ██║██║ ██║██████╔╝
## ██║╚██╗██║██║ ██║██║ ██║ ██║██║ ██║██╔══██╗
## ██║ ╚████║╚██████╔╝╚██████╗╚██████╔╝██████╔╝██████╔╝
## ╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝
ferramenta_nocodb() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_nocodb
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o dominio para o NocoDB (ex: nocodb.oriondesign.art.br): \e[0m" && read -r url_nocodb
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_nocodb
## Mostra mensagem para verificar as informações
conferindo_as_info
##Informação do Dominio
echo -e "\e[33mDominio para o NocoDB:\e[97m $url_nocodb\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_nocodb
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO NOCODB \e[33m[1/4]\e[0m"
echo ""
sleep 1
## NADA
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Já sabe né ksk
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "nocodb"
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO NOCODB \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > nocodb.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
nocodb:
image: nocodb/nocodb:latest
volumes:
- nocodb-data:/usr/app/data
networks:
- $nome_rede_interna
environment:
## Url do Nocobase
- NC_PUBLIC_URL=https://$url_nocodb
## Dados Postgres
- NC_DB=pg://postgres:5432?u=postgres&p=$senha_postgres&d=nocodb
## Desativar Telemetria
- NC_DISABLE_TELE=true
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.nocodb.rule=Host(\`$url_nocodb\`)
- traefik.http.routers.nocodb.entrypoints=websecure
- traefik.http.services.nocodb.loadbalancer.server.port=8080
- traefik.http.routers.nocodb.service=nocodb
- traefik.http.routers.nocodb.tls.certresolver=letsencryptresolver
- com.centurylinklabs.watchtower.enable=true
## --------------------------- ORION --------------------------- ##
volumes:
nocodb-data:
external: true
name: nocodb-data
networks:
$nome_rede_interna:
name: $nome_rede_interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do NocoDB"
fi
STACK_NAME="nocodb"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c nocodb.yaml nocodb > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do NocoDB"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_nocodb para verificar se o serviço esta online
wait_stack "nocobase"
cd dados_vps
cat > dados_nocodb <<EOL
[ NOCODB ]
Dominio do NocoDB: https://$url_nocodb
Usuario: Precisa criar no primeiro acesso do NocoDB
Senha: Precisa criar no primeiro acesso do NocoDB
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ NocoDB ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_nocodb\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar no primeiro acesso do NocoDB\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do NocoDB\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██╗ █████╗ ███╗ ██╗ ██████╗ ███████╗██╗ ██╗███████╗███████╗
## ██║ ██╔══██╗████╗ ██║██╔════╝ ██╔════╝██║ ██║██╔════╝██╔════╝
## ██║ ███████║██╔██╗ ██║██║ ███╗█████╗ ██║ ██║███████╗█████╗
## ██║ ██╔══██║██║╚██╗██║██║ ██║██╔══╝ ██║ ██║╚════██║██╔══╝
## ███████╗██║ ██║██║ ╚████║╚██████╔╝██║ ╚██████╔╝███████║███████╗
## ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝╚══════╝
ferramenta_langfuse() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_langfuse
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o dominio para o Langfuse (ex: langfuse.oriondesign.art.br): \e[0m" && read -r url_langfuse
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_langfuse
## Mostra mensagem para verificar as informações
conferindo_as_info
##Informação do Dominio
echo -e "\e[33mDominio para o langfuse:\e[97m $url_langfuse\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_langfuse
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO LANGFUSE \e[33m[1/4]\e[0m"
echo ""
sleep 1
## NADA
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Já sabe né ksk
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "langfuse"
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO LANGFUSE \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando key Aleatória 64caracteres
key_secret=$(openssl rand -hex 32)
## Criando key Aleatória 32caracteres
key_salt=$(openssl rand -hex 16)
## Criando a stack
cat > langfuse.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
langfuse:
image: ghcr.io/langfuse/langfuse:latest
networks:
- $nome_rede_interna
environment:
## Url do Langfuse
- NEXTAUTH_URL=https://$url_langfuse
## Desativar novas incrições
- NEXT_PUBLIC_SIGN_UP_DISABLED=false
## Dados Postgres
- DATABASE_URL=postgresql://postgres:$senha_postgres@postgres:5432/langfuse
## Secrets Key
- NEXTAUTH_SECRET=$key_secret
- SALT=$key_salt
## Desativar Telemetria
- TELEMETRY_ENABLED=true
## Features experimentais
- LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES=false
## Node
- NODE_ENV=production
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: '0.5'
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.langfuse.rule=Host(\`$url_langfuse\`)
- traefik.http.routers.langfuse.entrypoints=websecure
- traefik.http.routers.langfuse.tls.certresolver=letsencryptresolver
- traefik.http.routers.langfuse.service=langfuse
- traefik.http.services.langfuse.loadbalancer.passHostHeader=true
- traefik.http.services.langfuse.loadbalancer.server.port=3000
## --------------------------- ORION --------------------------- ##
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do langfuse"
fi
STACK_NAME="langfuse"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c langfuse.yaml langfuse > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do langfuse"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_langfuse para verificar se o serviço esta online
wait_stack "langfuse"
cd dados_vps
cat > dados_langfuse <<EOL
[ LANGFUSE ]
Dominio do Langfuse: https://$url_langfuse
Usuario: Precisa criar no primeiro acesso do langfuse
Senha: Precisa criar no primeiro acesso do langfuse
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ LANGFUSE ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_langfuse\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar no primeiro acesso do Langfuse\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do Langfuse\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███╗ ███╗███████╗████████╗ █████╗ ██████╗ █████╗ ███████╗███████╗
## ████╗ ████║██╔════╝╚══██╔══╝██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔════╝
## ██╔████╔██║█████╗ ██║ ███████║██████╔╝███████║███████╗█████╗
## ██║╚██╔╝██║██╔══╝ ██║ ██╔══██║██╔══██╗██╔══██║╚════██║██╔══╝
## ██║ ╚═╝ ██║███████╗ ██║ ██║ ██║██████╔╝██║ ██║███████║███████╗
## ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝
ferramenta_metabase() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_metabase
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o dominio para o Metabase (ex: metabase.oriondesign.art.br): \e[0m" && read -r url_metabase
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_metabase
## Mostra mensagem para verificar as informações
conferindo_as_info
##Informação do Dominio
echo -e "\e[33mDominio para o metabase:\e[97m $url_metabase\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_metabase
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO METABASE \e[33m[1/4]\e[0m"
echo ""
sleep 1
## NADA
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Já sabe né ksk
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "metabase"
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO METABASE \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando key Aleatória 64caracteres
key_secret=$(openssl rand -hex 32)
## Criando key Aleatória 32caracteres
key_salt=$(openssl rand -hex 16)
## Criando a stack
cat > metabase.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
metabase:
image: metabase/metabase:latest
volumes:
- metabase_data:/metabase3-data
networks:
- $nome_rede_interna
environment:
## Url MetaBase
- MB_SITE_URL=https://$url_metabase
- MB_REDIRECT_ALL_REQUESTS_TO_HTTPS=true
- MB_JETTY_PORT=3000
- MB_JETTY_HOST=0.0.0.0
## Dados postgres
- MB_DB_MIGRATION_LOCATION=none
- MB_DB_TYPE=postgres
- MB_DB_DBNAME=metabase
- MB_DB_PORT=5432
- MB_DB_USER=postgres
- MB_DB_PASS=$senha_postgres
- MB_DB_HOST=postgres
- MB_AUTOMIGRATE=false
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.metabase.rule=Host(\`$url_metabase\`)
- traefik.http.services.metabase.loadbalancer.server.port=3000
- traefik.http.routers.metabase.service=metabase
- traefik.http.routers.metabase.entrypoints=websecure
- traefik.http.routers.metabase.tls=true
- traefik.http.routers.metabase.tls.certresolver=letsencryptresolver
## --------------------------- ORION --------------------------- ##
volumes:
metabase_data:
external: true
name: metabase_data
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do metabase"
fi
STACK_NAME="metabase"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c metabase.yaml metabase > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do metabase"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "metabase" para verificar se o serviço esta online
wait_stack "metabase"
cd dados_vps
cat > dados_metabase <<EOL
[ METABASE ]
Dominio do metabase: https://$url_metabase
Usuario: Precisa criar no primeiro acesso do metabase
Senha: Precisa criar no primeiro acesso do metabase
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ METABASE ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_metabase\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar no primeiro acesso do metabase\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do metabase\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██████╗ ██████╗ ██████╗
## ██╔═══██╗██╔══██╗██╔═══██╗██╔═══██╗
## ██║ ██║██║ ██║██║ ██║██║ ██║
## ██║ ██║██║ ██║██║ ██║██║ ██║
## ╚██████╔╝██████╔╝╚██████╔╝╚██████╔╝
## ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝
ferramenta_odoo() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_odoo
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o dominio para o Odoo (ex: odoo.oriondesign.art.br): \e[0m" && read -r url_odoo
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_odoo
## Mostra mensagem para verificar as informações
conferindo_as_info
##Informação do Dominio
echo -e "\e[33mDominio para o Odoo:\e[97m $url_odoo\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_odoo
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO ODOO \e[33m[1/3]\e[0m"
echo ""
sleep 1
## NADA
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO ODOO \e[33m[2/3]\e[0m"
echo ""
sleep 1
## Criando senha do postgres
senha_postgres_odoo=$(openssl rand -hex 16)
## Criando a stack
cat > odoo.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
odoo_app:
image: odoo:16.0
volumes:
- odoo_web_data1:/var/lib/odoo
- odoo_web_data2:/config:/etc/odoo
- odoo_web_data3:/addons:/mnt/extra-addons
networks:
- $nome_rede_interna
environment:
## Dados postgres do Odoo
- HOST=odoo_db
- USER=odoo
- PASSWORD=$senha_postgres_odoo
deploy:
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.odoo.rule=Host(\`$url_odoo\`)
- traefik.http.routers.odoo.entrypoints=websecure
- traefik.http.routers.odoo.tls=true
- traefik.http.routers.odoo.tls.certresolver=letsencryptresolver
- traefik.http.services.odoo.loadbalancer.server.port=8069
## --------------------------- ORION --------------------------- ##
odoo_db:
image: postgres:15
volumes:
- odoo_db_data:/var/lib/postgresql/data/pgdata
networks:
- $nome_rede_interna
ports:
- 543:45432
environment:
## Dados Postgres
- POSTGRES_DB=postgres
- POSTGRES_PASSWORD=$senha_postgres_odoo
- POSTGRES_USER=odoo
- PGDATA=/var/lib/postgresql/data/pgdata
deploy:
placement:
constraints:
- node.role == manager
## --------------------------- ORION --------------------------- ##
volumes:
odoo_web_data1:
external: true
name: odoo_web_data1
odoo_web_data2:
external: true
name: odoo_web_data2
odoo_web_data3:
external: true
name: odoo_web_data3
odoo_db_data:
external: true
name: odoo_db_data
networks:
$nome_rede_interna:
external: true
attachable: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do odoo"
fi
STACK_NAME="odoo"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c odoo.yaml odoo > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do Odoo"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_odoo para verificar se o serviço esta online
wait_stack "odoo"
cd dados_vps
cat > dados_odoo <<EOL
[ ODOO ]
Dominio do odoo: https://$url_odoo
Usuario: Precisa criar no primeiro acesso do Odoo
Senha: Precisa criar no primeiro acesso do Odoo
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ ODOO ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_odoo\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar no primeiro acesso do Odoo\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do Odoo\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗██╗ ██╗ █████╗ ████████╗██╗ ██╗ ██████╗ ██████╗ ████████╗
## ██╔════╝██║ ██║██╔══██╗╚══██╔══╝██║ ██║██╔═══██╗██╔═══██╗╚══██╔══╝
## ██║ ███████║███████║ ██║ ██║ █╗ ██║██║ ██║██║ ██║ ██║
## ██║ ██╔══██║██╔══██║ ██║ ██║███╗██║██║ ██║██║ ██║ ██║
## ╚██████╗██║ ██║██║ ██║ ██║ ╚███╔███╔╝╚██████╔╝╚██████╔╝ ██║
## ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══╝╚══╝ ╚═════╝ ╚═════╝ ╚═╝
##
## ██████╗██╗ █████╗ ██╗██████╗ ████████╗ ██████╗ ███╗ ██╗
## ██╔════╝██║ ██╔══██╗██║██╔══██╗╚══██╔══╝██╔═══██╗████╗ ██║
## ██║ ██║ ███████║██║██████╔╝ ██║ ██║ ██║██╔██╗ ██║
## ██║ ██║ ██╔══██║██║██╔══██╗ ██║ ██║ ██║██║╚██╗██║
## ╚██████╗███████╗██║ ██║██║██║ ██║ ██║ ╚██████╔╝██║ ╚████║
## ╚═════╝╚══════╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝
ferramenta_chatwoot_clairton() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_chatwoot
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 1/5\e[0m"
echo -en "\e[33mDigite o Dominio para o Chatwoot (ex: chatwoot.oriondesign.art.br): \e[0m" && read -r url_chatwoot
echo ""
## Pega o nome do dominio para ser o nome da empresa
nome_empresa_chatwoot="$nome_servidor"
## Pergunta o email SMTP
echo -e "\e[97mPasso$amarelo 2/5\e[0m"
echo -en "\e[33mDigite o Email para SMTP (ex: [email protected]): \e[0m" && read -r email_admin_chatwoot
echo ""
## Define o dominio SMTP com o dominio do email
dominio_smtp_chatwoot=$(echo "$email_admin_chatwoot" | cut -d "@" -f 2)
## Pergunta a senha do SMTP
echo -e "\e[97mPasso$amarelo 3/5\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do Email (ex: @Senha123_): \e[0m" && read -r senha_email_chatwoot
echo ""
## Pergunta o Host SMTP do email
echo -e "\e[97mPasso$amarelo 4/5\e[0m"
echo -en "\e[33mDigite o Host SMTP do Email (ex: smtp.hostinger.com): \e[0m" && read -r smtp_email_chatwoot
echo ""
## Pergunta a porta SMTP do email
echo -e "\e[97mPasso$amarelo 5/5\e[0m"
echo -en "\e[33mDigite a porta SMTP do Email (ex: 465): \e[0m" && read -r porta_smtp_chatwoot
## Verifica se a porta é 465, se sim deixa o ssl true, se não, deixa false
if [ "$porta_smtp_chatwoot" -eq 465 ]; then
sobre_ssl=true
else
sobre_ssl=false
fi
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_chatwoot
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio do Chatwoot:\e[97m $url_chatwoot\e[0m"
echo ""
## Informação sobre Nome da Empresa
echo -e "\e[33mNome da Empresa:\e[97m $nome_empresa_chatwoot\e[0m"
echo ""
## Informação sobre Email de SMTP
echo -e "\e[33mEmail do SMTP:\e[97m $email_admin_chatwoot\e[0m"
echo ""
## Informação sobre Senha de SMTP
echo -e "\e[33mSenha do SMTP:\e[97m $senha_email_chatwoot\e[0m"
echo ""
## Informação sobre Host SMTP
echo -e "\e[33mHost SMTP:\e[97m $smtp_email_chatwoot\e[0m"
echo ""
## Informação sobre Porta SMTP
echo -e "\e[33mPorta SMTP:\e[97m $porta_smtp_chatwoot\e[0m"
echo ""
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_chatwoot
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO CHATWOOT CLAIRTON \e[33m[1/6]\e[0m"
echo ""
sleep 1
## Ativa a função dados para pegar os dados da vps
dados
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES E REDIS \e[33m[2/6]\e[0m"
echo ""
sleep 1
## Aqui vamos fazer uma verificação se já existe Postgres e redis instalado
## Se tiver ele vai criar um banco de dados no postgres ou perguntar se deseja apagar o que já existe e criar outro
## Verifica container postgres e cria banco no postgres
verificar_container_postgres
if [ $? -eq 0 ]; then
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "chatwoot_uno"
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Verificando/Instalando Postgres"
else
echo "1/2 - [ OFF ] - Verificando/Instalando Postgres"
fi
## Verifica container redis
verificar_container_redis
if [ $? -eq 0 ]; then
echo ""
else
ferramenta_redis > /dev/null 2>&1
fi
if [ $? -eq 0 ]; then
echo "2/2 - [ OK ] - Verificando/Instalando Redis"
else
echo "2/2 - [ OFF ] - Verificando/Instalando Redis"
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO CHATWOOT CLAIRTON \e[33m[3/6]\e[0m"
echo ""
sleep 1
## Neste passo vamos estar criando a Stack yaml do Chatwoot na pasta /root/
## Isso possibilitará que o usuario consiga edita-lo posteriormente
## Depois vamos instalar o Chatwoot e verificar se esta tudo certo.
## Criando key aleatória
encryption_key=$(openssl rand -hex 16)
## Criando a stack
cat > chatwoot_uno.yaml <<EOL
version: "3.7"
services:
chatwoot_uno_app:
image: clairton/chatwoot:v3.6.1-uno ## Versão do Chatwoot CLAIRTON
command: bundle exec rails s -p 3000 -b 0.0.0.0
entrypoint: docker/entrypoints/rails.sh
volumes:
- chatwoot_uno_data:/app/storage ## Diretório dos arquivos de conversa
- chatwoot_uno_public_orion:/app ## Diretório de todos os arquivos do chatwoot
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
- CHATWOOT_HUB_URL=https://oriondesign.art.br/setup#
- INSTALLATION_NAME=$nome_empresa_chatwoot ## Nome da empresa
- NODE_ENV=production
- RAILS_ENV=production
- INSTALLATION_ENV=docker
- SECRET_KEY_BASE=$encryption_key ## Key aleatória gerada aleatóriamente
- FRONTEND_URL=https://$url_chatwoot ## Url do Chatwoot
- DEFAULT_LOCALE=pt_BR
- FORCE_SSL=true
- ENABLE_ACCOUNT_SIGNUP=false ## false = Desativar novas inscrições no inicio | true = Ativar novas inscrições no inicio
- REDIS_URL=redis://redis:6379
- POSTGRES_HOST=postgres
- POSTGRES_USERNAME=postgres
- POSTGRES_PASSWORD=$senha_postgres ## Senha do postgres
- POSTGRES_DATABASE=chatwoot_uno
- ACTIVE_STORAGE_SERVICE=local
- RAILS_LOG_TO_STDOUT=true
- USE_INBOX_AVATAR_FOR_BOT=true
- MAILER_SENDER_EMAIL=$email_admin_chatwoot <$email_admin_chatwoot> ## Email SMTP
- SMTP_DOMAIN=$dominio_smtp_chatwoot ## Dominio do email
- SMTP_ADDRESS=$smtp_email_chatwoot ## Host SMTP
- SMTP_PORT=$porta_smtp_chatwoot ## Porta SMTP
- SMTP_SSL=$sobre_ssl ## Se a porta for 465 = true | Se a porta for 587 = false
- SMTP_USERNAME=$email_admin_chatwoot ## Email SMTP
- SMTP_PASSWORD=$senha_email_chatwoot ## Senha do SMTP
- SMTP_AUTHENTICATION=login
- SMTP_ENABLE_STARTTLS_AUTO=true
- SMTP_OPENSSL_VERIFY_MODE=peer
- MAILER_INBOUND_EMAIL_DOMAIN=$email_admin_chatwoot ## Email SMTP
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.chatwoot_uno_app.rule=Host(\`$url_chatwoot\`)
- traefik.http.routers.chatwoot_uno_app.entrypoints=websecure
- traefik.http.routers.chatwoot_uno_app.tls.certresolver=letsencryptresolver
- traefik.http.routers.chatwoot_uno_app.priority=1
- traefik.http.routers.chatwoot_uno_app.service=chatwoot_uno_app
- traefik.http.services.chatwoot_uno_app.loadbalancer.server.port=3000
- traefik.http.services.chatwoot_uno_app.loadbalancer.passhostheader=true
- traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https
- traefik.http.routers.chatwoot_uno_app.middlewares=sslheader@docker
chatwoot_uno_sidekiq:
image: clairton/chatwoot:v3.6.1-uno
command: bundle exec sidekiq -C config/sidekiq.yml
volumes:
- chatwoot_uno_data:/app/storage ## Diretório dos arquivos de conversa
- chatwoot_uno_public_orion:/app ## Diretório de todos os arquivos do chatwoot
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
- CHATWOOT_HUB_URL=https://oriondesign.art.br/setup#
- INSTALLATION_NAME=$nome_empresa_chatwoot ## Nome da empresa
- NODE_ENV=production
- RAILS_ENV=production
- INSTALLATION_ENV=docker
- SECRET_KEY_BASE=$encryption_key ## Key aleatória gerada aleatóriamente
- FRONTEND_URL=https://$url_chatwoot ## Url do Chatwoot
- DEFAULT_LOCALE=pt_BR
- FORCE_SSL=true
- ENABLE_ACCOUNT_SIGNUP=false ## false = Desativar novas inscrições no inicio | true = Ativar novas inscrições no inicio
- REDIS_URL=redis://redis:6379
- POSTGRES_HOST=postgres
- POSTGRES_USERNAME=postgres
- POSTGRES_PASSWORD=$senha_postgres ## Senha do postgres
- POSTGRES_DATABASE=chatwoot_uno
- ACTIVE_STORAGE_SERVICE=local
- RAILS_LOG_TO_STDOUT=true
- USE_INBOX_AVATAR_FOR_BOT=true
- MAILER_SENDER_EMAIL=$email_admin_chatwoot <$email_admin_chatwoot> ## Email SMTP
- SMTP_DOMAIN=$dominio_smtp_chatwoot ## Dominio do email
- SMTP_ADDRESS=$smtp_email_chatwoot ## Host SMTP
- SMTP_PORT=$porta_smtp_chatwoot ## Porta SMTP
- SMTP_SSL=$sobre_ssl ## Se a porta for 465 = true | Se a porta for 587 = false
- SMTP_USERNAME=$email_admin_chatwoot ## Email SMTP
- SMTP_PASSWORD=$senha_email_chatwoot ## Senha do SMTP
- SMTP_AUTHENTICATION=login
- SMTP_ENABLE_STARTTLS_AUTO=true
- SMTP_OPENSSL_VERIFY_MODE=peer
- MAILER_INBOUND_EMAIL_DOMAIN=$email_admin_chatwoot ## Email SMTP
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
volumes:
chatwoot_uno_data:
external: true
name: chatwoot_uno_data
chatwoot_uno_public_orion:
external: true
name: chatwoot_uno_public_orion
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Chatwoot"
fi
STACK_NAME="chatwoot_uno"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c chatwoot_uno.yaml chatwoot_uno > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do Chatwoot"
#fi
## Mensagem de Passo
echo -e "\e[97m• ESPERANDO SERVIÇO DO CHATWOOT ESTAR PRONTO \e[33m[4/6]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_chatwoot para verificar se o serviço esta online
wait_stack "chatwoot_uno"
## Mensagem de Passo
echo -e "\e[97m• REINICIANDO CHATWOOT \e[33m[5/6]\e[0m"
echo ""
sleep 1
## Aqui vamos estar migrando o banco de dados usando o comando "bundle exec rails db:chatwoot_prepare"
## Basicamente voce poderia entrar no banco de dados do chatwoot e executar o comando por lá tambem
container_name="chatwoot_uno_chatwoot_uno_app"
max_wait_time=1200
wait_interval=60
elapsed_time=0
while [ $elapsed_time -lt $max_wait_time ]; do
CONTAINER_ID=$(docker ps -q --filter "name=$container_name")
if [ -n "$CONTAINER_ID" ]; then
break
fi
sleep $wait_interval
elapsed_time=$((elapsed_time + wait_interval))
done
if [ -z "$CONTAINER_ID" ]; then
echo "O contêiner não foi encontrado após $max_wait_time segundos."
exit 1
fi
docker exec -it "$CONTAINER_ID" bundle exec rails db:chatwoot_prepare
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Executando no container: bundle exec rails db:chatwoot_prepare"
else
echo "1/1 - [ OFF ] - Executando no container: bundle exec rails db:chatwoot_prepare"
echo "Não foi possivel migrar o banco de dados"
fi
## Mensagem de Passo
echo -e "\e[97m• ATIVANDO FUNÇÕES DO SUPER ADMIN \e[33m[6/6]\e[0m"
echo ""
sleep 1
## Aqui vamos alterar um dado no postgres para liberar algumas funções ocultas no painel de super admin
wait_for_postgres
docker exec -i $CONTAINER_ID psql -U postgres <<EOF
\c chatwoot_uno;
update installation_configs set locked = false;
\q
EOF
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Modificando tabela installation_configs no postgres"
else
echo "1/1 - [ OFF ] - Modificando tabela installation_configs no postgres"
echo "Não foi possivel liberar as funções do super_admin"
fi
## Salvando informações da instalação dentro de /dados_vps/
cd dados_vps
cat > dados_chatwoot_uno <<EOL
[ CHATWOOT CLAIRTON ]
Dominio do Chatwoot: https://$url_chatwoot
Usuario: Precisa criar dentro do Chatwoot
Senha: Precisa criar dentro do Chatwoot
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ CHATWOOT CLAIRTON ]\e[0m"
echo ""
echo -e "\e[97mDominio:\e[33m https://$url_chatwoot\e[0m"
echo ""
echo -e "\e[97mUsuario:\e[33m Precisa criar dentro do Chatwoot\e[0m"
echo ""
echo -e "\e[97mSenha:\e[33m Precisa criar dentro do Chatwoot\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗██╗ ██╗ █████╗ ████████╗██╗ ██╗ ██████╗ ██████╗ ████████╗
## ██╔════╝██║ ██║██╔══██╗╚══██╔══╝██║ ██║██╔═══██╗██╔═══██╗╚══██╔══╝
## ██║ ███████║███████║ ██║ ██║ █╗ ██║██║ ██║██║ ██║ ██║
## ██║ ██╔══██║██╔══██║ ██║ ██║███╗██║██║ ██║██║ ██║ ██║
## ╚██████╗██║ ██║██║ ██║ ██║ ╚███╔███╔╝╚██████╔╝╚██████╔╝ ██║
## ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══╝╚══╝ ╚═════╝ ╚═════╝ ╚═╝
##
## ███╗ ██╗███████╗███████╗████████╗ ██████╗ ██████╗
## ████╗ ██║██╔════╝██╔════╝╚══██╔══╝██╔═══██╗██╔══██╗
## ██╔██╗ ██║█████╗ ███████╗ ██║ ██║ ██║██████╔╝
## ██║╚██╗██║██╔══╝ ╚════██║ ██║ ██║ ██║██╔══██╗
## ██║ ╚████║███████╗███████║ ██║ ╚██████╔╝██║ ██║
## ╚═╝ ╚═══╝╚══════╝╚══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝
ferramenta_chatwoot_nestor() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_chatwoot
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 1/6\e[0m"
echo -en "\e[33mDigite o Dominio para o Chatwoot (ex: chatwoot.oriondesign.art.br): \e[0m" && read -r url_chatwoot
echo ""
## Pega o nome do dominio para ser o nome da empresa
nome_empresa_chatwoot="$nome_servidor"
## Pergunta o email SMTP
echo -e "\e[97mPasso$amarelo 2/6\e[0m"
echo -en "\e[33mDigite o Email para SMTP (ex: [email protected]): \e[0m" && read -r email_admin_chatwoot
echo ""
## Define o dominio SMTP com o dominio do email
dominio_smtp_chatwoot=$(echo "$email_admin_chatwoot" | cut -d "@" -f 2)
##Pergunta o usuário do Email SMTP
echo -e "\e[97mPasso$amarelo 3/6\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o Usuário para SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r user_smtp_chatwoot
echo ""
## Pergunta a senha do SMTP
echo -e "\e[97mPasso$amarelo 4/6\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do Email (ex: @Senha123_): \e[0m" && read -r senha_email_chatwoot
echo ""
## Pergunta o Host SMTP do email
echo -e "\e[97mPasso$amarelo 5/6\e[0m"
echo -en "\e[33mDigite o Host SMTP do Email (ex: smtp.hostinger.com): \e[0m" && read -r smtp_email_chatwoot
echo ""
## Pergunta a porta SMTP do email
echo -e "\e[97mPasso$amarelo 6/6\e[0m"
echo -en "\e[33mDigite a porta SMTP do Email (ex: 465): \e[0m" && read -r porta_smtp_chatwoot
## Verifica se a porta é 465, se sim deixa o ssl true, se não, deixa false
if [ "$porta_smtp_chatwoot" -eq 465 ]; then
sobre_ssl=true
else
sobre_ssl=false
fi
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_chatwoot
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio do Chatwoot:\e[97m $url_chatwoot\e[0m"
echo ""
## Informação sobre Nome da Empresa
echo -e "\e[33mNome da Empresa:\e[97m $nome_empresa_chatwoot\e[0m"
echo ""
## Informação sobre Email de SMTP
echo -e "\e[33mEmail do SMTP:\e[97m $email_admin_chatwoot\e[0m"
echo ""
## Informação sobre Email de SMTP
echo -e "\e[33mUser do SMTP:\e[97m $user_smtp_chatwoot\e[0m"
echo ""
## Informação sobre Senha de SMTP
echo -e "\e[33mSenha do SMTP:\e[97m $senha_email_chatwoot\e[0m"
echo ""
## Informação sobre Host SMTP
echo -e "\e[33mHost SMTP:\e[97m $smtp_email_chatwoot\e[0m"
echo ""
## Informação sobre Porta SMTP
echo -e "\e[33mPorta SMTP:\e[97m $porta_smtp_chatwoot\e[0m"
echo ""
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_chatwoot
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO CHATWOOT NESTOR \e[33m[1/5]\e[0m"
echo ""
sleep 1
## Ativa a função dados para pegar os dados da vps
dados
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES E REDIS \e[33m[2/5]\e[0m"
echo ""
sleep 1
## Aqui vamos fazer uma verificação se já existe Postgres e redis instalado
## Se tiver ele vai criar um banco de dados no postgres ou perguntar se deseja apagar o que já existe e criar outro
## Verifica container postgres e cria banco no postgres
verificar_container_postgres
if [ $? -eq 0 ]; then
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "chatwoot_nestor"
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Verificando/Instalando Postgres"
else
echo "1/2 - [ OFF ] - Verificando/Instalando Postgres"
fi
## Verifica container redis
verificar_container_redis
if [ $? -eq 0 ]; then
echo ""
else
ferramenta_redis > /dev/null 2>&1
fi
if [ $? -eq 0 ]; then
echo "2/2 - [ OK ] - Verificando/Instalando Redis"
else
echo "2/2 - [ OFF ] - Verificando/Instalando Redis"
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO CHATWOOT NESTOR \e[33m[3/5]\e[0m"
echo ""
sleep 1
## Neste passo vamos estar criando a Stack yaml do Chatwoot na pasta /root/
## Isso possibilitará que o usuario consiga edita-lo posteriormente
## Depois vamos instalar o Chatwoot e verificar se esta tudo certo.
## Criando key aleatória
encryption_key=$(openssl rand -hex 16)
dados
## Criando a stack
cat > chatwoot_nestor.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
chatwoot_app:
image: francisbreit/chatwoot-n:v3.10.3-pt-br ## Versão do Chatwoot
command: bundle exec rails s -p 3000 -b 0.0.0.0
entrypoint: docker/entrypoints/rails.sh
volumes:
- chatwoot_nestor_storage:/app/storage ## Arquivos de conversa
- chatwoot_nestor_public:/app/public ## Arquivos de logos
- chatwoot_nestor_mailer:/app/app/views/devise/mailer ## Arquivos de email
- chatwoot_nestor_mailers:/app/app/views/mailers ## Arquivos de emails
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Qualquer Url com # no final
- CHATWOOT_HUB_URL=https://oriondesign.art.br/setup#
## Nome da Empresa
- INSTALLATION_NAME=$nome_empresa_chatwoot
## Secret key
- SECRET_KEY_BASE=$encryption_key
## Url Chatwoot
- FRONTEND_URL=https://$url_chatwoot
- FORCE_SSL=true
## Idioma/Localização padrão
- DEFAULT_LOCALE=pt_BR
- TZ=America/Brasil
## Google Cloud - Modifique de acordo com os seus dados (lembre-se de mudar no chatwoot_sidekiq)
#- GOOGLE_OAUTH_CLIENT_ID=369777777777-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
#- GOOGLE_OAUTH_CLIENT_SECRET=ABCDEF-GHijklmnoPqrstuvwX-yz1234567
#- GOOGLE_OAUTH_CALLBACK_URL=https://<your-server-domain>/omniauth/google_oauth2/callback
## Dados do Redis
- REDIS_URL=redis://redis:6379
## Dados do Postgres
- POSTGRES_HOST=postgres
- POSTGRES_USERNAME=postgres
- POSTGRES_PASSWORD=$senha_postgres ## Senha do postgres
- POSTGRES_DATABASE=chatwoot_nestor
## Armazenamento
- ACTIVE_STORAGE_SERVICE=local ## use s3_compatible para MinIO
#- STORAGE_BUCKET_NAME=chatwoot
#- STORAGE_ACCESS_KEY_ID=ACCESS_KEY_MINIO
#- STORAGE_SECRET_ACCESS_KEY=SECRET_KEY_MINIO
#- STORAGE_REGION=eu-south
#- STORAGE_ENDPOINT=https://s3.DOMINIO.COM
#- STORAGE_FORCE_PATH_STYLE=true
## Dados do SMTP
- MAILER_SENDER_EMAIL=$email_admin_chatwoot <$email_admin_chatwoot> ## Email SMTP
- SMTP_DOMAIN=$dominio_smtp_chatwoot ## Dominio do email
- SMTP_ADDRESS=$smtp_email_chatwoot ## Host SMTP
- SMTP_PORT=$porta_smtp_chatwoot ## Porta SMTP
- SMTP_SSL=$sobre_ssl ## Se a porta for 465 = true | Se a porta for 587 = false
- SMTP_USERNAME=$user_smtp_chatwoot ## Usuario SMTP
- SMTP_PASSWORD=$senha_email_chatwoot ## Senha do SMTP
- SMTP_AUTHENTICATION=login
- SMTP_ENABLE_STARTTLS_AUTO=true
- SMTP_OPENSSL_VERIFY_MODE=peer
- MAILER_INBOUND_EMAIL_DOMAIN=$email_admin_chatwoot ## Email SMTP
## Outras configurações
- NODE_ENV=production
- RAILS_ENV=production
- INSTALLATION_ENV=docker
- RAILS_LOG_TO_STDOUT=true
- USE_INBOX_AVATAR_FOR_BOT=true
- ENABLE_ACCOUNT_SIGNUP=false
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.chatwoot_app.rule=Host(\`$url_chatwoot\`)
- traefik.http.routers.chatwoot_app.entrypoints=websecure
- traefik.http.routers.chatwoot_app.tls.certresolver=letsencryptresolver
- traefik.http.routers.chatwoot_app.priority=1
- traefik.http.routers.chatwoot_app.service=chatwoot_app
- traefik.http.services.chatwoot_app.loadbalancer.server.port=3000
- traefik.http.services.chatwoot_app.loadbalancer.passhostheader=true
- traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https
- traefik.http.routers.chatwoot_app.middlewares=sslheader@docker
## --------------------------- ORION --------------------------- ##
chatwoot_sidekiq:
image: francisbreit/chatwoot-n:v3.10.3-pt-br ## Versão do Chatwoot
command: bundle exec sidekiq -C config/sidekiq.yml
volumes:
- chatwoot_nestor_storage:/app/storage ## Arquivos de conversa
- chatwoot_nestor_public:/app/public ## Arquivos de logos
- chatwoot_nestor_mailer:/app/app/views/devise/mailer ## Arquivos de email
- chatwoot_nestor_mailers:/app/app/views/mailers ## Arquivos de emails
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Qualquer Url com # no final
- CHATWOOT_HUB_URL=https://oriondesign.art.br/setup#
## Nome da Empresa
- INSTALLATION_NAME=$nome_empresa_chatwoot
## Secret key
- SECRET_KEY_BASE=$encryption_key
## Url Chatwoot
- FRONTEND_URL=https://$url_chatwoot
- FORCE_SSL=true
## Idioma/Localização padrão
- DEFAULT_LOCALE=pt_BR
- TZ=America/Brasil
## Google Cloud - Modifique de acordo com os seus dados (lembre-se de mudar no chatwoot_sidekiq)
#- GOOGLE_OAUTH_CLIENT_ID=369777777777-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
#- GOOGLE_OAUTH_CLIENT_SECRET=ABCDEF-GHijklmnoPqrstuvwX-yz1234567
#- GOOGLE_OAUTH_CALLBACK_URL=https://<your-server-domain>/omniauth/google_oauth2/callback
## Dados do Redis
- REDIS_URL=redis://redis:6379
## Dados do Postgres
- POSTGRES_HOST=postgres
- POSTGRES_USERNAME=postgres
- POSTGRES_PASSWORD=$senha_postgres ## Senha do postgres
- POSTGRES_DATABASE=chatwoot_nestor
## Armazenamento
- ACTIVE_STORAGE_SERVICE=local ## use s3_compatible para MinIO
#- STORAGE_BUCKET_NAME=chatwoot
#- STORAGE_ACCESS_KEY_ID=ACCESS_KEY_MINIO
#- STORAGE_SECRET_ACCESS_KEY=SECRET_KEY_MINIO
#- STORAGE_REGION=eu-south
#- STORAGE_ENDPOINT=https://s3.DOMINIO.COM
#- STORAGE_FORCE_PATH_STYLE=true
## Dados do SMTP
- MAILER_SENDER_EMAIL=$email_admin_chatwoot <$email_admin_chatwoot> ## Email SMTP
- SMTP_DOMAIN=$dominio_smtp_chatwoot ## Dominio do email
- SMTP_ADDRESS=$smtp_email_chatwoot ## Host SMTP
- SMTP_PORT=$porta_smtp_chatwoot ## Porta SMTP
- SMTP_SSL=$sobre_ssl ## Se a porta for 465 = true | Se a porta for 587 = false
- SMTP_USERNAME=$user_smtp_chatwoot ## Usuario SMTP
- SMTP_PASSWORD=$senha_email_chatwoot ## Senha do SMTP
- SMTP_AUTHENTICATION=login
- SMTP_ENABLE_STARTTLS_AUTO=true
- SMTP_OPENSSL_VERIFY_MODE=peer
- MAILER_INBOUND_EMAIL_DOMAIN=$email_admin_chatwoot ## Email SMTP
## Outras configurações
- NODE_ENV=production
- RAILS_ENV=production
- INSTALLATION_ENV=docker
- RAILS_LOG_TO_STDOUT=true
- USE_INBOX_AVATAR_FOR_BOT=true
- ENABLE_ACCOUNT_SIGNUP=false
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
## --------------------------- ORION --------------------------- ##
volumes:
chatwoot_nestor_storage:
external: true
name: chatwoot_nestor_storage
chatwoot_nestor_public:
external: true
name: chatwoot_nestor_public
chatwoot_nestor_mailer:
external: true
name: chatwoot_nestor_mailer
chatwoot_nestor_mailers:
external: true
name: chatwoot_nestor_mailers
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Chatwoot"
fi
STACK_NAME="chatwoot_nestor"
stack_editavel # > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do Chatwoot"
#fi
#docker stack deploy --prune --resolve-image always -c chatwoot_nestor.yaml chatwoot_nestor > /dev/null 2>&1
## Mensagem de Passo
echo -e "\e[97m• ESPERANDO SERVIÇO DO CHATWOOT ESTAR PRONTO \e[33m[4/5]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_chatwoot_nestor para verificar se o serviço esta online
wait_stack "chatwoot_nestor"
## Mensagem de Passo
echo -e "\e[97m• PREPARANDO BANCO DE DADOS \e[33m[5/5]\e[0m"
echo ""
sleep 1
## Aqui vamos estar migrando o banco de dados usando o comando "bundle exec rails db:chatwoot_prepare"
## Basicamente voce poderia entrar no banco de dados do chatwoot e executar o comando por lá tambem
container_name="chatwoot_nestor_chatwoot_app"
max_wait_time=1200
wait_interval=60
elapsed_time=0
while [ $elapsed_time -lt $max_wait_time ]; do
CONTAINER_ID=$(docker ps -q --filter "name=$container_name")
if [ -n "$CONTAINER_ID" ]; then
break
fi
sleep $wait_interval
elapsed_time=$((elapsed_time + wait_interval))
done
if [ -z "$CONTAINER_ID" ]; then
echo "O contêiner não foi encontrado após $max_wait_time segundos."
exit 1
fi
docker exec -it "$CONTAINER_ID" bundle exec rails db:chatwoot_prepare
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Executando no container: bundle exec rails db:chatwoot_prepare"
else
echo "1/1 - [ OFF ] - Executando no container: bundle exec rails db:chatwoot_prepare"
echo "Não foi possivel migrar o banco de dados"
fi
## Salvando informações da instalação dentro de /dados_vps/
cd dados_vps
cat > dados_chatwoot_nestor <<EOL
[ CHATWOOT NESTOR ]
Dominio do Chatwoot: https://$url_chatwoot
Usuario: Precisa criar dentro do Chatwoot
Senha: Precisa criar dentro do Chatwoot
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ CHATWOOT NESTOR ]\e[0m"
echo ""
echo -e "\e[97mDominio:\e[33m https://$url_chatwoot\e[0m"
echo ""
echo -e "\e[97mUsuario:\e[33m Precisa criar dentro do Chatwoot\e[0m"
echo ""
echo -e "\e[97mSenha:\e[33m Precisa criar dentro do Chatwoot\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██╗ ██╗███╗ ██╗ ██████╗ █████╗ ██████╗ ██╗
## ██║ ██║████╗ ██║██╔═══██╗ ██╔══██╗██╔══██╗██║
## ██║ ██║██╔██╗ ██║██║ ██║ ███████║██████╔╝██║
## ██║ ██║██║╚██╗██║██║ ██║ ██╔══██║██╔═══╝ ██║
## ╚██████╔╝██║ ╚████║╚██████╔╝ ██║ ██║██║ ██║
## ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
ferramenta_unoapi() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_unoapi
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio da UnoApi
echo -e "\e[97mPasso$amarelo 1/11\e[0m"
echo -en "\e[33mDigite o Dominio para a Uno API (ex: unoapi.oriondesign.art.br): \e[0m" && read -r url_unoapi
echo ""
##Pergunta o Dominio do Chatwoot
echo -e "\e[97mPasso$amarelo 2/11\e[0m"
echo -en "\e[33mDigite o Dominio do Chatwoot já instalado (ex: chatwoot.oriondesign.art.br): \e[0m" && read -r url_chatwoot_uno
echo ""
##Pergunta o o token do usuario
echo -e "\e[97mPasso$amarelo 3/11\e[0m"
echo -en "\e[33mDigite o token de usuario administrador do Chatwoot: \e[0m" && read -r token_chatwoot_uno
echo ""
##Pergunta se quer ignorar mensagens de grupos
echo -e "\e[97mPasso$amarelo 4/11\e[0m"
echo -en "\e[33mIgnorar mensagens de grupos (true ou false): \e[0m" && read -r op_1
echo ""
## Pergunta se quer ignorar o stauts de transmissão
echo -e "\e[97mPasso$amarelo 5/11\e[0m"
echo -en "\e[33mIgnorar Status de Transmissão (true ou false): \e[0m" && read -r op_2
echo ""
## Pergunta se quer ignorar mensagens de trasmissão
echo -e "\e[97mPasso$amarelo 6/11\e[0m"
echo -en "\e[33mIgnorar Mensagens de Trasmissão (true ou false): \e[0m" && read -r op_3
echo ""
## Pergunta se quer ignorar mensagem de status
echo -e "\e[97mPasso$amarelo 7/11\e[0m"
echo -en "\e[33mIgnorar Mensagem de Status (true ou false): \e[0m" && read -r op_4
echo ""
## Pergunta se quer ignorar as próprias mensagens
echo -e "\e[97mPasso$amarelo 8/11\e[0m"
echo -en "\e[33mIgnorar Proprias Mensagens (true ou false): \e[0m" && read -r op_5
echo ""
## Pergunta a porta SMTP do email
echo -e "\e[97mPasso$amarelo 9/11\e[0m"
echo -en "\e[33mEnviar status de conexão (true ou false): \e[0m" && read -r op_6
echo ""
## Pergunta qual é o Access Key do minio
echo -e "\e[97mPasso$amarelo 10/11\e[0m"
echo -en "\e[33mAccess Key Minio: \e[0m" && read -r S3_ACCESS_KEY
echo ""
## Pergunta qual é a Secret Key do minio
echo -e "\e[97mPasso$amarelo 11/11\e[0m"
echo -en "\e[33mSecret Key Minio: \e[0m" && read -r S3_SECRET_KEY
echo ""
## Pegando senha do rabbitMQ
pegar_user_senha_rabbitmq
## Pegando senha do minio
pegar_senha_minio
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_unoapi
## Mostra mensagem para verificar as informações
conferindo_as_info
echo -e "\e[33mDominio da Uno API:\e[97m $url_unoapi\e[0m"
echo ""
echo -e "\e[33mDominio do Chatwoot:\e[97m $url_chatwoot_uno\e[0m"
echo ""
echo -e "\e[33mToken do Administrador:\e[97m $token_chatwoot_uno\e[0m"
echo ""
echo -e "\e[33mIgnorar mensagens de grupos:\e[97m $op_1\e[0m"
echo ""
echo -e "\e[33mIgnorar Status de Transmissão:\e[97m $op_2\e[0m"
echo ""
echo -e "\e[33mIgnorar Mensagens de Trasmissão:\e[97m $op_3\e[0m"
echo ""
echo -e "\e[33mIgnorar Mensagem de Status:\e[97m $op_4\e[0m"
echo ""
echo -e "\e[33mIgnorar Proprias mensagens:\e[97m $op_5\e[0m"
echo ""
echo -e "\e[33mEnviar status de conexão:\e[97m $op_6\e[0m"
echo ""
echo -e "\e[33mAccess Key Minio:\e[97m $S3_ACCESS_KEY\e[0m"
echo ""
echo -e "\e[33mSecret Key Minio:\e[97m $S3_SECRET_KEY\e[0m"
echo ""
echo -e "\e[33mUser RabbitMq:\e[97m $user_rabbit_mqs\e[0m"
echo ""
echo -e "\e[33mSenha RabbitMq:\e[97m $senha_rabbit_mqs\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_unoapi
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DA UNOAPI \e[33m[1/3]\e[0m"
echo ""
sleep 1
## Nada nada nada.. só para aparecer a mensagem de passo..
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO UNO API \e[33m[2/3]\e[0m"
echo ""
sleep 1
## Criando key Aleatória
##key_unoapi=$(openssl rand -hex 16)
## Criando a stack
cat > unoapi.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
unoapi:
image: clairton/unoapi-cloud:latest
entrypoint: yarn cloud
volumes:
- unoapi_data:/home/u/app
networks:
- $nome_rede_interna
environment:
## Url Uno API
- BASE_URL=https://$url_unoapi
## Token Uno Api
- UNOAPI_AUTH_TOKEN=any
## Configurações da Uno API
- IGNORE_GROUP_MESSAGES=$op_1
- IGNORE_BROADCAST_STATUSES=$op_2
- IGNORE_BROADCAST_MESSAGES=$op_3
- IGNORE_STATUS_MESSAGE=$op_4
- IGNORE_OWN_MESSAGES=$op_5
- REJECT_CALLS=
- REJECT_CALLS_WEBHOOK=
- SEND_CONNECTION_STATUS=$op_6
## Sobre Webhook
- WEBHOOK_URL=https://$url_chatwoot_uno/webhooks/whatsapp
- WEBHOOK_HEADER=api_access_token
- WEBHOOK_TOKEN=$token_chatwoot_uno
## Dados do Minio/S3
- STORAGE_ENDPOINT=https://$url_s3
- STORAGE_ACCESS_KEY_ID=$S3_ACCESS_KEY
- STORAGE_SECRET_ACCESS_KEY=$S3_SECRET_KEY
- STORAGE_BUCKET_NAME=unoapi
- STORAGE_FORCE_PATH_STYLE=true
## Dados do RabbitMQ
- AMQP_URL=amqp://$user_rabbit_mqs:$senha_rabbit_mqs@rabbitmq:5672/unoapi
## Dados do Redis
- REDIS_URL=redis://redis:6379
## Outras configurações
- LOG_LEVEL=debug
- UNO_LOG_LEVEL=debug
- UNOAPI_RETRY_REQUEST_DELAY=1_000
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.unoapi.rule=Host(\`$url_unoapi\`)
- traefik.http.routers.unoapi.entrypoints=websecure
- traefik.http.routers.unoapi.tls.certresolver=letsencryptresolver
- traefik.http.services.unoapi.loadbalancer.server.port=9876
- traefik.http.routers.unoapi.priority=1
- traefik.http.services.unoapi.loadbalancer.passHostHeader=true
- traefik.http.routers.unoapi.service=unoapi
## --------------------------- ORION --------------------------- ##
volumes:
unoapi_data:
external: true
name: unoapi_data
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Uno API"
fi
STACK_NAME="unoapi"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c unoapi.yaml unoapi > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do Uno API"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_unoapi para verificar se o serviço esta online
wait_stack "unoapi_unoapi"
cd dados_vps
cat > dados_unoapi <<EOL
[ UNO API ]
Dominio do unoapi: https://$url_unoapi
Auth Token: any
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ UNO API ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_unoapi\e[0m"
echo ""
echo -e "\e[33mPing:\e[97m https://$url_unoapi/ping\e[0m"
echo ""
echo -e "\e[33mAuth Token:\e[97m any\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███╗ ██╗ █████╗ ███╗ ██╗ ██████╗ ██████╗ ███╗ ███╗ ███╗ ██╗ ██████╗ ██████╗ ███████╗███████╗
## ████╗ ██║██╔══██╗████╗ ██║ ██╔════╝██╔═══██╗████╗ ████║ ████╗ ██║██╔═══██╗██╔══██╗██╔════╝██╔════╝
## ██╔██╗ ██║╚█████╔╝██╔██╗ ██║ ██║ ██║ ██║██╔████╔██║ ██╔██╗ ██║██║ ██║██║ ██║█████╗ ███████╗
## ██║╚██╗██║██╔══██╗██║╚██╗██║ ██║ ██║ ██║██║╚██╔╝██║ ██║╚██╗██║██║ ██║██║ ██║██╔══╝ ╚════██║
## ██║ ╚████║╚█████╔╝██║ ╚████║ ╚██████╗╚██████╔╝██║ ╚═╝ ██║ ██║ ╚████║╚██████╔╝██████╔╝███████╗███████║
## ╚═╝ ╚═══╝ ╚════╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚══════╝╚══════╝
##
## ██████╗ ██████╗ ██████╗ ██╗ ██╗███████╗██████╗ █████╗ ███████╗ █████╗
## ██╔══██╗██╔═══██╗ ██╔═══██╗██║ ██║██╔════╝██╔══██╗██╔══██╗██╔════╝██╔══██╗
## ██║ ██║██║ ██║ ██║ ██║██║ ██║█████╗ ██████╔╝███████║███████╗███████║
## ██║ ██║██║ ██║ ██║▄▄ ██║██║ ██║██╔══╝ ██╔═══╝ ██╔══██║╚════██║██╔══██║
## ██████╔╝╚██████╔╝ ╚██████╔╝╚██████╔╝███████╗██║ ██║ ██║███████║██║ ██║
## ╚═════╝ ╚═════╝ ╚══▀▀═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
ferramenta_n8n_quepasa() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_n8n_quepasa
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio do N8N
echo -e "\e[97mPasso$amarelo 1/5\e[0m"
echo -en "\e[33mDigite o dominio para o N8N (ex: n8n.oriondesign.art.br): \e[0m" && read -r url_editorn8n
echo ""
##Pergunta o Dominio do Webhook
echo -e "\e[97mPasso$amarelo 2/5\e[0m"
echo -en "\e[33mDigite o dominio para o Webhook do N8N (ex: webhook.oriondesign.art.br): \e[0m" && read -r url_webhookn8n
echo ""
##Pergunta Dominio do Chatwoot
echo -e "\e[97mPasso$amarelo 3/5\e[0m"
echo -en "\e[33mDigite o dominio do Chatwoot (ex: chatwoot.oriondesign.art.br): \e[0m" && read -r dominio_chatwoot
echo ""
##Pergunta Dominio do Quepasa
echo -e "\e[97mPasso$amarelo 4/5\e[0m"
echo -en "\e[33mDigite o dominio do Quepasa (ex: quepasa.oriondesign.art.br): \e[0m" && read -r dominio_quepasa
echo ""
##Pergunta Email do Quepasa
echo -e "\e[97mPasso$amarelo 5/5\e[0m"
echo -en "\e[33mDigite o email do Quepasa (ex: [email protected]): \e[0m" && read -r email_quepasa
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_n8n_quepasa
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do N8N
echo -e "\e[33mDominio do N8N:\e[97m $url_editorn8n\e[0m"
echo ""
## Informação sobre URL do Webhook
echo -e "\e[33mDominio para o Webhook:\e[97m $url_webhookn8n\e[0m"
echo ""
## Informação sobre URL do Chatwoot
echo -e "\e[33mDominio do Chatwoot:\e[97m $dominio_chatwoot\e[0m"
echo ""
## Informação sobre URL do Quepasa
echo -e "\e[33mDominio do Quepasa:\e[97m $dominio_quepasa\e[0m"
echo ""
## Informação Email do Quepasa
echo -e "\e[33mEmail do Quepasa:\e[97m $email_quepasa\e[0m"
echo ""
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_n8n_quepasa
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO N8N \e[33m[1/4]\e[0m"
echo ""
sleep 1
## NADA
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES E REDIS \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Verifica se tem postgres, se sim pega a senha e cria um banco nele, se não instala, pega a senha e cria o banco
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "n8n_quepasa"
## Verifica se tem redis, se tiver, continua, se não tiver instala
verificar_container_redis
if [ $? -eq 0 ]; then
sleep 1
else
ferramenta_redis > /dev/null 2>&1
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO N8N \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando key Aleatória
encryption_key=$(openssl rand -hex 16)
## Criando a stack
cat > n8n_quepasa.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
n8n_quepasa_editor:
image: oriondesign/n8n-quepasa:latest ## Versão do N8N
command: start
volumes:
- n8n_quepasa_data:/home/node/.n8n/nodes
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados do postgres
- DB_TYPE=postgresdb
- DB_POSTGRESDB_DATABASE=n8n_quepasa
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_USER=postgres
- DB_POSTGRESDB_PASSWORD=$senha_postgres
## Dados do Quepasa
- C8Q_SINGLETHREAD=false
- C8Q_QUEPASAINBOXCONTROL=1001
- C8Q_GETCHATWOOTCONTACTS=1002
- C8Q_QUEPASACHATCONTROL=1003
- C8Q_CHATWOOTPROFILEUPDATE=1004
- C8Q_POSTTOWEBCALLBACK=1005
- C8Q_POSTTOCHATWOOT=1006
- C8Q_CHATWOOTTOQUEPASAGREETINGS=1007
- C8Q_QP_BOTTITLE=$nome_servidor
- C8Q_QP_DEFAULT_USER=$email_quepasa
- C8Q_CW_PUBLIC_URL=$dominio_chatwoot
- C8Q_CW_HOST=https://$dominio_chatwoot
- C8Q_QP_CONTACT=$email_quepasa
- C8Q_QUEPASA_HOST=https://$dominio_quepasa
- C8Q_N8N_HOST=https://$url_editorn8n
- C8Q_N8N_WEBHOOK=https://$url_webhookn8n
- C8Q_MSGFOR_UNKNOWN_CONTENT=! "Algum EMOJI" ou "Alguma Reação que o sistema não entende ainda ..."
- C8Q_MSGFOR_EDITED_CONTENT=⚠️ **Essa mensagem foi editada !**
- C8Q_MSGFOR_ATTACHERROR_CONTENT=** Falha ao baixar anexo !
- C8Q_MSGFOR_LOCALIZATION_CONTENT=* Localização *
- C8Q_MSGFOR_REVOKED_CONTENT=❌ Essa mensagem foi apagada !!!
- C8Q_MSGFOR_CALL_CONTENT=\u2699 O usuário requisitou uma chamada de voz !
## Encryption Key
- N8N_ENCRYPTION_KEY=$encryption_key
## Url do N8N
- N8N_HOST=$url_editorn8n
- N8N_EDITOR_BASE_URL=https://$url_editorn8n/
- WEBHOOK_URL=https://$url_webhookn8n/
- N8N_PROTOCOL=https
## Modo do Node
- NODE_ENV=production
## Modo de execução (deletar caso deseje em modo regular)
- EXECUTIONS_MODE=queue
## Dados do Redis
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- QUEUE_BULL_REDIS_DB=2
- NODE_FUNCTION_ALLOW_EXTERNAL=moment,lodash,moment-with-locales
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=336
## Timezone
- GENERIC_TIMEZONE=America/Sao_Paulo
- TZ=America/Sao_Paulo
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.n8n_quepasa_editor.rule=Host(\`$url_editorn8n\`)
- traefik.http.routers.n8n_quepasa_editor.entrypoints=websecure
- traefik.http.routers.n8n_quepasa_editor.priority=1
- traefik.http.routers.n8n_quepasa_editor.tls.certresolver=letsencryptresolver
- traefik.http.routers.n8n_quepasa_editor.service=n8n_quepasa_editor
- traefik.http.services.n8n_quepasa_editor.loadbalancer.server.port=5678
- traefik.http.services.n8n_quepasa_editor.loadbalancer.passHostHeader=1
## --------------------------- ORION --------------------------- ##
n8n_quepasa_webhook:
image: oriondesign/n8n-quepasa:latest ## Versão do N8N
command: webhook
volumes:
- n8n_quepasa_data:/home/node/.n8n/nodes
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados do postgres
- DB_TYPE=postgresdb
- DB_POSTGRESDB_DATABASE=n8n_quepasa
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_USER=postgres
- DB_POSTGRESDB_PASSWORD=$senha_postgres
## Dados do Quepasa
- C8Q_SINGLETHREAD=false
- C8Q_QUEPASAINBOXCONTROL=1001
- C8Q_GETCHATWOOTCONTACTS=1002
- C8Q_QUEPASACHATCONTROL=1003
- C8Q_CHATWOOTPROFILEUPDATE=1004
- C8Q_POSTTOWEBCALLBACK=1005
- C8Q_POSTTOCHATWOOT=1006
- C8Q_CHATWOOTTOQUEPASAGREETINGS=1007
- C8Q_QP_BOTTITLE=$nome_servidor
- C8Q_QP_DEFAULT_USER=$email_quepasa
- C8Q_CW_PUBLIC_URL=$dominio_chatwoot
- C8Q_CW_HOST=https://$dominio_chatwoot
- C8Q_QP_CONTACT=$email_quepasa
- C8Q_QUEPASA_HOST=https://$dominio_quepasa
- C8Q_N8N_HOST=https://$url_editorn8n
- C8Q_N8N_WEBHOOK=https://$url_webhookn8n
- C8Q_MSGFOR_UNKNOWN_CONTENT=! "Algum EMOJI" ou "Alguma Reação que o sistema não entende ainda ..."
- C8Q_MSGFOR_EDITED_CONTENT=⚠️ **Essa mensagem foi editada !**
- C8Q_MSGFOR_ATTACHERROR_CONTENT=** Falha ao baixar anexo !
- C8Q_MSGFOR_LOCALIZATION_CONTENT=* Localização *
- C8Q_MSGFOR_REVOKED_CONTENT=❌ Essa mensagem foi apagada !!!
- C8Q_MSGFOR_CALL_CONTENT=\u2699 O usuário requisitou uma chamada de voz !
## Encryption Key
- N8N_ENCRYPTION_KEY=$encryption_key
## Url do N8N
- N8N_HOST=$url_editorn8n
- N8N_EDITOR_BASE_URL=https://$url_editorn8n/
- WEBHOOK_URL=https://$url_webhookn8n/
- N8N_PROTOCOL=https
## Modo do Node
- NODE_ENV=production
## Modo de execução (deletar caso deseje em modo regular)
- EXECUTIONS_MODE=queue
## Dados do Redis
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- QUEUE_BULL_REDIS_DB=3
- NODE_FUNCTION_ALLOW_EXTERNAL=moment,lodash,moment-with-locales
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=336
## Timezone
- GENERIC_TIMEZONE=America/Sao_Paulo
- TZ=America/Sao_Paulo
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.n8n_quepasa_webhook.rule=(Host(\`$url_webhookn8n\`))
- traefik.http.routers.n8n_quepasa_webhook.entrypoints=websecure
- traefik.http.routers.n8n_quepasa_webhook.priority=1
- traefik.http.routers.n8n_quepasa_webhook.tls.certresolver=letsencryptresolver
- traefik.http.routers.n8n_quepasa_webhook.service=n8n_quepasa_webhook
- traefik.http.services.n8n_quepasa_webhook.loadbalancer.server.port=5678
- traefik.http.services.n8n_quepasa_webhook.loadbalancer.passHostHeader=1
## --------------------------- ORION --------------------------- ##
n8n_quepasa_worker:
image: oriondesign/n8n-quepasa:latest ## Versão do N8N
command: worker --concurrency=10
volumes:
- n8n_quepasa_data:/home/node/.n8n/nodes
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados do postgres
- DB_TYPE=postgresdb
- DB_POSTGRESDB_DATABASE=n8n_quepasa
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_USER=postgres
- DB_POSTGRESDB_PASSWORD=$senha_postgres
## Dados do Quepasa
- C8Q_SINGLETHREAD=false
- C8Q_QUEPASAINBOXCONTROL=1001
- C8Q_GETCHATWOOTCONTACTS=1002
- C8Q_QUEPASACHATCONTROL=1003
- C8Q_CHATWOOTPROFILEUPDATE=1004
- C8Q_POSTTOWEBCALLBACK=1005
- C8Q_POSTTOCHATWOOT=1006
- C8Q_CHATWOOTTOQUEPASAGREETINGS=1007
- C8Q_QP_BOTTITLE=$nome_servidor
- C8Q_QP_DEFAULT_USER=$email_quepasa
- C8Q_CW_PUBLIC_URL=$dominio_chatwoot
- C8Q_CW_HOST=https://$dominio_chatwoot
- C8Q_QP_CONTACT=$email_quepasa
- C8Q_QUEPASA_HOST=https://$dominio_quepasa
- C8Q_N8N_HOST=https://$url_editorn8n
- C8Q_N8N_WEBHOOK=https://$url_webhookn8n
- C8Q_MSGFOR_UNKNOWN_CONTENT=! "Algum EMOJI" ou "Alguma Reação que o sistema não entende ainda ..."
- C8Q_MSGFOR_EDITED_CONTENT=⚠️ **Essa mensagem foi editada !**
- C8Q_MSGFOR_ATTACHERROR_CONTENT=** Falha ao baixar anexo !
- C8Q_MSGFOR_LOCALIZATION_CONTENT=* Localização *
- C8Q_MSGFOR_REVOKED_CONTENT=❌ Essa mensagem foi apagada !!!
- C8Q_MSGFOR_CALL_CONTENT=\u2699 O usuário requisitou uma chamada de voz !
## Encryption Key
- N8N_ENCRYPTION_KEY=$encryption_key
## Url do N8N
- N8N_HOST=$url_editorn8n
- N8N_EDITOR_BASE_URL=https://$url_editorn8n/
- WEBHOOK_URL=https://$url_webhookn8n/
- N8N_PROTOCOL=https
## Modo do Node
- NODE_ENV=production
## Modo de execução (deletar caso deseje em modo regular)
- EXECUTIONS_MODE=queue
## Dados do Redis
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- QUEUE_BULL_REDIS_DB=2
- NODE_FUNCTION_ALLOW_EXTERNAL=moment,lodash,moment-with-locales
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=336
## Timezone
- GENERIC_TIMEZONE=America/Sao_Paulo
- TZ=America/Sao_Paulo
## --------------------------- ORION --------------------------- ##
volumes:
n8n_quepasa_data:
external: true
name: n8n_quepasa_data
networks:
$nome_rede_interna:
name: $nome_rede_interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do N8N Quepasa"
fi
STACK_NAME="n8n_quepasa"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c n8n_quepasa.yaml n8n_quepasa > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do N8N Quepasa"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_n8n para verificar se o serviço esta online
wait_stack "n8n_quepasa"
cd dados_vps
cat > dados_n8n_quepasa <<EOL
[ N8N QUEPASA ]
Dominio do N8N: https://$url_editorn8n
Dominio do N8N: https://$url_webhookn8n
Email: Precisa criar no primeiro acesso do N8N
Senha: Precisa criar no primeiro acesso do N8N
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ N8N QUEPASA ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_editorn8n\e[0m"
echo ""
echo -e "\e[33mEmail:\e[97m Precisa criar no primeiro acesso do N8N\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do N8N\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██╗ ██╗███████╗██████╗ █████╗ ███████╗ █████╗
## ██╔═══██╗██║ ██║██╔════╝██╔══██╗██╔══██╗██╔════╝██╔══██╗
## ██║ ██║██║ ██║█████╗ ██████╔╝███████║███████╗███████║
## ██║▄▄ ██║██║ ██║██╔══╝ ██╔═══╝ ██╔══██║╚════██║██╔══██║
## ╚██████╔╝╚██████╔╝███████╗██║ ██║ ██║███████║██║ ██║
## ╚══▀▀═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
ferramenta_quepasa() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_quepasa
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/2\e[0m"
echo -en "\e[33mDigite o dominio para o Quepasa (ex: quepasa.oriondesign.art.br): \e[0m" && read -r url_quepasa
echo ""
##Pergunta o email para a ferramenta
echo -e "\e[97mPasso$amarelo 2/2\e[0m"
echo -en "\e[33mDigite o email para o Quepasa (ex: [email protected]): \e[0m" && read -r email_quepasa
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_quepasa
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do quepasa
echo -e "\e[33mDominio do Quepasa:\e[97m $url_quepasa\e[0m"
echo ""
## Informação sobre email do quepasa
echo -e "\e[33mEmail do Quepasa:\e[97m $email_quepasa\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_minio
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO QUEPASA \e[33m[1/3]\e[0m"
echo ""
sleep 1
## NADA
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO QUEPASA \e[33m[2/3]\e[0m"
echo ""
sleep 1
## Criando a stack
key_quepasa=$(openssl rand -hex 16)
cat > quepasa.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
quepasa:
image: deividms/quepasa:v3.24.517.1231 ## Imagem/versão do Quepasa
volumes:
- quepasa_volume:/opt/quepasa
networks:
- $nome_rede_interna
environment:
## Dados de acesso
- DOMAIN=$url_quepasa
## Email Quepasa
- EMAIL=$email_quepasa
- QUEPASA_BASIC_AUTH_USER=$email_quepasa
- QUEPASA_BASIC_AUTH_PASSWORD=$email_quepasa
## Titulo no celular
- APP_TITLE=OrionDesign ## Mude aqui o nome que vai aparecer no celular.
## TimeZone
- TZ=America/Sao_Paulo
## Configurações para o WhatsApp
- GROUPS=true
- BROADCASTS=false
- READRECEIPTS=forcedfalse
- CALLS=true
- READUPDATE=false
- LOGLEVEL=DEBUG
## Configurações quepasa
- QUEPASA_HOST_NAME=Quepasa
- QUEPASA_MEMORY_LIMIT=4096M
- WEBSOCKETSSL=true
- REMOVEDIGIT9=true
- SIGNING_SECRET=$key_quepasa
## Webhook
#- WEBHOOK_QUEPASA=webhook.oriondesign.art.br/webhook/quepasa
#- WEBHOOK_TESTE_QUEPASA=n8n.oriondesign.art.br/webhook-test/quepasa
## Portas
- QUEPASA_EXTERNAL_PORT=31000
- QUEPASA_INTERNAL_PORT=31000
- WEBAPIPORT=31000
## Outras configurações
- DEBUGREQUESTS=false
- SYNOPSISLENGTH=500
- METRICS_HOST=
- METRICS_PORT=9392
- MIGRATIONS=/builder/migrations
- DEBUGJSONMESSAGES=false
- HTTPLOGS=false
## WHATSMEOW SERVICE
- WHATSMEOW_LOGLEVEL=WARN
- WHATSMEOW_DBLOGLEVEL=WARN
## Env Mode
- APP_ENV=production
- NODE_ENV=production
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "2"
memory: 2096M
labels:
- traefik.enable=true
- traefik.http.routers.quepasa.rule=Host(\`$url_quepasa\`)
- traefik.http.routers.quepasa.tls=true
- traefik.http.routers.quepasa.entrypoints=web,websecure
- traefik.http.routers.quepasa.tls.certresolver=letsencryptresolver
- traefik.http.routers.quepasa.service=quepasa
- traefik.http.routers.quepasa.priority=1
- traefik.http.middlewares.quepasa.headers.SSLRedirect=true
- traefik.http.middlewares.quepasa.headers.STSSeconds=315360000
- traefik.http.middlewares.quepasa.headers.browserXSSFilter=true
- traefik.http.middlewares.quepasa.headers.contentTypeNosniff=true
- traefik.http.middlewares.quepasa.headers.forceSTSHeader=true
- traefik.http.middlewares.quepasa.headers.SSLHost=\${QUEPASA_HOST}
- traefik.http.middlewares.quepasa.headers.STSIncludeSubdomains=true
- traefik.http.middlewares.quepasa.headers.STSPreload=true
- traefik.http.services.quepasa.loadbalancer.server.port=31000
- traefik.http.services.quepasa.loadbalancer.passHostHeader=true
## --------------------------- ORION --------------------------- ##
volumes:
quepasa_volume:
external: true
name: quepasa_volume
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Quepasa"
fi
STACK_NAME="quepasa"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c quepasa.yaml quepasa > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do Quepasa"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_quepasa para verificar se o serviço esta online
wait_stack "quepasa"
cd dados_vps
cat > dados_quepasa <<EOL
[ QUEPASA ]
Dominio do quepasa: https://$url_quepasa
Email: $email_quepasa
Usuario: Precisa de criar ao entrar no /setup
Senha: Precisa de criar ao entrar no /setup
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ QUEPASA ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_quepasa\e[0m"
echo ""
echo -e "\e[33mEmail:\e[97m $email_quepasa\e[0m"
echo ""
echo -e "\e[33mUrl Setup:\e[97m https://$url_quepasa/setup\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa de criar ao entrar no setup\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa de criar ao entrar no setup\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██╗███████╗██╗ ██╗ █████╗ ██╗
## ██╔══██╗██║██╔════╝╚██╗ ██╔╝██╔══██╗██║
## ██║ ██║██║█████╗ ╚████╔╝ ███████║██║
## ██║ ██║██║██╔══╝ ╚██╔╝ ██╔══██║██║
## ██████╔╝██║██║ ██║██╗██║ ██║██║
## ╚═════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝
ferramenta_dify() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_dify
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio do Dify AI
echo -e "\e[97mPasso$amarelo 1/8\e[0m"
echo -en "\e[33mDigite o dominio para o Dify AI (ex: dify.oriondesign.art.br): \e[0m" && read -r url_dify
echo ""
##Pergunta o Dominio do Qdrant
#read -r ip _ <<<$(hostname -I)
#echo -e "\e[97mPasso$amarelo 2/10\e[0m"
#echo -en "\e[33mDigite o dominio do Qdrant (ex: http://$ip ou http://qdrant.oriondesign.art.br): \e[0m" && read -r url_quedrant
#echo ""
##Pergunta a Api Key do Qdrant
#key_dify_rand=$(openssl rand -hex 16)
#echo -e "\e[97mPasso$amarelo 3/10\e[0m"
#echo -en "\e[33mDigite a Api Key do Qdrant (ex: $key_dify_rand): \e[0m" && read -r apikey_qdrant
#echo ""
##Pergunta o Email SMTP
echo -e "\e[97mPasso$amarelo 2/8\e[0m"
echo -en "\e[33mDigite o Email para SMTP (ex: [email protected]): \e[0m" && read -r email_dify
echo ""
##Pergunta o usuário do Email SMTP
echo -e "\e[97mPasso$amarelo 3/8\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o Usuário para SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r user_email_dify
echo ""
## Pergunta a senha do SMTP
echo -e "\e[97mPasso$amarelo 4/8\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do Email (ex: @Senha123_): \e[0m" && read -r senha_email_dify
echo ""
## Pergunta o Host SMTP do email
echo -e "\e[97mPasso$amarelo 5/8\e[0m"
echo -en "\e[33mDigite o Host SMTP do Email (ex: smtp.hostinger.com): \e[0m" && read -r smtp_email_dify
echo ""
## Pergunta a porta SMTP do email
echo -e "\e[97mPasso$amarelo 6/9\e[0m"
echo -en "\e[33mDigite a porta SMTP do Email (ex: 465): \e[0m" && read -r porta_smtp_dify
echo ""
## Pergunta qual é o Access Key do minio
echo -e "\e[97mPasso$amarelo 7/8\e[0m"
echo -en "\e[33mAccess Key Minio: \e[0m" && read -r S3_ACCESS_KEY
echo ""
## Pergunta qual é a Secret Key do minio
echo -e "\e[97mPasso$amarelo 8/8\e[0m"
echo -en "\e[33mSecret Key Minio: \e[0m" && read -r S3_SECRET_KEY
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_dify
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do Builder
echo -e "\e[33mDominio do Dify AI:\e[97m $url_dify\e[0m"
echo ""
## Informação sobre URL do Viewer
#echo -e "\e[33mDominio do Qdrant:\e[97m $url_quedrant\e[0m"
#echo ""
## Informação sobre a versão da ferramenta
#echo -e "\e[33mApi Key Qdrant:\e[97m $apikey_qdrant\e[0m"
#echo ""
## Informação sobre Email
echo -e "\e[33mEmail do SMTP:\e[97m $email_dify\e[0m"
echo ""
## Informação sobre UserSMTP
echo -e "\e[33mUser do SMTP:\e[97m $user_email_dify\e[0m"
echo ""
## Informação sobre Senha do Email
echo -e "\e[33mSenha do Email:\e[97m $senha_email_dify\e[0m"
echo ""
## Informação sobre Host SMTP
echo -e "\e[33mHost SMTP do Email:\e[97m $smtp_email_dify\e[0m"
echo ""
## Informação sobre Porta SMTP
echo -e "\e[33mPorta SMTP do Email:\e[97m $porta_smtp_dify\e[0m"
echo ""
## Informação sobre Access Key
echo -e "\e[33mAccess Key Minio:\e[97m $S3_ACCESS_KEY\e[0m"
echo ""
## Informação sobre Secret Key
echo -e "\e[33mSecret Key Minio:\e[97m $S3_SECRET_KEY\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_dify
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO DIFY \e[33m[1/4]\e[0m"
echo ""
sleep 1
cd
git clone https://github.com/langgenius/dify.git > /dev/null 2>&1
#wget https://raw.githubusercontent.com/langgenius/dify/main/docker/nginx/nginx.conf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "1/3 - [ OK ] - Baixando arquivos"
else
echo "1/3 - [ OFF ] - Baixando arquivos"
fi
sudo mv /root/dify/docker/nginx /root/nginx > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "2/3 - [ OK ] - Extraindo arquivos"
else
echo "2/3 - [ OFF ] - Extraindo arquivos"
fi
rm -r dify
if [ $? -eq 0 ]; then
echo "3/3 - [ OK ] - Removendo sobras"
else
echo "3/3 - [ OFF ] - Removendo sobras"
fi
cd
cd
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES E REDIS \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Aqui vamos fazer uma verificação se já existe Postgres e redis instalado
## Se tiver ele vai criar um banco de dados no postgres ou perguntar se deseja apagar o que já existe e criar outro
## Verifica container postgres e cria banco no postgres
verificar_container_postgres
if [ $? -eq 0 ]; then
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "dify"
verificar_container_redis
if [ $? -eq 0 ]; then
sleep 1
else
ferramenta_redis > /dev/null 2>&1
fi
## Mensagem de Passo
echo -e "\e[97m• PEGANDO DADOS MINIO \e[33m[3/4]\e[0m"
echo ""
sleep 1
pegar_senha_minio
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Pegando senha do MinIO"
else
echo "1/2 - [ OFF ] - Pegando senha do MinIO"
echo "Não foi possivel pegar a senha do minio"
fi
pegar_link_s3
if [ $? -eq 0 ]; then
echo "2/2 - [ OK ] - Pegando Url S3 do MinIO"
else
echo "2/2 - [ OFF ] - Pegando Url S3 do MinIO"
echo "Não foi possivel pegar o link do S3"
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO DIFY \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Criando key Aleatória
secret_key=$(openssl rand -hex 16)
token_weaviate=$(openssl rand -hex 16)
sandbox_key=$(openssl rand -hex 16)
## Criando a stack
cat > dify.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
api:
image: langgenius/dify-api:latest ## Versão do Dify
volumes:
- dify_storage:/app/api/storage
networks:
- $nome_rede_interna
environment:
## Modo da execução
- MODE=api
## Logs
- LOG_LEVEL=INFO
## Secret Key
- SECRET_KEY=$secret_key
## Outras Url (vazio = mesmo do APP_WEB_URL)
- CONSOLE_WEB_URL=
- INIT_PASSWORD=
- CONSOLE_API_URL=
- SERVICE_API_URL=
- FILES_URL=
## Url Dify
- APP_WEB_URL=https://$url_dify
## Dados Postgres
- MIGRATION_ENABLED=true
- DB_USERNAME=postgres
- DB_PASSWORD=$senha_postgres
- DB_HOST=postgres
- DB_PORT=5432
- DB_DATABASE=dify
## Dados Redis
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_USERNAME=
- REDIS_PASSWORD=
- REDIS_USE_SSL=false
- REDIS_DB=0
- CELERY_BROKER_URL=redis://redis:6379/1
## Liberar acesso a todos os ip
- WEB_API_CORS_ALLOW_ORIGINS=*
- CONSOLE_CORS_ALLOW_ORIGINS=*
## Dados sobre armazenamento s3
- STORAGE_TYPE=local
- STORAGE_LOCAL_PATH=storage
- S3_ENDPOINT=$url_s3
- S3_BUCKET_NAME=dify
- S3_ACCESS_KEY=$S3_ACCESS_KEY
- S3_SECRET_KEY=$S3_SECRET_KEY
## Configurações do Sandbox
- CODE_EXECUTION_ENDPOINT=http://sandbox:8194
- CODE_EXECUTION_API_KEY=$sandbox_key
- CODE_MAX_NUMBER=9223372036854775807
- CODE_MIN_NUMBER=-9223372036854775808
- CODE_MAX_STRING_LENGTH=80000
- TEMPLATE_TRANSFORM_MAX_LENGTH=80000
- CODE_MAX_STRING_ARRAY_LENGTH=30
- CODE_MAX_OBJECT_ARRAY_LENGTH=30
- CODE_MAX_NUMBER_ARRAY_LENGTH=1000
## Dados Weaviate
- VECTOR_STORE=weaviate
- WEAVIATE_ENDPOINT=http://weaviate:8080
- WEAVIATE_API_KEY=$token_weaviate
- WEAVIATE_CLIENT_TIMEOUT=20
## Dados do Email
- MAIL_TYPE=smtp
- MAIL_DEFAULT_SEND_FROM=$email_dify (eg=no-reply $email_dify)
- SMTP_SERVER=$smtp_email_dify
- SMTP_PORT=$porta_smtp_dify
- SMTP_USERNAME=$user_email_dify
- SMTP_PASSWORD=$senha_email_dify
## Sentry
- SENTRY_DSN=
- SENTRY_TRACES_SAMPLE_RATE=1.0
- SENTRY_PROFILES_SAMPLE_RATE=1.0
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
## --------------------------- ORION --------------------------- ##
worker:
image: langgenius/dify-api:latest ## Versão do Dify
volumes:
- dify_storage:/app/api/storage
networks:
- $nome_rede_interna
environment:
## Modo da execução
- MODE=worker
## Logs
- LOG_LEVEL=INFO
## Secret Key
- SECRET_KEY=$secret_key
## Dados Postgres
- DB_USERNAME=postgres
- DB_PASSWORD=$senha_postgres
- DB_HOST=postgres
- DB_PORT=5432
- DB_DATABASE=dify
## Dados Redis
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_USERNAME=
- REDIS_PASSWORD=
- REDIS_USE_SSL=false
- REDIS_DB=0
- CELERY_BROKER_URL=redis://redis:6379/1
## Dados Weaviate
- STORAGE_TYPE=local
- STORAGE_LOCAL_PATH=storage
- VECTOR_STORE=weaviate
- WEAVIATE_ENDPOINT=http://weaviate:8080
- WEAVIATE_API_KEY=$token_weaviate
- WEAVIATE_CLIENT_TIMEOUT=20
## Dados do Email
- MAIL_TYPE=smtp
- MAIL_DEFAULT_SEND_FROM=$email_dify (eg=no-reply $email_dify)
- SMTP_SERVER=$smtp_email_dify
- SMTP_PORT=$porta_smtp_dify
- SMTP_USERNAME=$user_email_dify
- SMTP_PASSWORD=$senha_email_dify
depends_on:
- postgres
- redis
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
## --------------------------- ORION --------------------------- ##
web:
image: langgenius/dify-web:latest ## Versão do Dify
networks:
- $nome_rede_interna
environment:
## Tipo da Edição
- EDITION=SELF_HOSTED
- CONSOLE_API_URL=
## Url Dify
- APP_API_URL=https://$url_dify
## Sentry
- SENTRY_DSN=
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
## --------------------------- ORION --------------------------- ##
sandbox:
image: langgenius/dify-sandbox:latest
networks:
- $nome_rede_interna
environment:
- API_KEY=$sandbox_key
- GIN_MODE=release
- WORKER_TIMEOUT=15
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
## --------------------------- ORION --------------------------- ##
weaviate:
image: semitechnologies/weaviate:latest ## Versão do Weaviate
volumes:
- dify_weaviate:/var/lib/weaviate
networks:
- $nome_rede_interna
environment:
## Configurações Gerais
- QUERY_DEFAULTS_LIMIT=25
- AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=false
- PERSISTENCE_DATA_PATH=/var/lib/weaviate
- DEFAULT_VECTORIZER_MODULE=none
- CLUSTER_HOSTNAME=node1
## Dados de Autenticação
- AUTHENTICATION_APIKEY_ENABLED=true
- AUTHENTICATION_APIKEY_ALLOWED_KEYS=$token_weaviate
- [email protected]
- AUTHORIZATION_ADMINLIST_ENABLED=true
- [email protected]
## Telemetria
- DISABLE_TELEMETRY=true
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 2048M
## --------------------------- ORION --------------------------- ##
nginx:
image: nginx:latest ## Versão do nginx
entrypoint: ["sh", "-c", "chmod +x /docker-entrypoint.sh && /docker-entrypoint.sh"]
volumes:
- /root/nginx/nginx.conf.template:/etc/nginx/nginx.conf.template
- /root/nginx/proxy.conf.template:/etc/nginx/proxy.conf.template
- /root/nginx/conf.d:/etc/nginx/conf.d
- /root/nginx/docker-entrypoint.sh:/docker-entrypoint.sh
- /root/nginx/ssl:/etc/ssl
networks:
- $nome_rede_interna
environment:
- NGINX_SSL_CERT_FILENAME=dify.crt
- NGINX_SSL_CERT_KEY_FILENAME=dify.key
- NGINX_SSL_PROTOCOLS=TLSv1.1 TLSv1.2 TLSv1.3
- NGINX_WORKER_PROCESSES=auto
- NGINX_CLIENT_MAX_BODY_SIZE=15M
- NGINX_KEEPALIVE_TIMEOUT=65
- NGINX_PROXY_READ_TIMEOUT=3600s
- NGINX_PROXY_SEND_TIMEOUT=3600s
- NGINX_SERVER_NAME=_
- NGINX_PORT=80
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 2048M
labels:
- traefik.enable=true
- traefik.http.routers.nginx.rule=Host(\`$url_dify\`) ## Url do Dify
- traefik.http.routers.nginx.entrypoints=websecure
- traefik.http.routers.nginx.tls.certresolver=letsencryptresolver
- traefik.http.services.nginx.loadbalancer.server.port=80
- traefik.http.services.nginx.loadbalancer.passHostHeader=true
- traefik.http.routers.nginx.service=nginx
## --------------------------- ORION --------------------------- ##
volumes:
dify_storage:
external: true
name: dify_storage
dify_weaviate:
external: true
name: dify_weaviate
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Dify Ai"
fi
STACK_NAME="dify"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c dify.yaml dify > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do Dify Ai"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_dify para verificar se o serviço esta online
wait_stack "dify"
cd dados_vps
cat > dados_dify <<EOL
[ DIFY AI ]
Dominio do dify: https://$url_dify
Email: Precisa de criar na primeira vez que entrar no Dify AI
Senha: Precisa de criar na primeira vez que entrar no Dify AI
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ DIFY AI ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_dify\e[0m"
echo ""
echo -e "\e[33mEmail:\e[97m Precisa de criar na primeira vez que entrar no Dify AI.\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa de criar na primeira vez que entrar no Dify AI.\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██╗ ██╗ █████╗ ███╗ ███╗ █████╗
## ██╔═══██╗██║ ██║ ██╔══██╗████╗ ████║██╔══██╗
## ██║ ██║██║ ██║ ███████║██╔████╔██║███████║
## ██║ ██║██║ ██║ ██╔══██║██║╚██╔╝██║██╔══██║
## ╚██████╔╝███████╗███████╗██║ ██║██║ ╚═╝ ██║██║ ██║
## ╚═════╝ ╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝
ferramenta_ollama() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_ollama
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/2\e[0m"
echo -en "\e[33mDigite o dominio para o WebUI Ollama (ex: ollama.oriondesign.art.br): \e[0m" && read -r url_ollama
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 2/2\e[0m"
echo -en "\e[33mDigite o dominio para a API Ollama (ex: apiollama.oriondesign.art.br): \e[0m" && read -r url_apiollama
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_ollama
## Mostra mensagem para verificar as informações
conferindo_as_info
##Informação do Dominio
echo -e "\e[33mDominio para o WebUI Ollama:\e[97m $url_ollama\e[0m"
echo ""
##Informação do Dominio
echo -e "\e[33mDominio para o API Ollama:\e[97m $url_apiollama\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_ollama
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO OLLAMA \e[33m[1/4]\e[0m"
echo ""
sleep 1
## NADA
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO OLLAMA \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > ollama.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
ollama:
image: ollama/ollama:latest
volumes:
- ollama_data:/root/.ollama
networks:
- $nome_rede_interna
#ports:
# - 11434:11434
environment:
- OLLAMA_HOST=0.0.0.0
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=1
- traefik.http.routers.ollama.rule=Host(\`$url_apiollama\`)
- traefik.http.routers.ollama.entrypoints=websecure
- traefik.http.routers.ollama.priority=1
- traefik.http.routers.ollama.tls.certresolver=letsencryptresolver
- traefik.http.routers.ollama.service=ollama
- traefik.http.services.ollama.loadbalancer.server.port=11434
- traefik.http.services.ollama.loadbalancer.passHostHeader=1
## --------------------------- ORION --------------------------- ##
ollamaweb:
image: ghcr.io/ollama-webui/ollama-webui:main
volumes:
- ollama_web:/app/backend/data
networks:
- $nome_rede_interna
#ports:
# - 8085:8080
environment:
- OLLAMA_API_BASE_URL=https://$url_apiollama/api
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.ollamaweb.rule=Host(\`$url_ollama\`)
- traefik.http.routers.ollamaweb.entrypoints=websecure
- traefik.http.routers.ollamaweb.priority=1
- traefik.http.routers.ollamaweb.tls.certresolver=letsencryptresolver
- traefik.http.routers.ollamaweb.service=ollamaweb
- traefik.http.services.ollamaweb.loadbalancer.server.port=8080
- traefik.http.services.ollamaweb.loadbalancer.passHostHeader=true
## --------------------------- ORION --------------------------- ##
volumes:
ollama_data:
external: true
name: ollama_data
ollama_web:
external: true
name: ollama_web
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Ollama"
fi
STACK_NAME="ollama"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c ollama.yaml ollama > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do Ollama"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_nocodb para verificar se o serviço esta online
wait_stack "ollama"
cd dados_vps
cat > dados_ollama <<EOL
[ OLLAMA ]
Dominio do WebUI Ollama: https://$url_ollama
Dominio da API Ollama: https://$url_apiollama/api
Ollama WebUI: Precisa criar no primeiro acesso do Ollama
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ Ollama ]\e[0m"
echo ""
echo -e "\e[33mOllama WebUI:\e[97m https://$url_ollama\e[0m"
echo ""
echo -e "\e[33mOllama API:\e[97m https://$url_apiollama/api\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
ferramenta_remover_stack() {
while true; do
# Listar as stacks ativas no Docker Swarm com números
clear
nome_remover_stack
echo "Stacks ativas:"
echo ""
docker stack ls --format "table {{.Name}}" | awk 'NR>1 { if ($1 == "portainer" || $1 == "traefik") {print "[ \033[0;31m" NR-1" \033[0m] - \033[0;31m" toupper(substr($0, 1, 1)) substr($0, 2) " (CUIDADO) \033[0m" } else {print "[ " NR-1" ] - " toupper(substr($0, 1, 1)) substr($0, 2)} }'
echo ""
# Solicitar ao usuário que escolha uma stack para remover ou sair
read -p "Digite o número da stack que você deseja remover (ou digite '0' para voltar): " user_input
# Verificar se o usuário deseja sair
if [ "$user_input" == "0" ]; then
echo "Saindo do script."
break
fi
# Obter o nome da stack com base no número fornecido
stack_name=$(docker stack ls --format "{{.Name}}" | sed -n "${user_input}p")
# Verificar se a stack existe
if docker stack ps "$stack_name" &> /dev/null; then
# Remover a stack
docker stack rm "$stack_name"
echo "Removendo a stack $stack_name..."
else
echo "A stack $stack_name não foi encontrada."
fi
done
}
## █████╗ ███████╗███████╗██╗███╗ ██╗███████╗
## ██╔══██╗██╔════╝██╔════╝██║████╗ ██║██╔════╝
## ███████║█████╗ █████╗ ██║██╔██╗ ██║█████╗
## ██╔══██║██╔══╝ ██╔══╝ ██║██║╚██╗██║██╔══╝
## ██║ ██║██║ ██║ ██║██║ ╚████║███████╗
## ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝
ferramenta_affine() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_affine
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/7\e[0m"
echo -en "\e[33mDigite o dominio para o Affine (ex: affine.oriondesign.art.br): \e[0m" && read -r url_affine
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 2/7\e[0m"
echo -en "\e[33mDigite o Email de Admin (ex: [email protected]): \e[0m" && read -r email_affine
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 3/7\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$"
echo -en "\e[33mDigite a Senha de Admin (ex: @Senha123_): \e[0m" && read -r senha_affine
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 4/7\e[0m"
echo -en "\e[33mDigite a Email SMTP (ex: [email protected]): \e[0m" && read -r email_smtp_affine
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 5/7\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP (ex: @Senha123_): \e[0m" && read -r senha_smtp_affine
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 6/7\e[0m"
echo -en "\e[33mDigite o Host SMTP (ex: smtp.hostinger.com): \e[0m" && read -r host_smtp_affine
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 7/7\e[0m"
echo -en "\e[33mDigite a Porta SMTP (ex: 465): \e[0m" && read -r porta_smtp_affine
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_affine
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do affine
echo -e "\e[33mDominio do Affine:\e[97m $url_affine\e[0m"
echo ""
## Informação sobre URL do affine
echo -e "\e[33mEmail de Admin:\e[97m $email_affine\e[0m"
echo ""
## Informação sobre URL do affine
echo -e "\e[33mSenha de Admin:\e[97m $senha_affine\e[0m"
echo ""
## Informação sobre URL do affine
echo -e "\e[33mEmail SMTP:\e[97m $email_smtp_affine\e[0m"
echo ""
## Informação sobre URL do affine
echo -e "\e[33mSenha SMTP:\e[97m $senha_smtp_affine\e[0m"
echo ""
## Informação sobre URL do affine
echo -e "\e[33mHost SMTP:\e[97m $host_smtp_affine\e[0m"
echo ""
## Informação sobre URL do affine
echo -e "\e[33mPorta SMTP:\e[97m $porta_smtp_affine\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_affine
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO AFFINE \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES E REDIS \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Cansei já de explicar o que isso faz kkkk
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "affine"
verificar_container_redis
if [ $? -eq 0 ]; then
sleep 1
else
ferramenta_redis > /dev/null 2>&1
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO AFFINE \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > affine.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
affine:
image: ghcr.io/toeverything/affine-graphql:stable-39476d1
command:
['sh', '-c', 'node ./scripts/self-host-predeploy && node ./dist/index.js']
volumes:
- affine_config:/root/.affine/config:rw
- affine_storage:/root/.affine/storage:rw
networks:
- $nome_rede_interna
#ports:
# - 3010:3010
# - 5555:5555
logging:
driver: 'json-file'
options:
max-size: '1000m'
restart: on-failure:5
environment:
## Dados de acesso
- AFFINE_ADMIN_EMAIL=$email_affine
- AFFINE_ADMIN_PASSWORD=$senha_affine
- AFFINE_SERVER_HOST=$url_affine
## Dados do SMTP
- MAILER_USER=$email_smtp_affine
- MAILER_PASSWORD=$senha_smtp_affine
- MAILER_HOST=$host_smtp_affine
- MAILER_PORT=$porta_smtp_affine
## Dados do Postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=$senha_postgres
- POSTGRES_DB=affine
- DATABASE_URL=postgres://postgres:$senha_postgres@postgres:5432/affine?sslmode=disable
- PGDATA=/var/lib/postgresql/data/pgdata
## Outras configurações
- NODE_OPTIONS="--import=./scripts/register.js"
- AFFINE_CONFIG_PATH=/root/.affine/config
- REDIS_SERVER_HOST=redis
- NODE_ENV=production
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.affine.rule=Host(\`$url_affine\`)
- traefik.http.services.affine.loadbalancer.server.port=3010
- traefik.http.routers.affine.service=affine
- traefik.http.routers.affine.tls.certresolver=letsencryptresolver
- traefik.http.routers.affine.entrypoints=websecure
- traefik.http.routers.affine.tls=true
- traefik.frontend.headers.STSPreload=true
- traefik.frontend.headers.STSSeconds=31536000
## --------------------------- ORION --------------------------- ##
volumes:
affine_config:
external: true
name: affine_config
affine_storage:
external: true
name: affine_storage
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Affine"
fi
STACK_NAME="affine"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c affine.yaml affine > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do Affine"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "affine" para verificar se o serviço esta online
wait_stack "affine"
cd dados_vps
cat > dados_affine <<EOL
[ AFFINE ]
Dominio do Affine: https://$url_affine
Usuario: $email_affine
Senha: $senha_affine
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ AFFINE ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_affine\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m $email_affine\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m $senha_affine\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██████╗ ██████╗██╗ ██╗███████╗███████╗ █████╗ ██╗
## ██╔══██╗██╔═══██╗██╔════╝██║ ██║██╔════╝██╔════╝██╔══██╗██║
## ██║ ██║██║ ██║██║ ██║ ██║███████╗█████╗ ███████║██║
## ██║ ██║██║ ██║██║ ██║ ██║╚════██║██╔══╝ ██╔══██║██║
## ██████╔╝╚██████╔╝╚██████╗╚██████╔╝███████║███████╗██║ ██║███████╗
## ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚══════╝╚═╝ ╚═╝╚══════╝
ferramenta_docuseal() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_docuseal
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/6\e[0m"
echo -en "\e[33mDigite o dominio para o Docuseal (ex: docuseal.oriondesign.art.br): \e[0m" && read -r url_docuseal
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 2/6\e[0m"
echo -en "\e[33mDigite a Email SMTP (ex: [email protected]): \e[0m" && read -r email_smtp_docuseal
echo ""
##Pergunta o usuário do Email SMTP
echo -e "\e[97mPasso$amarelo 3/6\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o Usuário para SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r user_smtp_docuseal
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 4/6\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP (ex: @Senha123_): \e[0m" && read -r senha_smtp_docuseal
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 5/6\e[0m"
echo -en "\e[33mDigite o Host SMTP (ex: smtp.hostinger.com): \e[0m" && read -r host_smtp_docuseal
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 6/6\e[0m"
echo -en "\e[33mDigite a Porta SMTP (ex: 465): \e[0m" && read -r porta_smtp_docuseal
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_docuseal
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do docuseal
echo -e "\e[33mDominio do docuseal:\e[97m $url_docuseal\e[0m"
echo ""
## Informação sobre URL do docuseal
echo -e "\e[33mEmail SMTP:\e[97m $email_smtp_docuseal\e[0m"
echo ""
## Informação sobre URL do docuseal
echo -e "\e[33mUser SMTP:\e[97m $user_smtp_docuseal\e[0m"
echo ""
## Informação sobre URL do docuseal
echo -e "\e[33mSenha SMTP:\e[97m $senha_smtp_docuseal\e[0m"
echo ""
## Informação sobre URL do docuseal
echo -e "\e[33mHost SMTP:\e[97m $host_smtp_docuseal\e[0m"
echo ""
## Informação sobre URL do docuseal
echo -e "\e[33mPorta SMTP:\e[97m $porta_smtp_docuseal\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_docuseal
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO DOCUSEAL \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Cansei já de explicar o que isso faz kkkk
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "docuseal"
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO DOCUSEAL \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Pegar o dominio do email
dominio_smtp_docuseal="${email_smtp_docuseal##*@}"
key_docuseal=$(openssl rand -hex 16)
key_docuseal2=$(openssl rand -hex 16)
## Criando a stack
cat > docuseal.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
docuseal:
image: docuseal/docuseal:latest
volumes:
- docuseal_data:/data
networks:
- $nome_rede_interna
environment:
## Dados de Acesso
- HOST=$url_docuseal
- FORCE_SSL=true
## Secret Key
- SECRET_KEY_BASE=$key_docuseal
## Dados do Postgres
- DATABASE_URL=postgresql://postgres:$senha_postgres@postgres:5432/docuseal
## Dados SMTP
- SMTP_USERNAME=$user_smtp_docuseal
- SMTP_PASSWORD=$senha_smtp_docuseal
- SMTP_ADDRESS=$host_smtp_docuseal
- SMTP_PORT=$porta_smtp_docuseal
- SMTP_FROM=$email_smtp_docuseal
- SMTP_DOMAIN=$dominio_smtp_docuseal
- SMTP_AUTHENTICATION=login
## Dados do S3
##- AWS_ACCESS_KEY_ID=
##- AWS_SECRET_ACCESS_KEY=
##- S3_ATTACHMENTS_BUCKET=
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.docuseal.rule=Host(\`$url_docuseal\`)
- traefik.http.services.docuseal.loadbalancer.server.port=3000
- traefik.http.routers.docuseal.service=docuseal
- traefik.http.routers.docuseal.tls.certresolver=letsencryptresolver
- traefik.http.routers.docuseal.entrypoints=websecure
- traefik.http.routers.docuseal.tls=true
## --------------------------- ORION --------------------------- ##
volumes:
docuseal_data:
external: true
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do docuseal"
fi
STACK_NAME="docuseal"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c docuseal.yaml docuseal > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do docuseal"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_docuseal para verificar se o serviço esta online
wait_stack "docuseal"
cd dados_vps
cat > dados_docuseal <<EOL
[ DOCUSEAL ]
Dominio do docuseal: https://$url_docuseal
Usuario: Precisa de criar ao fazer o primeiro login
Senha: Precisa de criar ao fazer o primeiro login
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ DOCUSEAL ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_docuseal\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa de criar ao fazer o primeiro login\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa de criar ao fazer o primeiro login\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██╗██████╗ ███████╗ ██████╗████████╗██╗ ██╗███████╗
## ██╔══██╗██║██╔══██╗██╔════╝██╔════╝╚══██╔══╝██║ ██║██╔════╝
## ██║ ██║██║██████╔╝█████╗ ██║ ██║ ██║ ██║███████╗
## ██║ ██║██║██╔══██╗██╔══╝ ██║ ██║ ██║ ██║╚════██║
## ██████╔╝██║██║ ██║███████╗╚██████╗ ██║ ╚██████╔╝███████║
## ╚═════╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝
ferramenta_directus() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_directus
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/9\e[0m"
echo -en "\e[33mDigite o dominio para o Directus (ex: directus.oriondesign.art.br): \e[0m" && read -r url_directus
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 2/9\e[0m"
echo -en "\e[33mDigite a Email de Admin (ex: [email protected]): \e[0m" && read -r email_directus
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 3/9\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$"
echo -en "\e[33mDigite a Senha SMTP (ex: @Senha123_): \e[0m" && read -r senha_directus
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 4/9\e[0m"
echo -en "\e[33mDigite a Email SMTP (ex: [email protected]): \e[0m" && read -r email_smtp_directus
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 5/9\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP (ex: @Senha123_): \e[0m" && read -r senha_smtp_directus
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 6/9\e[0m"
echo -en "\e[33mDigite o Host SMTP (ex: smtp.hostinger.com): \e[0m" && read -r host_smtp_directus
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 7/9\e[0m"
echo -en "\e[33mDigite a Porta SMTP (ex: 465): \e[0m" && read -r porta_smtp_directus
echo ""
## Pergunta qual é o Access Key do minio
echo -e "\e[97mPasso$amarelo 8/9\e[0m"
echo -en "\e[33mAccess Key Minio: \e[0m" && read -r S3_ACCESS_KEY
echo ""
## Pergunta qual é a Secret Key do minio
echo -e "\e[97mPasso$amarelo 9/9\e[0m"
echo -en "\e[33mSecret Key Minio: \e[0m" && read -r S3_SECRET_KEY
echo ""
pegar_senha_minio
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Pegando senha do MinIO"
else
echo "1/2 - [ OFF ] - Pegando senha do MinIO"
echo "Não foi possivel pegar a senha do minio"
fi
pegar_link_s3
if [ $? -eq 0 ]; then
echo "2/2 - [ OK ] - Pegando Url S3 do MinIO"
else
echo "2/2 - [ OFF ] - Pegando Url S3 do MinIO"
echo "Não foi possivel pegar o link do S3"
fi
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_directus
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do directus
echo -e "\e[33mDominio do Directus:\e[97m $url_directus\e[0m"
echo ""
## Informação sobre URL do directus
echo -e "\e[33mEmail de Admin:\e[97m $email_directus\e[0m"
echo ""
## Informação sobre URL do directus
echo -e "\e[33mSenha de Admin:\e[97m $senha_directus\e[0m"
echo ""
## Informação sobre URL do directus
echo -e "\e[33mEmail SMTP:\e[97m $email_smtp_directus\e[0m"
echo ""
## Informação sobre URL do directus
echo -e "\e[33mSenha SMTP:\e[97m $senha_smtp_directus\e[0m"
echo ""
## Informação sobre URL do directus
echo -e "\e[33mHost SMTP:\e[97m $host_smtp_directus\e[0m"
echo ""
## Informação sobre URL do directus
echo -e "\e[33mPorta SMTP:\e[97m $porta_smtp_directus\e[0m"
echo ""
## Informação sobre URL do directus
echo -e "\e[33mAccess Key Minio:\e[97m $S3_ACCESS_KEY\e[0m"
echo ""
## Informação sobre URL do directus
echo -e "\e[33mSecret Key Minio:\e[97m $S3_SECRET_KEY\e[0m"
echo ""
## Verifica se a porta é 465, se sim deixa o ssl true, se não, deixa false
if [ "$porta_smtp_directus" -eq 465 ]; then
ssl_smtp_directus=true
else
ssl_smtp_directus=false
fi
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_directus
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO DIRECTUS \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES E REDIS \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Cansei já de explicar o que isso faz kkkk
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "directus"
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Verificando/Instalando Postgres"
else
echo "1/2 - [ OFF ] - Verificando/Instalando Postgres"
fi
## Verifica container redis
verificar_container_redis
if [ $? -eq 0 ]; then
echo ""
else
ferramenta_redis > /dev/null 2>&1
fi
if [ $? -eq 0 ]; then
echo "2/2 - [ OK ] - Verificando/Instalando Redis"
else
echo "2/2 - [ OFF ] - Verificando/Instalando Redis"
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO DIRECTUS \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Gerar Secret Key
key_directus=$(openssl rand -hex 16)
key_directus2=$(openssl rand -hex 16)
## Criando a stack
cat > directus.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
directus:
image: directus/directus:latest
volumes:
- directus_uploads:/directus/uploads
- directus_data:/directus/database
networks:
- $nome_rede_interna
environment:
## Dados de acesso
- ADMIN_EMAIL=$email_directus
- ADMIN_PASSWORD=$senha_directus
- PUBLIC_URL=https://$url_directus
## Dados SMTP
- EMAIL_SMTP_USER=$email_smtp_directus
- EMAIL_SMTP_PASSWORD=$senha_smtp_directus
- EMAIL_SMTP_HOST=$host_smtp_directus
- EMAIL_SMTP_PORT=$porta_smtp_directus
- EMAIL_SMTP_SECURE=$ssl_smtp_directus
## Dados MinIO
- STORAGE_s3_KEY=$S3_ACCESS_KEY
- STORAGE_s3_SECRET=$S3_SECRET_KEY
- STORAGE_s3_BUCKET=directus
- STORAGE_s3_REGION=us-west-rack-2
- STORAGE_s3_ENDPOINT=$url_s3
## Redis
- REDIS=redis://redis:6379/4
## Secret Keys & Env
- KEY=$key_directus
- SECRET=$key_directus2
- APP_ENV=production
## Dados Postgres
- DB_CLIENT=postgres
- DB_HOST=postgres
- DB_PORT=5432
- DB_DATABASE=directus
- DB_USER=postgres
- DB_PASSWORD=$senha_postgres
- DB_CONNECTION_STRING=postgresql://postgres:$senha_postgres@postgres:5432/directus
- DB_PREFIX=drcts_
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.directus.rule=Host(\`$url_directus\`)
- traefik.http.routers.directus.entrypoints=web,websecure
- traefik.http.routers.directus.tls.certresolver=letsencryptresolve
- traefik.http.routers.directus.tls=true
- traefik.http.services.directus.loadbalancer.server.port=8055
- traefik.docker.network=proxy
## --------------------------- ORION --------------------------- ##
volumes:
directus_uploads:
external: true
name: directus_uploads
directus_data:
external: true
name: directus_data
networks:
$nome_rede_interna:
external: true
attachable: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do directus"
fi
STACK_NAME="directus"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c directus.yaml directus > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do directus"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_tack "directus" para verificar se o serviço esta online
wait_stack "directus"
cd dados_vps
cat > dados_directus <<EOL
[ DIRECTUS ]
Dominio do directus: https://$url_directus
Usuario: $email_directus
Senha: $senha_directus
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ DIRECTUS ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_directus\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m $email_directus\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m $senha_directus\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██╗ ██╗ █████╗ ██╗ ██╗██╗ ████████╗██╗ ██╗ █████╗ ██████╗ ██████╗ ███████╗███╗ ██╗
## ██║ ██║██╔══██╗██║ ██║██║ ╚══██╔══╝██║ ██║██╔══██╗██╔══██╗██╔══██╗██╔════╝████╗ ██║
## ██║ ██║███████║██║ ██║██║ ██║ ██║ █╗ ██║███████║██████╔╝██║ ██║█████╗ ██╔██╗ ██║
## ╚██╗ ██╔╝██╔══██║██║ ██║██║ ██║ ██║███╗██║██╔══██║██╔══██╗██║ ██║██╔══╝ ██║╚██╗██║
## ╚████╔╝ ██║ ██║╚██████╔╝███████╗██║ ╚███╔███╔╝██║ ██║██║ ██║██████╔╝███████╗██║ ╚████║
## ╚═══╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚══╝╚══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚══════╝╚═╝ ╚═══╝
ferramenta_vaultwarden() {
# Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_vaultwarden
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
## Pergunta o Dominio da ferramenta
echo -e "\e[97mPasso$amarelo 1/5\e[0m"
echo -en "\e[33mDigite o Dominio para o VaultWarden (ex: vaultwarden.oriondesign.art.br): \e[0m" && read -r url_vaultwarden
echo ""
## Pergunta o Email SMTP
echo -e "\e[97mPasso$amarelo 2/5\e[0m"
echo -en "\e[33mDigite um Email para o SMTP (ex: [email protected]): \e[0m" && read -r email_vaultwarden
echo ""
## Pergunta a Senha SMTP
echo -e "\e[97mPasso$amarelo 3/5\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do email (ex: @Senha123_): \e[0m" && read -r senha_vaultwarden
echo ""
## Pergunta o Host SMTP
echo -e "\e[97mPasso$amarelo 4/5\e[0m"
echo -en "\e[33mDigite o Host SMTP do email (ex: smtp.hostinger.com): \e[0m" && read -r host_vaultwarden
echo ""
## Pergunta a Porta SMTP
echo -e "\e[97mPasso$amarelo 5/5\e[0m"
echo -en "\e[33mDigite a Porta SMTP do email (ex: 465): \e[0m" && read -r porta_vaultwarden
echo ""
if [ "$porta_vaultwarden" -eq 465 ] || [ "$porta_vaultwarden" -eq 25 ]; then
ssl_vaultwarden=force_tls
else
ssl_vaultwarden=starttls
fi
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_vaultwarden
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio:\e[97m $url_vaultwarden\e[0m"
echo ""
## Informação sobre Email
echo -e "\e[33mEmail SMTP:\e[97m $email_vaultwarden\e[0m"
echo ""
## Informação sobre Senha
echo -e "\e[33mSenha SMTP:\e[97m $senha_vaultwarden\e[0m"
echo ""
## Informação sobre Host
echo -e "\e[33mHost SMTP:\e[97m $host_vaultwarden\e[0m"
echo ""
## Informação sobre Porta
echo -e "\e[33mPorta SMTP:\e[97m $porta_vaultwarden\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_vaultwarden
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO VAULTWARDEN \e[33m[1/3]\e[0m"
echo ""
sleep 1
## Nada nada nada.. só para aparecer a mensagem de passo.
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO VAULTWARDEN \e[33m[2/3]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > vaultwarden.yaml <<-EOF
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
vaultwarden:
image: vaultwarden/server:latest
volumes:
- vaultwarden-data:/data
networks:
- $nome_rede_interna
#ports:
# - 1973:80
environment:
## Dominio do Dashboard
- DOMAIN=https://$url_vaultwarden
## Permitir novos registros
- SIGNUPS_ALLOWED=true
## Dados do SMTP
- SMTP_FROM=$email_vaultwarden
- SMTP_USERNAME=$email_vaultwarden
- SMTP_PASSWORD=$senha_vaultwarden
- SMTP_HOST=$host_vaultwarden
- SMTP_PORT=$porta_vaultwarden
- SMTP_SECURITY=$ssl_vaultwarden
## Configuração do Websocket
- WEBSOCKET_ENABLED=true
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- "traefik.enable=true"
- "traefik.http.routers.vaultwarden.rule=Host(\`$url_vaultwarden\`)"
- "traefik.http.routers.vaultwarden.service=vaultwarden"
- "traefik.http.routers.vaultwarden.entrypoints=websecure"
- "traefik.http.services.vaultwarden.loadbalancer.server.port=80"
- "traefik.http.routers.vaultwarden.tls=true"
- "traefik.http.routers.vaultwarden.tls.certresolver=letsencryptresolver"
- "traefik.http.services.vaultwarden.loadbalancer.passhostheader=true"
- "traefik.http.routers.vaultwarden.middlewares=compresstraefik"
- "traefik.http.middlewares.compresstraefik.compress=true"
- "traefik.docker.network=$nome_rede_interna"
## --------------------------- ORION --------------------------- ##
volumes:
vaultwarden-data:
external: true
name: vaultwarden-data
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOF
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do vaultwarden"
fi
STACK_NAME="vaultwarden"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c vaultwarden.yaml vaultwarden > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do vaultwarden"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_vaultwarden para verificar se o serviço esta online
wait_stack "vaultwarden"
cd dados_vps
cat > dados_vaultwarden <<EOL
[ VAULTWARDEN ]
Dominio do vaultwarden: https://$url_vaultwarden
Email: Precisa de criar dentro do vaultwarden
Senha: Precisa de criar dentro do vaultwarden
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ VAULTWARDEN ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_vaultwarden\e[0m"
echo ""
echo -e "\e[33mEmail:\e[97m Precisa de criar dentro do VaultWarden\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa de criar dentro do VaultWarden\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██████╗ █████╗ ███████╗ █████╗ ███╗ ██╗ █████╗
## ██╔════╝ ██╔══██╗██╔══██╗██╔════╝██╔══██╗████╗ ██║██╔══██╗
## ██║ ███╗██████╔╝███████║█████╗ ███████║██╔██╗ ██║███████║
## ██║ ██║██╔══██╗██╔══██║██╔══╝ ██╔══██║██║╚██╗██║██╔══██║
## ╚██████╔╝██║ ██║██║ ██║██║ ██║ ██║██║ ╚████║██║ ██║
## ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝
ferramenta_monitor() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_monitor
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 1/4\e[0m"
echo -en "\e[33mDigite o Dominio para o Grafana (ex: grafana.oriondesign.art.br): \e[0m" && read -r url_grafana
echo ""
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 2/4\e[0m"
echo -en "\e[33mDigite o Dominio para o Prometheus (ex: prometheus.oriondesign.art.br): \e[0m" && read -r url_prometheus
echo ""
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 3/4\e[0m"
echo -en "\e[33mDigite o Dominio para o cAdvisor (ex: cadvisor.oriondesign.art.br): \e[0m" && read -r url_cadvisor
echo ""
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 4/4\e[0m"
echo -en "\e[33mDigite o Dominio para o NodeExporter (ex: node.oriondesign.art.br): \e[0m" && read -r url_nodeexporter
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_monitor
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio do Grafana:\e[97m $url_grafana\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mDominio do Prometheus:\e[97m $url_prometheus\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mDominio do Cadvisor:\e[97m $url_cadvisor\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mDominio do NodeExporter:\e[97m $url_nodeexporter\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_monitor
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO GRAFANA + PROMETHEUS + CADVISOR \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Literalmente nada, apenas um espaço vazio caso precisar de adicionar alguma coisa antes..
## E claro, para aparecer a mensagem do passo..
## Mensagem de Passo
echo -e "\e[97m• BAIXANDO RECURSOS \e[33m[2/4]\e[0m"
echo ""
sleep 1
mkdir blablabla
cd blablabla
git clone https://github.com/oriondesign2015/SetupOrion.git > /dev/null 2>&1
sudo mv /root/blablabla/SetupOrion/Extras/Grafana/monitor-orion /opt
cd
rm -r blablabla
cd
cd
## Criando arquivo datasource
cat > datasource.yml <<EOL
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: https://$url_prometheus
isDefault: true
access: proxy
editable: true
EOL
if [ $? -eq 0 ]; then
echo "1/4 - [ OK ] - Criando datasource.yml"
else
echo "1/4 - [ OFF ]"
echo "Não foi possivel criar o datasource"
fi
cp /root/datasource.yml /opt/monitor-orion/grafana/
if [ $? -eq 0 ]; then
echo "2/6 - [ OK ]"
else
echo "2/6 - [ OFF ]"
echo "Não foi possivel copiar o datasource para o diretório opt"
fi
cp /root/datasource.yml /opt/monitor-orion/grafana/provisioning/datasources/
if [ $? -eq 0 ]; then
echo "3/6 - [ OK ]"
else
echo "3/6 - [ OFF ]"
echo "Não foi possivel copiar o datasource para o diretório opt"
fi
rm /root/datasource.yml
if [ $? -eq 0 ]; then
echo "4/6 - [ OK ]"
else
echo "4/6 - [ OFF ]"
echo "Não foi possivel deletar o datasource para o diretório opt"
fi
cd
## Criando arquivo prometheus yml
cat > prometheus.yml <<EOL
global:
scrape_interval: 15s
scrape_timeout: 10s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets: []
scheme: http
timeout: 10s
api_version: v1
scrape_configs:
- job_name: prometheus
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
static_configs:
- targets: ['$url_prometheus','$url_cadvisor','$url_nodeexporter']
EOL
if [ $? -eq 0 ]; then
echo "5/6 - [ OK ]"
else
echo "5/6 - [ OFF ]"
echo "Não foi possivel criar o prometheus"
fi
mv /root/prometheus.yml /opt/monitor-orion/prometheus/
if [ $? -eq 0 ]; then
echo "6/6 - [ OK ]"
else
echo "6/6 - [ OFF ]"
echo "Não foi possivel copiar o datasource para o diretório opt"
fi
cd
cd
echo ""
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO GRAFANA + PROMETHEUS + CADVISOR \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Aqui de fato vamos iniciar a instalação das ferramentas
## Criando a stack
cat > monitor.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
prometheus:
image: prom/prometheus:latest
volumes:
- /opt/monitor-orion/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
networks:
- $nome_rede_interna
ports:
- "9191:9090"
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.prometheus.rule=Host(\`$url_prometheus\`)
- traefik.http.services.prometheus.loadbalancer.server.port=9090
- traefik.http.routers.prometheus.service=prometheus
- traefik.http.routers.prometheus.tls.certresolver=letsencryptresolver
- traefik.http.routers.prometheus.entrypoints=websecure
- traefik.http.routers.prometheus.tls=true
## --------------------------- ORION --------------------------- ##
grafana:
image: grafana/grafana:latest
volumes:
- /opt/monitor-orion/grafana/grafana.ini:/etc/grafana/grafana.ini
- /opt/monitor-orion/grafana/provisioning/datasources:/etc/grafana/provisioning/datasources
- /opt/monitor-orion/grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards
- /opt/monitor-orion/grafana/dashboards:/etc/grafana/dashboards
networks:
- $nome_rede_interna
ports:
- "3111:3000"
links:
- prometheus
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.grafana.rule=Host(\`$url_grafana\`)
- traefik.http.services.grafana.loadbalancer.server.port=3000
- traefik.http.routers.grafana.service=grafana
- traefik.http.routers.grafana.tls.certresolver=letsencryptresolver
- traefik.http.routers.grafana.entrypoints=websecure
- traefik.http.routers.grafana.tls=true
## --------------------------- ORION --------------------------- ##
node-exporter:
image: prom/node-exporter:latest
restart: unless-stopped
networks:
- $nome_rede_interna
ports:
- "9100:9100"
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.node-exporter.rule=Host(\`$url_nodeexporter\`)
- traefik.http.services.node-exporter.loadbalancer.server.port=9100
- traefik.http.routers.node-exporter.service=node-exporter
- traefik.http.routers.node-exporter.tls.certresolver=letsencryptresolver
- traefik.http.routers.node-exporter.entrypoints=websecure
- traefik.http.routers.node-exporter.tls=true
## --------------------------- ORION --------------------------- ##
cadvisor:
image: google/cadvisor:latest
restart: unless-stopped
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
networks:
- $nome_rede_interna
ports:
- "8181:8080"
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.cadvisor.rule=Host(\`$url_cadvisor\`)
- traefik.http.services.cadvisor.loadbalancer.server.port=8080
- traefik.http.routers.cadvisor.service=cadvisor
- traefik.http.routers.cadvisor.tls.certresolver=letsencryptresolver
- traefik.http.routers.cadvisor.entrypoints=websecure
- traefik.http.routers.cadvisor.tls=true
## --------------------------- ORION --------------------------- ##
networks:
$nome_rede_interna:
name: $nome_rede_interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Monitor"
fi
STACK_NAME="monitor"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c monitor.yaml monitor > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do Monitor"
#fi
echo ""
sleep 10
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_monitor para verificar se o serviço esta online
wait_stack "monitor"
cd dados_vps
cat > dados_monitor <<EOL
[ MONITOR ]
Dominio Grafana: https://$url_grafana
Dominio Prometheus: https://$url_prometheus
Dominio cAdvisor: https://$url_cadvisor
Dominio NodeExporter: https://$url_nodeexporter
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ GRAFANA + PROMETHEUS + CADVISOR ]\e[0m"
echo ""
echo -e "\e[97mDominio Grafana:\e[33m https://$url_grafana\e[0m"
echo ""
echo -e "\e[97mUsuario Grafana:\e[33m admin\e[0m"
echo ""
echo -e "\e[97mSenha Grafana:\e[33m admin\e[0m"
echo -e "\e[97mDepois do primeiro login, será solicitado que você altere a senha.\e[0m"
echo ""
echo -e "\e[97mDominio Prometheus:\e[33m https://$url_prometheus\e[0m"
echo ""
echo -e "\e[97mDominio cAdvisor:\e[33m https://$url_cadvisor\e[0m"
echo ""
echo -e "\e[97mDominio NodeExporter:\e[33m https://$url_nodeexporter\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███╗ ██╗███████╗██╗ ██╗████████╗ ██████╗██╗ ██████╗ ██╗ ██╗██████╗
## ████╗ ██║██╔════╝╚██╗██╔╝╚══██╔══╝██╔════╝██║ ██╔═══██╗██║ ██║██╔══██╗
## ██╔██╗ ██║█████╗ ╚███╔╝ ██║ ██║ ██║ ██║ ██║██║ ██║██║ ██║
## ██║╚██╗██║██╔══╝ ██╔██╗ ██║ ██║ ██║ ██║ ██║██║ ██║██║ ██║
## ██║ ╚████║███████╗██╔╝ ██╗ ██║ ╚██████╗███████╗╚██████╔╝╚██████╔╝██████╔╝
## ╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝
ferramenta_nextcloud() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_nextcloud
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/3\e[0m"
echo -en "\e[33mDigite o dominio para o NextCloud (ex: nextcloud.oriondesign.art.br): \e[0m" && read -r url_nextcloud
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 2/3\e[0m"
echo -en "\e[33mDigite o Usuario para o NextCloud (ex: orion): \e[0m" && read -r user_nextcloud
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 3/3\e[0m"
echo -e "$amarelo--> Minimo 8 caracteres. Use Letras MAIUSCULAS e minusculas, numero e um caractere especial @ ou _"
echo -en "\e[33mDigite o Senha o Usuario (ex: @Senha123_): \e[0m" && read -r pass_nextcloud
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_nextcloud
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do nextcloud
echo -e "\e[33mDominio do NextCloud:\e[97m $url_nextcloud\e[0m"
echo ""
## Informação sobre URL do nextcloud
echo -e "\e[33mUsuario do NextCloud:\e[97m $user_nextcloud\e[0m"
echo ""
## Informação sobre URL do nextcloud
echo -e "\e[33mSenha do NextCloud:\e[97m $pass_nextcloud\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_minio
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO NEXTCLOUD \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES E REIDS \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Cansei já de explicar o que isso faz kkkk
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "nextcloud"
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Verificando/Instalando Postgres"
else
echo "1/2 - [ OFF ] - Verificando/Instalando Postgres"
fi
verificar_container_redis
if [ $? -eq 0 ]; then
sleep 1
else
ferramenta_redis > /dev/null 2>&1
fi
if [ $? -eq 0 ]; then
echo "2/2 - [ OK ] - Verificando/Instalando Redis"
else
echo "2/2 - [ OFF ] - Verificando/Instalando Redis"
fi
echo ""
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO NEXTCLOUD \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > nextcloud.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
nextcloud:
image: nextcloud:latest
volumes:
- nextcloud_data:/var/www/html
networks:
- $nome_rede_interna
ports:
- 8282:80
environment:
## Dados de acesso:
- NEXTCLOUD_ADMIN_USER=$user_nextcloud
- NEXTCLOUD_ADMIN_PASSWORD=$pass_nextcloud
## Dados do Postgres
- POSTGRES_HOST=postgres
- POSTGRES_DB=nextcloud
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=$senha_postgres
## Dados do Redis
- REDIS_HOST=redis
## Configurações para HTTPS
- OVERWRITEPROTOCOL=https
- TRUSTED_PROXIES=127.0.0.1
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.nextcloud.rule=Host(\`$url_nextcloud\`)
- traefik.http.services.nextcloud.loadbalancer.server.port=80
- traefik.http.routers.nextcloud.service=nextcloud
- traefik.http.routers.nextcloud.tls.certresolver=letsencryptresolver
- traefik.http.routers.nextcloud.entrypoints=web,websecure
- traefik.http.routers.nextcloud.tls=true
- traefik.http.routers.nextcloud.middlewares=nextcloud_redirectregex
- traefik.http.middlewares.nextcloud_redirectregex.redirectregex.permanent=true
- traefik.http.middlewares.nextcloud_redirectregex.redirectregex.regex=https://(.*)/.well-known/(?:card|cal)dav
- traefik.http.middlewares.nextcloud_redirectregex.redirectregex.replacement=https://$$1/remote.php/dav
## --------------------------- ORION --------------------------- ##
cron:
image: nextcloud:latest
volumes:
- nextcloud_data:/var/www/html
entrypoint: /cron.sh
## --------------------------- ORION --------------------------- ##
volumes:
nextcloud_data:
external: true
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do nextcloud"
fi
STACK_NAME="nextcloud"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c nextcloud.yaml nextcloud > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do nextcloud"
#fi
echo ""
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_nextcloud para verificar se o serviço esta online
wait_nextcloud
cd dados_vps
# Caminho do arquivo onde a substituição será feita
arquivo_next_cloud="/var/lib/docker/volumes/nextcloud_data/_data/config/config.php"
# Comando sed para substituir a linha, utilizando a variável
sed -i "s/0 => 'localhost'/0 => '$url_nextcloud'/" "$arquivo_next_cloud"
sed -i "/'maintenance' => false,/a \ 'overwriteprotocol' => 'https',\n 'trusted_proxies' => ['127.0.0.1']," "$arquivo_next_cloud"
cat > dados_nextcloud <<EOL
[ NEXTCLOUD ]
Dominio do NextCloud: https://$url_nextcloud
Usuario: $user_nextcloud
Senha: $pass_nextcloud
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ NEXTCLOUD ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_nextcloud\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m $user_nextcloud\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m $pass_nextcloud\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███████╗████████╗██████╗ █████╗ ██████╗ ██╗
## ██╔════╝╚══██╔══╝██╔══██╗██╔══██╗██╔══██╗██║
## ███████╗ ██║ ██████╔╝███████║██████╔╝██║
## ╚════██║ ██║ ██╔══██╗██╔══██║██╔═══╝ ██║
## ███████║ ██║ ██║ ██║██║ ██║██║ ██║
## ╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝
ferramenta_strapi() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_strapi
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o dominio para o Strapi (ex: strapi.oriondesign.art.br): \e[0m" && read -r url_strapi
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_strapi
## Mostra mensagem para verificar as informações
conferindo_as_info
##Informação do Dominio
echo -e "\e[33mDominio para o strapi:\e[97m $url_strapi\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_strapi
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO STRAPI \e[33m[1/4]\e[0m"
echo ""
sleep 1
## NADA
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO MYSQL \e[33m[2/4]\e[0m"
echo ""
sleep 1
verificar_container_mysql
if [ $? -eq 0 ]; then
pegar_senha_mysql > /dev/null 2>&1
else
ferramenta_mysql > /dev/null 2>&1
pegar_senha_mysql > /dev/null 2>&1
fi
criar_banco_mysql_da_stack "strapi"
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Verificando/Instalando MySQL"
else
echo "1/1 - [ OFF ] - Verificando/Instalando MySQL"
fi
## Espera 30 segundos
wait_30_sec
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO STRAPI \e[33m[3/4]\e[0m"
echo ""
sleep 1
jwt_secret=$(openssl rand -hex 16)
admin_jwt=$(openssl rand -hex 16)
app_key=$(openssl rand -hex 16)
## Criando a stack
cat > strapi.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
strapi:
image: strapi/strapi
volumes:
- strapi_data:/srv/app
networks:
- $nome_rede_interna
environment:
## Dados MySQL
- DATABASE_CLIENT=mysql
- DATABASE_NAME=strapi
- DATABASE_HOST=mysql
- DATABASE_PORT=3306
- DATABASE_USERNAME=root
- DATABASE_PASSWORD=$senha_mysql
## Secret Keys
- JWT_SECRET=$jwt_secret
- ADMIN_JWT_SECRET=$admin_jwt
- APP_KEYS=$app_key
## Outros dados
- NODE_ENV=production
- STRAPI_TELEMETRY_DISABLED=true
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.strapi.rule=Host(\`$url_strapi\`)
- traefik.http.routers.strapi.entrypoints=web,websecure
- traefik.http.routers.strapi.tls.certresolver=letsencryptresolver
- traefik.http.routers.strapi.service=strapi
- traefik.http.services.strapi.loadbalancer.server.port=1337
- traefik.http.services.strapi.loadbalancer.passHostHeader=true
## --------------------------- ORION --------------------------- ##
volumes:
strapi_data:
name: strapi_data
external: true
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Strapi"
fi
STACK_NAME="strapi"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c strapi.yaml strapi #> /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do Strapi"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "strapi" para verificar se o serviço esta online
wait_stack "strapi"
cd dados_vps
cat > dados_strapi <<EOL
[ STRAPI ]
Dominio do Strapi: https://$url_strapi
Usuario: Precisa criar no primeiro acesso do Strapi
Senha: Precisa criar no primeiro acesso do Strapi
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ STRAPI ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_strapi\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar no primeiro acesso do strapi\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do strapi\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██╗ ██╗██████╗ ███╗ ███╗██╗ ██╗ █████╗ ██████╗ ███╗ ███╗██╗███╗ ██╗
## ██╔══██╗██║ ██║██╔══██╗ ████╗ ████║╚██╗ ██╔╝ ██╔══██╗██╔══██╗████╗ ████║██║████╗ ██║
## ██████╔╝███████║██████╔╝ ██╔████╔██║ ╚████╔╝ ███████║██║ ██║██╔████╔██║██║██╔██╗ ██║
## ██╔═══╝ ██╔══██║██╔═══╝ ██║╚██╔╝██║ ╚██╔╝ ██╔══██║██║ ██║██║╚██╔╝██║██║██║╚██╗██║
## ██║ ██║ ██║██║ ██║ ╚═╝ ██║ ██║ ██║ ██║██████╔╝██║ ╚═╝ ██║██║██║ ╚████║
## ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝
ferramenta_phpmyadmin() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_phpmyadmin
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/2\e[0m"
echo -en "\e[33mDigite o dominio para o PhpMyAdmin (ex: phpmyadmin.oriondesign.art.br): \e[0m" && read -r url_phpmyadmin
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 2/2\e[0m"
echo -en "\e[33mDigite o Host MySQL (ex: mysql ou 1.111.111.11:3306): \e[0m" && read -r host_phpmyadmin
echo ""
##Pergunta o Dominio para a ferramenta
#echo -e "\e[97mPasso$amarelo 4/4\e[0m"
#echo -en "\e[33mDigite o Usuario MySQL (ex: oriondesign): \e[0m" && read -r user_phpmyadmin
#echo ""
##Pergunta o Dominio para a ferramenta
#echo -e "\e[97mPasso$amarelo 4/4\e[0m"
#echo -e "$amarelo--> Sem caracteres especiais: \!#$"
#echo -en "\e[33mDigite a Senha MySQL (ex: @Senha123_): \e[0m" && read -r pass_phpmyadmin
#echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_phpmyadmin
## Mostra mensagem para verificar as informações
conferindo_as_info
##Informação do Dominio
echo -e "\e[33mDominio para o PhpMyAdmin:\e[97m $url_phpmyadmin\e[0m"
echo ""
##Informação do Dominio
echo -e "\e[33mHost MySQL:\e[97m $host_phpmyadmin\e[0m"
echo ""
###Informação do Dominio
#echo -e "\e[33mUsuario MySQL:\e[97m $user_phpmyadmin\e[0m"
#echo ""
###Informação do Dominio
#echo -e "\e[33mSenha MYSQL:\e[97m $pass_phpmyadmin\e[0m"
#echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_phpmyadmin
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO PHPMYADMIN \e[33m[1/3]\e[0m"
echo ""
sleep 1
## NADA
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO PHPMYADMIN \e[33m[2/3]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > phpmyadmin.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
command: ["apache2-foreground"]
networks:
- $nome_rede_interna
environment:
## Dados do MySQL
- PMA_HOSTS=$host_phpmyadmin
- PMA_PORT=3306
## Dado de acesso
#- PMA_USER=
#- PMA_PASSWORD=
- PMA_ABSOLUTE_URI=https://$url_phpmyadmin
## Limite de Upload
- UPLOAD_LIMIT=10M
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 2048M
labels:
- traefik.enable=true
- traefik.http.routers.phpmyadmin.rule=Host(\`$url_phpmyadmin\`)
- traefik.http.routers.phpmyadmin.entrypoints=web,websecure
- traefik.http.routers.phpmyadmin.tls.certresolver=letsencryptresolver
- traefik.http.services.phpmyadmin.loadbalancer.server.port=80
- traefik.http.routers.phpmyadmin.service=phpmyadmin
## --------------------------- ORION --------------------------- ##
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do phpmyadmin"
fi
STACK_NAME="phpmyadmin"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c phpmyadmin.yaml phpmyadmin #> /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do phpmyadmin"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "phpmyadmin" para verificar se o serviço esta online
wait_stack "phpmyadmin"
cd dados_vps
cat > dados_phpmyadmin <<EOL
[ PHPMYADMIN ]
Dominio do phpmyadmin: https://$url_phpmyadmin
Usuario: Os mesmos do seu MySQL
Senha: Os mesmos do seu MySQL
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ PHPMYADMIN ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_phpmyadmin\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Os mesmos do seu MySQL\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Os mesmos do seu MySQL\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███████╗██╗ ██╗██████╗ █████╗ ██████╗ █████╗ ███████╗███████╗
## ██╔════╝██║ ██║██╔══██╗██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔════╝
## ███████╗██║ ██║██████╔╝███████║██████╔╝███████║███████╗█████╗
## ╚════██║██║ ██║██╔═══╝ ██╔══██║██╔══██╗██╔══██║╚════██║██╔══╝
## ███████║╚██████╔╝██║ ██║ ██║██████╔╝██║ ██║███████║███████╗
## ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝
ferramenta_supabase() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_supabase
## Mostra mensagem para preencher informações
preencha_as_info
generate_jwt_tokens() {
# Verificar a disponibilidade dos comandos necessários e instalá-los se necessário
if ! command -v openssl &> /dev/null; then
echo "O comando 'openssl' não está disponível. Tentando instalar..."
if [[ "$(uname)" == "Darwin" ]]; then
# macOS
brew install openssl
elif [[ "$(expr substr $(uname -s) 1 5)" == "Linux" ]]; then
# Linux
if [[ -f /etc/redhat-release ]]; then
# Red Hat, CentOS, Fedora
sudo yum install -y openssl
elif [[ -f /etc/debian_version ]]; then
# Debian, Ubuntu
sudo apt-get install -y openssl
else
echo "Não foi possível identificar a distribuição Linux. Por favor, instale o OpenSSL manualmente."
return 1
fi
else
echo "Sistema operacional não suportado. Por favor, instale o OpenSSL manualmente."
return 1
fi
fi
if ! command -v jq &> /dev/null; then
echo "O comando 'jq' não está disponível. Tentando instalar..."
if [[ "$(uname)" == "Darwin" ]]; then
# macOS
brew install jq
elif [[ "$(expr substr $(uname -s) 1 5)" == "Linux" ]]; then
# Linux
if [[ -f /etc/redhat-release ]]; then
# Red Hat, CentOS, Fedora
sudo yum install -y jq
elif [[ -f /etc/debian_version ]]; then
# Debian, Ubuntu
sudo apt-get install -y jq
else
echo "Não foi possível identificar a distribuição Linux. Por favor, instale o jq manualmente."
return 1
fi
else
echo "Sistema operacional não suportado. Por favor, instale o jq manualmente."
return 1
fi
fi
# Definir os payloads dos JWTs
payload_service_key=$(echo '{
"role": "service_role",
"iss": "supabase",
"iat": 1715050800,
"exp": 1872817200
}' | jq .)
payload_anon_key=$(echo '{
"role": "anon",
"iss": "supabase",
"iat": 1715050800,
"exp": 1872817200
}' | jq .)
# Gerar uma chave secreta aleatória e segura
secret=$(openssl rand -hex 20)
# Codificar o header em base64url
header=$(echo -n '{"alg":"HS256","typ":"JWT"}' | openssl base64 | tr -d '=' | tr '+/' '-_' | tr -d '\n')
# Codificar os payloads em base64url
payload_service_key_base64=$(echo -n "$payload_service_key" | openssl base64 | tr -d '=' | tr '+/' '-_' | tr -d '\n')
payload_anon_key_base64=$(echo -n "$payload_anon_key" | openssl base64 | tr -d '=' | tr '+/' '-_' | tr -d '\n')
# Criar as assinaturas dos tokens usando a mesma chave secreta
signature_service_key=$(echo -n "$header.$payload_service_key_base64" | openssl dgst -sha256 -hmac "$secret" -binary | openssl base64 | tr -d '=' | tr '+/' '-_' | tr -d '\n')
signature_anon_key=$(echo -n "$header.$payload_anon_key_base64" | openssl dgst -sha256 -hmac "$secret" -binary | openssl base64 | tr -d '=' | tr '+/' '-_' | tr -d '\n')
# Combinar as partes dos tokens
token_service_key="$header.$payload_service_key_base64.$signature_service_key"
token_anon_key="$header.$payload_anon_key_base64.$signature_anon_key"
# Retornar os valores gerados como uma string separada por espaços
echo "$secret $token_service_key $token_anon_key"
}
# Chamar a função e armazenar o retorno em uma variável
result=$(generate_jwt_tokens)
# Verificar se o resultado está vazio
if [[ -z "$result" ]]; then
echo "A função retornou um resultado vazio. Verifique a configuração do ambiente e as dependências."
exit 1
fi
# Extrair os valores individuais usando o comando 'read'
read secret token_service_key token_anon_key <<< "$result"
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio do Builder
echo -e "\e[97mPasso$amarelo 1/10\e[0m"
echo -en "\e[33mDigite o Dominio para o Supabase (ex: supabase.oriondesign.art.br): \e[0m" && read -r url_supabase
echo ""
##Pergunta o Dominio do Viewer
echo -e "\e[97mPasso$amarelo 2/10\e[0m"
echo -en "\e[33mDigite o Usuario para o Supabase (ex: OrionDesign): \e[0m" && read -r user_supabase
echo ""
##Pergunta a versão da ferramenta
echo -e "\e[97mPasso$amarelo 3/10\e[0m"
echo -e "$amarelo--> Sem NENHUM caracteres especiais, tais como: @\!#$ entre outros"
echo -en "\e[33mDigite a Senha do usuario para o Supabase (ex: Senha123_): \e[0m" && read -r pass_supabase
echo ""
##Pergunta o Email SMTP
echo -e "\e[97mPasso$amarelo 4/10\e[0m"
echo -en "\e[33mDigite o Email para SMTP (ex: [email protected]): \e[0m" && read -r email_supabase
echo ""
##Pergunta o usuário do Email SMTP
echo -e "\e[97mPasso$amarelo 5/10\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o Usuário para SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r usuario_email_supabase
echo ""
## Pergunta a senha do SMTP
echo -e "\e[97mPasso$amarelo 6/10\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do Email (ex: @Senha123_): \e[0m" && read -r senha_email_supabase
echo ""
## Pergunta o Host SMTP do email
echo -e "\e[97mPasso$amarelo 7/10\e[0m"
echo -en "\e[33mDigite o Host SMTP do Email (ex: smtp.hostinger.com): \e[0m" && read -r smtp_email_supabase
echo ""
## Pergunta a porta SMTP do email
echo -e "\e[97mPasso$amarelo 8/10\e[0m"
echo -en "\e[33mDigite a porta SMTP do Email (ex: 465): \e[0m" && read -r porta_smtp_supabase
echo ""
## Verifica se a porta é 465, se sim deixa o ssl true, se não, deixa false
if [ "$porta_smtp_supabase" -eq 465 ]; then
smtp_secure_supabase=true
else
smtp_secure_supabase=false
fi
## Pergunta qual é o JWT_Key
JWT_Key="$secret"
## Pergunta qual é o ANON_KEY
ANON_KEY="$token_anon_key"
## Pergunta qual é o SERVICE_KEY
SERVICE_KEY="$token_service_key"
## Pergunta qual é o Access Key do minio
echo -e "\e[97mPasso$amarelo 9/10\e[0m"
echo -en "\e[33mAccess Key Minio: \e[0m" && read -r S3_ACCESS_KEY
echo ""
## Pergunta qual é a Secret Key do minio
echo -e "\e[97mPasso$amarelo 10/10\e[0m"
echo -en "\e[33mSecret Key Minio: \e[0m" && read -r S3_SECRET_KEY
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_supabase
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do Builder
echo -e "\e[33mDominio do Supabase:\e[97m $url_supabase\e[0m"
echo ""
## Informação sobre URL do Viewer
echo -e "\e[33mUsuaraio:\e[97m $user_supabase\e[0m"
echo ""
## Informação sobre a versão da ferramenta
echo -e "\e[33mSenha:\e[97m $pass_supabase\e[0m"
echo ""
## Informação sobre Email
echo -e "\e[33mEmail do SMTP:\e[97m $email_supabase\e[0m"
echo ""
## Informação sobre Email
echo -e "\e[33mUsuário do SMTP:\e[97m $usuario_email_supabase\e[0m"
echo ""
## Informação sobre Senha do Email
echo -e "\e[33mSenha do Email:\e[97m $senha_email_supabase\e[0m"
echo ""
## Informação sobre Host SMTP
echo -e "\e[33mHost SMTP do Email:\e[97m $smtp_email_supabase\e[0m"
echo ""
## Informação sobre Porta SMTP
echo -e "\e[33mPorta SMTP do Email:\e[97m $porta_smtp_supabase\e[0m"
echo ""
## Informação sobre Secure SMTP
echo -e "\e[33mSecure SMTP do Email:\e[97m $smtp_secure_supabase\e[0m"
echo ""
## Informação sobre JWT_Key
echo -e "\e[33mJWT_Key:\e[97m $JWT_Key\e[0m"
echo ""
## Informação sobre ANON_KEY
echo -e "\e[33mAnon Key:\e[97m $ANON_KEY\e[0m"
echo ""
## Informação sobre SERVICE_KEY
echo -e "\e[33mService Key:\e[97m $SERVICE_KEY\e[0m"
echo ""
## Informação sobre Access Key
echo -e "\e[33mAccess Key Minio:\e[97m $S3_ACCESS_KEY\e[0m"
echo ""
## Informação sobre Secret Key
echo -e "\e[33mSecret Key Minio:\e[97m $S3_SECRET_KEY\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_supabase
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO SUPABASE \e[33m[1/4]\e[0m"
echo ""
sleep 1
git clone --depth 1 https://github.com/supabase/supabase > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "1/4 - [ OK ] - Baixando Repositório do Supabase"
else
echo "1/4 - [ OFF ] - Baixando Repositório do Supabase"
echo "Não foi possivel Baixar."
fi
sudo mkdir -p /root/supabase/docker/volumes/db/data
if [ $? -eq 0 ]; then
echo "1/4 - [ OK ] - Criando diretório 1"
else
echo "1/4 - [ OFF ] - Criando diretório 1"
echo "Não foi criar o diretório"
fi
sudo mkdir -p /var/lib/postgresql/data
if [ $? -eq 0 ]; then
echo "1/4 - [ OK ] - Criando diretório 2"
else
echo "1/4 - [ OFF ] - Criando diretório 2"
echo "Não foi criar o diretório"
fi
sudo mkdir -p /root/supabase/docker/volumes/storage
if [ $? -eq 0 ]; then
echo "1/4 - [ OK ] - Criando diretório 3"
else
echo "1/4 - [ OFF ] - Criando diretório 3"
echo "Não foi criar o diretório"
fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO DADOS DO MINIO \e[33m[2/4]\e[0m"
echo ""
sleep 1
pegar_senha_minio
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Pegando Senha do MinIO"
else
echo "1/2 - [ OFF ] - Pegando Senha do MinIO"
echo "Não foi possivel pegar a senha do minio"
fi
pegar_link_s3
if [ $? -eq 0 ]; then
echo "2/2 - [ OK ] - Pegando URL do S3"
else
echo "2/2 - [ OFF ] - Pegando URL do S3"
echo "Não foi possivel pegar o link do S3"
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO SUPABASE \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando key Aleatórias
Senha_Postgres=$(openssl rand -hex 16)
Logflare_key=$(openssl rand -hex 16)
SECRET_KEY_BASE=$(openssl rand -hex 32)
## Criando a stack
cat > supabase.yaml <<EOL
version: "3.7"
services:
## Rode os seguintes comandos na sua VPS antes de fazer deploy desta stack:
## Baixando github com os arquivos do Supabase
## git clone --depth 1 https://github.com/supabase/supabase
## Criando pasta "data" para os volumes
## sudo mkdir -p /root/supabase/docker/volumes/db/data
## Criando pasta "storage" para armazenamento de arquivos
## sudo mkdir -p /root/supabase/docker/volumes/storage
## Criando a pasta "postgresql/data" para o db
## sudo mkdir -p /var/lib/postgresql/data
## Crie suas credenciais ANON_KEY e SERVICE_KEY através do link: https://supabase.com/docs/guides/self-hosting/docker
## --------------------------- ORION --------------------------- ##
studio:
image: supabase/studio:20240701-05dfbec ## Versão da imagem
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Ativando Log Debug
- DEBUG=next:*
## Configuração do Hostname
- HOSTNAME=0.0.0.0
## Dados Postgres
- POSTGRES_PASSWORD=$Senha_Postgres ## Senha do Postgres #OK
## Branding
- DEFAULT_ORGANIZATION_NAME=OrionDesign ## Nome da Empresa
- DEFAULT_PROJECT_NAME=SetupOrion ## Nome do Projeto
## Urls
- SUPABASE_PUBLIC_URL=https://$url_supabase ## Link do supabase
- SUPABASE_URL=http://kong:8000
- STUDIO_PG_META_URL=http://meta:8080
## Logflare
- LOGFLARE_API_KEY=$Logflare_key ## Key aleatória
- LOGFLARE_URL=http://analytics:4000
- NEXT_PUBLIC_ENABLE_LOGS=true
- NEXT_ANALYTICS_BACKEND_PROVIDER=postgres
## ANON_KEY & SERVICE_KEY
- SUPABASE_ANON_KEY=$ANON_KEY ## ANON_KEY
- SUPABASE_SERVICE_KEY=$SERVICE_KEY ## SERVICE_KEY
- AUTH_JWT_SECRET=$JWT_Key
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
## --------------------------- ORION --------------------------- ##
kong:
image: kong:2.8.1 ## Versão da imagem
entrypoint: bash -c 'eval "echo \"\$\$(cat ~/temp.yml)\"" > ~/kong.yml && /docker-entrypoint.sh kong docker-start'
volumes:
- /root/supabase/docker/volumes/api/kong.yml:/home/kong/temp.yml:ro
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Ativando Log Debug
- KONG_LOG_LEVEL=debug
## Dados Login Supabase
- DASHBOARD_USERNAME=$user_supabase ## Usuario Kong
- DASHBOARD_PASSWORD=$pass_supabase ## Senha Kong
## JWT_SECRET
- JWT_SECRET=$JWT_Key
## Dados Kong
- KONG_DATABASE=off
- KONG_DECLARATIVE_CONFIG=/home/kong/kong.yml
- KONG_DNS_ORDER=LAST,A,CNAME
- KONG_PLUGINS=request-transformer,cors,key-auth,acl,basic-auth
- KONG_NGINX_PROXY_PROXY_BUFFER_SIZE=160k
- KONG_NGINX_PROXY_PROXY_BUFFERS=64 160k
## ANON_KEY & SERVICE_KEY
- SUPABASE_ANON_KEY=$ANON_KEY ## ANON_KEY
- SUPABASE_SERVICE_KEY=$SERVICE_KEY ## SERVICE_KEY
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.kong.rule=Host(\`$url_supabase\`) && PathPrefix(\`/\`) ## Url do Kong
- traefik.http.services.kong.loadbalancer.server.port=8000
- traefik.http.routers.kong.service=kong
- traefik.http.routers.kong.entrypoints=websecure
- traefik.http.routers.kong.tls.certresolver=letsencryptresolver
- traefik.http.routers.kong.tls=true
## --------------------------- ORION --------------------------- ##
auth:
image: supabase/gotrue:v2.151.0 ## Versão da imagem
healthcheck:
test:
- CMD
- wget
- '--no-verbose'
- '--tries=1'
- '--spider'
- 'http://localhost:9999/health'
timeout: 5s
interval: 5s
retries: 3
networks:
- $nome_rede_interna ## Nome da rede interna
ports:
- 9999:9999
environment:
- GOTRUE_API_HOST=0.0.0.0
- GOTRUE_API_PORT=9999
- API_EXTERNAL_URL=https://$url_supabase ## Url do Supabase
- GOTRUE_DB_DRIVER=postgres
- GOTRUE_DB_DATABASE_URL=postgres://supabase_auth_admin:$Senha_Postgres@db:5344/supabase ## Senha do Postgres #OK
- GOTRUE_SITE_URL=https://$url_supabase ## link do Supabase
- GOTRUE_URI_ALLOW_LIST=
- GOTRUE_JWT_ADMIN_ROLES=service_role
- GOTRUE_JWT_AUD=authenticated
- GOTRUE_JWT_DEFAULT_GROUP_NAME=authenticated
- GOTRUE_JWT_EXP=3600
- GOTRUE_JWT_SECRET=$JWT_Key ## JWT_SECRET
## Dados SMTP
- GOTRUE_DISABLE_SIGNUP=false ## Desativar inscrições
- GOTRUE_EXTERNAL_EMAIL_ENABLED=true
- GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLE=false
- GOTRUE_MAILER_AUTOCONFIRM=true ## Enviar email para autenticar
- GOTRUE_SMTP_ADMIN_EMAIL=$email_supabase ## Email SMTP
- GOTRUE_SMTP_HOST=$smtp_email_supabase ## Host SMTP
- GOTRUE_SMTP_PORT=$porta_smtp_supabase ## Porta SMTP
- GOTRUE_SMTP_USER=$usuario_email_supabase ## Usuario SMTP
- GOTRUE_SMTP_PASS=$senha_email_supabase ## Senha SMTP
- GOTRUE_SMTP_SENDER_NAME=$email_supabase ## Email SMTP
## Paths SMTP
- GOTRUE_MAILER_URLPATHS_INVITE=/auth/v1/verify
- GOTRUE_MAILER_URLPATHS_CONFIRMATION=/auth/v1/verify
- GOTRUE_MAILER_URLPATHS_RECOVERY=/auth/v1/verify
- GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE=/auth/v1/verify
## Autenticação por telefone
- GOTRUE_EXTERNAL_PHONE_ENABLED=false
- GOTRUE_SMS_AUTOCONFIRM=false
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
## --------------------------- ORION --------------------------- ##
rest:
image: postgrest/postgrest:v12.0.3 ## Versão da imagem
command: "postgrest"
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados postgres
- PGRST_DB_URI=postgres://authenticator:$Senha_Postgres@db:5344/supabase ## Senha do Postgres #OK
- PGRST_DB_SCHEMAS=public,storage,graphql_public
#- PGRST_DB_SCHEMAS=public
- PGRST_DB_ANON_ROLE=anon
- PGRST_DB_USE_LEGACY_GUCS=false
## Dados JWT
- PGRST_JWT_SECRET=$JWT_Key ## JWT_SECRET
- PGRST_APP_SETTINGS_JWT_SECRET=$JWT_Key ## JWT_SECRET
- PGRST_APP_SETTINGS_JWT_EXP=3600
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
## --------------------------- ORION --------------------------- ##
realtime:
image: supabase/realtime:v2.25.50 ## Versão da imagem
command: "sh -c \"/app/bin/migrate && /app/bin/realtime eval 'Realtime.Release.seeds(Realtime.Repo)' && /app/bin/server\"\n"
healthcheck:
test:
- CMD
- bash
- '-c'
- 'printf \0 > /dev/tcp/localhost/4000'
timeout: 5s
interval: 5s
retries: 3
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Porta RealTime
- PORT=4000
## Dados Postgres
- DB_HOST=db
- DB_PORT=5344 ## Porta do Postgres
- DB_USER=supabase_admin
- DB_PASSWORD=$Senha_Postgres # OK
- DB_NAME=supabase
- DB_AFTER_CONNECT_QUERY=SET search_path TO _realtime
- DB_ENC_KEY=supabaserealtime
## Dados JWT
- API_JWT_SECRET=$JWT_Key ## JWT_SECRET
## Secret Key
- SECRET_KEY_BASE=$SECRET_KEY_BASE
## Ainda não procurei saber o que essas coisas fazem
- FLY_ALLOC_ID=fly123
- FLY_APP_NAME=realtime
- ERL_AFLAGS=-proto_dist inet_tcp
- ENABLE_TAILSCALE=false
- DNS_NODES="''"
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
## --------------------------- ORION --------------------------- ##
storage:
image: supabase/storage-api:v1.0.6 ## Versão da imagem
volumes:
- /root/supabase/docker/volumes/storage:/var/lib/storage:z
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Ativando Log Debug
- LOG_LEVEL=debug
## Porta Storage
- SERVER_PORT=5000
- SERVER_REGION=eu-south ## Localização
- MULTI_TENANT=false
## Dados JWT
- PGRST_JWT_SECRET=$JWT_Key ## JWT_SECRET
- AUTH_JWT_SECRET=$JWT_Key ## JWT_SECRET
## Dados Postgrest
- POSTGREST_URL=http://rest:3000
- DATABASE_URL=postgres://supabase_admin:$Senha_Postgres@db:5344/supabase ## Senha do Postgres #OK
- DB_INSTALL_ROLES=false
- FILE_SIZE_LIMIT=52428800
## Informações Storage
- STORAGE_BACKEND=s3 ## Coloque s3 para minio e descomente os outros campos
- STORAGE_S3_BUCKET=supabase
#- FILE_STORAGE_BACKEND_PATH=/var/lib/storage
- TENANT_ID=stub
- REGION=eu-south ## Região
- AWS_DEFAULT_REGION=eu-south ## Localização MinIO
- GLOBAL_S3_BUCKET=supabase ## Nome da bucket do MinIO
- GLOBAL_S3_ENDPOINT=https://$url_s3
- GLOBAL_S3_PROTOCOL=https
- GLOBAL_S3_FORCE_PATH_STYLE=true
- AWS_ACCESS_KEY_ID=$S3_ACCESS_KEY ## Access Key
- AWS_SECRET_ACCESS_KEY=$S3_SECRET_KEY ## Secret Key
- UPLOAD_FILE_SIZE_LIMIT=524288000
- UPLOAD_FILE_SIZE_LIMIT_STANDARD=524288000
- UPLOAD_SIGNED_URL_EXPIRATION_TIME=120
- TUS_URL_PATH=/upload/resumable
- TUS_MAX_SIZE=3600000
## Dados ImageProxy
- IMAGE_TRANSFORMATION_ENABLED=true
#- ENABLE_IMAGE_TRANSFORMATION=true
- IMGPROXY_URL=http://imgproxy:5001
- IMGPROXY_REQUEST_TIMEOUT=15
- DATABASE_SEARCH_PATH=storage
## ANON_KEY & SERVICE_KEY
- ANON_KEY=$ANON_KEY ## ANON_KEY
- SERVICE_KEY=$SERVICE_KEY ## SERVICE_KEY
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
## --------------------------- ORION --------------------------- ##
imgproxy:
image: darthsim/imgproxy:v3.8.0 ## Versão da imagem
healthcheck:
test:
- CMD
- imgproxy
- health
timeout: 5s
interval: 5s
retries: 3
volumes:
- /root/supabase/docker/volumes/storage:/var/lib/storage:z
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados do ImgProxy
- IMGPROXY_BIND=:5001
- IMGPROXY_LOCAL_FILESYSTEM_ROOT=/
- IMGPROXY_USE_ETAG=true
- IMGPROXY_ENABLE_WEBP_DETECTION=true
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
## --------------------------- ORION --------------------------- ##
meta:
image: supabase/postgres-meta:v0.83.2 ## Versão da imagem
networks:
- $nome_rede_interna ## Nome da rede interna
ports:
- 8080:8080
environment:
## Dados Meta
- PG_META_PORT=8080
- PG_META_HOST=0.0.0.0
## Dados postgres
- PG_META_DB_HOST=db
- PG_META_DB_PORT=5344 ## Porta do Postgres
- PG_META_DB_NAME=supabase
- PG_META_DB_USER=supabase_admin
- PG_META_DB_PASSWORD=$Senha_Postgres ## Senha do Postgres # OK
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
## --------------------------- ORION --------------------------- ##
functions:
image: supabase/edge-runtime:v1.55.0 ## Versão da imagem
command:
- start
- '--main-service'
- /home/deno/functions/main
volumes:
- /root/supabase/docker/volumes/functions:/home/deno/functions:Z
- /root/supabase/docker/volumes/functions/main/index.ts:/home/deno/functions/main/index.ts:Z
- /root/supabase/docker/volumes/functions/hello/index.ts:/home/deno/functions/hello/index.ts:Z
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Url Api Kong
- SUPABASE_URL=http://kong:8000
## Dados Postgres
- SUPABASE_DB_URL=postgresql://postgres:$Senha_Postgres@db:5344/supabase ## Senha do Postgres #OK
## ANON_KEY & SERVICE_KEY
- SUPABASE_ANON_KEY=$ANON_KEY ## ANON_KEY
- SUPABASE_SERVICE_ROLE_KEY=$SERVICE_KEY ## SERVICE_KEY
## Dados JWT
- JWT_SECRET=$JWT_Key ## JWT_SECRET
- VERIFY_JWT=false
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
## --------------------------- ORION --------------------------- ##
analytics:
image: supabase/logflare:1.4.0 ## Versão da imagem
healthcheck:
test:
- CMD
- curl
- 'http://localhost:4000/health'
timeout: 5s
interval: 5s
retries: 10
networks:
- $nome_rede_interna ## Nome da rede interna
ports:
- 4000:4000
environment:
- LOGFLARE_LOG_LEVEL=debug
- DB_USERNAME=supabase_admin
- DB_DATABASE=supabase
- DB_HOSTNAME=db
- DB_PORT=5344
- DB_PASSWORD=$Senha_Postgres # OK
- DB_SCHEMA=_analytics
- POSTGRES_BACKEND_URL=postgresql://supabase_admin:$Senha_Postgres@db:5344/supabase # OK
- POSTGRES_BACKEND_SCHEMA=_analytics
## Logflare
- LOGFLARE_SUPABASE=true
- LOGFLARE_SINGLE_TENANT=true
- LOGFLARE_SINGLE_TENANT_MODE=true
- LOGFLARE_SUPABASE_MODE=true
- LOGFLARE_NODE_HOST=127.0.0.1
- LOGFLARE_API_KEY=$Logflare_key ## Key aleatória
- LOGFLARE_MIN_CLUSTER_SIZE=1
- LOGFLARE_FEATURE_FLAG_OVERRIDE=multibackend=true
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
## --------------------------- ORION --------------------------- ##
db:
image: supabase/postgres:15.1.1.61 ## Versão da imagem
healthcheck:
test: 'pg_isready -U postgres -h localhost'
interval: 5s
timeout: 5s
retries: 10
volumes:
- /root/supabase/docker/volumes/db/realtime.sql:/docker-entrypoint-initdb.d/migrations/99-realtime.sql:Z
- /root/supabase/docker/volumes/db/webhooks.sql:/docker-entrypoint-initdb.d/init-scripts/98-webhooks.sql:Z
- /root/supabase/docker/volumes/db/roles.sql:/docker-entrypoint-initdb.d/init-scripts/99-roles.sql:Z
- /root/supabase/docker/volumes/db/jwt.sql:/docker-entrypoint-initdb.d/init-scripts/99-jwt.sql:Z
- /root/supabase/docker/volumes/db/data:/var/lib/postgresql/data:Z ## Precisa de criar o diretório, use: sudo mkdir -p /var/lib/postgresql/data
- /root/supabase/docker/volumes/db/logs.sql:/docker-entrypoint-initdb.d/migrations/99-logs.sql:Z
- supabase_db_config:/etc/postgresql-custom
networks:
- $nome_rede_interna ## Nome da rede interna
ports:
- 5344:5344 ## Porta externas
command:
- postgres
- '-c'
- config_file=/etc/postgresql/postgresql.conf
- '-c'
- log_min_messages=fatal
environment:
## Dados Postgres
- POSTGRES_HOST=/var/run/postgresql
- PGPORT=5344 ## Porta do Postgres
- POSTGRES_PORT=5344 ## Porta do Postgres
- PGPASSWORD=$Senha_Postgres ## Senha do Postgres #OK
- POSTGRES_PASSWORD=$Senha_Postgres ## Senha do Postgres #OK
- PGDATABASE=supabase
- POSTGRES_DB=supabase
## Dados JWT
- JWT_SECRET=$JWT_Key ## JWT_SECRET
- JWT_EXP=3600
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
## --------------------------- ORION --------------------------- ##
vector:
image: timberio/vector:0.28.1-alpine ## Versão da imagem
command:
- '--config'
- etc/vector/vector.yml
volumes:
- /root/supabase/docker/volumes/logs/vector.yml:/etc/vector/vector.yml:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- $nome_rede_interna ## Nome da rede interna
ports:
- 9001:9001
environment:
## Ativando Log Debug
- VECTOR_LOG=debug
## Logflare key
- LOGFLARE_API_KEY=$Logflare_key ## Key aleatória
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
## --------------------------- ORION --------------------------- ##
volumes:
supabase_db_config:
external: true
name: supabase_db_config
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do supabase"
fi
STACK_NAME="supabase"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c supabase.yaml supabase > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do supabase"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "supabase" para verificar se o serviço esta online
wait_stack "supabase"
cd dados_vps
cat > dados_supabase <<EOL
[ SUPABASE ]
Dominio do Supabase: https://$url_supabase
Usuario: $user_supabase
Senha: $pass_supabase
JWT Key: $JWT_Key
Anon Key: $ANON_KEY
Service Key: $SERVICE_KEY
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ SUPABASE ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_supabase\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m $user_supabase\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m $pass_supabase\e[0m"
echo ""
echo -e "\e[33mAnon key:\e[97m $ANON_KEY\e[0m"
echo ""
echo -e "\e[33mService key:\e[97m $SERVICE_KEY\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███╗ ██╗████████╗███████╗██╗ ██╗
## ████╗ ██║╚══██╔══╝██╔════╝╚██╗ ██╔╝
## ██╔██╗ ██║ ██║ █████╗ ╚████╔╝
## ██║╚██╗██║ ██║ ██╔══╝ ╚██╔╝
## ██║ ╚████║ ██║ ██║ ██║
## ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝
ferramenta_ntfy() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_ntfy
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 1/3\e[0m"
echo -en "\e[33mDigite o Dominio para o Ntfy (ex: ntfy.oriondesign.art.br): \e[0m" && read -r url_ntfy
echo ""
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 2/3\e[0m"
echo -en "\e[33mDigite o Usuario (ex: oriondesign): \e[0m" && read -r user_ntfy
echo ""
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 3/3\e[0m"
echo -en "\e[33mDigite a Senha (ex: @Senha123_): \e[0m" && read -r pass_ntfy
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_ntfy
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio da Ntfy:\e[97m $url_ntfy\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mUsuario do Ntfy:\e[97m $user_ntfy\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mSenha do Ntfy:\e[97m $pass_ntfy\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_ntfy
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO NTFY \e[33m[1/3]\e[0m"
echo ""
sleep 1
## Literalmente nada, apenas um espaço vazio caso precisar de adicionar alguma coisa
## Antes..
## E claro, para aparecer a mensagem do passo..
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO O NTFY \e[33m[2/3]\e[0m"
echo ""
sleep 1
## Gerando Hash
hashed_senha=$(htpasswd -nb $user_ntfy $pass_ntfy | sed -e s/\\$/\\$\\$/g)
## Gerando Base64
authentication=$(echo -n "$user_ntfy:$pass_ntfy" | base64)
## Criando a stack
cat > ntfy.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
ntfy:
image: binwiederhier/ntfy:latest
command:
- serve
volumes:
- ntfy_cache:/var/cache/ntfy
- ntfy_etc:/etc/ntfy
networks:
- $nome_rede_interna
environment:
- TZ=UTC
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.ntfy.rule=Host(\`$url_ntfy\`)
- traefik.http.services.ntfy.loadbalancer.server.port=80
- traefik.http.routers.ntfy.service=ntfy
- traefik.http.routers.ntfy.tls.certresolver=letsencryptresolver
- traefik.http.routers.ntfy.entrypoints=websecure
- traefik.http.middlewares.ntfy-auth.basicauth.users=$hashed_senha
- traefik.http.routers.ntfy.middlewares=ntfy-auth
- traefik.http.routers.ntfy.tls=true
## --------------------------- ORION --------------------------- ##
volumes:
ntfy_cache:
external: true
name: ntfy_cache
ntfy_etc:
external: true
name: ntfy_etc
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack da Ntfy"
fi
STACK_NAME="ntfy"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c ntfy.yaml ntfy > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack da Ntfy"
#fi
sleep 10
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_ntfy para verificar se o serviço esta online
wait_stack "ntfy"
cd dados_vps
cat > dados_ntfy <<EOL
[ NTFY ]
Link do Ntfy: https://$url_ntfy
Usuario: $user_ntfy
Senha: $pass_ntfy
Authorization: Basic $authentication
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ NTFY ]\e[0m"
echo ""
echo -e "\e[97mLink do Ntfy:\e[33m https://$url_ntfy\e[0m"
echo ""
echo -e "\e[97mUsuario:\e[33m $user_ntfy\e[0m"
echo ""
echo -e "\e[97mSenha:\e[33m $pass_ntfy\e[0m"
echo ""
echo -e "\e[97mAuthorization:\e[33m Basic $authentication\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██╗ ██████╗ ██╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗██████╗
## ██║ ██╔═══██╗██║ ██║██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔══██╗
## ██║ ██║ ██║██║ █╗ ██║██║ ██║ ██║██║ ██║█████╗ ██████╔╝
## ██║ ██║ ██║██║███╗██║██║ ██║ ██║██║ ██║██╔══╝ ██╔══██╗
## ███████╗╚██████╔╝╚███╔███╔╝╚██████╗╚██████╔╝██████╔╝███████╗██║ ██║
## ╚══════╝ ╚═════╝ ╚══╝╚══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝
ferramenta_lowcoder() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_lowcoder
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 1/8\e[0m"
echo -en "\e[33mDigite o Dominio para o Lowcoder (ex: lowcoder.oriondesign.art.br): \e[0m" && read -r url_lowcoder
echo ""
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 2/8\e[0m"
echo -en "\e[33mDigite o User do MongoDB (ex: oriondesign): \e[0m" && read -r user_mongodb_lowcoder
echo ""
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 3/8\e[0m"
echo -en "\e[33mDigite a senha do MongoDB (ex: @Senha123_): \e[0m" && read -r pass_mongodb_lowcoder
echo ""
## Pergunta o email SMTP
echo -e "\e[97mPasso$amarelo 4/8\e[0m"
echo -en "\e[33mDigite o Email para SMTP (ex: [email protected]): \e[0m" && read -r email_smtp_lowcoder
echo ""
## Pergunta o Ususario SMTP
echo -e "\e[97mPasso$amarelo 5/8\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o Usuario para SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r user_smtp_lowcoder
echo ""
## Pergunta a senha do SMTP
echo -e "\e[97mPasso$amarelo 6/8\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do Email (ex: @Senha123_): \e[0m" && read -r senha_smtp_lowcoder
echo ""
## Pergunta o Host SMTP do email
echo -e "\e[97mPasso$amarelo 7/8\e[0m"
echo -en "\e[33mDigite o Host SMTP do Email (ex: smtp.hostinger.com): \e[0m" && read -r host_smtp_lowcoder
echo ""
## Pergunta a porta SMTP do email
echo -e "\e[97mPasso$amarelo 8/8\e[0m"
echo -en "\e[33mDigite a porta SMTP do Email (ex: 465): \e[0m" && read -r porta_smtp_lowcoder
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_lowcoder
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio da lowcoder:\e[97m $url_lowcoder\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mUsuario do MongoDB:\e[97m $user_mongodb_lowcoder\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mSenha do MongoDB:\e[97m $pass_mongodb_lowcoder\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mEmail SMTP:\e[97m $email_smtp_lowcoder\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mUser SMTP:\e[97m $user_smtp_lowcoder\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mSenha SMTP:\e[97m $senha_smtp_lowcoder\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mHost SMTP:\e[97m $host_smtp_lowcoder\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mPorta SMTP:\e[97m $porta_smtp_lowcoder\e[0m"
echo ""
## Verifica se a porta é 465, se sim deixa o ssl true, se não, deixa false
if [ "$porta_smtp_lowcoder" -eq 465 ]; then
smtp_secure_lowcoder_ssl=true
smtp_secure_lowcoder_startls=false
else
smtp_secure_lowcoder_ssl=false
smtp_secure_lowcoder_startls=true
fi
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_lowcoder
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO LOWCODER \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Literalmente nada, apenas um espaço vazio caso precisar de adicionar alguma coisa
## Antes..
## E claro, para aparecer a mensagem do passo..
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO REDIS \e[33m[2/4]\e[0m"
echo ""
verificar_container_redis
if [ $? -eq 0 ]; then
echo ""
else
ferramenta_redis
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO O LOWCODER \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Gerando Encryption
encryption_key_lowcoder1=$(openssl rand -hex 16)
encryption_key_lowcoder2=$(openssl rand -hex 16)
encryption_key_lowcoder3=$(openssl rand -hex 32)
## Pegando ip da vps
read -r ip _ <<<$(hostname -I)
## Criando a stack
cat > lowcoder.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
lowcoder_api:
image: lowcoderorg/lowcoder-ce-api-service:latest
networks:
- $nome_rede_interna
environment:
- LOWCODER_PUID=9001
- LOWCODER_PGID=9001
## Dados MongoDB
- LOWCODER_MONGODB_URL=mongodb://$user_mongodb_lowcoder:$pass_mongodb_lowcoder@$ip:27017/lowcoder?authSource=admin&readPreference=primary&ssl=false&directConnection=true
## Dados Redis
- LOWCODER_REDIS_URL=redis://redis:6379
## Dominio
- LOWCODER_NODE_SERVICE_URL=http://lowcoder_node:6060
## Configurações
- LOWCODER_MAX_QUERY_TIMEOUT=120
- LOWCODER_EMAIL_AUTH_ENABLED=true
- LOWCODER_EMAIL_SIGNUP_ENABLED=true ## true = permitir criar novas contas
- LOWCODER_CREATE_WORKSPACE_ON_SIGNUP=true ## true = permitir criar novos workspaces
- LOWCODER_WORKSPACE_MODE=SAAS
## Encryption
- LOWCODER_DB_ENCRYPTION_PASSWORD=$encryption_key_lowcoder1 ## hash Encryption
- LOWCODER_DB_ENCRYPTION_SALT=$encryption_key_lowcoder2 ## hash Encryption
- LOWCODER_API_KEY_SECRET=$encryption_key_lowcoder3 # hash Encryption
## Outras configurações
- LOWCODER_CORS_DOMAINS=*
- LOWCODER_MAX_ORGS_PER_USER=100
- LOWCODER_MAX_MEMBERS_PER_ORG=1000
- LOWCODER_MAX_GROUPS_PER_ORG=100
- LOWCODER_MAX_APPS_PER_ORG=1000
- LOWCODER_MAX_DEVELOPERS=50
## Dados SMTP
- LOWCODER_ADMIN_SMTP_HOST=$host_smtp_lowcoder
- LOWCODER_ADMIN_SMTP_PORT=$porta_smtp_lowcoder
- LOWCODER_ADMIN_SMTP_USERNAME=$user_smtp_lowcoder
- LOWCODER_ADMIN_SMTP_PASSWORD=$senha_smtp_lowcoder
- LOWCODER_ADMIN_SMTP_AUTH=true
- LOWCODER_ADMIN_SMTP_SSL_ENABLED=$smtp_secure_lowcoder_ssl
- LOWCODER_ADMIN_SMTP_STARTTLS_ENABLED=$smtp_secure_lowcoder_startls
- LOWCODER_ADMIN_SMTP_STARTTLS_REQUIRED=$smtp_secure_lowcoder_startls
- LOWCODER_EMAIL_NOTIFICATIONS_SENDER=$email_smtp_lowcoder
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
## --------------------------- ORION --------------------------- ##
lowcoder_node:
image: lowcoderorg/lowcoder-ce-node-service:latest
networks:
- $nome_rede_interna
environment:
- LOWCODER_PUID=9001
- LOWCODER_PGID=9001
- LOWCODER_API_SERVICE_URL=http://lowcoder_api:8080
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
## --------------------------- ORION --------------------------- ##
lowcoder-frontend:
image: lowcoderorg/lowcoder-ce-frontend:latest
volumes:
- lowcoder_assets:/lowcoder/assets
networks:
- $nome_rede_interna
environment:
- LOWCODER_PUID=9001
- LOWCODER_PGID=9001
- LOWCODER_MAX_REQUEST_SIZE=20m
- LOWCODER_MAX_QUERY_TIMEOUT=120
- LOWCODER_API_SERVICE_URL=http://lowcoder_api:8080
- LOWCODER_NODE_SERVICE_URL=http://lowcoder_node:6060
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.lowcoder.rule=Host(\`$url_lowcoder\`) && PathPrefix(\`/\`)
- traefik.http.services.lowcoder.loadbalancer.server.port=3000
- traefik.http.routers.lowcoder.service=lowcoder
- traefik.http.routers.lowcoder.entrypoints=websecure
- traefik.http.routers.lowcoder.tls.certresolver=letsencryptresolver
- traefik.http.routers.lowcoder.tls=true
## --------------------------- ORION --------------------------- ##
volumes:
lowcoder_assets:
external: true
name: lowcoder_assets
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack da Lowcoder"
fi
STACK_NAME="lowcoder"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c lowcoder.yaml lowcoder > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack da lowcoder"
#fi
sleep 10
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "lowcoder" para verificar se o serviço esta online
wait_stack "lowcoder"
cd dados_vps
cat > dados_lowcoder <<EOL
[ LOWCODER ]
Link do Lowcoder: https://$url_lowcoder
Usuario: Precisa de criar dentro do LowCoder
Senha: Precisa de criar dentro do LowCoder
API_KEY: $encryption_key_lowcoder3
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ lowcoder ]\e[0m"
echo ""
echo -e "\e[97mLink do Lowcoder:\e[33m https://$url_lowcoder\e[0m"
echo ""
echo -e "\e[97mUsuario:\e[33m Precisa de criar dentro do LowCoder\e[0m"
echo ""
echo -e "\e[97mSenha:\e[33m Precisa de criar dentro do LowCoder\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██╗ ██╗██╗ ██╗███╗ ███╗██╗ ██╗██╗ ██╗██████╗
## ██║ ██║██║ ██║████╗ ████║██║ ██║██║ ██║██╔══██╗
## ███████║██║ ██║██╔████╔██║███████║██║ ██║██████╔╝
## ██╔══██║██║ ██║██║╚██╔╝██║██╔══██║██║ ██║██╔══██╗
## ██║ ██║╚██████╔╝██║ ╚═╝ ██║██║ ██║╚██████╔╝██████╔╝
## ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝
ferramenta_humhub() {
# Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_humhub
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
## Pergunta o Dominio da ferramenta
echo -e "\e[97mPasso$amarelo 1/10\e[0m"
echo -en "\e[33mDigite o Dominio para o HumHub (ex: humhub.oriondesign.art.br): \e[0m" && read -r url_humhub
echo ""
## Pergunta o usuario da ferramenta
echo -e "\e[97mPasso$amarelo 2/10\e[0m"
echo -e "$amarelo--> AutoConfig é uma função que pula as etapas de configurações pós instalação"
echo -en "\e[33mUsar o AutoConfig do HumHub (exemplo: 0 para não ou 1 para sim): \e[0m" && read -r autoconfig_humhub_valor
echo ""
if [ "$autoconfig_humhub_valor" -eq 1 ]; then
autoconfig_humhub="- HUMHUB_AUTO_INSTALL=1"
elif [ "$autoconfig_humhub_valor" -eq 0 ]; then
autoconfig_humhub="#- HUMHUB_AUTO_INSTALL=0"
else
echo "Erro ao receber resposta do AutoConfig. Resposta precisa ser 0 ou 1"
echo "Definindo para 0"
autoconfig_humhub_valor="0"
autoconfig_humhub="#- HUMHUB_AUTO_INSTALL=0"
fi
## Pergunta o usuario da ferramenta
echo -e "\e[97mPasso$amarelo 3/10\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ e/ou espaços"
echo -en "\e[33mDigite um Usuario Admin (ex: OrionDesign): \e[0m" && read -r user_humhub
echo ""
## Pergunta o email da ferramenta
echo -e "\e[97mPasso$amarelo 4/10\e[0m"
echo -en "\e[33mDigite o Email do Admin: (ex: [email protected]): \e[0m" && read -r email_humhub
echo ""
## Pergunta o senha da ferramenta
echo -e "\e[97mPasso$amarelo 5/10\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$"
echo -en "\e[33mDigite uma Senha para o Admin (ex: @Senha123_): \e[0m" && read -r pass_humhub
echo ""
## Pergunta o Email SMTP
echo -e "\e[97mPasso$amarelo 6/10\e[0m"
echo -en "\e[33mDigite um Email para o SMTP (ex: [email protected]): \e[0m" && read -r email_smtp_humhub
echo ""
## Pergunta o User SMTP
echo -e "\e[97mPasso$amarelo 7/10\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o Usuario do SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r user_smtp_humhub
echo ""
## Pergunta a Senha SMTP
echo -e "\e[97mPasso$amarelo 8/10\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do email (ex: @Senha123_): \e[0m" && read -r senha_smtp_humhub
echo ""
## Pergunta o Host SMTP
echo -e "\e[97mPasso$amarelo 9/10\e[0m"
echo -en "\e[33mDigite o Host SMTP do email (ex: smtp.hostinger.com): \e[0m" && read -r host_smtp_humhub
echo ""
## Pergunta a Porta SMTP
echo -e "\e[97mPasso$amarelo 10/10\e[0m"
echo -en "\e[33mDigite a Porta SMTP do email (ex: 465): \e[0m" && read -r porta_smtp_humhub
echo ""
if [ "$porta_smtp_humhub" -eq 465 ] || [ "$porta_smtp_humhub" -eq 25 ]; then
porta_smtp_humhub_conv=1
else
porta_smtp_humhub_conv=0
fi
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_humhub
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio do HumHub:\e[97m $url_humhub\e[0m"
echo ""
echo -e "\e[33mUsar AutoConfig:\e[97m $autoconfig_humhub\e[0m"
echo ""
## Informação sobre Usuario Admin
echo -e "\e[33mUsuario Admin:\e[97m $user_humhub\e[0m"
echo ""
## Informação sobre Email Admin
echo -e "\e[33mEmail do Admin:\e[97m $email_humhub\e[0m"
echo ""
## Informação sobre Senha Admin
echo -e "\e[33mSenha do Admin:\e[97m $pass_humhub\e[0m"
echo ""
## Informação sobre Senha Admin
echo -e "\e[33mEmail SMTP:\e[97m $email_smtp_humhub\e[0m"
echo ""
## Informação sobre Senha Admin
echo -e "\e[33mUsuario SMTP:\e[97m $user_smtp_humhub\e[0m"
echo ""
## Informação sobre Senha Admin
echo -e "\e[33mSenha SMTP:\e[97m $senha_smtp_humhub\e[0m"
echo ""
## Informação sobre Senha Admin
echo -e "\e[33mHost SMTP:\e[97m $host_smtp_humhub\e[0m"
echo ""
## Informação sobre Senha Admin
echo -e "\e[33mPorta SMTP:\e[97m $porta_smtp_humhub\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_humhub
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO HUMHUB \e[33m[1/5]\e[0m"
echo ""
sleep 1
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO MYSQL \e[33m[2/5]\e[0m"
echo ""
sleep 1
dados
verificar_container_mysql
if [ $? -eq 0 ]; then
pegar_senha_mysql > /dev/null 2>&1
else
ferramenta_mysql
pegar_senha_mysql > /dev/null 2>&1
fi
criar_banco_mysql_da_stack "humhub"
## Espera 30 segundos
wait_30_sec
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO REDIS \e[33m[3/5]\e[0m"
echo ""
sleep 1
## Cansei já de explicar o que isso faz kkkk
verificar_container_redis
if [ $? -eq 0 ]; then
sleep 1
else
ferramenta_redis > /dev/null 2>&1
fi
sleep 3
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO HUMHUB \e[33m[4/5]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > humhub.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
humhub:
image: mriedmann/humhub:latest
volumes:
- humhub_data:/var/www/localhost/htdocs/protected/modules
- humhub_uploads:/var/www/localhost/htdocs/uploads
- humhub_assets:/var/www/localhost/htdocs/assets
- humhub_themes:/var/www/localhost/htdocs/themes
networks:
- $nome_rede_interna
environment:
## Dados de acesso
- HUMHUB_ADMIN_USERNAME=$user_humhub
- HUMHUB_ADMIN_PASSWORD=$pass_humhub
- HUMHUB_EMAIL=$email_humhub
- HUMHUB_EMAIL_NAME=$user_humhub
- HUMHUB_ADMIN_EMAIL=$email_humhub
## Dados SMTP
- HUMHUB_MAILER_TRANSPORT_TYPE=smtp
- HUMHUB_MAILER_SYSTEM_EMAIL_ADDRESS=$email_smtp_humhub
- HUMHUB_MAILER_USERNAME=$user_smtp_humhub
- HUMHUB_MAILER_PASSWORD=$senha_smtp_humhub
- HUMHUB_MAILER_SYSTEM_EMAIL_NAME=Suporte
- HUMHUB_MAILER_HOSTNAME=$host_smtp_humhub
- HUMHUB_MAILER_PORT=$porta_smtp_humhub
- HUMHUB_MAILER_ALLOW_SELF_SIGNED_CERTS=$porta_smtp_humhub_conv ## 0 = TLS | 1 = SSL
## Dados do MySQL
- HUMHUB_DB_HOST=mysql
- HUMHUB_DB_USER=root
- HUMHUB_DB_PASSWORD=$senha_mysql
- HUMHUB_DB_NAME=humhub
$autoconfig_humhub
## Dados Redis
- HUMHUB_REDIS_HOSTNAME=redis
- HUMHUB_REDIS_PORT=6379
- HUMHUB_CACHE_EXPIRE_TIME=3600
- HUMHUB_CACHE_CLASS=yii\redis\Cache
- HUMHUB_QUEUE_CLASS=humhub\modules\queue\driver\Redis
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.humhub.rule=Host(\`$url_humhub\`)
- traefik.http.routers.humhub.entrypoints=websecure
- traefik.http.routers.humhub.tls.certresolver=letsencryptresolver
- traefik.http.routers.humhub.service=humhub
- traefik.http.services.humhub.loadbalancer.server.port=80
- traefik.http.services.humhub.loadbalancer.passHostHeader=true
## --------------------------- ORION --------------------------- ##
volumes:
humhub_data:
external: true
name: humhub_data
humhub_uploads:
external: true
name: humhub_uploads
humhub_themes:
external: true
name: humhub_themes
humhub_assets:
external: true
name: humhub_assets
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do HumHub"
fi
STACK_NAME="humhub"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c humhub.yaml humhub > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do humhub"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[5/5]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_calcom para verificar se o serviço esta online
wait_stack "humhub"
cd dados_vps
cat > dados_humhub <<EOL
[ HUMHUB ]
Dominio do humhub: $url_humhub
Usuario: $user_humhub
Email: $email_humhub
Senha: $pass_humhub
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ HUMHUB ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_humhub\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m $user_humhub\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m $pass_humhub\e[0m"
echo ""
echo -e "\e[33mHost MySQL:\e[97m mysql\e[0m"
echo ""
echo -e "\e[33mUsuario MySQL:\e[97m root\e[0m"
echo ""
echo -e "\e[33mSenha MySQL:\e[97m $senha_mysql\e[0m"
echo ""
echo -e "\e[33mBase de dados MySQL:\e[97m humhub\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██╗ █████╗ ███╗ ██╗ ██████╗ ███████╗██╗ ██████╗ ██╗ ██╗
## ██║ ██╔══██╗████╗ ██║██╔════╝ ██╔════╝██║ ██╔═══██╗██║ ██║
## ██║ ███████║██╔██╗ ██║██║ ███╗█████╗ ██║ ██║ ██║██║ █╗ ██║
## ██║ ██╔══██║██║╚██╗██║██║ ██║██╔══╝ ██║ ██║ ██║██║███╗██║
## ███████╗██║ ██║██║ ╚████║╚██████╔╝██║ ███████╗╚██████╔╝╚███╔███╔╝
## ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚══════╝ ╚═════╝ ╚══╝╚══╝
ferramenta_langflow() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_langflow
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio do Builder
echo -e "\e[97mPasso$amarelo 1/3\e[0m"
echo -en "\e[33mDigite o Dominio para LangFlow (ex: langflow.oriondesign.art.br): \e[0m" && read -r url_langflow
echo ""
##Pergunta o Usuario para a ferramenta
echo -e "\e[97mPasso$amarelo 2/3\e[0m"
echo -e "$amarelo--> Minimo 5 caracteres. Evite os caracteres especiais: \!#$ e/ou espaço"
echo -en "\e[33mDigite um usuario para o LangFlow (ex: admin): \e[0m" && read -r user_langflow
echo ""
##Pergunta a Senha para a ferramenta
echo -e "\e[97mPasso$amarelo 3/3\e[0m"
echo -e "$amarelo--> Evite os caracteres especiais: \!#$"
echo -en "\e[33mDigite uma senha para o usuario do LangFlow (ex: @Senha123_): \e[0m" && read -r pass_langflow
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_langflow
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do Builder
echo -e "\e[33mDominio do Langflow:\e[97m $url_langflow\e[0m"
echo ""
## Informação sobre URL do Builder
echo -e "\e[33mUsuario:\e[97m $user_langflow\e[0m"
echo ""
## Informação sobre URL do Builder
echo -e "\e[33mSenha:\e[97m $pass_langflow\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_langflow
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO LANGFLOW \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Nada nada nada.. só para aparecer a mensagem de passo..
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Aqui vamos fazer uma verificação se já existe Postgres e redis instalado
## Se tiver ele vai criar um banco de dados no postgres ou perguntar se deseja apagar o que já existe e criar outro
## Verifica container postgres e cria banco no postgres
verificar_container_postgres
if [ $? -eq 0 ]; then
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "langflow"
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO LANGFLOW \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando key Aleatória
#key_langflow=$(openssl rand -hex 16)
#key_langflow=$(openssl rand -hex 16 | sed 's/\(..\)/\1/g' | sed 's/\(....\)\(....\)\(....\)\(....\)\(....\)/\1-\2-\3-\4-\5/')
#key_langflow=$(curl -s https://www.uuidgenerator.net/api/version1)
key_langflow=$(python3 -c 'from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())')
## Criando a stack
cat > langflow.yaml <<EOL
version: "3.8"
services:
## --------------------------- ORION --------------------------- ##
langflow:
image: langflowai/langflow:latest
volumes:
- langflow_data:/app/langflow
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados de acesso
- LANGFLOW_AUTO_LOGIN=false
- LANGFLOW_SUPERUSER=$user_langflow
- LANGFLOW_SUPERUSER_PASSWORD=$pass_langflow
- LANGFLOW_HOST=0.0.0.0
- BACKEND_URL=https://$url_langflow
## Secret Key
## Gere em: https://www.uuidgenerator.net/api/version1
- LANGFLOW_SECRET_KEY=$key_langflow
## Permitir novas incrições
- LANGFLOW_NEW_USER_IS_ACTIVE=false ## false = Precisa autorizar novas inscrições
## Dados do Postgres
- LANGFLOW_DATABASE_URL=postgresql://postgres:$senha_postgres@postgres:5432/langflow
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.langflow.rule=Host(\`$url_langflow\`) ## Url da aplicação
- traefik.http.services.langflow.loadBalancer.server.port=7860
- traefik.http.routers.langflow.service=langflow
- traefik.http.routers.langflow.entrypoints=websecure
- traefik.http.routers.langflow.tls.certresolver=letsencryptresolver
## --------------------------- ORION --------------------------- ##
volumes:
langflow_data:
external: true
name: langflow_data
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do langflow"
fi
STACK_NAME="langflow"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c langflow.yaml langflow > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do langflow"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "langflow" para verificar se o serviço esta online
wait_stack "langflow"
cd dados_vps
cat > dados_langflow <<EOL
[ LANGFLOW ]
Dominio do langflow: https://$url_langflow
Usuario: $user_langflow
Senha: $pass_langflow
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ LANGFLOW ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_langflow\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m $user_langflow\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m $pass_langflow\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
##███████╗███████╗██████╗
##╚══███╔╝██╔════╝██╔══██╗
## ███╔╝ █████╗ ██████╔╝
## ███╔╝ ██╔══╝ ██╔═══╝
##███████╗███████╗██║
##╚══════╝╚══════╝╚═╝
ferramenta_zep() {
# Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_zep
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
## Pergunta o Dominio da ferramenta
echo -e "\e[97mPasso$amarelo 1/3\e[0m"
echo -en "\e[33mDigite o Dominio para o Zep (ex: zep.oriondesign.art.br): \e[0m" && read -r url_zep
echo ""
## Pergunta o nome do Usuario do Motor
echo -e "\e[97mPasso$amarelo 2/3\e[0m"
echo -en "\e[33mApiKey OpenAI: \e[0m" && read -r apikey_openai_zep
echo ""
## Criando uma Encryption Key Aleatória
encryption_key_zep=$(openssl rand -hex 16)
## Pergunta o nome do Senha do Motor
echo -e "\e[97mPasso$amarelo 3/3\e[0m"
echo -en "\e[33mApiKey para o ZEP (ex: $encryption_key_zep): \e[0m" && read -r apikey_zep
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_zep
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre o dominio
echo -e "\e[33mDominio do Zep:\e[97m $url_zep\e[0m"
echo ""
## Informação sobre o usuario
echo -e "\e[33mApiKey da OpenAI:\e[97m $apikey_openai_zep\e[0m"
echo ""
## Informação sobre a senha
echo -e "\e[33mApiKey do Zep:\e[97m $apikey_zep\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_zep
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO ZEP \e[33m[1/4]\e[0m"
echo ""
sleep 1
git clone --depth 1 https://github.com/getzep/zep.git > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Baixando Repositório do Zep"
else
echo "1/1 - [ OFF ] - Baixando Repositório do Zep"
echo "Não foi possivel Baixar."
fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES VECTOR \e[33m[2/4]\e[0m"
echo ""
sleep 1
dados
verificar_container_pgvector
if [ $? -eq 0 ]; then
echo ""
pegar_senha_pgvector > /dev/null 2>&1
criar_banco_pgvector_da_stack "zep" #> /dev/null 2>&1
else
ferramenta_pgvector #> /dev/null 2>&1
pegar_senha_pgvector > /dev/null 2>&1
criar_banco_pgvector_da_stack "zep" #> /dev/null 2>&1
fi
sleep 5
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO ZEP \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > zep.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
nlp:
image: ghcr.io/getzep/zep-nlp-server:latest
networks:
- $nome_rede_interna
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
## --------------------------- ORION --------------------------- ##
zep:
image: ghcr.io/getzep/zep:latest
volumes:
- /root/zep/config.yaml:/app/config.yaml
networks:
- $nome_rede_interna
environment:
## Dados Postgres
- ZEP_STORE_TYPE=postgres
- ZEP_STORE_POSTGRES_DSN=postgres://postgres:$senha_pgvector@pgvector:5432/zep?sslmode=disable
## Dados de acesso:
- ZEP_AUTH_SECRET=$apikey_zep
## Dados OpenAI
- ZEP_OPENAI_API_KEY=$apikey_openai_zep
## Dados NLP
- ZEP_NLP_SERVER_URL=http://nlp:5557
## Configurações de extração
- ZEP_EXTRACTORS_DOCUMENTS_EMBEDDINGS_SERVICE=openai
- ZEP_EXTRACTORS_DOCUMENTS_EMBEDDINGS_DIMENSIONS=1536
- ZEP_EXTRACTORS_MESSAGES_EMBEDDINGS_SERVICE=openai
- ZEP_EXTRACTORS_MESSAGES_EMBEDDINGS_DIMENSIONS=1536
- ZEP_EXTRACTORS_MESSAGES_SUMMARIZER_EMBEDDINGS_SERVICE=openai
- ZEP_EXTRACTORS_MESSAGES_SUMMARIZER_EMBEDDINGS_DIMENSIONS=1536
## Degub:
- ZEP_LOG_LEVEL=debug
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.zep.rule=Host(\`$url_zep\`)
- traefik.http.routers.zep.entrypoints=websecure
- traefik.http.routers.zep.tls.certresolver=letsencryptresolver
- traefik.http.services.zep.loadbalancer.server.port=8000
- traefik.http.services.zep.loadbalancer.passHostHeader=true
- traefik.http.routers.zep.service=zep
## --------------------------- ORION --------------------------- ##
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Zep"
fi
STACK_NAME="zep"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c zep.yaml zep #> /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do zep"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
## Usa o serviço wait_zep para verificar se o serviço esta online
wait_stack "zep"
wait_30_sec
cd dados_vps
cat > dados_zep <<EOL
[ ZEP ]
Dominio do Zep: https://$url_zep/admin
ApiKey da OpenAI: $apikey_openai_zep
ApiKey do Zep: $apikey_zep
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ ZEP ]\e[0m"
echo ""
echo -e "\e[97mDominio:\e[33m https://$url_zep/admin\e[0m"
echo ""
echo -e "\e[97mApiKey do Zep:\e[33m $apikey_zep\e[0m"
echo ""
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██████╗ ███████╗███╗ ██╗ ██████╗ ██████╗ ██████╗ ██╗███████╗ ██████╗████████╗
## ██╔═══██╗██╔══██╗██╔════╝████╗ ██║ ██╔══██╗██╔══██╗██╔═══██╗ ██║██╔════╝██╔════╝╚══██╔══╝
## ██║ ██║██████╔╝█████╗ ██╔██╗ ██║ ██████╔╝██████╔╝██║ ██║ ██║█████╗ ██║ ██║
## ██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██╔═══╝ ██╔══██╗██║ ██║██ ██║██╔══╝ ██║ ██║
## ╚██████╔╝██║ ███████╗██║ ╚████║ ██║ ██║ ██║╚██████╔╝╚█████╔╝███████╗╚██████╗ ██║
## ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚════╝ ╚══════╝ ╚═════╝ ╚═╝
ferramenta_openproject() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_openproject
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o dominio para o OpenProject (ex: openproject.oriondesign.art.br): \e[0m" && read -r url_openproject
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_openproject
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do openproject
echo -e "\e[33mDominio do OpenProject:\e[97m $url_openproject\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_minio
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO OPENPROJECT \e[33m[1/5]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/5]\e[0m"
echo ""
sleep 1
## Cansei já de explicar o que isso faz kkkk
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "openproject"
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO REDIS \e[33m[3/5]\e[0m"
echo ""
sleep 1
verificar_container_redis
if [ $? -eq 0 ]; then
sleep 1
else
ferramenta_redis > /dev/null 2>&1
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO OPENPROJECT \e[33m[4/5]\e[0m"
echo ""
sleep 1
key_openproject=$(openssl rand -hex 16)
## Criando a stack
cat > openproject.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
openproject:
image: openproject/openproject:14.1.1
volumes:
- openproject_pgdata:/var/openproject/pgdata
- openproject_assets:/var/openproject/assets
networks:
- $nome_rede_interna
environment:
## Secret Key
- OPENPROJECT_SECRET_KEY_BASE=$key_openproject
## Dominio:
- OPENPROJECT_HOST__NAME=$url_openproject
- OPENPROJECT_HTTPS=true
## Dados do Redis
- OPENPROJECT_RAILS__CACHE__STORE=redis
- OPENPROJECT_CACHE_REDIS_URL=redis://redis:6379
## Dados do Postgres
- DATABASE_URL=postgresql://postgres:$senha_postgres@postgres:5432/openproject
## Configurações
- OPENPROJECT_DEFAULT__LANGUAGE=pt-BR
## Dados SMTP
## Deixei comentado pois a environment da senha não esta funcionando como o esperado
#- OPENPROJECT_EMAIL__DELIVERY__METHOD=smtp
#- [email protected]
#- OPENPROJECT_SMTP__USER__NAME=Usuario_do_Email
#- OPENPROJECT_SMTP__DOMAIN=dominio.com
#- OPENPROJECT_SMTP__PASSWORD=Senha_do_Email
#- OPENPROJECT_SMTP__ADDRESS=smtp.dominio.com
#- OPENPROJECT_SMTP__PORT=587
#- OPENPROJECT_SMTP__ENABLE__STARTTLS__AUTO=true
#- OPENPROJECT_SMTP__AUTHENTICATION=plain
#- OPENPROJECT_SMTP__OPENSSL__VERIFY__MODE=peer
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=1
- traefik.http.routers.openproject.rule=Host(\`$url_openproject\`)
- traefik.http.routers.openproject.entrypoints=websecure
- traefik.http.routers.openproject.priority=1
- traefik.http.routers.openproject.tls.certresolver=letsencryptresolver
- traefik.http.routers.openproject.service=openproject
- traefik.http.services.openproject.loadbalancer.server.port=8080
- traefik.http.services.openproject.loadbalancer.passHostHeader=true
## --------------------------- ORION --------------------------- ##
volumes:
openproject_pgdata:
external: true
name: openproject_pgdata
openproject_assets:
external: true
name: openproject_assets
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do OpenProject"
fi
STACK_NAME="openproject"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c openproject.yaml openproject > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do openproject"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "openproject" para verificar se o serviço esta online
wait_stack "openproject"
cd dados_vps
cat > dados_openproject <<EOL
[ OPENPROJECT ]
Dominio do openproject: https://$url_openproject
Usuario: admin
Senha: admin
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ OPENPROJECT ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_openproject\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m admin\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m admin\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██╗ ██╗ ██████╗ ██╗ ██╗██████╗ ██╗ ███████╗
## ╚██╗ ██╔╝██╔═══██╗██║ ██║██╔══██╗██║ ██╔════╝
## ╚████╔╝ ██║ ██║██║ ██║██████╔╝██║ ███████╗
## ╚██╔╝ ██║ ██║██║ ██║██╔══██╗██║ ╚════██║
## ██║ ╚██████╔╝╚██████╔╝██║ ██║███████╗███████║
## ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝
ferramenta_yourls() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_yourls
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/3\e[0m"
echo -en "\e[33mDigite o dominio para o Yourls (ex: yourls.oriondesign.art.br): \e[0m" && read -r url_yourls
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 2/3\e[0m"
echo -en "\e[33mDigite o Usuario (ex: oriondesign): \e[0m" && read -r user_yourls
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 3/3\e[0m"
echo -en "\e[33mDigite a Senha do usuario (ex: @Senha123_): \e[0m" && read -r pass_yourls
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_yourls
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do yourls
echo -e "\e[33mDominio do Yourls:\e[97m $url_yourls\e[0m"
echo ""
## Informação sobre URL do yourls
echo -e "\e[33mUsuario:\e[97m $user_yourls\e[0m"
echo ""
## Informação sobre URL do yourls
echo -e "\e[33mSenha:\e[97m $pass_yourls\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_yourls
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO YOURLS \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO MYSQL \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Cansei já de explicar o que isso faz kkkk
verificar_container_mysql
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_mysql > /dev/null 2>&1
else
ferramenta_mysql
pegar_senha_mysql > /dev/null 2>&1
fi
criar_banco_mysql_da_stack "yourls"
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO YOURLS \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > yourls.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
yourls:
image: yourls:latest
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados de acesso
- YOURLS_SITE=https://$url_yourls ## Url da Aplicação
- YOURLS_USER=$user_yourls
- YOURLS_PASS=$pass_yourls
## Dados do Mysql
- YOURLS_DB_HOST=mysql:3306
- YOURLS_DB_NAME=yourls
- YOURLS_DB_USER=root
- YOURLS_DB_PASS=$senha_mysql
deploy:
mode: replicated
replicas: 1
resources:
limits:
cpus: "0.5"
memory: 512M
labels:
- traefik.enable=true
- traefik.http.routers.yourls.rule=Host(\`$url_yourls\`) ## Url da aplicação
- traefik.http.routers.yourls.entrypoints=websecure
- traefik.http.routers.yourls.tls.certresolver=letsencryptresolver
- traefik.http.routers.yourls.service=yourls
- traefik.http.services.yourls.loadbalancer.server.port=80
## --------------------------- ORION --------------------------- ##
networks:
$nome_rede_interna: ## Nome da rede interna
name: $nome_rede_interna ## Nome da rede interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Yourls"
fi
STACK_NAME="yourls"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c yourls.yaml yourls > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do yourls"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "yourls" para verificar se o serviço esta online
wait_stack "yourls"
cd dados_vps
cat > dados_yourls <<EOL
[ YOURLS ]
Dominio do Yourls: https://$url_yourls/admin
Usuario: $user_yourls
Senha: $pass_yourls
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ YOURLS ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_yourls/admin\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar no primeiro acesso do Yourls\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do Yourls\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ████████╗██╗ ██╗███████╗███╗ ██╗████████╗██╗ ██╗ ██████╗██████╗ ███╗ ███╗
## ╚══██╔══╝██║ ██║██╔════╝████╗ ██║╚══██╔══╝╚██╗ ██╔╝██╔════╝██╔══██╗████╗ ████║
## ██║ ██║ █╗ ██║█████╗ ██╔██╗ ██║ ██║ ╚████╔╝ ██║ ██████╔╝██╔████╔██║
## ██║ ██║███╗██║██╔══╝ ██║╚██╗██║ ██║ ╚██╔╝ ██║ ██╔══██╗██║╚██╔╝██║
## ██║ ╚███╔███╔╝███████╗██║ ╚████║ ██║ ██║ ╚██████╗██║ ██║██║ ╚═╝ ██║
## ╚═╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝
ferramenta_twentycrm() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_twentycrm
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/6\e[0m"
echo -en "\e[33mDigite o dominio para o TwentyCRM (ex: twentycrm.oriondesign.art.br): \e[0m" && read -r url_twentycrm
echo ""
## Pergunta o email SMTP
echo -e "\e[97mPasso$amarelo 2/6\e[0m"
echo -en "\e[33mDigite o Email para SMTP (ex: [email protected]): \e[0m" && read -r email_smtp_twentycrm
echo ""
##Pergunta o usuário do Email SMTP
echo -e "\e[97mPasso$amarelo 3/6\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o Usuário para SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r user_smtp_twentycrm
echo ""
## Pergunta a senha do SMTP
echo -e "\e[97mPasso$amarelo 4/6\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do Email (ex: @Senha123_): \e[0m" && read -r pass_smtp_twentycrm
echo ""
## Pergunta o Host SMTP do email
echo -e "\e[97mPasso$amarelo 5/6\e[0m"
echo -en "\e[33mDigite o Host SMTP do Email (ex: smtp.hostinger.com): \e[0m" && read -r host_smtp_twentycrm
echo ""
## Pergunta a porta SMTP do email
echo -e "\e[97mPasso$amarelo 6/6\e[0m"
echo -en "\e[33mDigite a porta SMTP do Email (ex: 465): \e[0m" && read -r porta_smtp_twentycrm
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_twentycrm
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do twentycrm
echo -e "\e[33mDominio do TwentyCRM:\e[97m $url_twentycrm\e[0m"
echo ""
## Informação sobre URL do twentycrm
echo -e "\e[33mEmail SMTP:\e[97m $email_smtp_twentycrm\e[0m"
echo ""
## Informação sobre URL do twentycrm
echo -e "\e[33mUsuario do SMTP:\e[97m $user_smtp_twentycrm\e[0m"
echo ""
## Informação sobre URL do twentycrm
echo -e "\e[33mSenha do Email SMTP:\e[97m $pass_smtp_twentycrm\e[0m"
echo ""
## Informação sobre URL do twentycrm
echo -e "\e[33mHost SMTP:\e[97m $host_smtp_twentycrm\e[0m"
echo ""
## Informação sobre URL do twentycrm
echo -e "\e[33mPorta SMTP:\e[97m $porta_smtp_twentycrm\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_twentycrm
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO TWENTYCRM \e[33m[1/3]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO TWENTYCRM \e[33m[2/3]\e[0m"
echo ""
sleep 1
senha_postgres_twentycrm=$(openssl rand -hex 16)
Key_aleatoria_twentycrm_1=$(openssl rand -hex 16)
Key_aleatoria_twentycrm_2=$(openssl rand -hex 16)
Key_aleatoria_twentycrm_3=$(openssl rand -hex 16)
Key_aleatoria_twentycrm_4=$(openssl rand -hex 16)
## Criando a stack
cat > twentycrm.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
twentycrm_server:
image: twentycrm/twenty:latest
volumes:
- twentycrm_data:/app/packages/twenty-server/local
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados de acesso
- SERVER_URL=https://$url_twentycrm
- FRONT_BASE_URL=https://$url_twentycrm
- PORT=3000
## Dados postgres
- PG_DATABASE_URL=postgres://postgres:$senha_postgres_twentycrm@twentycrm_db:5432/default
- MESSAGE_QUEUE_TYPE=pg-boss
- ENABLE_DB_MIGRATIONS=true
- AUTH_PASSWORD_ENABLED=true
- IS_SIGN_UP_DISABLED=false ## true = desativar cadastros || false = permitir cadastros
## Dados SMTP
- EMAIL_DRIVER=smtp
- EMAIL_FROM_NAME=Suporte TwentyCRM
- EMAIL_FROM_ADDRESS=$email_smtp_twentycrm ## Email SMTP
- EMAIL_SYSTEM_ADDRESS=$email_smtp_twentycrm ## Email SMTP
- EMAIL_SMTP_USER=$user_smtp_twentycrm ## User SMTP
- EMAIL_SMTP_PASSWORD=$pass_smtp_twentycrm
- EMAIL_SMTP_HOST=$host_smtp_twentycrm ## Host SMTP
- EMAIL_SMTP_PORT=$porta_smtp_twentycrm ## Porta SMTP
## Logs
- SIGN_IN_PREFILLED=true
## Dados de armazenamento
#- STORAGE_TYPE=local
#- STORAGE_S3_REGION=
#- STORAGE_S3_NAME=twentycrm
#- STORAGE_S3_ENDPOINT=
## Secret Keys
- ACCESS_TOKEN_SECRET=$Key_aleatoria_twentycrm_1 ## sua key aleatória
- LOGIN_TOKEN_SECRET=$Key_aleatoria_twentycrm_2 ## sua key aleatória
- REFRESH_TOKEN_SECRET=$Key_aleatoria_twentycrm_3 ## sua key aleatória
- FILE_TOKEN_SECRET=$Key_aleatoria_twentycrm_4 ## sua key aleatória
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 4192M
labels:
- traefik.enable=true
- traefik.http.routers.twentycrm.rule=Host(\`$url_twentycrm\`) ## Url da aplicação
- traefik.http.services.twentycrm.loadbalancer.server.port=3000
- traefik.http.routers.twentycrm.service=twentycrm
- traefik.http.routers.twentycrm.tls.certresolver=letsencryptresolver
- traefik.http.routers.twentycrm.entrypoints=websecure
- traefik.http.routers.twentycrm.tls=true
## --------------------------- ORION --------------------------- ##
twentycrm_worker:
image: twentycrm/twenty:latest
command: ["yarn", "worker:prod"]
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados de acesso
- SERVER_URL=https://$url_twentycrm
- FRONT_BASE_URL=https://$url_twentycrm
- PORT=3000
## Dados postgres
- PG_DATABASE_URL=postgres://postgres:$senha_postgres_twentycrm@twentycrm_db:5432/default
- MESSAGE_QUEUE_TYPE=pg-boss
- ENABLE_DB_MIGRATIONS=true
- AUTH_PASSWORD_ENABLED=true
- IS_SIGN_UP_DISABLED=false ## true = desativar cadastros || false = permitir cadastros
## Dados SMTP
- EMAIL_DRIVER=smtp
- EMAIL_FROM_NAME=Suporte TwentyCRM
- EMAIL_FROM_ADDRESS=$email_smtp_twentycrm ## Email SMTP
- EMAIL_SYSTEM_ADDRESS=$email_smtp_twentycrm ## Email SMTP
- EMAIL_SMTP_USER=$user_smtp_twentycrm ## User SMTP
- EMAIL_SMTP_PASSWORD=$pass_smtp_twentycrm
- EMAIL_SMTP_HOST=$host_smtp_twentycrm ## Host SMTP
- EMAIL_SMTP_PORT=$porta_smtp_twentycrm ## Porta SMTP
## Logs
- SIGN_IN_PREFILLED=true
## Dados de armazenamento
#- STORAGE_TYPE=local
#- STORAGE_S3_REGION=
#- STORAGE_S3_NAME=twentycrm
#- STORAGE_S3_ENDPOINT=
## Secret Keys
- ACCESS_TOKEN_SECRET=$Key_aleatoria_twentycrm_1 ## sua key aleatória
- LOGIN_TOKEN_SECRET=$Key_aleatoria_twentycrm_2 ## sua key aleatória
- REFRESH_TOKEN_SECRET=$Key_aleatoria_twentycrm_3 ## sua key aleatória
- FILE_TOKEN_SECRET=$Key_aleatoria_twentycrm_4 ## sua key aleatória
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
## --------------------------- ORION --------------------------- ##
twentycrm_db:
image: twentycrm/twenty-postgres:latest
volumes:
- twentycrm_db_data:/bitnami/postgresql
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
- POSTGRES_PASSWORD=$senha_postgres_twentycrm ## Senha do seu postgres
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
## --------------------------- ORION --------------------------- ##
volumes:
twentycrm_data:
external: true
name: twentycrm_data
twentycrm_db_data:
external: true
name: twentycrm_db_data
networks:
$nome_rede_interna: ## Nome da sua rede interna
name: $nome_rede_interna ## Nome da sua rede interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do twentycrm"
fi
STACK_NAME="twentycrm"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c twentycrm.yaml twentycrm > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do twentycrm"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "twentycrm" para verificar se o serviço esta online
wait_stack "twentycrm"
cd dados_vps
cat > dados_twentycrm <<EOL
[ TWENTYCRM ]
Dominio do TwentyCRM: https://$url_twentycrm
Usuario: Precisa criar no primeiro acesso do TwentyCRM
Senha: Precisa criar no primeiro acesso do TwentyCRM
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ TWENTYCRM ]\e[0m"
echo ""
echo -e "\e[33mDominio do TwentyCRM:\e[97m https://$url_twentycrm\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar no primeiro acesso do TwentyCRM\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do TwentyCRM\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███╗ ███╗ █████╗ ████████╗████████╗███████╗██████╗ ███╗ ███╗ ██████╗ ███████╗████████╗
## ████╗ ████║██╔══██╗╚══██╔══╝╚══██╔══╝██╔════╝██╔══██╗████╗ ████║██╔═══██╗██╔════╝╚══██╔══╝
## ██╔████╔██║███████║ ██║ ██║ █████╗ ██████╔╝██╔████╔██║██║ ██║███████╗ ██║
## ██║╚██╔╝██║██╔══██║ ██║ ██║ ██╔══╝ ██╔══██╗██║╚██╔╝██║██║ ██║╚════██║ ██║
## ██║ ╚═╝ ██║██║ ██║ ██║ ██║ ███████╗██║ ██║██║ ╚═╝ ██║╚██████╔╝███████║ ██║
## ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═╝
ferramenta_mattermost() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_mattermost
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o dominio para o Mattermost (ex: mattermost.oriondesign.art.br): \e[0m" && read -r url_mattermost
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_mattermost
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do mattermost
echo -e "\e[33mDominio do Mattermost:\e[97m $url_mattermost\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_mattermost
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO MATTERMOST \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Cansei já de explicar o que isso faz kkkk
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "mattermost"
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO MATTERMOST \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > mattermost.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
mattermost:
image: mattermost/mattermost-team-edition:latest
volumes:
- mattermost_data:/mattermost/data
- mattermost_config:/mattermost/config
- mattermost_logs:/mattermost/logs
- mattermost_plugins:/mattermost/plugins
- mattermost_client_plugins:/mattermost/client/plugins
networks:
- $nome_rede_interna
environment:
## Dados de acesso
- MM_SERVICESETTINGS_SITEURL=https://$url_mattermost
## Dados do Postgres
- MM_SQLSETTINGS_DRIVERNAME=postgres
- MM_SQLSETTINGS_DATASOURCE=postgres://postgres:$senha_postgres@postgres:5432/mattermost?sslmode=disable&connect_timeout=10
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.mattermost.rule=Host(\`$url_mattermost\`)
- traefik.http.routers.mattermost.entrypoints=websecure
- traefik.http.routers.mattermost.tls.certresolver=letsencryptresolver
- traefik.http.routers.mattermost.service=mattermost
- traefik.http.services.mattermost.loadbalancer.server.port=8065
- traefik.http.services.mattermost.loadbalancer.passhostheader=true
- traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https
- traefik.http.routers.mattermost.middlewares=sslheader@docker
## --------------------------- ORION --------------------------- ##
volumes:
mattermost_data:
external: true
name: mattermost_data
mattermost_config:
external: true
name: mattermost_config
mattermost_logs:
external: true
name: mattermost_logs
mattermost_plugins:
external: true
name: mattermost_plugins
mattermost_client_plugins:
external: true
name: mattermost_client_plugins
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do mattermost"
fi
STACK_NAME="mattermost"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c mattermost.yaml mattermost > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do mattermost"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "mattermost" para verificar se o serviço esta online
wait_stack "mattermost"
cd dados_vps
cat > dados_mattermost <<EOL
[ MATTERMOST ]
Dominio do Mattermost: https://$url_mattermost
Usuario: Precisa criar no primeiro acesso do Mattermost
Senha: Precisa criar no primeiro acesso do Mattermost
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ MATTERMOST ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_mattermost\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar no primeiro acesso do Mattermost\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do Mattermost\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██╗ ██╗████████╗██╗ ██╗███╗ ██╗███████╗
## ██╔═══██╗██║ ██║╚══██╔══╝██║ ██║████╗ ██║██╔════╝
## ██║ ██║██║ ██║ ██║ ██║ ██║██╔██╗ ██║█████╗
## ██║ ██║██║ ██║ ██║ ██║ ██║██║╚██╗██║██╔══╝
## ╚██████╔╝╚██████╔╝ ██║ ███████╗██║██║ ╚████║███████╗
## ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝╚═╝╚═╝ ╚═══╝╚══════╝
ferramenta_outline() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_outline
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/4\e[0m"
echo -en "\e[33mDigite o dominio para o Outline (ex: outline.oriondesign.art.br): \e[0m" && read -r url_outline
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 2/4\e[0m"
echo -e "$amarelo--> Caso não tiver crie em: https://console.cloud.google.com/apis/credentials"
echo -en "\e[33mDigite o seu ID do Cliente Google (ex: XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com): \e[0m" && read -r id_google_outline
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 3/4\e[0m"
echo -e "$amarelo--> Caso não tiver crie em: https://console.cloud.google.com/apis/credentials"
echo -en "\e[33mDigite a sua Chave Secreta do Cliente Google (ex: XXXXXX-XXXXXXXXXXXXXXXXXXXXXXXX-XXX): \e[0m" && read -r key_google_outline
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 4/4\e[0m"
echo -e "$amarelo--> Caso não tiver crie em: https://console.cloud.google.com/apis/credentials"
echo -en "\e[33mDigite a sua API Key do Google (ex: XXXXXXXXXXX-XXXXXXXXXXXXX-XXXXXXXXXXXXX): \e[0m" && read -r api_google_outline
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_outline
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do outline
echo -e "\e[33mDominio do Outline:\e[97m $url_outline\e[0m"
echo ""
## Informação sobre URL do outline
echo -e "\e[33mID do Cliente Google:\e[97m $id_google_outline\e[0m"
echo ""
## Informação sobre URL do outline
echo -e "\e[33mChave Secreta do Cliente Google:\e[97m $key_google_outline\e[0m"
echo ""
## Informação sobre URL do outline
echo -e "\e[33mAPI Key do Google:\e[97m $api_google_outline\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_outline
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO OUTLINE \e[33m[1/5]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/5]\e[0m"
echo ""
sleep 1
## Cansei já de explicar o que isso faz kkkk
verificar_container_postgres
if [ $? -eq 0 ]; then
sleep 1
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "outline"
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO REDIS \e[33m[3/5]\e[0m"
echo ""
sleep 1
verificar_container_redis
if [ $? -eq 0 ]; then
sleep 1
else
ferramenta_redis > /dev/null 2>&1
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO outline \e[33m[4/5]\e[0m"
echo ""
sleep 1
Key_aleatoria_outline_1=$(openssl rand -hex 16)
Key_aleatoria_outline_2=$(openssl rand -hex 16)
## Criando a stack
cat > outline.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
outline:
image: outlinewiki/outline:0.75.0
volumes:
- outline_data:/var/lib/outline/data
networks:
- $nome_rede_interna
environment:
## Dados de acesso
- URL=https://$url_outline
- FORCE_HTTPS=true
## Desativar novos cadastros
- LIMITS_INVITATION_REQUIRED=false
# IDIOMA PADRÃO
- DEFAULT_LANGUAGE=pt_BR
## Secrets Keys
- SECRET_KEY=$Key_aleatoria_outline_1
- UTILS_SECRET=$Key_aleatoria_outline_2
## Dados Postgres
- DATABASE_URL=postgres://postgres:$senha_postgres@postgres:5432/outline
- DATABASE_URL_TEST=postgres://postgres:$senha_postgres@postgres:5432/outline_test
- PGSSLMODE=disable
## Dados Redis
- REDIS_URL=redis://redis:6379/3
## Dados sobre Armazenamento
- FILE_STORAGE=local
- FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data
- FILE_STORAGE_UPLOAD_MAX_SIZE=26214400
- FILE_STORAGE_IMPORT_MAX_SIZE=18874368
- FILE_STORAGE_WORKSPACE_IMPORT_MAX_SIZE=18874368
# LOGIN COM O GOOGLE
- GOOGLE_CLIENT_ID=$id_google_outline
- GOOGLE_CLIENT_SECRET=$key_google_outline
- NEXT_PUBLIC_GOOGLE_API_KEY=$api_google_outline
## Dados do SMTP
#- [email protected] ## Email SMTP
#- [email protected] ## Email SMTP
#- [email protected] ## Usuario SMTP
#- SMTP_PASSWORD=@Senha123_ ## Senha SMTP
#- SMTP_HOST=smtp.provedor.com ## Host SMTP
#- SMTP_PORT=587 ## Porta SMTP
#- SMTP_SECURE=false ## Se a porta for 465 ou 25 = true || Qualquer outra = false
## Outras configurações
- RATE_LIMITER_ENABLED=true
- RATE_LIMITER_REQUESTS=1000
- RATE_LIMITER_DURATION_WINDOW=60
- ENABLE_UPDATES=false
- WEB_CONCURRENCY=6
- DEBUG=http
- LOG_LEVEL=info
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.outline.rule=Host(\`$url_outline\`)
- traefik.http.routers.outline.entrypoints=websecure
- traefik.http.routers.outline.tls=true
- traefik.http.routers.outline.tls.certresolver=letsencryptresolver
- traefik.http.routers.outline.service=outline
- traefik.http.services.outline.loadbalancer.server.port=3000
## --------------------------- ORION --------------------------- ##
volumes:
outline_data:
external: true
name: outline_data
networks:
$nome_rede_interna:
external: true
name: $nome_rede_interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Outline"
fi
STACK_NAME="outline"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c outline.yaml outline > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do outline"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[5/5]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "outline" para verificar se o serviço esta online
wait_stack "outline"
cd dados_vps
cat > dados_outline <<EOL
[ OUTLINE ]
Dominio do Outline: https://$url_outline
Usuario: Login é feito com o Google
Senha: Login é feito com o Google
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ OUTLINE ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_outline\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Login é feito com o Google\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Login é feito com o Google\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███████╗ ██████╗ ██████╗ █████╗ ██╗ ██████╗ ██████╗ █████╗ ██████╗ ██████╗
## ██╔════╝██╔═══██╗██╔════╝██╔══██╗██║ ██╔══██╗██╔═══██╗██╔══██╗██╔══██╗██╔══██╗
## █████╗ ██║ ██║██║ ███████║██║ ██████╔╝██║ ██║███████║██████╔╝██║ ██║
## ██╔══╝ ██║ ██║██║ ██╔══██║██║ ██╔══██╗██║ ██║██╔══██║██╔══██╗██║ ██║
## ██║ ╚██████╔╝╚██████╗██║ ██║███████╗██████╔╝╚██████╔╝██║ ██║██║ ██║██████╔╝
## ╚═╝ ╚═════╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝
ferramenta_focalboard() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_focalboard
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o dominio para o FocalBoard (ex: focalboard.oriondesign.art.br): \e[0m" && read -r url_focalboard
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_focalboard
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do focalboard
echo -e "\e[33mDominio do FocalBoard:\e[97m $url_focalboard\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_focalboard
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO FOCALBOARD \e[33m[1/3]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO FOCALBOARD \e[33m[2/3]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > focalboard.yaml <<EOL
version: "3.8"
services:
## --------------------------- ORION --------------------------- ##
focalboard:
image: mattermost/focalboard:latest
volumes:
- fbdata:/opt/focalboard/data
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
- VIRTUAL_HOST=$url_focalboard ## Url da Aplicação
- VIRTUAL_PORT=8000
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.focalboard.rule=Host(\`$url_focalboard\`) ## Url da Aplicação
- traefik.http.services.focalboard.loadBalancer.server.port=8000
- traefik.http.routers.focalboard.service=focalboard
- traefik.http.routers.focalboard.entrypoints=websecure
- traefik.http.routers.focalboard.tls.certresolver=letsencryptresolver
## --------------------------- ORION --------------------------- ##
volumes:
fbdata:
external: true
name: fbdata
networks:
$nome_rede_interna: ## Nome da rede interna
external: true
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do focalboard"
fi
STACK_NAME="focalboard"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c focalboard.yaml focalboard > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do focalboard"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_focalboard para verificar se o serviço esta online
wait_stack "focalboard"
cd dados_vps
cat > dados_focalboard <<EOL
[ FOCALBOARD ]
Dominio do FocalBoard: https://$url_focalboard
Usuario: Precisa criar no primeiro acesso do FocalBoard
Senha: Precisa criar no primeiro acesso do FocalBoard
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ FOCALBOARD ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_focalboard\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar no primeiro acesso do FocalBoard\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do FocalBoard\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██╗ ██████╗ ██╗
## ██╔════╝ ██║ ██╔══██╗██║
## ██║ ███╗██║ ██████╔╝██║
## ██║ ██║██║ ██╔═══╝ ██║
## ╚██████╔╝███████╗██║ ██║
## ╚═════╝ ╚══════╝╚═╝ ╚═╝
ferramenta_glpi() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_glpi
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o dominio para o GLPI (ex: glpi.oriondesign.art.br): \e[0m" && read -r url_glpi
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_glpi
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do glpi
echo -e "\e[33mDominio do GLPI:\e[97m $url_glpi\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_glpi
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO GLPI \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO MYSQL \e[33m[2/4]\e[0m"
echo ""
sleep 1
## Cansei já de explicar o que isso faz kkkk
verificar_container_mysql
if [ $? -eq 0 ]; then
pegar_senha_mysql > /dev/null 2>&1
else
ferramenta_mysql
pegar_senha_mysql > /dev/null 2>&1
fi
criar_banco_mysql_da_stack "glpi"
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO GLPI \e[33m[3/4]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > glpi.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
glpi:
image: diouxx/glpi:latest
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- glpi_glpi:/var/www/html/glpi
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
- TIMEZONE=America/Sao_Paulo
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.glpi.rule=Host(\`$url_glpi\`)
- traefik.http.services.glpi.loadbalancer.server.port=80
- traefik.http.routers.glpi.service=glpi
- traefik.http.routers.glpi.tls.certresolver=letsencryptresolver
- traefik.http.routers.glpi.entrypoints=websecure
- traefik.http.routers.glpi.tls=true
## --------------------------- ORION --------------------------- ##
volumes:
glpi_glpi:
external: true
name: glpi_glpi
networks:
$nome_rede_interna: ## Nome da rede interna
name: $nome_rede_interna ## Nome da rede interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do GLPI"
fi
STACK_NAME="glpi"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c glpi.yaml glpi > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do glpi"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "glpi" para verificar se o serviço esta online
wait_stack "glpi"
cd dados_vps
cat > dados_glpi <<EOL
[ GLPI ]
Dominio do GLPI: https://$url_glpi
Usuario: glpi
Senha: glpi
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ GLPI ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_glpi\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m glpi\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m glpi\e[0m"
echo ""
echo -e "\e[33mEndereço do servidor SQL:\e[97m mysql\e[0m"
echo ""
echo -e "\e[33mUsuário SQL:\e[97m root\e[0m"
echo ""
echo -e "\e[33mSenha SQL:\e[97m $senha_mysql\e[0m"
echo ""
echo -e "\e[33mBanco de dados:\e[97m glpi\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## █████╗ ███╗ ██╗██╗ ██╗████████╗██╗ ██╗██╗███╗ ██╗ ██████╗ ██╗ ██╗ ███╗ ███╗
## ██╔══██╗████╗ ██║╚██╗ ██╔╝╚══██╔══╝██║ ██║██║████╗ ██║██╔════╝ ██║ ██║ ████╗ ████║
## ███████║██╔██╗ ██║ ╚████╔╝ ██║ ███████║██║██╔██╗ ██║██║ ███╗ ██║ ██║ ██╔████╔██║
## ██╔══██║██║╚██╗██║ ╚██╔╝ ██║ ██╔══██║██║██║╚██╗██║██║ ██║ ██║ ██║ ██║╚██╔╝██║
## ██║ ██║██║ ╚████║ ██║ ██║ ██║ ██║██║██║ ╚████║╚██████╔╝ ███████╗███████╗██║ ╚═╝ ██║
## ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚══════╝╚══════╝╚═╝ ╚═╝
ferramenta_anythingllm() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_anythingllm
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/3\e[0m"
echo -en "\e[33mDigite o dominio para o Anything LLM (ex: anythingllm.oriondesign.art.br): \e[0m" && read -r url_anythingllm
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 2/3\e[0m"
read -r ip _ <<<$(hostname -I)
echo -en "\e[33mDigite o dominio do Qdrant (ex: http://$ip ou http://qdrant.oriondesign.art.br): \e[0m" && read -r qdrant_anythingllm
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 3/3\e[0m"
key_dify_rand=$(openssl rand -hex 16)
echo -en "\e[33mDigite a Api Key do Qdrant (ex: $key_dify_rand): \e[0m" && read -r api_qdrant_anythingllm
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_anythingllm
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do anythingllm
echo -e "\e[33mDominio do Anything LLM:\e[97m $url_anythingllm\e[0m"
echo ""
echo -e "\e[33mDominio do Qdrant:\e[97m $qdrant_anythingllm\e[0m"
echo ""
echo -e "\e[33mApi Key do Qdrant:\e[97m $api_qdrant_anythingllm\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_anythingllm
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO ANYTHING LLM \e[33m[1/3]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO ANYTHING LLM \e[33m[2/3]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > anythingllm.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
anythingllm:
image: mintplexlabs/anythingllm:latest
volumes:
- anythingllm_storage:/app/server/storage
- anythingllm_hotdir:/app/collector/hotdir
- anythingllm_outputs:/app/collector/outputs
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
- SERVER_PORT=3001
- STORAGE_DIR=/app/server/storage
- UID=1000
- GID=1000
## Dados Qdrant
- VECTOR_DB=qdrant
- QDRANT_ENDPOINT=$qdrant_anythingllm
- QDRANT_API_KEY=$api_qdrant_anythingllm
- ENABLE_HTTPS=true
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.anythingllm.rule=Host(\`$url_anythingllm\`)
- traefik.http.services.anythingllm.loadbalancer.server.port=3001
- traefik.http.routers.anythingllm.service=anythingllm
- traefik.http.routers.anythingllm.tls.certresolver=letsencryptresolver
- traefik.http.routers.anythingllm.entrypoints=websecure
- traefik.http.routers.anythingllm.tls=true
## --------------------------- ORION --------------------------- ##
volumes:
anythingllm_storage:
external: true
name: anythingllm_storage
anythingllm_hotdir:
external: true
name: anythingllm_hotdir
anythingllm_outputs:
external: true
name: anythingllm_outputs
networks:
$nome_rede_interna: ## Nome da rede interna
name: $nome_rede_interna ## Nome da rede interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do anythingllm"
fi
STACK_NAME="anythingllm"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c anythingllm.yaml anythingllm > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do anythingllm"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "anythingllm" para verificar se o serviço esta online
wait_stack "anythingllm"
cd dados_vps
cat > dados_anythingllm <<EOL
[ ANYTHING LLM ]
Dominio do Anything LLM: https://$url_anythingllm
Usuario: Precisa criar no primeiro acesso do Anything LLM
Senha: Precisa criar no primeiro acesso do Anything LLM
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ ANYTHING LLM ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_anythingllm\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar no primeiro acesso do Anything LLM\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do Anything LLM\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███████╗██╗ ██╗ ██████╗ █████╗ ██╗ ██╗██████╗ ██████╗ █████╗ ██╗ ██╗
## ██╔════╝╚██╗██╔╝██╔════╝██╔══██╗██║ ██║██╔══██╗██╔══██╗██╔══██╗██║ ██║
## █████╗ ╚███╔╝ ██║ ███████║██║ ██║██║ ██║██████╔╝███████║██║ █╗ ██║
## ██╔══╝ ██╔██╗ ██║ ██╔══██║██║ ██║██║ ██║██╔══██╗██╔══██║██║███╗██║
## ███████╗██╔╝ ██╗╚██████╗██║ ██║███████╗██║██████╔╝██║ ██║██║ ██║╚███╔███╔╝
## ╚══════╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚══╝╚══╝
ferramenta_excalidraw() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_excalidraw
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o dominio para o Excalidraw (ex: excalidraw.oriondesign.art.br): \e[0m" && read -r url_excalidraw
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_excalidraw
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do excalidraw
echo -e "\e[33mDominio do Excalidraw:\e[97m $url_excalidraw\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_excalidraw
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO EXCALIDRAW \e[33m[1/3]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO EXCALIDRAW \e[33m[2/3]\e[0m"
echo ""
sleep 1
## Criando a stack
cat > excalidraw.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
excalidraw:
image: excalidraw/excalidraw:latest
volumes:
- excalidraw_data:/data
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
- EXCALIDRAW_PORT=80
- NODE_ENV=development
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.excalidraw.rule=Host(\`$url_excalidraw\`)
- traefik.http.services.excalidraw.loadbalancer.server.port=80
- traefik.http.routers.excalidraw.service=excalidraw
- traefik.http.routers.excalidraw.tls.certresolver=letsencryptresolver
- traefik.http.routers.excalidraw.entrypoints=websecure
- traefik.http.routers.excalidraw.tls=true
## --------------------------- ORION --------------------------- ##
volumes:
excalidraw_data:
external: true
name: excalidraw_data
networks:
$nome_rede_interna: ## Nome da rede interna
name: $nome_rede_interna ## Nome da rede interna
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do excalidraw"
fi
STACK_NAME="excalidraw"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c excalidraw.yaml excalidraw > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do excalidraw"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "excalidraw" para verificar se o serviço esta online
wait_stack "excalidraw"
cd dados_vps
cat > dados_excalidraw <<EOL
[ EXCALIDRAW ]
Dominio do Excalidraw: https://$url_excalidraw
Usuario: Precisa criar no primeiro acesso do Excalidraw
Senha: Precisa criar no primeiro acesso do Excalidraw
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ EXCALIDRAW ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_excalidraw\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar no primeiro acesso do Excalidraw\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do Excalidraw\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███████╗ █████╗ ███████╗██╗ ██╗██╗
## ██╔════╝██╔══██╗██╔════╝╚██╗ ██╔╝██║
## █████╗ ███████║███████╗ ╚████╔╝ ██║
## ██╔══╝ ██╔══██║╚════██║ ╚██╔╝ ╚═╝
## ███████╗██║ ██║███████║ ██║ ██╗
## ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝
##
## █████╗ ██████╗ ██████╗ ██████╗ ██╗███╗ ██╗████████╗███╗ ███╗███████╗███╗ ██╗████████╗███████╗
## ██╔══██╗██╔══██╗██╔══██╗██╔═══██╗██║████╗ ██║╚══██╔══╝████╗ ████║██╔════╝████╗ ██║╚══██╔══╝██╔════╝
## ███████║██████╔╝██████╔╝██║ ██║██║██╔██╗ ██║ ██║ ██╔████╔██║█████╗ ██╔██╗ ██║ ██║ ███████╗
## ██╔══██║██╔═══╝ ██╔═══╝ ██║ ██║██║██║╚██╗██║ ██║ ██║╚██╔╝██║██╔══╝ ██║╚██╗██║ ██║ ╚════██║
## ██║ ██║██║ ██║ ╚██████╔╝██║██║ ╚████║ ██║ ██║ ╚═╝ ██║███████╗██║ ╚████║ ██║ ███████║
## ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚══════╝
ferramenta_easyappointments() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_easyappointments
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/1\e[0m"
echo -en "\e[33mDigite o dominio para o Easy!Appointments (ex: easyappointments.oriondesign.art.br): \e[0m" && read -r url_easyappointments
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_easyappointments
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do easyappointments
echo -e "\e[33mDominio do Easy!Appointments:\e[97m $url_easyappointments\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_easyappointments
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO EASY!APPOINTMENTS \e[33m[1/4]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO MYSQL \e[33m[2/4]\e[0m"
echo ""
sleep 1
dados
verificar_container_mysql
if [ $? -eq 0 ]; then
pegar_senha_mysql > /dev/null 2>&1
else
ferramenta_mysql
pegar_senha_mysql > /dev/null 2>&1
fi
criar_banco_mysql_da_stack "easyapointments"
## Espera 30 segundos
wait_30_sec
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO EASY!APPOINTMENTS \e[33m[3/4]\e[0m"
echo ""
sleep 1
# Cria o arquivo com o conteúdo desejado
cat > apache-custom.conf << EOL
ServerName $url_easyappointments
EOL
# Cria o diretório, se ainda não existir
mkdir -p /root/easyappointments > /dev/null 2>&1
# Move o arquivo para o diretório de destino
sudo mv apache-custom.conf /root/easyappointments/apache-custom.conf
## Criando a stack
cat > easyappointments.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
easyapointments:
image: alextselegidis/easyappointments:latest
volumes:
- easyapointments_data:/var/www/html
- /root/easyappointments/apache-custom.conf:/etc/apache2/conf-enabled/custom.conf:ro
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados de acesso
- BASE_URL=https://$url_easyappointments
- APACHE_SERVER_NAME=$url_easyappointments
## Dados do banco de dados
- DB_HOST=mysql
- DB_NAME=easyapointments
- DB_USERNAME=root
- DB_PASSWORD=$senha_mysql
## Dados Google Calendar
- GOOGLE_SYNC_FEATURE=false
- GOOGLE_PRODUCT_NAME=
- GOOGLE_CLIENT_ID=
- GOOGLE_CLIENT_SECRET=
- GOOGLE_API_KEY=
## Modo de Debug
- DEBUG_MODE=TRUE
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.easyapointments.rule=Host(\`$url_easyappointments\`)
- traefik.http.services.easyapointments.loadbalancer.server.port=80
- traefik.http.routers.easyapointments.service=easyapointments
- traefik.http.routers.easyapointments.tls.certresolver=letsencryptresolver
- traefik.http.routers.easyapointments.entrypoints=websecure
- traefik.http.routers.easyapointments.tls=true
## --------------------------- ORION --------------------------- ##
volumes:
easyapointments_data:
external: true
name: easyapointments_data
networks:
$nome_rede_interna: ## Nome da rede interna
name: $nome_rede_interna ## Nome da rede interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Easy!Appointments"
fi
STACK_NAME="easyappointments"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c easyappointments.yaml easyappointments > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do easyappointments"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[4/4]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "easyappointments" para verificar se o serviço esta online
wait_stack "easyappointments"
cd dados_vps
cat > dados_easyappointments <<EOL
[ EASY!APPOINTMENTS ]
Dominio do Easy!Appointments: https://$url_easyappointments
Usuario: Precisa criar no primeiro acesso do Easy!Appointments
Senha: Precisa criar no primeiro acesso do Easy!Appointments
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ EASY!APPOINTMENTS ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_easyappointments\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m Precisa criar no primeiro acesso do Easy!Appointments\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do Easy!Appointments\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ██████╗ ██████╗ ██████╗██╗ ██╗███╗ ███╗███████╗███╗ ██╗███████╗ ██████╗
## ██╔══██╗██╔═══██╗██╔════╝██║ ██║████╗ ████║██╔════╝████╗ ██║██╔════╝██╔═══██╗
## ██║ ██║██║ ██║██║ ██║ ██║██╔████╔██║█████╗ ██╔██╗ ██║███████╗██║ ██║
## ██║ ██║██║ ██║██║ ██║ ██║██║╚██╔╝██║██╔══╝ ██║╚██╗██║╚════██║██║ ██║
## ██████╔╝╚██████╔╝╚██████╗╚██████╔╝██║ ╚═╝ ██║███████╗██║ ╚████║███████║╚██████╔╝
## ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝╚══════╝ ╚═════╝
ferramenta_documenso() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_documenso
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio do Builder
echo -e "\e[97mPasso$amarelo 1/8\e[0m"
echo -en "\e[33mDigite o Dominio para o Builder do Documenso (ex: documenso.oriondesign.art.br): \e[0m" && read -r url_documenso
echo ""
##Pergunta o Email SMTP
echo -e "\e[97mPasso$amarelo 2/8\e[0m"
echo -en "\e[33mDigite o Email para SMTP (ex: [email protected]): \e[0m" && read -r email_documenso
echo ""
##Pergunta o usuário do Email SMTP
echo -e "\e[97mPasso$amarelo 3/8\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o Usuário para SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r usuario_email_documenso
echo ""
## Pergunta a senha do SMTP
echo -e "\e[97mPasso$amarelo 4/8\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do Email (ex: @Senha123_): \e[0m" && read -r senha_email_documenso
echo ""
## Pergunta o Host SMTP do email
echo -e "\e[97mPasso$amarelo 5/8\e[0m"
echo -en "\e[33mDigite o Host SMTP do Email (ex: smtp.hostinger.com): \e[0m" && read -r smtp_email_documenso
echo ""
## Pergunta a porta SMTP do email
echo -e "\e[97mPasso$amarelo 6/8\e[0m"
echo -en "\e[33mDigite a porta SMTP do Email (ex: 465): \e[0m" && read -r porta_smtp_documenso
echo ""
## Verifica se a porta é 465, se sim deixa o ssl true, se não, deixa false
if [ "$porta_smtp_documenso" -eq 465 ]; then
smtp_secure_documenso=true
else
smtp_secure_documenso=false
fi
## Pergunta qual é o Access Key do minio
echo -e "\e[97mPasso$amarelo 7/8\e[0m"
echo -en "\e[33mAccess Key Minio: \e[0m" && read -r S3_ACCESS_KEY
echo ""
## Pergunta qual é a Secret Key do minio
echo -e "\e[97mPasso$amarelo 8/8\e[0m"
echo -en "\e[33mSecret Key Minio: \e[0m" && read -r S3_SECRET_KEY
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_documenso
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do Builder
echo -e "\e[33mDominio do Documenso:\e[97m $url_documenso\e[0m"
echo ""
## Informação sobre Email
echo -e "\e[33mEmail do SMTP:\e[97m $email_documenso\e[0m"
echo ""
## Informação sobre Email
echo -e "\e[33mUsuário do SMTP:\e[97m $usuario_email_documenso\e[0m"
echo ""
## Informação sobre Senha do Email
echo -e "\e[33mSenha do Email:\e[97m $senha_email_documenso\e[0m"
echo ""
## Informação sobre Host SMTP
echo -e "\e[33mHost SMTP do Email:\e[97m $smtp_email_documenso\e[0m"
echo ""
## Informação sobre Porta SMTP
echo -e "\e[33mPorta SMTP do Email:\e[97m $porta_smtp_documenso\e[0m"
echo ""
## Informação sobre Secure SMTP
echo -e "\e[33mSecure SMTP do Email:\e[97m $smtp_secure_documenso\e[0m"
echo ""
## Informação sobre Access Key
echo -e "\e[33mAccess Key Minio:\e[97m $S3_ACCESS_KEY\e[0m"
echo ""
## Informação sobre Secret Key
echo -e "\e[33mSecret Key Minio:\e[97m $S3_SECRET_KEY\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_documenso
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO DOCUMENSO \e[33m[1/5]\e[0m"
echo ""
sleep 1
## Nada nada nada.. só para aparecer a mensagem de passo..
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/5]\e[0m"
echo ""
sleep 1
## Aqui vamos fazer uma verificação se já existe Postgres instalado
## Se tiver ele vai criar um banco de dados no postgres ou perguntar se deseja apagar o que já existe e criar outro
## Verifica container postgres e cria banco no postgres
verificar_container_postgres
if [ $? -eq 0 ]; then
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "documenso"
## Mensagem de Passo
echo -e "\e[97m• PEGANDO DADOS DO MINIO \e[33m[3/5]\e[0m"
echo ""
sleep 1
pegar_senha_minio
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Pegando Senha do MinIO"
else
echo "1/2 - [ OFF ] - Pegando Senha do MinIO"
echo "Não foi possivel pegar a senha do minio"
fi
pegar_link_s3
if [ $? -eq 0 ]; then
echo "2/2 - [ OK ] - Pegando URL do S3"
else
echo "2/2 - [ OFF ] - Pegando URL do S3"
echo "Não foi possivel pegar o link do S3"
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO DOCUMENSO \e[33m[4/5]\e[0m"
echo ""
sleep 1
## Criando key Aleatória
key_documenso1=$(openssl rand -hex 16)
key_documenso2=$(openssl rand -hex 16)
key_documenso3=$(openssl rand -hex 16)
## Criando a stack
cat > documenso.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
documenso:
image: documenso/documenso:latest
volumes:
- documenso_cert:/opt/documenso/cert.p12
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados de Acesso
- PORT=3000
- NEXTAUTH_URL=https://$url_documenso
- NEXT_PUBLIC_WEBAPP_URL=https://$url_documenso
- NEXT_PUBLIC_MARKETING_URL=https://oriondesign.art.br
## Secret Keys
- NEXTAUTH_SECRET=$key_documenso1
- NEXT_PRIVATE_ENCRYPTION_KEY=$key_documenso2
- NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=$key_documenso3
## Dados do Google Cloud
#- NEXT_PRIVATE_GOOGLE_CLIENT_ID=
#- NEXT_PRIVATE_GOOGLE_CLIENT_SECRET=
## Dados Postgres
- NEXT_PRIVATE_DATABASE_URL=postgresql://postgres:$senha_postgres@postgres:5432/documenso
- NEXT_PRIVATE_DIRECT_DATABASE_URL=postgresql://postgres:$senha_postgres@postgres:5432/documenso
## Configurações MinIO
- NEXT_PUBLIC_UPLOAD_TRANSPORT=s3
- NEXT_PRIVATE_UPLOAD_ENDPOINT=https://$url_s3
- NEXT_PRIVATE_UPLOAD_FORCE_PATH_STYLE=true
- NEXT_PRIVATE_UPLOAD_REGION=eu-south
- NEXT_PRIVATE_UPLOAD_BUCKET=documenso
- NEXT_PRIVATE_UPLOAD_ACCESS_KEY_ID=$S3_ACCESS_KEY
- NEXT_PRIVATE_UPLOAD_SECRET_ACCESS_KEY=$S3_SECRET_KEY
## Dados de SMTP
- NEXT_PRIVATE_SMTP_TRANSPORT=smtp-auth
- NEXT_PRIVATE_SMTP_FROM_ADDRESS=$email_documenso
- NEXT_PRIVATE_SMTP_USERNAME=$usuario_email_documenso
- NEXT_PRIVATE_SMTP_PASSWORD=$senha_email_documenso
- NEXT_PRIVATE_SMTP_HOST=$smtp_email_documenso
- NEXT_PRIVATE_SMTP_PORT=$porta_smtp_documenso
- NEXT_PRIVATE_SMTP_SECURE=$smtp_secure_documenso
- NEXT_PRIVATE_SMTP_FROM_NAME=Suporte
## Configurações
- NEXT_PUBLIC_DOCUMENT_SIZE_UPLOAD_LIMIT=10
- NEXT_PUBLIC_DISABLE_SIGNUP=false
- NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=/opt/documenso/cert.p12
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.documenso.rule=Host(\`$url_documenso\`)
- traefik.http.services.documenso.loadbalancer.server.port=3000
- traefik.http.routers.documenso.service=documenso
- traefik.http.routers.documenso.tls.certresolver=letsencryptresolver
- traefik.http.routers.documenso.entrypoints=websecure
- traefik.http.routers.documenso.tls=true
## --------------------------- ORION --------------------------- ##
volumes:
documenso_cert:
external: true
name: documenso_cert
networks:
$nome_rede_interna: ## Nome da rede interna
name: $nome_rede_interna ## Nome da rede interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do documenso"
fi
STACK_NAME="documenso"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c documenso.yaml documenso > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack do documenso"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[5/5]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "documenso" para verificar se o serviço esta online
wait_stack "documenso"
cd dados_vps
cat > dados_documenso <<EOL
[ DOCUMENSO ]
Dominio do Documenso: https://$url_documenso
Email: Precisa criar no primeiro acesso do Documenso
Senha: Precisa criar no primeiro acesso do Documenso
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ DOCUMENSO ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_documenso\e[0m"
echo ""
echo -e "\e[33mEmail:\e[97m Precisa criar no primeiro acesso do Documenso\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m Precisa criar no primeiro acesso do Documenso\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ███╗ ███╗ ██████╗ ██████╗ ██████╗ ██╗ ███████╗
## ████╗ ████║██╔═══██╗██╔═══██╗██╔══██╗██║ ██╔════╝
## ██╔████╔██║██║ ██║██║ ██║██║ ██║██║ █████╗
## ██║╚██╔╝██║██║ ██║██║ ██║██║ ██║██║ ██╔══╝
## ██║ ╚═╝ ██║╚██████╔╝╚██████╔╝██████╔╝███████╗███████╗
## ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚══════╝
ferramenta_moodle() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_moodle
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 1/10\e[0m"
echo -en "\e[33mDigite o dominio para o Moodle (ex: moodle.oriondesign.art.br): \e[0m" && read -r url_moodle
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 2/10\e[0m"
echo -en "\e[33mDigite o nome para o projeto (ex: OrionDesign): \e[0m" && read -r project_name_moodle
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 3/10\e[0m"
echo -en "\e[33mDigite um Nome de Usuario (ex: oriondesign): \e[0m" && read -r user_moodle
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 4/10\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$"
echo -en "\e[33mDigite uma Senha para o Usuario (ex: @Senha123_): \e[0m" && read -r pass_moodle
echo ""
##Pergunta o Dominio para a ferramenta
echo -e "\e[97mPasso$amarelo 5/10\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$"
echo -en "\e[33mDigite um Email para o Usuario (ex: [email protected]): \e[0m" && read -r mail_moodle
echo ""
##Pergunta o Email SMTP
echo -e "\e[97mPasso$amarelo 6/10\e[0m"
echo -en "\e[33mDigite o Email para SMTP (ex: [email protected]): \e[0m" && read -r email_smtp_moodle
echo ""
##Pergunta o usuário do Email SMTP
echo -e "\e[97mPasso$amarelo 7/10\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o Usuário para SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r usuario_smtp_moodle
echo ""
## Pergunta a senha do SMTP
echo -e "\e[97mPasso$amarelo 8/10\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do Email (ex: @Senha123_): \e[0m" && read -r senha_smtp_moodle
echo ""
## Pergunta o Host SMTP do email
echo -e "\e[97mPasso$amarelo 9/10\e[0m"
echo -en "\e[33mDigite o Host SMTP do Email (ex: smtp.hostinger.com): \e[0m" && read -r host_smtp_moodle
echo ""
## Pergunta a porta SMTP do email
echo -e "\e[97mPasso$amarelo 10/10\e[0m"
echo -en "\e[33mDigite a porta SMTP do Email (ex: 465): \e[0m" && read -r porta_smtp_moodle
echo ""
## Verifica se a porta é 465, se sim deixa o ssl true, se não, deixa false
if [ "$porta_smtp_typebot" -eq 465 ]; then
smtp_secure_smtp_moodle=ssl
else
smtp_secure_smtp_moodle=tls
fi
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_moodle
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL do moodle
echo -e "\e[33mDominio do Moodle:\e[97m $url_moodle\e[0m"
echo ""
## Informação sobre URL do moodle
echo -e "\e[33mNome do Projeto:\e[97m $project_name_moodle\e[0m"
echo ""
## Informação sobre URL do moodle
echo -e "\e[33mUsuario:\e[97m $user_moodle\e[0m"
echo ""
## Informação sobre URL do moodle
echo -e "\e[33mSenha:\e[97m $pass_moodle\e[0m"
echo ""
## Informação sobre URL do moodle
echo -e "\e[33mEmail:\e[97m $mail_moodle\e[0m"
echo ""
## Informação sobre URL do moodle
echo -e "\e[33mEmail SMTP:\e[97m $email_smtp_moodle\e[0m"
echo ""
## Informação sobre URL do moodle
echo -e "\e[33mUsuario SMTP:\e[97m $usuario_smtp_moodle\e[0m"
echo ""
## Informação sobre URL do moodle
echo -e "\e[33mSenha SMTP:\e[97m $senha_smtp_moodle\e[0m"
echo ""
## Informação sobre URL do moodle
echo -e "\e[33mHost SMTP\e[97m $host_smtp_moodle\e[0m"
echo ""
## Informação sobre URL do moodle
echo -e "\e[33mPorta SMTP:\e[97m $porta_smtp_moodle\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_moodle
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DO MOODLE \e[33m[1/3]\e[0m"
echo ""
sleep 1
## Nadaaaaa
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO MOODLE \e[33m[2/3]\e[0m"
echo ""
sleep 1
senha_marinadb=$(openssl rand -hex 16)
## Criando a stack
cat > moodle.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
moodle_app:
image: bitnami/moodle:latest
volumes:
- moodle_app_apache_conf:/opt/bitnami/apache/conf
- moodle_app_apache:/bitnami/apache/conf
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados do projeto
- MOODLE_SITE_NAME=$project_name_moodle
## Dados de acesso
- MOODLE_HOST=$url_moodle
- MOODLE_USERNAME=$user_moodle
- MOODLE_PASSWORD=$pass_moodle
- MOODLE_EMAIL=$mail_moodle
## Dados SMTP
- MOODLE_SMTP_USER=$usuario_smtp_moodle
- MOODLE_SMTP_PASSWORD=$senha_smtp_moodle
- MOODLE_SMTP_HOST=$host_smtp_moodle
- MOODLE_SMTP_PORT_NUMBER=$porta_smtp_moodle
- MOODLE_SMTP_PROTOCOL=$smtp_secure_smtp_moodle ## 587 = tls ou plain | 465 = ssl
## Idioma
- MOODLE_LANG=pt
## Dados MarinaDB
- MOODLE_DATABASE_HOST=moodle_mariadb
- MOODLE_DATABASE_PORT_NUMBER=3306
- MOODLE_DATABASE_USER=orion_moodle
- MOODLE_DATABASE_PASSWORD=$senha_marinadb
- MOODLE_DATABASE_NAME=orionbase_moodle
- ALLOW_EMPTY_PASSWORD=no
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.moodle.rule=Host(\`$url_moodle\`)
- traefik.http.services.moodle.loadbalancer.server.port=8080
- traefik.http.routers.moodle.service=moodle
- traefik.http.routers.moodle.tls.certresolver=letsencryptresolver
- traefik.http.routers.moodle.entrypoints=websecure
- traefik.http.routers.moodle.tls=true
## --------------------------- ORION --------------------------- ##
moodle_mariadb:
image: bitnami/mariadb:latest
volumes:
- moodle_mariadb_data:/bitnami/mariadb
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados MarinaDB
- MARIADB_USER=orion_moodle
- MARIADB_ROOT_PASSWORD=$senha_marinadb
- MARIADB_DATABASE=orionbase_moodle
- MARIADB_PASSWORD=$senha_marinadb
- MARIADB_CHARACTER_SET=utf8mb4
- MARIADB_COLLATE=utf8mb4_unicode_ci
- ALLOW_EMPTY_PASSWORD=no
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
## --------------------------- ORION --------------------------- ##
volumes:
moodle_app_apache_conf:
external: true
name: moodle_app_apache_conf
moodle_app_apache:
external: true
name: moodle_app_apache
moodle_mariadb_data:
external: true
name: moodle_mariadb_data
networks:
$nome_rede_interna: ## Nome da rede interna
name: $nome_rede_interna ## Nome da rede interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack do Moodle"
fi
STACK_NAME="moodle"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c moodle.yaml moodle > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel Subir a stack do moodle"
#fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[3/3]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "moodle" para verificar se o serviço esta online
wait_stack "moodle"
sleep 120
cd dados_vps
cat > dados_moodle <<EOL
[ MOODLE ]
Dominio do moodle: https://$url_moodle
Usuario: $user_moodle
Senha: $pass_moodle
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ MOODLE ]\e[0m"
echo ""
echo -e "\e[33mDominio:\e[97m https://$url_moodle\e[0m"
echo ""
echo -e "\e[33mUsuario:\e[97m $user_moodle\e[0m"
echo ""
echo -e "\e[33mSenha:\e[97m $pass_moodle\e[0m"
echo ""
echo -e "\e[97mObservação:\e[33m Esta é uma ferramenta que pode demorar para iniciar na primeira vez\e[0m"
echo -e "\e[33mrecomendo aguardar alguns instantes antes de tentar abrir para não prejudicar\e[0m"
echo -e "\e[33ma sua instalação que já foi realizado.\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## ████████╗ ██████╗ ██████╗ ██╗ ██╗███████╗████████╗
## ╚══██╔══╝██╔═══██╗██╔═══██╗██║ ██║██╔════╝╚══██╔══╝
## ██║ ██║ ██║██║ ██║██║ ██║█████╗ ██║
## ██║ ██║ ██║██║ ██║██║ ██ ██║██╔══╝ ██║
## ██║ ╚██████╔╝╚██████╔╝███████╗╚█████╔╝███████╗ ██║
## ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝ ╚════╝ ╚══════╝ ╚═╝
ferramenta_tooljet() {
## Limpa o terminal
clear
## Ativa a função dados para pegar os dados da vps
dados
## Mostra o nome da aplicação
nome_tooljet
## Mostra mensagem para preencher informações
preencha_as_info
## Inicia um Loop até os dados estarem certos
while true; do
##Pergunta o Dominio para aplicação
echo -e "\e[97mPasso$amarelo 1/6\e[0m"
echo -en "\e[33mDigite o Dominio para a ToolJet (ex: tooljet.oriondesign.art.br): \e[0m" && read -r url_tooljet
echo ""
##Pergunta o Email SMTP
echo -e "\e[97mPasso$amarelo 2/6\e[0m"
echo -en "\e[33mDigite o Email para SMTP (ex: [email protected]): \e[0m" && read -r email_smtp_tooljet
echo ""
##Pergunta o usuário do Email SMTP
echo -e "\e[97mPasso$amarelo 3/6\e[0m"
echo -e "$amarelo--> Caso não tiver um usuario do email, use o proprio email abaixo"
echo -en "\e[33mDigite o Usuário para SMTP (ex: oriondesign ou [email protected]): \e[0m" && read -r usuario_smtp_tooljet
echo ""
## Pergunta a senha do SMTP
echo -e "\e[97mPasso$amarelo 4/6\e[0m"
echo -e "$amarelo--> Sem caracteres especiais: \!#$ | Se estiver usando gmail use a senha de app"
echo -en "\e[33mDigite a Senha SMTP do Email (ex: @Senha123_): \e[0m" && read -r senha_smtp_tooljet
echo ""
## Pergunta o Host SMTP do email
echo -e "\e[97mPasso$amarelo 5/6\e[0m"
echo -en "\e[33mDigite o Host SMTP do Email (ex: smtp.hostinger.com): \e[0m" && read -r host_smtp_tooljet
echo ""
## Pergunta a porta SMTP do email
echo -e "\e[97mPasso$amarelo 6/6\e[0m"
echo -en "\e[33mDigite a porta SMTP do Email (ex: 465): \e[0m" && read -r porta_smtp_tooljet
echo ""
## Limpa o terminal
clear
## Mostra o nome da aplicação
nome_tooljet
## Mostra mensagem para verificar as informações
conferindo_as_info
## Informação sobre URL
echo -e "\e[33mDominio da ToolJet:\e[97m $url_tooljet\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mEmail SMTP:\e[97m $email_smtp_tooljet\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mUser SMTP:\e[97m $usuario_smtp_tooljet\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mSenha SMTP:\e[97m $senha_smtp_tooljet\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mHost SMTP:\e[97m $host_smtp_tooljet\e[0m"
echo ""
## Informação sobre URL
echo -e "\e[33mPorta SMTP:\e[97m $porta_smtp_tooljet\e[0m"
echo ""
## Pergunta se as respostas estão corretas
read -p "As respostas estão corretas? (Y/N): " confirmacao
if [ "$confirmacao" = "Y" ] || [ "$confirmacao" = "y" ]; then
## Digitou Y para confirmar que as informações estão corretas
## Limpar o terminal
clear
## Mostrar mensagem de Instalando
instalando_msg
## Sai do Loop
break
else
## Digitou N para dizer que as informações não estão corretas.
## Limpar o terminal
clear
## Mostra o nome da ferramenta
nome_tooljet
## Mostra mensagem para preencher informações
preencha_as_info
## Volta para o inicio do loop com as perguntas
fi
done
## Mensagem de Passo
echo -e "\e[97m• INICIANDO A INSTALAÇÃO DA TOOLJET \e[33m[1/5]\e[0m"
echo ""
sleep 1
## Literalmente nada, apenas um espaço vazio caso precisar de adicionar alguma coisa
## Antes..
## E claro, para aparecer a mensagem do passo..
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO POSTGRES \e[33m[2/5]\e[0m"
echo ""
sleep 1
## Aqui vamos fazer uma verificação se já existe Postgres Instalado
## Se tiver ele vai criar um banco de dados no postgres ou perguntar se deseja apagar o que já existe e criar outro
## Verifica container postgres e cria banco no postgres
verificar_container_postgres
if [ $? -eq 0 ]; then
pegar_senha_postgres > /dev/null 2>&1
else
ferramenta_postgres #> /dev/null 2>&1
pegar_senha_postgres > /dev/null 2>&1
fi
criar_banco_postgres_da_stack "tooljet"
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Verificando/Instalando Postgres"
else
echo "1/1 - [ OFF ] - Verificando/Instalando Postgres"
fi
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO/INSTALANDO REDIS \e[33m[3/5]\e[0m"
echo ""
sleep 1
## Verifica container redis
verificar_container_redis
if [ $? -eq 0 ]; then
echo ""
else
ferramenta_redis > /dev/null 2>&1
fi
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Verificando/Instalando Reids"
else
echo "1/1 - [ OFF ] - Verificando/Instalando Redis"
fi
## Mensagem de Passo
echo -e "\e[97m• INSTALANDO A TOOLJET \e[33m[4/5]\e[0m"
echo ""
sleep 1
## Aqui de fato vamos iniciar a instalação da tooljet
## Criando uma Global Key Aleatória
master_key=$(openssl rand -hex 16)
secret_key=$(openssl rand -hex 16)
jwt_key=$(openssl rand -hex 16)
## Criando a stack
cat > tooljet.yaml <<EOL
version: "3.7"
services:
## --------------------------- ORION --------------------------- ##
tooljet_app:
image: tooljet/tooljet:EE-LTS-latest
command: npm run start:prod
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
## Dados de acesso
- TOOLJET_HOST=https://$url_tooljet
- SERVE_CLIENT=true
- PORT=80
## Desativar novas inscrições
- DISABLE_SIGNUPS=false
## Ativar perguntas no Onboarding
- ENABLE_ONBOARDING_QUESTIONS_FOR_ALL_SIGN_UPS=true
## Keys
- LOCKBOX_MASTER_KEY=$master_key
- SECRET_KEY_BASE=$secret_key
## Dados dos do Postgres
- DATABASE_URL=postgres://postgres:$senha_postgres@postgres:5432/tooljet?sslmode=disable
## Dados Postgres e Postgrest
- ENABLE_TOOLJET_DB=true
- TOOLJET_DB=tooljet
- TOOLJET_DB_USER=postgres
- TOOLJET_DB_HOST=postgres
- TOOLJET_DB_PASS=$senha_postgres
- PGRST_HOST=tooljet_postgrest
- PGRST_JWT_SECRET=$jwt_key
## Dados Redis
- REDIS_HOST=redis
- REDIS_PORT=6379
## Dados SMTP
- DEFAULT_FROM_EMAIL=$email_smtp_tooljet
- SMTP_USERNAME=$usuario_smtp_tooljet
- SMTP_PASSWORD=$senha_smtp_tooljet
- SMTP_DOMAIN=$host_smtp_tooljet
- SMTP_PORT=$porta_smtp_tooljet
## Credenciais Google Console
#- GOOGLE_CLIENT_ID=
#- GOOGLE_CLIENT_SECRET=
## Features do ToolJet
- COMMENT_FEATURE_ENABLE=true
- ENABLE_MULTIPLAYER_EDITING=true
- ENABLE_MARKETPLACE_FEATURE=true
## Verificar novas versões do Tooljet
- CHECK_FOR_UPDATES=false
## Expirar seção após X minutos
- USER_SESSION_EXPIRY=120
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
labels:
- traefik.enable=true
- traefik.http.routers.tooljet.rule=Host(\`$url_tooljet\`)
- traefik.http.services.tooljet.loadbalancer.server.port=80
- traefik.http.routers.tooljet.service=tooljet
- traefik.http.routers.tooljet.tls.certresolver=letsencryptresolver
- traefik.http.routers.tooljet.entrypoints=websecure
- traefik.http.routers.tooljet.tls=true
## --------------------------- ORION --------------------------- ##
tooljet_postgrest:
image: postgrest/postgrest:v12.0.2
networks:
- $nome_rede_interna ## Nome da rede interna
environment:
- PGRST_SERVER_PORT=80
- PGRST_DB_URI=postgres://postgres:$senha_postgres@postgres:5432/tooljet?sslmode=disable
- PGRST_DB_SCHEMA=public
- PGRST_DB_ANON_ROLE=anon
- PGRST_JWT_SECRET=$jwt_key
- PGRST_JWT_AUD=tooljet
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
## --------------------------- ORION --------------------------- ##
networks:
$nome_rede_interna: ## Nome da rede interna
name: $nome_rede_interna ## Nome da rede interna
external: true
EOL
if [ $? -eq 0 ]; then
echo "1/10 - [ OK ] - Criando Stack"
else
echo "1/10 - [ OFF ] - Criando Stack"
echo "Não foi possivel criar a stack da TOOLJET"
fi
STACK_NAME="tooljet"
stack_editavel # > /dev/null 2>&1
#docker stack deploy --prune --resolve-image always -c tooljet.yaml tooljet > /dev/null 2>&1
#if [ $? -eq 0 ]; then
# echo "2/2 - [ OK ] - Deploy Stack"
#else
# echo "2/2 - [ OFF ] - Deploy Stack"
# echo "Não foi possivel subir a stack da tooljet"
#fi
sleep 10
## Mensagem de Passo
echo -e "\e[97m• VERIFICANDO SERVIÇO \e[33m[5/5]\e[0m"
echo ""
sleep 1
## Usa o serviço wait_stack "tooljet" para verificar se o serviço esta online
wait_stack "tooljet"
cd dados_vps
cat > dados_tooljet <<EOL
[ TOOLJET ]
Dominio: https://$url_tooljet
Usuario: Precisa de criar no primeiro acesso ao ToolJet
Senha: Precisa de criar no primeiro acesso ao ToolJet
EOL
cd
cd
## Espera 30 segundos
wait_30_sec
## Mensagem de finalizado
instalado_msg
## Mensagem de Guarde os Dados
guarde_os_dados_msg
## Dados da Aplicação:
echo -e "\e[32m[ TOOLJET ]\e[0m"
echo ""
echo -e "\e[97mDominio:\e[33m https://$url_tooljet\e[0m"
echo ""
echo -e "\e[97mUsuario:\e[33m Precisa de criar no primeiro acesso ao ToolJet\e[0m"
echo ""
echo -e "\e[97mSenha:\e[33m Precisa de criar no primeiro acesso ao ToolJet\e[0m"
echo ""
## Creditos do instalador
creditos_msg
## Pergunta se deseja instalar outra aplicação
requisitar_outra_instalacao
}
## Ignore esta parte, só para facilitar minha identificação com esta parte "XXOOXX"
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## Comandos extras
portainer.restart() {
echo ""
echo "Aguarde enquanto reiniciamos o Portainer"
echo ""
docker service update --force $(docker service ls --filter name='portainer_agent' -q) > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ]"
else
echo "1/2 - [ OFF ]"
echo "Não foi possivel reiniciar o portainer"
fi
docker service update --force $(docker service ls --filter name='portainer_portainer' -q) > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "2/2 - [ OK ]"
else
echo "2/2 - [ OFF ]"
echo "Não foi possivel reiniciar o portainer"
fi
sleep 2
clear
}
chatwoot.nulled() {
echo ""
echo "Aguarde..."
echo ""
while :; do
if docker ps -q --filter "name=postgres" | grep -q .; then
CONTAINER_ID=$(docker ps -q --filter "name=postgres")
docker exec -i "$CONTAINER_ID" psql -U postgres -d chatwoot -c \
"UPDATE public.installation_configs SET serialized_value = '\"--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nvalue: enterprise\n\"' WHERE name = 'INSTALLATION_PRICING_PLAN'; \
UPDATE public.installation_configs SET serialized_value = '\"--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nvalue: 200\n\"' WHERE name = 'INSTALLATION_PRICING_PLAN_QUANTITY';"
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ]"
else
echo "1/1 - [ OFF ]"
echo "Não foi possivel fazer isso, mude através do pgadmin."
fi
sleep 2
break
else
sleep 5
fi
done
}
chatwoot.uno.nulled() {
echo ""
echo "Aguarde..."
echo ""
while :; do
if docker ps -q --filter "name=postgres" | grep -q .; then
CONTAINER_ID=$(docker ps -q --filter "name=postgres")
docker exec -i "$CONTAINER_ID" psql -U postgres -d chatwoot_uno -c \
"UPDATE public.installation_configs SET serialized_value = '\"--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nvalue: enterprise\n\"' WHERE name = 'INSTALLATION_PRICING_PLAN'; \
UPDATE public.installation_configs SET serialized_value = '\"--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nvalue: 200\n\"' WHERE name = 'INSTALLATION_PRICING_PLAN_QUANTITY';"
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ]"
else
echo "1/1 - [ OFF ]"
echo "Não foi possivel fazer isso, mude através do pgadmin."
fi
sleep 2
break
else
sleep 5
fi
done
}
chatwoot.mail() {
echo ""
echo "Aguarde enquanto trocamos os emails..."
echo ""
#cd /var/lib/docker/volumes/chatwoot_mailer/_data/app/views/devise/mailer/
cd /var/lib/docker/volumes/chatwoot_mailer/_data/
# Renomeia os arquivos
mv password_change.html.erb password_change.html.erb.old > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "1/9 - [ OK ]"
else
echo "1/9 - [ OFF ]"
echo "Não foi possivel mudar email."
fi
mv confirmation_instructions.html.erb confirmation_instructions.html.erb.old > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "2/9 - [ OK ]"
else
echo "2/9 - [ OFF ]"
echo "Não foi possivel mudar email."
fi
mv reset_password_instructions.html.erb reset_password_instructions.html.erb.old > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "3/9 - [ OK ]"
else
echo "3/9 - [ OFF ]"
echo "Não foi possivel mudar email."
fi
mv unlock_instructions.html.erb unlock_instructions.html.erb.old > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "4/9 - [ OK ]"
else
echo "4/9 - [ OFF ]"
echo "Não foi possivel mudar email."
fi
# Baixa os novos arquivos
wget -O confirmation_instructions.html.erb https://github.com/oriondesign2015/SetupOrion/raw/main/Extras/Chatwoot/emails/confirmation_instructions.html.erb > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "5/9 - [ OK ]"
else
echo "5/9 - [ OFF ]"
echo "Não foi possivel baixar email."
fi
wget -O password_change.html.erb https://github.com/oriondesign2015/SetupOrion/raw/main/Extras/Chatwoot/emails/password_change.html.erb > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "6/9 - [ OK ]"
else
echo "6/9 - [ OFF ]"
echo "Não foi possivel baixar email."
fi
wget -O reset_password_instructions.html.erb https://github.com/oriondesign2015/SetupOrion/raw/main/Extras/Chatwoot/emails/reset_password_instructions.html.erb > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "7/9 - [ OK ]"
else
echo "7/9 - [ OFF ]"
echo "Não foi possivel baixar email."
fi
wget -O unlock_instructions.html.erb https://github.com/oriondesign2015/SetupOrion/raw/main/Extras/Chatwoot/emails/unlock_instructions.html.erb > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "8/9 - [ OK ]"
else
echo "8/9 - [ OFF ]"
echo "Não foi possivel baixar email."
fi
cd
cd
# Deleta os containers do Chatwoot
docker rm -f $(docker ps -a | grep 'chatwoot' | awk '{print $1}') > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "9/9 - [ OK ]"
else
echo "9/9 - [ OFF ]"
echo "Não foi possivel deletar containers."
fi
echo ""
echo "Esperando containers subir..."
wait_30_sec
echo ""
echo "Concluido!"
sleep 2
}
chatwoot.n.mail() {
echo ""
echo "Aguarde enquanto trocamos os emails..."
echo ""
#cd /var/lib/docker/volumes/chatwoot_mailer/_data/app/views/devise/mailer/
cd /var/lib/docker/volumes/chatwoot_nestor_mailer/_data/
# Renomeia os arquivos
mv password_change.html.erb password_change.html.erb.old > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "1/9 - [ OK ]"
else
echo "1/9 - [ OFF ]"
echo "Não foi possivel mudar email."
fi
mv confirmation_instructions.html.erb confirmation_instructions.html.erb.old > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "2/9 - [ OK ]"
else
echo "2/9 - [ OFF ]"
echo "Não foi possivel mudar email."
fi
mv reset_password_instructions.html.erb reset_password_instructions.html.erb.old > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "3/9 - [ OK ]"
else
echo "3/9 - [ OFF ]"
echo "Não foi possivel mudar email."
fi
mv unlock_instructions.html.erb unlock_instructions.html.erb.old > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "4/9 - [ OK ]"
else
echo "4/9 - [ OFF ]"
echo "Não foi possivel mudar email."
fi
# Baixa os novos arquivos
wget -O confirmation_instructions.html.erb https://github.com/oriondesign2015/SetupOrion/raw/main/Extras/Chatwoot/emails/confirmation_instructions.html.erb > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "5/9 - [ OK ]"
else
echo "5/9 - [ OFF ]"
echo "Não foi possivel baixar email."
fi
wget -O password_change.html.erb https://github.com/oriondesign2015/SetupOrion/raw/main/Extras/Chatwoot/emails/password_change.html.erb > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "6/9 - [ OK ]"
else
echo "6/9 - [ OFF ]"
echo "Não foi possivel baixar email."
fi
wget -O reset_password_instructions.html.erb https://github.com/oriondesign2015/SetupOrion/raw/main/Extras/Chatwoot/emails/reset_password_instructions.html.erb > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "7/9 - [ OK ]"
else
echo "7/9 - [ OFF ]"
echo "Não foi possivel baixar email."
fi
wget -O unlock_instructions.html.erb https://github.com/oriondesign2015/SetupOrion/raw/main/Extras/Chatwoot/emails/unlock_instructions.html.erb > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "8/9 - [ OK ]"
else
echo "8/9 - [ OFF ]"
echo "Não foi possivel baixar email."
fi
cd
cd
# Deleta os containers do Chatwoot
docker rm -f $(docker ps -a | grep 'chatwoot' | awk '{print $1}') > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "9/9 - [ OK ]"
else
echo "9/9 - [ OFF ]"
echo "Não foi possivel deletar containers."
fi
echo ""
echo "Esperando containers subir..."
wait_30_sec
echo ""
echo "Concluido!"
sleep 2
}
n8n.workflows(){
while true; do
if docker ps -q --filter "name=n8n_quepasa_n8n_quepasa_editor" | grep -q .; then
# Capturar o ID do container
container_id=$(docker ps --filter "name=n8n_quepasa_n8n_quepasa_editor" --format "{{.ID}}")
# Verificar se o ID do container foi capturado corretamente
if [ -z "$container_id" ]; then
echo "Erro: Não foi possível encontrar o ID do contêiner."
exit 1
fi
# Executar o código no contêiner apenas se ele estiver em execução
docker exec "$container_id" /bin/sh -c '
# Criando diretório temporário
temp_dir=$(mktemp -d)
# Entrando no diretório temporário
cd "$temp_dir"
# Baixando workflows
wget "https://raw.githubusercontent.com/DeividMs/QP_Setup_Orion/main/workflows/latest/ChatwootExtra.json"
wget "https://raw.githubusercontent.com/DeividMs/QP_Setup_Orion/main/workflows/latest/ChatwootProfileUpdate.json"
wget "https://raw.githubusercontent.com/DeividMs/QP_Setup_Orion/main/workflows/latest/ChatwootToQuepasa.json"
wget "https://raw.githubusercontent.com/DeividMs/QP_Setup_Orion/main/workflows/latest/GetChatwootContacts.json"
wget "https://raw.githubusercontent.com/DeividMs/QP_Setup_Orion/main/workflows/latest/PostToChatwoot.json"
wget "https://raw.githubusercontent.com/DeividMs/QP_Setup_Orion/main/workflows/latest/PostToWebCallBack.json"
wget "https://raw.githubusercontent.com/DeividMs/QP_Setup_Orion/main/workflows/latest/QuepasaAutomatic.json"
wget "https://raw.githubusercontent.com/DeividMs/QP_Setup_Orion/main/workflows/latest/QuepasaChatControl.json"
wget "https://raw.githubusercontent.com/DeividMs/QP_Setup_Orion/main/workflows/latest/QuepasaInboxControl.json"
wget "https://raw.githubusercontent.com/DeividMs/QP_Setup_Orion/main/workflows/latest/QuepasaQrcode.json"
wget "https://raw.githubusercontent.com/DeividMs/QP_Setup_Orion/main/workflows/latest/QuepasaToChatwoot.json"
# Subindo workflows
n8n import:workflow --input="$temp_dir" --separate
# Verificando se os workflows foram importados com sucesso
if [ $? -eq 0 ]; then
echo "Workflows importados com sucesso"
else
echo "Erro ao importar workflows"
exit 1
fi
# Ativando os workflows
n8n update:workflow --id 1008 --active=true && echo "Fluxo 1008 ativado" || echo "Erro ao ativar fluxo 1008"
n8n update:workflow --id 1009 --active=true && echo "Fluxo 1009 ativado" || echo "Erro ao ativar fluxo 1009"
n8n update:workflow --id 1010 --active=true && echo "Fluxo 1010 ativado" || echo "Erro ao ativar fluxo 1010"
n8n update:workflow --id 1011 --active=true && echo "Fluxo 1011 ativado" || echo "Erro ao ativar fluxo 1011"
'
break
else
clear
erro_msg
echo ""
echo -e "Ops, parece que você não instalou a opção \e[32m[28] N8N + Nodes Quepasa${reset} ${branco}do nosso instalador.${reset}"
echo "Instale antes de tentar instalar esta aplicação."
echo ""
echo "Pressione CTRL C para sair do instalador."
sleep 5
exit
fi
done
}
portainer.reset() {
cd
clear
nome_portainer.reset
echo "Aguarde enquanto reseto a senha do portainer..."
echo ""
docker service scale portainer_portainer=0 > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "1/7 - [ OK ]"
else
echo "1/7 - [ OFF ]"
echo "Ops, não foi possivel derrubar o serviço do portainer"
fi
docker pull portainer/helper-reset-password > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "2/7 - [ OK ]"
else
echo "2/7 - [ OFF ]"
echo "Ops, não foi possivel super o serviço de reset password do portainer"
fi
script -c "docker run --rm -v /var/lib/docker/volumes/portainer_data/_data:/data portainer/helper-reset-password" output.txt > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "3/7 - [ OK ]"
else
echo "3/7 - [ OFF ]"
echo "Ops, não foi possivel resetar a senha do portainer"
fi
cd
#STACK_NAME="portainer"
#stack_editavel > /dev/null 2>&1
docker stack deploy --prune --resolve-image always -c portainer.yaml portainer > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "4/7 - [ OK ]"
else
echo "4/7 - [ OFF ]"
echo "Ops, não foi possivel subir a stack do portainer"
fi
USER=$(grep -oP 'user: \K[^,]*' output.txt)
if [ $? -eq 0 ]; then
echo "5/7 - [ OK ]"
else
echo "5/7 - [ OFF ]"
echo "Ops, não foi possivel pegar o usuario do portainer"
fi
PASSWORD=$(grep -oP 'login: \K.*' output.txt)
if [ $? -eq 0 ]; then
echo "6/7 - [ OK ]"
else
echo "6/7 - [ OFF ]"
echo "Ops, não foi possivel pegar a senha do portainer"
fi
rm output.txt
if [ $? -eq 0 ]; then
echo "7/7 - [ OK ]"
else
echo "7/7 - [ OFF ]"
echo "Ops, não foi possivel remover o arquivo output. txt ou ele não existe"
fi
echo ""
sleep 3
clear
nome_portainer.reset
echo -e "\e[32m[ PORTAINER ]\e[0m"
echo ""
echo -e "\e[97mUsuario:\e[33m $USER\e[0m"
echo ""
echo -e "\e[97mNova Senha:\e[33m $PASSWORD\e[0m"
echo ""
## Creditos do instalador
creditos_msg
read -p "Deseja voltar ao menu principal? (Y/N): " choice
if [ "$choice" = "Y" ] || [ "$choice" = "y" ]; then
return
else
cd
cd
clear
exit 1
fi
}
traefik.fix() {
echo ""
echo ""
echo "Trocando a versão da Stack do traefik..."
## Trocando a versão na stack
sed -i 's/image: traefik:latest/image: traefik:v2.11.2/' /root/traefik.yaml
if [ $? -eq 0 ]; then
echo "1/3 - [ OK ] - Alterando versão na Stack"
else
echo "1/3 - [ OFF ] - Alterando versão na Stack"
echo "Ops, não foi possivel alterar a versão na stack do Traefik"
fi
echo ""
docker stack deploy --prune --resolve-image always -c traefik.yaml traefik > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "2/3 - [ OK ] - Fazendo Deploy da stack"
else
echo "2/3 - [ OFF ] - Fazendo Deploy da stack"
echo "Ops, não foi possivel fazer o deploy da stack do Traefik"
fi
echo ""
echo "Verificando stack do Traefik"
wait_stack "traefik"
if [ $? -eq 0 ]; then
echo "3/3 - [ OK ] - Verificando Stack"
else
echo "3/3 - [ OFF ] - Verificando Stack"
echo "Ops, não foi possivel Verificar a stack do Traefik"
fi
echo ""
echo "Finalizado, já fixamos a imagem do seu traefik =D"
echo ""
sleep 5
}
ctop() {
echo ""
echo "Instalando CTOP"
sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 -O /usr/local/bin/ctop
if [ $? -eq 0 ]; then
echo "1/2 - [ OK ] - Baixando CTOP"
else
echo "1/2 - [ OFF ] - Baixando CTOP"
echo "Ops, não foi possivel baixar o CTOP"
fi
sudo chmod +x /usr/local/bin/ctop
if [ $? -eq 0 ]; then
echo "2/2 - [ OK ] - Dando permissão ao CTOP"
else
echo "2/2 - [ OFF ] - Dando permissão ao CTOP"
echo "Ops, não foi possivel dar permissão ao CTOP"
fi
echo ""
echo "Instalado, digite CTOP fora do nosso Setup oara executa-lo a qualquer momento."
echo ""
sleep 5
}
quepasa.setup.off(){
echo ""
echo "Desativando painel /setup do quepasa"
mv /var/lib/docker/volumes/quepasa_volume/_data/views/setup.tmpl /var/lib/docker/volumes/quepasa_volume/_data/views/setup.old
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Painel /setup Desativado"
else
echo "1/1 - [ OFF ] - Erro ao desativar painel"
echo "Tente novamente mais tarde ou verifique se você tem Quepasa instalado."
fi
echo ""
echo "Voltando ao menu de ferramentas..."
sleep 5
}
quepasa.setup.on(){
echo ""
echo "Ativando painel /setup do quepasa"
mv /var/lib/docker/volumes/quepasa_volume/_data/views/setup.old /var/lib/docker/volumes/quepasa_volume/_data/views/setup.tmpl
if [ $? -eq 0 ]; then
echo "1/1 - [ OK ] - Painel /setup Ativado"
else
echo "1/1 - [ OFF ] - Erro ao Ativar painel"
echo "Tente novamente mais tarde ou verifique se você tem Quepasa instalado."
fi
echo ""
echo "Voltando ao menu de ferramentas..."
sleep 5
}
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## Iniciando instalador
## Mostrar nome do instalador
nome_instalador
## Mostrar direitos do instalador
direitos_instalador
##Após apetar Y e confirmar continua..
## Menu de opções (backend)
while true; do
nome_menu
menu_instalador
read -p "Digite o NÚMERO da opção desejada ou COMANDO oculto: " opcao
case $opcao in
0|00|teste_smtp|TESTE_SMTP)
ferramenta_testeemail
;;
1|01|portainer|traefik|PORTAINER|TRAEFIK)
ferramenta_traefik_e_portainer
;;
2|02|chatwoot|CHATWOOT)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="chatwoot"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_chatwoot
else
APP_ORION="ferramenta_chatwoot"
verificar_arquivo
fi
## FIM TOKEN
### Inicio do teste para unificar AMD/INTEL com ARM
#
### Nome da Stack
#STACK_NAME="chatwoot"
#
### Modelo do processador
#cpu_vendor=$(lscpu | grep 'Vendor ID' | awk '{print $3}')
#
### Verifica se o processador é INTEL ou AMD
#if [[ "$cpu_vendor" == "GenuineIntel" || "$cpu_vendor" == "AuthenticAMD" ]]; then
#
# ## Verifica se tem Token no arquivo dados_portainer
# if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
# ferramenta_chatwoot ## Inicia instalação para INTEL/AMD
# ## Se não tiver Token no dados_portainer
# else
# ## Nome da Stack
# APP_ORION="ferramenta_chatwoot"
#
# ## Verifica o arquivo dados_portainer e pede dados
# verificar_arquivo
# fi
#
### Verifica se o processador é ARM
#elif [[ "$cpu_arch" == "armv7l" || "$cpu_arch" == "aarch64" || "$cpu_vendor" == "ARM" ]]; then
#
# ## Verifica se tem Token no arquivo dados_portainer
# if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
# ferramenta_chatwoot_arm ## Inicia instalação para ARM
# ## Se não tiver Token no dados_portainer
# else
# ## Nome da Stack
# APP_ORION="ferramenta_chatwoot_arm"
#
# ## Verifica o arquivo dados_portainer e pede dados
# verificar_arquivo
# fi
#
### Se não for INTEL, AMD ou ARM
#else
# ## Apresenta mensagem de erro.
# clear && erro_msg
# echo "Tipo de processador desconhecido: $cpu_vendor, voltando para o menu iniciar."
# echo "Reporte este erro no whatsapp: +55 11 97305-2593"
# sleep 5
#fi
### Fim
fi
;;
2.1|02.1|chatwoot_arm|CHATWOOT_ARM)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="chatwoot"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_chatwoot_arm
else
APP_ORION="ferramenta_chatwoot_arm"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
3|03|evolution|evo|EVO)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="evolution"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_evolution
else
APP_ORION="ferramenta_evolution"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
#.1)
# if verificar_docker_e_portainer_traefik; then
# ## INICIO TOKEN
# STACK_NAME="evolution"
# if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
# ferramenta_evolution_arm
# else
# APP_ORION="ferramenta_evolution_arm"
# verificar_arquivo
# fi
# ## FIM TOKEN
#
# fi
# ;;
4|04|minio|MINIO)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="minio"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_minio
else
APP_ORION="ferramenta_minio"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
5|05|typebot|TYPEBOT)
if verificar_docker_e_portainer_traefik && verificar_antes_se_tem_minio; then
## INICIO TOKEN
STACK_NAME="typebot"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_typebot
else
APP_ORION="ferramenta_typebot"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
6|06|n8n|N8N)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="n8n"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_n8n
else
APP_ORION="ferramenta_n8n"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
7|07|flowise|FLOWISE)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="flowise"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_flowise
else
APP_ORION="ferramenta_flowise"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
8|08|pgadmin|PGADMIN)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="pgadmin"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_pgAdmin_4
else
APP_ORION="ferramenta_pgAdmin_4"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
9|09|nocobase|NOCOBASE)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="nocobase"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_nocobase
else
APP_ORION="ferramenta_nocobase"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
10|botpress|BOTPRESS)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="botpress"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_botpress
else
APP_ORION="ferramenta_botpress"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
11|wordpress|WORDPRESS)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_wordpress
else
APP_ORION="ferramenta_wordpress"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
12|baserow|BASEROW)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="baserow"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_baserow
else
APP_ORION="ferramenta_baserow"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
13|mongodb|MONGODB)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="mongodb"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_mongodb
else
APP_ORION="ferramenta_mongodb"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
14|rabbitmq|RABBITMQ)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="rabbitmq"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_rabbitmq
else
APP_ORION="ferramenta_rabbitmq"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
15|uptimekuma|UPTIMEKUMA)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="uptimekuma"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_uptimekuma
else
APP_ORION="ferramenta_uptimekuma"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
16|calcom|CALCOM)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="calcom"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_calcom
else
APP_ORION="ferramenta_calcom"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
17|mautic|MAUTIC)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="mautic"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_mautic
else
APP_ORION="ferramenta_mautic"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
18|appsmith|APPSMITH)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="appsmith"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_appsmith
else
APP_ORION="ferramenta_appsmith"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
19|qdrant|QDRANT)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="qdrant"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_qdrant
else
APP_ORION="ferramenta_qdrant"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
20|woofedcrm|WOOFEDCRM)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="woofedcrm"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_woofed
else
APP_ORION="ferramenta_woofed"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
21|formbricks|FORMBRICKS)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="formbricks"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_formbricks
else
APP_ORION="ferramenta_formbricks"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
22|nocodb|NOCODB)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="nocodb"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_nocodb
else
APP_ORION="ferramenta_nocodb"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
23|langfuse|LANGFUSE)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="langfuse"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_langfuse
else
APP_ORION="ferramenta_langfuse"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
24|metabase|METABASE)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="metabase"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_metabase
else
APP_ORION="ferramenta_metabase"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
25|odoo|ODOO)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="odoo"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_odoo
else
APP_ORION="ferramenta_odoo"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
26|chatwoot_nestor|CHATWOOT_NETOR)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="chatwoot_nestor"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_chatwoot_nestor
else
APP_ORION="ferramenta_chatwoot_nestor"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
27|unoapi|UNOAPI)
if verificar_docker_e_portainer_traefik && verificar_antes_se_tem_minio_e_rabbitmq_e_chatwoot; then
## INICIO TOKEN
STACK_NAME="unoapi"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_unoapi
else
APP_ORION="ferramenta_unoapi"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
28|n8n_quepasa|N8N_QUEPASA)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="n8n_quepasa"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_n8n_quepasa
else
APP_ORION="ferramenta_n8n_quepasa"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
29|quepasa|QUEPASA)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="quepasa"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_quepasa
else
APP_ORION="ferramenta_quepasa"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
30|docuseal|DOCUSEAL)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="docuseal"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_docuseal
else
APP_ORION="ferramenta_docuseal"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
31|monitor|grafana|MONITOR|GRAFANA)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="monitor"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_monitor
else
APP_ORION="ferramenta_monitor"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
32|dify|DIFY)
if verificar_docker_e_portainer_traefik && verificar_antes_se_tem_minio; then
## INICIO TOKEN
STACK_NAME="dify"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_dify
else
APP_ORION="ferramenta_dify"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
33|ollama|OLLAMA)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="ollama"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_ollama
else
APP_ORION="ferramenta_ollama"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
34|affine|AFFINE)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="affine"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_affine
else
APP_ORION="ferramenta_affine"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
35|directus|DIRECTUS)
if verificar_docker_e_portainer_traefik && verificar_antes_se_tem_minio; then
## INICIO TOKEN
STACK_NAME="directus"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_directus
else
APP_ORION="ferramenta_directus"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
36|vaultwarden|VAULTWARDEN)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="vaultwarden"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_vaultwarden
else
APP_ORION="ferramenta_vaultwarden"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
37|nextcloud|NEXTCLOUD)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="nextcloud"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_nextcloud
else
APP_ORION="ferramenta_nextcloud"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
38|strapi|STRAPI)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="strapi"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_strapi
else
APP_ORION="ferramenta_strapi"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
39|phpmyadmin|pma|PHPMYADMIN|PMA)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="phpmyadmin"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_phpmyadmin
else
APP_ORION="ferramenta_phpmyadmin"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
40|supabase|supa|SUPABASE|SUPA)
if verificar_docker_e_portainer_traefik && verificar_antes_se_tem_minio; then
## INICIO TOKEN
STACK_NAME="supabase"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_supabase
else
APP_ORION="ferramenta_supabase"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
41|ntfy|NTFY)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="ntfy"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_ntfy
else
APP_ORION="ferramenta_ntfy"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
42|lowcoder|LOWCODER)
if verificar_docker_e_portainer_traefik && verificar_antes_se_tem_mongo; then
## INICIO TOKEN
STACK_NAME="lowcoder"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_lowcoder
else
APP_ORION="ferramenta_lowcoder"
verificar_arquivo
fi
## FIM TOKEN
fi
;;
43|langflow|LANGFLOW)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="langflow"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_langflow
else
APP_ORION="ferramenta_langflow"
ferramenta_langflow
fi
## FIM TOKEN
fi
;;
44|openproject|OPENPROJECT)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="openproject"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_openproject
else
APP_ORION="ferramenta_openproject"
ferramenta_openproject
fi
## FIM TOKEN
fi
;;
45|zep|ZEP)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="zep"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_zep
else
APP_ORION="ferramenta_zep"
ferramenta_zep
fi
## FIM TOKEN
fi
;;
46|humhub|HUMHUB)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="humhub"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_humhub
else
APP_ORION="ferramenta_humhub"
ferramenta_humhub
fi
## FIM TOKEN
fi
;;
47|yourls|YOURLS)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="yourls"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_yourls
else
APP_ORION="ferramenta_yourls"
ferramenta_yourls
fi
## FIM TOKEN
fi
;;
48|twentycrm|TWENTYCRM)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="twentycrm"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_twentycrm
else
APP_ORION="ferramenta_twentycrm"
ferramenta_twentycrm
fi
## FIM TOKEN
fi
;;
49|mattermost|MATTERMOST)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="mattermost"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_mattermost
else
APP_ORION="ferramenta_mattermost"
ferramenta_mattermost
fi
## FIM TOKEN
fi
;;
50|outline|OUTLINE)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="outline"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_outline
else
APP_ORION="ferramenta_outline"
ferramenta_outline
fi
## FIM TOKEN
fi
;;
51|focalboard|FOCALBOARD)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="focalboard"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_focalboard
else
APP_ORION="ferramenta_focalboard"
ferramenta_focalboard
fi
## FIM TOKEN
fi
;;
52|glpi|GLPI)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="glpi"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_glpi
else
APP_ORION="ferramenta_glpi"
ferramenta_glpi
fi
## FIM TOKEN
fi
;;
53|anythingllm|anything|AnythingLLM|Anything)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="anythingllm"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_anythingllm
else
APP_ORION="ferramenta_anythingllm"
ferramenta_anythingllm
fi
## FIM TOKEN
fi
;;
54|excalidraw|Excalidraw)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="excalidraw"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_excalidraw
else
APP_ORION="ferramenta_excalidraw"
ferramenta_excalidraw
fi
## FIM TOKEN
fi
;;
55|easyappointments|EasyAppointments|Easy!Appointments|easy!appointments)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="easyappointments"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_easyappointments
else
APP_ORION="ferramenta_easyappointments"
ferramenta_easyappointments
fi
## FIM TOKEN
fi
;;
56|documenso|Documenso)
if verificar_docker_e_portainer_traefik && verificar_antes_se_tem_minio; then
## INICIO TOKEN
STACK_NAME="documenso"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_documenso
else
APP_ORION="ferramenta_documenso"
ferramenta_documenso
fi
## FIM TOKEN
fi
;;
57|moodle|MOODLE)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="moodle"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_moodle
else
APP_ORION="ferramenta_moodle"
ferramenta_moodle
fi
## FIM TOKEN
fi
;;
58|tooljet|TOOLJET)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="tooljet"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_tooljet
else
APP_ORION="ferramenta_tooljet"
ferramenta_tooljet
fi
## FIM TOKEN
fi
;;
##remover.stack)
## if verificar_docker_e_portainer_traefik; then
##
## ferramenta_remover_stack
##
## fi
## ;;
sair|fechar|exit|close|x)
clear
nome_saindo
echo ""
break
;;
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
mysql)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="mysql"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_mysql_setup
else
APP_ORION="ferramenta_mysql_setup"
ferramenta_mysql_setup
fi
## FIM TOKEN
fi
;;
redis)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="redis"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_redis_setup
else
APP_ORION="ferramenta_redis_setup"
ferramenta_redis_setup
fi
## FIM TOKEN
fi
;;
pgvector)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="pgvector"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_pgvector_setup
else
APP_ORION="ferramenta_pgvector_setup"
ferramenta_pgvector_setup
fi
## FIM TOKEN
fi
;;
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
evolution.v1)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="evolution_v1"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_evolution_v1
else
APP_ORION="ferramenta_evolution_v1"
ferramenta_evolution_v1
fi
## FIM TOKEN
fi
;;
evolution.v2)
if verificar_docker_e_portainer_traefik; then
## INICIO TOKEN
STACK_NAME="evolution_v2"
if grep -q "Token: .\+" /root/dados_vps/dados_portainer; then
ferramenta_evolution_v2
else
APP_ORION="ferramenta_evolution_v2"
ferramenta_evolution_v2
fi
## FIM TOKEN
fi
;;
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## Reiniciar portainer
portainer.restart)
portainer.restart
;;
## Redefinir senha do portainer
portainer.reset)
portainer.reset
;;
## Traduzir emails do Chatwoot
chatwoot.mail)
chatwoot.mail
;;
## Traduzir emails do Chatwoot N
chatwoot.n.mail)
chatwoot.n.mail
;;
## Desbloquear funções do Chatwoot
chatwoot.nulled)
chatwoot.nulled
;;
## Importar Workflows do Quepasa no N8N
n8n.workflows)
n8n.workflows
;;
## Corrigir imagem da stack do traefik para 2.11.2
traefik.fix)
traefik.fix
;;
## Instalar CTOP
ctop)
ctop
;;
## Corrigir credenciais do portainer (para instalações)
credencial.reset)
criar_arquivo
;;
quepasa.setup.off)
quepasa.setup.off
;;
quepasa.setup.on)
quepasa.setup.on
;;
p1|P1)
menu_instalador="1"
;;
p2|P2) menu_instalador="2"
;;
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
## ORION DESIGN ##
## // ## // ## // ## // ## // ## // ## // ## //## // ## // ## // ## // ## // ## // ## // ## // ##
*)
;;
esac
echo ""
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment