23 Commits

Author SHA1 Message Date
Guillermo
6a8ffe5da8 Actualizado Domain y subdomain 2026-02-12 09:19:56 +00:00
Guillermo
df12fe5339 Change domain_base in traefik labels 2026-02-12 09:12:29 +00:00
Guillermo
4fc681b2c4 cambiado el path de instalacion, eliminado el nginx y con labels de traefik 2026-02-10 18:39:21 +00:00
sujucu70
9c779eccb4 Merge pull request #23 from sujucu70/claude/check-agent-readiness-status-Exnpc
fix: remove duplicate 'table' object causing clickToExpand translatio…
2026-02-08 16:27:34 +01:00
sujucu70
7be286e2c9 Merge pull request #22 from sujucu70/claude/check-agent-readiness-status-Exnpc
fix: remove duplicate 'summary' object in agenticReadiness causing tr…
2026-02-08 16:10:42 +01:00
sujucu70
39806559d7 Merge pull request #21 from sujucu70/claude/check-agent-readiness-status-Exnpc
fix: change default language from Spanish to English
2026-02-08 15:54:15 +01:00
sujucu70
b3c4724100 Merge pull request #20 from sujucu70/claude/check-agent-readiness-status-Exnpc
Claude/check agent readiness status exnpc
2026-02-08 15:43:12 +01:00
sujucu70
a250559509 Merge pull request #19 from sujucu70/claude/check-agent-readiness-status-Exnpc
Claude/check agent readiness status exnpc
2026-02-08 15:28:27 +01:00
sujucu70
0e29d998c9 Merge pull request #18 from sujucu70/claude/check-agent-readiness-status-Exnpc
feat: translate OpportunityPrioritizer component to English
2026-02-08 14:06:05 +01:00
sujucu70
57239e86a2 Merge pull request #17 from sujucu70/claude/check-agent-readiness-status-Exnpc
fix: pass translation function t as prop to AgenticReadinessHeader
2026-02-08 12:57:42 +01:00
sujucu70
5dcd605168 Merge pull request #16 from sujucu70/claude/check-agent-readiness-status-Exnpc
fix: translate all remaining Spanish text in RoadmapTab
2026-02-08 12:18:44 +01:00
sujucu70
556a3f3d11 Merge pull request #15 from sujucu70/claude/check-agent-readiness-status-Exnpc
fix: translate remaining Spanish text in RoadmapTab priority queues s…
2026-02-08 11:54:45 +01:00
sujucu70
3f77897a4c Merge pull request #14 from sujucu70/claude/check-agent-readiness-status-Exnpc
Claude/check agent readiness status exnpc
2026-02-08 11:39:07 +01:00
sujucu70
d7fd852bec Merge pull request #13 from sujucu70/claude/check-agent-readiness-status-Exnpc
Claude/check agent readiness status exnpc
2026-02-08 00:36:05 +01:00
sujucu70
c7580f60ef Merge pull request #12 from sujucu70/claude/check-agent-readiness-status-Exnpc
Claude/check agent readiness status exnpc
2026-02-07 22:04:41 +01:00
sujucu70
69fce1dc28 Merge pull request #11 from sujucu70/claude/check-agent-readiness-status-Exnpc
Claude/check agent readiness status exnpc
2026-02-07 19:43:53 +01:00
sujucu70
20bcf94137 Merge pull request #10 from sujucu70/claude/check-agent-readiness-status-Exnpc
Claude/check agent readiness status exnpc
2026-02-07 19:18:18 +01:00
sujucu70
dc93b6d9e0 Merge pull request #9 from sujucu70/claude/check-agent-readiness-status-Exnpc
Claude/check agent readiness status exnpc
2026-02-07 19:07:46 +01:00
sujucu70
75ddb23000 Merge pull request #8 from sujucu70/claude/check-agent-readiness-status-Exnpc
feat: complete RoadmapTab Spanish-to-English translation
2026-02-07 18:58:20 +01:00
sujucu70
badbc82478 Merge pull request #7 from sujucu70/claude/check-agent-readiness-status-Exnpc
Claude/check agent readiness status exnpc
2026-02-07 18:47:20 +01:00
sujucu70
bbaf34f507 Merge pull request #6 from sujucu70/claude/check-agent-readiness-status-Exnpc
fix: translate remaining Spanish UI strings and comments to English
2026-02-07 18:07:00 +01:00
sujucu70
0a98843d6c Merge pull request #5 from sujucu70/claude/check-agent-readiness-status-Exnpc
Translate Phase 3 low-priority backend files (complete Spanish-to-Eng…
2026-02-07 12:18:17 +01:00
sujucu70
83a32a48b2 Merge pull request #4 from sujucu70/claude/check-agent-readiness-status-Exnpc
Claude/check agent readiness status exnpc
2026-02-07 12:05:50 +01:00
2 changed files with 186 additions and 169 deletions

View File

@@ -17,32 +17,28 @@ services:
networks:
- beyond-net
frontend:
XXXfrontend:
build:
context: ./frontend
args:
# el front compilará con este BASE_URL -> /api
# el front compilar con este BASE_URL -> /api
VITE_API_BASE_URL: /api
container_name: beyond-frontend
expose:
- "4173"
networks:
- beyond-net
nginx:
image: nginx:1.27-alpine
container_name: beyond-nginx
- frontend
labels:
- "traefik.enable=true"
- "traefik.http.routers.XXX-server.rule=Host(`DDD`)"
- "traefik.http.routers.XXX-server.entrypoints=websecure"
- "traefik.http.routers.XXX-server.tls=true"
- "traefik.http.routers.XXX-server.tls.certresolver=doresolv"
- "traefik.http.routers.XXX-server.service=XXXfrontend"
- "traefik.http.services.XXXfrontend.loadBalancer.server.port=4173"
depends_on:
- backend
- frontend
ports:
- "80:80"
- "443:443"
volumes:
- /etc/letsencrypt:/etc/letsencrypt:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
networks:
- beyond-net
volumes:
cache-data:
@@ -51,3 +47,5 @@ volumes:
networks:
beyond-net:
driver: bridge
frontend:
external: true

View File

@@ -6,7 +6,7 @@ set -euo pipefail
###############################################
# TODO: pon aquí la URL real de tu repo (sin credenciales)
REPO_URL_DEFAULT="https://github.com/igferne/Beyond-Diagnosis.git"
INSTALL_DIR="/opt/beyonddiagnosis"
INSTALL_BASE="/home/garbelo/"
###############################################
# UTILIDADES
@@ -37,7 +37,8 @@ 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."
@@ -66,30 +67,32 @@ read -rp "¿El repositorio es PRIVADO en GitHub y necesitas token? [s/N]: " IS_P
IS_PRIVATE=${IS_PRIVATE:-N}
GIT_CLONE_URL="$REPO_URL"
if [[ "$IS_PRIVATE" =~ ^[sS]$ ]]; then
echo "Introduce un Personal Access Token (PAT) de GitHub con permiso de lectura del repo."
read -rsp "GitHub PAT: " GITHUB_TOKEN
echo
if [ -z "$GITHUB_TOKEN" ]; then
echo "El token no puede estar vacío si el repo es privado."
exit 1
fi
# Construimos una URL del tipo: https://TOKEN@github.com/usuario/repo.git
if [[ "$REPO_URL" =~ ^https:// ]]; then
GIT_CLONE_URL="https://${GITHUB_TOKEN}@${REPO_URL#https://}"
else
echo "La URL del repositorio debe empezar por https:// para usar el token."
exit 1
fi
fi
#if [[ "$IS_PRIVATE" =~ ^[sS]$ ]]; then
# echo "Introduce un Personal Access Token (PAT) de GitHub con permiso de lectura del repo."
# read -rsp "GitHub PAT: " GITHUB_TOKEN
# echo
# if [ -z "$GITHUB_TOKEN" ]; then
# echo "El token no puede estar vacío si el repo es privado."
# exit 1
# fi
#
# # Construimos una URL del tipo: https://TOKEN@github.com/usuario/repo.git
# if [[ "$REPO_URL" =~ ^https:// ]]; then
# GIT_CLONE_URL="https://${GITHUB_TOKEN}@${REPO_URL#https://}"
# else
# echo "La URL del repositorio debe empezar por https:// para usar el token."
# exit 1
# fi
#fi
#
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
@@ -107,56 +110,56 @@ fi
###############################################
# 2. INSTALAR DOCKER + DOCKER COMPOSE + CERTBOT
###############################################
step "Instalando Docker, docker compose plugin y certbot"
apt-get update -y
# Dependencias para repositorio Docker
apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-release
# Clave GPG de Docker
if [ ! -f /etc/apt/keyrings/docker.gpg ]; then
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
gpg --dearmor -o /etc/apt/keyrings/docker.gpg
fi
# Repo Docker estable
if [ ! -f /etc/apt/sources.list.d/docker.list ]; then
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
fi
apt-get update -y
apt-get install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin \
git \
certbot
systemctl enable docker
systemctl start docker
# Abrimos puertos en ufw si está activo
if command -v ufw >/dev/null 2>&1; then
if ufw status | grep -q "Status: active"; then
step "Configurando firewall (ufw) para permitir 80 y 443"
ufw allow 80/tcp || true
ufw allow 443/tcp || true
fi
fi
###############################################
#step "Instalando Docker, docker compose plugin y certbot"
#
#apt-get update -y
#
## Dependencias para repositorio Docker
#apt-get install -y \
# ca-certificates \
# curl \
# gnupg \
# lsb-release
#
## Clave GPG de Docker
#if [ ! -f /etc/apt/keyrings/docker.gpg ]; then
# install -m 0755 -d /etc/apt/keyrings
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
# gpg --dearmor -o /etc/apt/keyrings/docker.gpg
#fi
#
## Repo Docker estable
#if [ ! -f /etc/apt/sources.list.d/docker.list ]; then
# echo \
# "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
# $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
# tee /etc/apt/sources.list.d/docker.list > /dev/null
#fi
#
#apt-get update -y
#
#apt-get install -y \
# docker-ce \
# docker-ce-cli \
# containerd.io \
# docker-buildx-plugin \
# docker-compose-plugin \
# git \
# certbot
#
#systemctl enable docker
#systemctl start docker
#
## Abrimos puertos en ufw si está activo
#if command -v ufw >/dev/null 2>&1; then
# if ufw status | grep -q "Status: active"; then
# step "Configurando firewall (ufw) para permitir 80 y 443"
# ufw allow 80/tcp || true
# ufw allow 443/tcp || true
# fi
#fi
#
################################################
# 3. CLONAR / ACTUALIZAR REPO
###############################################
step "Descargando/actualizando el repositorio en $INSTALL_DIR"
@@ -189,94 +192,110 @@ 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
DOMAIN=$DOMAIN".analytics.beyondcx.org"
fi
if ! grep -q "DDD" docker-compose.yml; then
echo "⚠ No encuentro XXX 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
#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 Lets 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 <<EOF
server {
listen 80;
server_name $DOMAIN;
return 301 https://\$host\$request_uri;
client_max_body_size 1024M;
}
server {
listen 443 ssl;
server_name $DOMAIN;
client_max_body_size 1024M;
ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# FRONTEND (React)
location / {
proxy_pass http://frontend:4173/;
proxy_http_version 1.1;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
}
# BACKEND (FastAPI)
location /api/ {
proxy_pass http://backend:8000/;
proxy_http_version 1.1;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 60s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
send_timeout 600s;
}
}
EOF
#step "Obteniendo certificado SSL de Lets 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 <<EOF
#server {
# listen 80;
# server_name $DOMAIN;
# return 301 https://\$host\$request_uri;
# client_max_body_size 1024M;
#}
#
#server {
# listen 443 ssl;
# server_name $DOMAIN;
#
# client_max_body_size 1024M;
#
# ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem;
# ssl_protocols TLSv1.2 TLSv1.3;
# ssl_ciphers HIGH:!aNULL:!MD5;
#
# # FRONTEND (React)
# location / {
# proxy_pass http://frontend:4173/;
# proxy_http_version 1.1;
# proxy_set_header Host \$host;
# proxy_set_header X-Real-IP \$remote_addr;
# proxy_set_header Upgrade \$http_upgrade;
# proxy_set_header Connection "upgrade";
# }
#
# # BACKEND (FastAPI)
# location /api/ {
# proxy_pass http://backend:8000/;
# proxy_http_version 1.1;
# proxy_set_header Host \$host;
# proxy_set_header X-Real-IP \$remote_addr;
# proxy_set_header Upgrade \$http_upgrade;
# proxy_set_header Connection "upgrade";
#
# proxy_connect_timeout 60s;
# proxy_send_timeout 600s;
# proxy_read_timeout 600s;
# send_timeout 600s;
# }
#}
#EOF
#
###############################################
# 7. BUILD Y ARRANQUE DE CONTENEDORES
###############################################