libretime/start.sh

77 lines
2.5 KiB
Bash
Executable File

#!/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)
mkdir -p ./backups
cp ./config.local.yml ./backups/config.local.yml.bak.$ts
echo "Backup creado: ./backups/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}"