├── LICENSE ├── README.md ├── install_instancia ├── install_primaria ├── lib ├── _backend.sh ├── _frontend.sh ├── _inquiry.sh ├── _system.sh └── manifest.sh ├── utils ├── _banner.sh └── manifest.sh └── variables ├── _app.sh ├── _background.sh ├── _fonts.sh ├── _general.sh └── manifest.sh /LICENSE: -------------------------------------------------------------------------------- 1 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 2 | Version 2, December 2004 3 | 4 | Copyright (C) 2004 riservato.xyz 5 | 6 | Everyone is permitted to copy and distribute verbatim or modified 7 | copies of this license document, and changing it is allowed as long 8 | as the name is changed. 9 | 10 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 11 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 12 | 13 | 0. You just DO WHAT THE FUCK YOU WANT TO. 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Versão Ubuntu 2 | ### Passo a passo 3 | Ao executar o comando abaixo, vai aparecer um menu para instalar ou atualizar. 4 | Para instalar digite 1 e enter 5 | Vai solicitar os seguintes dados 6 | 1. Senha mysql 7 | 2. Nome da empresa (em minúsculo), esse nome é para diferenciar as instalações, tanto do Press Ticket, como dos recursos isolados via Docker. 8 | 3. Número máximo de conexões WhatsApp que essa instalação poderá usar 9 | 4. Número máximo de atendentes para essa instalação 10 | 5. Domínio do frontend, geralmente app.seusite.com.br 11 | 6. Domínio do backend, geralmente api.seusite.com.br 12 | 7. Porta do frontend, geralmente para a primeira instalação 3000, e a seguintes instalações que tiverem, 3001, 3002... 13 | 8. Porta do backend, geralmente para a primeira instalação 4000, e a seguintes instalações que tiverem, 4001, 4002... 14 | 9. Porta do phpmyadmin, geralmente para a primeira instalação 8000, e a seguintes instalações que tiverem, 8001, 8002... 15 | O acesso ao phpmyadmin é feito por IP do servidor, ex. http://111.111.111.111:8000 16 | 10. Porta do MYSQL, geralmente para a primeira instalação 3306, e a seguintes instalações que tiverem, 3307, 3308... 17 | 18 | Seguindo todos os passos acima e não deixando faltar nenhuma da informações solicitadas, é só aguardar o instalador terminar a instalação. 19 | 20 | Ao terminar a instalação é só logar com os dados padrão, caso não saiba veja na página do projeto [Press Ticket aqui](https://github.com/rtenorioh/Press-Ticket). 21 | 22 | ## INSTALAÇÃO 23 | FAZENDO DOWNLOAD DO INSTALADOR & INICIANDO A PRIMEIRA INSTALAÇÃO (USAR SOMENTE PARA PRIMEIRA INSTALAÇÃO): 24 | 25 | ```bash 26 | sudo apt install -y git && git clone https://github.com/tonnybarros/install_pressticket-phpmyadmin.git instalador && sudo chmod -R 777 ./instalador && cd ./instalador && sudo ./install_primaria 27 | ``` 28 | 29 | ACESSANDO DIRETORIO DO INSTALADOR & INICIANDO INSTALAÇÕES ADICIONAIS (USAR ESTE COMANDO PARA SEGUNDA OU MAIS INSTALAÇÃO: 30 | ```bash 31 | cd && cd ./instalador && sudo ./install_instancia 32 | ``` 33 | ## Recursos 34 | - Multi instalador ilimitado [Press Ticket](https://github.com/rtenorioh/Press-Ticket) 35 | - Recursos isolados para cada instalação 36 | - Instala Docker Mariadb (isolados) 37 | - Instala Docker Phpmyadmin (isolados) 38 | - instala nginx 39 | - Configura os domínios com certificados de segurança 40 | - Atualiza press ticket para última versão. 41 | 42 | ## Versão Debian 43 | - [Press-Ticket-Installer](https://github.com/robsonwr/Press-Ticket-Installer) 44 | 45 | ## Instalação manual 46 | - [Press Ticket](https://github.com/rtenorioh/Press-Ticket) 47 | -------------------------------------------------------------------------------- /install_instancia: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # reset shell colors 4 | tput init 5 | 6 | # https://stackoverflow.com/questions/59895/how-to-get-the-source-directory-of-a-bash-script-from-within-the-script-itself 7 | SOURCE="${BASH_SOURCE[0]}" 8 | while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink 9 | PROJECT_ROOT="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )" 10 | SOURCE="$(readlink "$SOURCE")" 11 | [[ $SOURCE != /* ]] && SOURCE="$PROJECT_ROOT/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located 12 | done 13 | PROJECT_ROOT="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )" 14 | 15 | # required imports 16 | source "${PROJECT_ROOT}"/variables/manifest.sh 17 | source "${PROJECT_ROOT}"/utils/manifest.sh 18 | source "${PROJECT_ROOT}"/lib/manifest.sh 19 | 20 | # user configs file 21 | if [[ ! -e "${PROJECT_ROOT}"/config ]]; then 22 | cat << EOF > "${PROJECT_ROOT}"/config 23 | deploy_password=${deploy_password} 24 | mysql_root_password=${mysql_root_password} 25 | db_pass=${db_pass} 26 | EOF 27 | fi 28 | 29 | # this file has passwords 30 | sudo su - root </dev/null 2>&1 && pwd )" 10 | SOURCE="$(readlink "$SOURCE")" 11 | [[ $SOURCE != /* ]] && SOURCE="$PROJECT_ROOT/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located 12 | done 13 | PROJECT_ROOT="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )" 14 | 15 | # required imports 16 | source "${PROJECT_ROOT}"/variables/manifest.sh 17 | source "${PROJECT_ROOT}"/utils/manifest.sh 18 | source "${PROJECT_ROOT}"/lib/manifest.sh 19 | 20 | # user configs file 21 | if [[ ! -e "${PROJECT_ROOT}"/config ]]; then 22 | cat << EOF > "${PROJECT_ROOT}"/config 23 | deploy_password=${deploy_password} 24 | mysql_root_password=${mysql_root_password} 25 | db_pass=${db_pass} 26 | EOF 27 | fi 28 | 29 | # this file has passwords 30 | sudo su - root < /home/deploy/${instancia_add}/backend/.env 49 | NODE_ENV= 50 | BACKEND_URL=${backend_url} 51 | FRONTEND_URL=${frontend_url} 52 | PROXY_PORT=443 53 | CHROME_BIN=/usr/bin/google-chrome-stable 54 | PORT=${backend_port} 55 | 56 | DB_HOST=localhost 57 | DB_PORT=${mysql_port} 58 | DB_DIALECT=mysql 59 | DB_USER=${instancia_add} 60 | DB_PASS=${mysql_root_password} 61 | DB_NAME=${instancia_add} 62 | 63 | JWT_SECRET=${jwt_secret} 64 | JWT_REFRESH_SECRET=${jwt_refresh_secret} 65 | 66 | PMA_PORT=${phpmyadmin_port} 67 | REDE=${instancia_add} 68 | 69 | USER_LIMIT=${max_user} 70 | CONNECTIONS_LIMIT=${max_whats} 71 | [-]EOF 72 | EOF 73 | 74 | sleep 2 75 | 76 | sudo su - deploy << EOF 77 | cat <<[-]EOF > /home/deploy/${instancia_add}/backend/src/config/database.ts 78 | require("../bootstrap"); 79 | 80 | module.exports = { 81 | define: { 82 | charset: "utf8mb4", 83 | collate: "utf8mb4_bin" 84 | }, 85 | dialect: process.env.DB_DIALECT || "mysql", 86 | timezone: "-03:00", 87 | host: process.env.DB_HOST, 88 | port: process.env.DB_PORT, 89 | database: process.env.DB_NAME, 90 | username: process.env.DB_USER, 91 | password: process.env.DB_PASS, 92 | logging: false 93 | }; 94 | [-]EOF 95 | EOF 96 | 97 | sleep 2 98 | 99 | } 100 | 101 | ####################################### 102 | # installs node.js dependencies 103 | # Arguments: 104 | # None 105 | ####################################### 106 | backend_node_dependencies() { 107 | print_banner 108 | printf "${WHITE} 💻 Instalando dependências do backend...${GRAY_LIGHT}" 109 | printf "\n\n" 110 | 111 | sleep 2 112 | 113 | sudo su - deploy < /etc/nginx/sites-available/${instancia_add}-backend << 'END' 251 | server { 252 | server_name $backend_hostname; 253 | location / { 254 | proxy_pass http://127.0.0.1:${backend_port}; 255 | proxy_http_version 1.1; 256 | proxy_set_header Upgrade \$http_upgrade; 257 | proxy_set_header Connection 'upgrade'; 258 | proxy_set_header Host \$host; 259 | proxy_set_header X-Real-IP \$remote_addr; 260 | proxy_set_header X-Forwarded-Proto \$scheme; 261 | proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; 262 | proxy_cache_bypass \$http_upgrade; 263 | } 264 | } 265 | END 266 | ln -s /etc/nginx/sites-available/${instancia_add}-backend /etc/nginx/sites-enabled 267 | EOF 268 | 269 | sleep 2 270 | } 271 | -------------------------------------------------------------------------------- /lib/_frontend.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # functions for setting up app frontend 4 | 5 | ####################################### 6 | # installed node packages 7 | # Arguments: 8 | # None 9 | ####################################### 10 | frontend_node_dependencies() { 11 | print_banner 12 | printf "${WHITE} 💻 Instalando dependências do frontend...${GRAY_LIGHT}" 13 | printf "\n\n" 14 | 15 | sleep 2 16 | 17 | sudo su - deploy < /home/deploy/${instancia_add}/frontend/.env 94 | REACT_APP_BACKEND_URL=${backend_url} 95 | REACT_APP_HOURS_CLOSE_TICKETS_AUTO = 24 96 | SERVER_PORT = ${frontend_port} 97 | [-]EOF 98 | EOF 99 | 100 | sleep 2 101 | 102 | sudo su - deploy << EOF 103 | cat <<[-]EOF > /home/deploy/${instancia_add}/frontend/server.js 104 | //simple express server to run frontend production build; 105 | const express = require("express"); 106 | const path = require("path"); 107 | const app = express(); 108 | require('dotenv').config(); 109 | app.use(express.static(path.join(__dirname, "build"))); 110 | app.get("/*", function (req, res) { 111 | res.sendFile(path.join(__dirname, "build", "index.html")); 112 | }); 113 | app.listen(process.env.SERVER_PORT || 3333); 114 | 115 | [-]EOF 116 | EOF 117 | 118 | sleep 2 119 | } 120 | 121 | ####################################### 122 | # starts pm2 for frontend 123 | # Arguments: 124 | # None 125 | ####################################### 126 | frontend_start_pm2() { 127 | print_banner 128 | printf "${WHITE} 💻 Iniciando pm2 (frontend)...${GRAY_LIGHT}" 129 | printf "\n\n" 130 | 131 | sleep 2 132 | 133 | sudo su - deploy < /etc/nginx/sites-available/${instancia_add}-frontend << 'END' 159 | server { 160 | server_name $frontend_hostname; 161 | 162 | location / { 163 | proxy_pass http://127.0.0.1:${frontend_port}; 164 | proxy_http_version 1.1; 165 | proxy_set_header Upgrade \$http_upgrade; 166 | proxy_set_header Connection 'upgrade'; 167 | proxy_set_header Host \$host; 168 | proxy_set_header X-Real-IP \$remote_addr; 169 | proxy_set_header X-Forwarded-Proto \$scheme; 170 | proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; 171 | proxy_cache_bypass \$http_upgrade; 172 | } 173 | } 174 | END 175 | 176 | ln -s /etc/nginx/sites-available/${instancia_add}-frontend /etc/nginx/sites-enabled 177 | EOF 178 | 179 | sleep 2 180 | } 181 | -------------------------------------------------------------------------------- /lib/_inquiry.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | get_mysql_root_password() { 4 | 5 | print_banner 6 | printf "${WHITE} 💻 Insira senha padrão para o sistema (senha root mysql):${GRAY_LIGHT}" 7 | printf "\n\n" 8 | read -p "> " mysql_root_password 9 | } 10 | 11 | get_instancia_add() { 12 | 13 | print_banner 14 | printf "${WHITE} 💻 Digite o nome da empresa a ser configurada (Utilizar Letras minusculas):${GRAY_LIGHT}" 15 | printf "\n\n" 16 | read -p "> " instancia_add 17 | } 18 | 19 | get_max_whats() { 20 | 21 | print_banner 22 | printf "${WHITE} 💻 Digite o numero maximo de conexões que a empresa ${instancia_add} poderá cadastrar:${GRAY_LIGHT}" 23 | printf "\n\n" 24 | read -p "> " max_whats 25 | } 26 | 27 | get_max_user() { 28 | 29 | print_banner 30 | printf "${WHITE} 💻 Digite o numero maximo de atendentes que a empresa ${instancia_add} poderá cadastrar:${GRAY_LIGHT}" 31 | printf "\n\n" 32 | read -p "> " max_user 33 | } 34 | 35 | get_frontend_url() { 36 | 37 | print_banner 38 | printf "${WHITE} 💻 Digite o domínio do FRONTEND/PAINEL para a ${instancia_add}:${GRAY_LIGHT}" 39 | printf "\n\n" 40 | read -p "> " frontend_url 41 | } 42 | 43 | get_backend_url() { 44 | 45 | print_banner 46 | printf "${WHITE} 💻 Digite o domínio do BACKEND/API para a ${instancia_add}:${GRAY_LIGHT}" 47 | printf "\n\n" 48 | read -p "> " backend_url 49 | } 50 | 51 | get_frontend_port() { 52 | 53 | print_banner 54 | printf "${WHITE} 💻 Digite a porta do FRONTEND para a ${instancia_add}; Ex: 3000 A 3999 ${GRAY_LIGHT}" 55 | printf "\n\n" 56 | read -p "> " frontend_port 57 | } 58 | 59 | 60 | get_backend_port() { 61 | 62 | print_banner 63 | printf "${WHITE} 💻 Digite a porta do BACKEND para esta instancia; Ex: 4000 A 4999 ${GRAY_LIGHT}" 64 | printf "\n\n" 65 | read -p "> " backend_port 66 | } 67 | 68 | get_phpmyadmin_port() { 69 | 70 | print_banner 71 | printf "${WHITE} 💻 Digite a porta do PHPMYADMIN para a ${instancia_add}; Ex: 8080 ${GRAY_LIGHT}" 72 | printf "\n\n" 73 | read -p "> " phpmyadmin_port 74 | } 75 | 76 | get_mysql_port() { 77 | 78 | print_banner 79 | printf "${WHITE} 💻 Digite a porta MYSQL para ${instancia_add}; Ex: 3306 (3306, 3307...) ${GRAY_LIGHT}" 80 | printf "\n\n" 81 | read -p "> " mysql_port 82 | } 83 | 84 | 85 | 86 | get_urls() { 87 | get_mysql_root_password 88 | get_instancia_add 89 | get_max_whats 90 | get_max_user 91 | get_frontend_url 92 | get_backend_url 93 | get_frontend_port 94 | get_backend_port 95 | get_phpmyadmin_port 96 | get_mysql_port 97 | } 98 | 99 | software_update() { 100 | get_instancia_add 101 | frontend_update 102 | backend_update 103 | } 104 | 105 | inquiry_options() { 106 | 107 | print_banner 108 | printf "${WHITE} 💻 Bem vindo(a) ao instalador Press Ticket, Selecione abaixo a proxima ação!${GRAY_LIGHT}" 109 | printf "\n\n" 110 | printf " [1] Instalar o Press Ticket\n" 111 | printf " [2] Atualizar o Press Ticket\n" 112 | printf "\n" 113 | read -p "> " option 114 | 115 | case "${option}" in 116 | 1) get_urls ;; 117 | 118 | 2) 119 | software_update 120 | exit 121 | ;; 122 | 123 | *) exit ;; 124 | esac 125 | } 126 | 127 | 128 | -------------------------------------------------------------------------------- /lib/_system.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # system management 4 | 5 | ####################################### 6 | # creates user 7 | # Arguments: 8 | # None 9 | ####################################### 10 | system_create_user() { 11 | print_banner 12 | printf "${WHITE} 💻 Agora, vamos criar o usuário para a instancia...${GRAY_LIGHT}" 13 | printf "\n\n" 14 | 15 | sleep 2 16 | 17 | sudo su - root < /etc/nginx/conf.d/deploy.conf << 'END' 302 | client_max_body_size 100M; 303 | END 304 | 305 | EOF 306 | 307 | sleep 2 308 | } 309 | 310 | ####################################### 311 | # installs nginx 312 | # Arguments: 313 | # None 314 | ####################################### 315 | system_certbot_setup() { 316 | print_banner 317 | printf "${WHITE} 💻 Configurando certbot...${GRAY_LIGHT}" 318 | printf "\n\n" 319 | 320 | sleep 2 321 | 322 | backend_domain=$(echo "${backend_url/https:\/\/}") 323 | frontend_domain=$(echo "${frontend_url/https:\/\/}") 324 | 325 | sudo su - root <