#!/usr/bin/env sh # start.sh - Flujo sencillo para usuarios finales: # 1) Cargar variables desde .env (si existe) # 2) Generar config.local.yml seguro desde variables de entorno # 3) Levantar postgres y rabbitmq # 4) Ejecutar migraciones # 5) Levantar el resto de servicios set -e if [ -f .env ]; then echo "Loading .env" # shellcheck disable=SC1091 . .env fi mkdir -p ./data echo "Generating config.local.yml" sh ./scripts/generate-config.sh ./config.local.yml # Si POSTGRES_PASSWORD está definido en .env, asegurarnos de que config.local.yml use la misma contraseña if [ -n "${POSTGRES_PASSWORD:-}" ]; then echo "Asegurando que config.local.yml use la contraseña de POSTGRES_PASSWORD desde .env" # Sustituir la línea password: "..." en la sección database por el valor de POSTGRES_PASSWORD # Usamos awk para editar de forma segura el fichero yaml simple # Hacer copia de seguridad si existe if [ -f ./config.local.yml ]; then ts=$(date +%Y%m%d%H%M%S) cp ./config.local.yml ./config.local.yml.bak.$ts echo "Backup creado: ./config.local.yml.bak.$ts" fi awk -v pw="$POSTGRES_PASSWORD" ' BEGIN {in_db=0} /^database:/ {in_db=1; print; next} in_db && /^[[:space:]]*password:/ {print " password: \"" pw "\""; in_db=0; next} {print} ' ./config.local.yml > ./config.local.yml.tmp && mv ./config.local.yml.tmp ./config.local.yml echo "config.local.yml actualizada con la contraseña de .env" fi echo "Starting postgres and rabbitmq..." docker compose -f docker-compose.simple.yml up -d postgres rabbitmq echo "Waiting for postgres container id..." POSTGRES_CID="" for i in $(seq 1 30); do POSTGRES_CID=$(docker compose -f docker-compose.simple.yml ps -q postgres || true) if [ -n "$POSTGRES_CID" ]; then break fi sleep 1 done if [ -z "$POSTGRES_CID" ]; then echo "Error: no pude encontrar el contenedor postgres" >&2 exit 1 fi echo "Esperando a que Postgres acepte conexiones (pg_isready dentro del contenedor)..." for i in $(seq 1 120); do if docker exec "$POSTGRES_CID" pg_isready -U ${POSTGRES_USER:-libretime} >/dev/null 2>&1; then echo "Postgres listo" break fi sleep 1 done echo "Applying migrations" docker compose -f docker-compose.simple.yml run --rm migrate echo "Starting remaining services" docker compose -f docker-compose.simple.yml up -d --remove-orphans nginx api legacy playout liquidsoap worker analyzer icecast echo "Done. Browse to ${LIBRETIME_GENERAL_PUBLIC_URL:-http://localhost:8080}"