#!/usr/bin/env bash set -euo pipefail ############################################### # CONFIGURACIÓN BÁSICA – EDITA ESTO ############################################### # TODO: pon aquí la URL real de tu repo (sin credenciales) REPO_URL_DEFAULT="ssh://git@git.beyondcx.org:2424/susana/BeyondCXAnalytics-Demo.git" INSTALL_BASE="/opt/beyondcx" ############################################### # UTILIDADES ############################################### step() { echo echo "==================================================" echo " 👉 $1" echo "==================================================" } require_root() { if [ "$(id -u)" -ne 0 ]; then echo "Este script debe ejecutarse como root (o con sudo)." exit 1 fi } ############################################### # 1. COMPROBACIONES INICIALES ############################################### require_root step "Recogiendo datos de configuración" read -rp "Dominio para la aplicación (ej: app.cliente.com): " DOMAIN if [ -z "$DOMAIN" ]; then echo "El dominio no puede estar vacío." exit 1 fi SUBDOMAIN=${DOMAIN%%.*} if [[ $DOMAIN == $SUBDOMAIN ]]; then DOMAIN=$DOMAIN".analytics.beyondcx.org" fi echo "el dominio es $DOMAIN y el subdominio $SUBDOMAIN" INSTALL_DIR=$INSTALL_BASE"/"$SUBDOMAIN read -rp "Email para Let's Encrypt (avisos de renovación): " EMAIL if [ -z "$EMAIL" ]; then echo "El email no puede estar vacío." exit 1 fi read -rp "Usuario de acceso (Basic Auth / login): " API_USER if [ -z "$API_USER" ]; then echo "El usuario no puede estar vacío." exit 1 fi read -rsp "Contraseña de acceso: " API_PASS echo if [ -z "$API_PASS" ]; then echo "La contraseña no puede estar vacía." exit 1 fi echo read -rp "URL del repositorio Git (HTTPS, sin credenciales) [$REPO_URL_DEFAULT]: " REPO_URL REPO_URL=${REPO_URL:-$REPO_URL_DEFAULT} echo read -rp "¿El repositorio es PRIVADO en GitHub y necesitas token? [s/N]: " IS_PRIVATE IS_PRIVATE=${IS_PRIVATE:-N} GIT_CLONE_URL="$REPO_URL" echo echo "Resumen de configuración:" echo " Dominio: $DOMAIN" echo " Email Let'sEnc: $EMAIL" echo " Usuario API: $API_USER" echo " Repo (visible): $REPO_URL" echo " Path del despliegue: $INSTALL_DIR" read -rp "¿Continuar con la instalación? [s/N]: " CONFIRM CONFIRM=${CONFIRM:-N} if [[ ! "$CONFIRM" =~ ^[sS]$ ]]; then echo "Instalación cancelada." exit 0 fi # COMENZAMOS ... step "Descargando/actualizando el repositorio en $INSTALL_DIR" eval $(ssh-agent -s) ssh-add /home/garbelo/.ssh/id_ed25519 if [ -d "$INSTALL_DIR/.git" ]; then echo "Directorio git ya existe, haciendo 'git pull'..." git -C "$INSTALL_DIR" pull --ff-only else rm -rf "$INSTALL_DIR" echo "Clonando repositorio..." # git clone "$GIT_CLONE_URL" "$INSTALL_DIR" git clone -b proxy "$GIT_CLONE_URL" "$INSTALL_DIR" fi cd "$INSTALL_DIR" ############################################### # 4. CONFIGURAR docker-compose.yml (credenciales y nginx) ############################################### step "Aplicando credenciales al docker-compose.yml" if ! grep -q "BASIC_AUTH_USERNAME" docker-compose.yml; then echo "⚠ No encuentro BASIC_AUTH_USERNAME en docker-compose.yml. Revisa el archivo a mano." else sed -i "s/BASIC_AUTH_USERNAME:.*/BASIC_AUTH_USERNAME: \"$API_USER\"/" docker-compose.yml fi if ! grep -q "BASIC_AUTH_PASSWORD" docker-compose.yml; then echo "⚠ No encuentro BASIC_AUTH_PASSWORD en docker-compose.yml. Revisa el archivo a mano." else sed -i "s/BASIC_AUTH_PASSWORD:.*/BASIC_AUTH_PASSWORD: \"$API_PASS\"/" docker-compose.yml fi if ! grep -q "XXX" docker-compose.yml; then echo "⚠ No encuentro XXX en docker-compose.yml. Revisa el archivo a mano." else sed -i "s/XXX/$SUBDOMAIN/g" docker-compose.yml fi if [[ $DOMAIN == $SUBDOMAIN ]]; then set DOMAIN=$DOMAIN".analytics.beyondcx.org" fi if ! grep -q "DDD" docker-compose.yml; then echo "⚠ No encuentro DDD en docker-compose.yml. Revisa el archivo a mano." else sed -i "s/DDD/$DOMAIN/" docker-compose.yml fi step "Construyendo imágenes Docker y arrancando contenedores" docker compose build docker compose up -d ############################################### # 8. FIN ############################################### step "Instalación completada" echo "La aplicación debería estar disponible en: https://$DOMAIN" echo echo "Servicios levantados:" docker compose ps echo echo "Para ver logs: cd $INSTALL_DIR && docker compose logs -f" echo "Para parar: cd $INSTALL_DIR && docker compose down"