77 lines
2.5 KiB
Bash
Executable File
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}"
|