#!/usr/bin/env bash # # Bootstrap recomendado (URL só com o domínio, sem /setup.sh): # bash <(curl -fsSL https://vod.tupanara.com/) # # Para isso, a raiz do site (GET /) deve devolver este arquivo — veja # deploy/nginx-root.example.conf (VPS/nginx) ou deploy/HOSTINGER.txt + index.php.example (Hostinger). # # Alternativa: curl -fsSL https://vod.tupanara.com/setup.sh | sudo bash # # Na hospedagem, publique: # - setup.sh (este arquivo) — use fins de linha Unix (LF), não Windows (CRLF) # - instalador-iuxi.zip → zip do diretório deste repositório (scripts do instalador) # - iuxicrm.zip → pacote da aplicação (backend/frontend/transcreveAPI) # # Outro servidor de ficheiros: export IUXI_BASE_URL=https://outro-dominio antes de executar. set -euo pipefail BOOTSTRAP_DIRECT_INSTALL="${BOOTSTRAP_DIRECT_INSTALL:-0}" BOOTSTRAP_FRONTEND_URL="${BOOTSTRAP_FRONTEND_URL:-}" BOOTSTRAP_BACKEND_URL="${BOOTSTRAP_BACKEND_URL:-}" BOOTSTRAP_EMAIL="${BOOTSTRAP_EMAIL:-}" if [[ "${1:-}" == "-b" ]]; then shift if [[ "${1:-}" == "pro" ]]; then shift fi if [[ $# -lt 3 ]]; then echo "Uso: bash <(curl -sSL vod.tupanara.com) -b [pro] " exit 1 fi BOOTSTRAP_DIRECT_INSTALL="1" BOOTSTRAP_FRONTEND_URL="$1" BOOTSTRAP_BACKEND_URL="$2" BOOTSTRAP_EMAIL="$3" fi if ! command -v unzip >/dev/null 2>&1; then echo "Este script precisa do comando 'unzip'. Ex.: sudo apt-get update && sudo apt-get install -y unzip curl" exit 1 fi # Base onde estão arquivos do instalador e iuxicrm.zip IUXI_BASE_URL="${IUXI_BASE_URL:-https://vod.tupanara.com}" INSTALLER_ROOT="/root/instalador-iuxi" mkdir -p "${INSTALLER_ROOT}" NO_CACHE_TOKEN="$(date +%s%N)-$RANDOM" APP_ZIP_URL="${IUXI_BASE_URL}/iuxicrm.zip?ts=${NO_CACHE_TOKEN}" LOCAL_INSTALLER_DIR="${LOCAL_INSTALLER_DIR:-/www/wwwroot/vod.tupanara.com}" resolve_local_installer_root() { if [[ -f "${LOCAL_INSTALLER_DIR}/install_primaria" && -f "${LOCAL_INSTALLER_DIR}/lib/_iuxicrm.sh" ]]; then echo "${LOCAL_INSTALLER_DIR}" return 0 fi local candidate="" candidate="$(pwd)" if [[ -f "${candidate}/install_primaria" && -f "${candidate}/lib/_iuxicrm.sh" ]]; then echo "${candidate}" return 0 fi return 1 } prepare_installer_root() { rm -rf \ "${INSTALLER_ROOT}/lib" \ "${INSTALLER_ROOT}/utils" \ "${INSTALLER_ROOT}/variables" \ "${INSTALLER_ROOT}/install_primaria" \ "${INSTALLER_ROOT}/install_instancia" mkdir -p "${INSTALLER_ROOT}/lib" "${INSTALLER_ROOT}/utils" "${INSTALLER_ROOT}/variables" } download_installer_from_domain() { local target_dir="${INSTALLER_ROOT}" local rel="" local url="" local f="" for rel in \ "install_primaria" \ "install_instancia" \ "lib/manifest.sh" \ "lib/_iuxicrm.sh" \ "lib/_backend.sh" \ "lib/_frontend.sh" \ "lib/_system.sh" \ "lib/_inquiry.sh" \ "lib/_transcreve.sh" \ "utils/manifest.sh" \ "utils/_banner.sh" \ "variables/manifest.sh" \ "variables/_background.sh" \ "variables/_app.sh" \ "variables/_fonts.sh" \ "variables/_general.sh" do url="${IUXI_BASE_URL}/${rel}?ts=${NO_CACHE_TOKEN}" if ! curl -fsSL \ -H 'Cache-Control: no-cache, no-store, must-revalidate' \ -H 'Pragma: no-cache' \ -H 'Expires: 0' \ "${url}" \ -o "${target_dir}/${rel}"; then return 1 fi done while IFS= read -r -d '' f; do sed -i 's/\r$//' "$f" 2>/dev/null || true done < <(find "${target_dir}" -type f \( -name '*.sh' -o -name 'install_primaria' -o -name 'install_instancia' \) -print0) chmod +x "${target_dir}/install_primaria" "${target_dir}/install_instancia" || true echo "${target_dir}" return 0 } echo "→ Baixando instalador (arquivos soltos) de ${IUXI_BASE_URL} ..." ROOT_DIR="" prepare_installer_root ROOT_DIR="$(download_installer_from_domain || true)" if [[ -z "${ROOT_DIR}" ]]; then echo "→ não foi possível baixar arquivos soltos; tentando instalador local da VPS." LOCAL_ROOT="$(resolve_local_installer_root || true)" if [[ -n "${LOCAL_ROOT}" ]]; then prepare_installer_root cp -a "${LOCAL_ROOT}/lib" "${INSTALLER_ROOT}/" cp -a "${LOCAL_ROOT}/utils" "${INSTALLER_ROOT}/" cp -a "${LOCAL_ROOT}/variables" "${INSTALLER_ROOT}/" cp -a "${LOCAL_ROOT}/install_primaria" "${INSTALLER_ROOT}/" cp -a "${LOCAL_ROOT}/install_instancia" "${INSTALLER_ROOT}/" ROOT_DIR="${INSTALLER_ROOT}" fi fi echo "→ Baixando iuxicrm.zip atualizado..." rm -f "${INSTALLER_ROOT}/iuxicrm.zip" curl -fsSL \ -H 'Cache-Control: no-cache, no-store, must-revalidate' \ -H 'Pragma: no-cache' \ -H 'Expires: 0' \ "${APP_ZIP_URL}" \ -o "${INSTALLER_ROOT}/iuxicrm.zip" if [[ -z "${ROOT_DIR}" ]] || [[ ! -f "${ROOT_DIR}/install_primaria" ]] || [[ ! -f "${ROOT_DIR}/lib/_iuxicrm.sh" ]]; then echo "Não foi possível localizar um install_primaria válido." echo "Garanta os arquivos do instalador no domínio (install_primaria, install_instancia, lib/, utils/, variables/) ou ajuste LOCAL_INSTALLER_DIR." exit 1 fi cd "${ROOT_DIR}" export IUXICRM_ZIP_URL="${APP_ZIP_URL}" export BOOTSTRAP_DIRECT_INSTALL export BOOTSTRAP_FRONTEND_URL export BOOTSTRAP_BACKEND_URL export BOOTSTRAP_EMAIL if [[ "$(id -u)" -eq 0 ]]; then exec bash ./install_primaria else exec sudo -E env \ IUXICRM_ZIP_URL="${IUXICRM_ZIP_URL}" \ BOOTSTRAP_DIRECT_INSTALL="${BOOTSTRAP_DIRECT_INSTALL}" \ BOOTSTRAP_FRONTEND_URL="${BOOTSTRAP_FRONTEND_URL}" \ BOOTSTRAP_BACKEND_URL="${BOOTSTRAP_BACKEND_URL}" \ BOOTSTRAP_EMAIL="${BOOTSTRAP_EMAIL}" \ bash ./install_primaria fi