#!/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="https://github.com/igferne/Beyond-Diagnosis.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%%.*} 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} 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" if [[ "$IS_PRIVATE" =~ ^[sS]$ ]]; then echo " Repo privado: Sí (se usará un PAT sólo para el clon inicial)" else echo " Repo privado: No" fi echo 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/" 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 # Aseguramos que nginx exponga también 443 #if grep -q 'ports:' docker-compose.yml && grep -q 'nginx:' docker-compose.yml; then # if ! grep -q '443:443' docker-compose.yml; then # sed -i '/- "80:80"/a\ - "443:443"' docker-compose.yml || true # fi #fi # ## Aseguramos que montamos /etc/letsencrypt dentro del contenedor de nginx #if ! grep -q '/etc/letsencrypt:/etc/letsencrypt:ro' docker-compose.yml; then # sed -i '/nginx:/,/networks:/{ # /volumes:/a\ - /etc/letsencrypt:/etc/letsencrypt:ro # }' docker-compose.yml || true #fi # ############################################### # 5. OBTENER CERTIFICADO LET'S ENCRYPT ############################################### #step "Obteniendo certificado SSL de Let’s Encrypt para $DOMAIN" # #if [ -f "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" ]; then # echo "Certificado ya existe, saltando paso de emisión." #else # # Asegurarnos de que no hay nada escuchando en 80/443 # systemctl stop nginx || true # # certbot certonly \ # --standalone \ # --non-interactive \ # --agree-tos \ # -m "$EMAIL" \ # -d "$DOMAIN" # # echo "Certificado emitido en /etc/letsencrypt/live/$DOMAIN/" #fi # ################################################ ## 6. CONFIGURAR NGINX DENTRO DEL REPO ################################################ #step "Generando configuración nginx con SSL" # #mkdir -p nginx/conf.d # #cat > nginx/conf.d/beyond.conf <