diff --git a/.gitea/workflows/build-and-deploy.yml b/.gitea/workflows/build-and-deploy.yml index 62a1397..88d50ef 100644 --- a/.gitea/workflows/build-and-deploy.yml +++ b/.gitea/workflows/build-and-deploy.yml @@ -46,6 +46,13 @@ jobs: docker compose --project-name $APP_NAME down docker compose --project-name $APP_NAME up -d --remove-orphans --wait + # Asegurar autenticación md5 y que la contraseña coincide con la env (cura volúmenes viejos) + echo "🔐 Sincronizando autenticación PostgreSQL (md5 + password)..." + ESCAPED_PASSWORD=${POSTGRES_PASSWORD//\'/\'\"\'\"\'} + docker exec -u postgres $APP_NAME-postgres psql -d $POSTGRES_DB -c "ALTER SYSTEM SET password_encryption = 'md5';" + docker exec -u postgres $APP_NAME-postgres psql -d $POSTGRES_DB -c "ALTER ROLE \"$POSTGRES_USER\" WITH PASSWORD '${ESCAPED_PASSWORD}';" + docker exec -u postgres $APP_NAME-postgres psql -d $POSTGRES_DB -c "SELECT pg_reload_conf();" + # Inicializar base de datos si es necesario echo "🗄️ Inicializando base de datos..." # Verificar si las tablas existen diff --git a/nuxt4/server/database/00_configure_auth.sh b/nuxt4/server/database/00_configure_auth.sh index c8c5a74..2a93ae5 100755 --- a/nuxt4/server/database/00_configure_auth.sh +++ b/nuxt4/server/database/00_configure_auth.sh @@ -3,6 +3,10 @@ set -e echo "Configurando autenticación de PostgreSQL..." +POSTGRES_USER="${POSTGRES_USER:-seguidor}" +POSTGRES_PASSWORD="${POSTGRES_PASSWORD:-seguidor_password}" +POSTGRES_DB="${POSTGRES_DB:-$POSTGRES_USER}" + # Eliminar configuración scram-sha-256 y agregar md5 # Esto asegura que las conexiones remotas funcionen correctamente sed -i '/scram-sha-256/d' "$PGDATA/pg_hba.conf" @@ -12,7 +16,16 @@ if ! grep -q "host all all all md5" "$PGDATA/pg_hba.conf"; then echo "host all all all md5" >> "$PGDATA/pg_hba.conf" fi -echo "✓ Configuración de autenticación aplicada (md5)" +# Forzar que las contraseñas se guarden en md5 (no scram) y +# reescribir la contraseña para asegurar que coincide con las env vars. +ESCAPED_PASSWORD=${POSTGRES_PASSWORD//\'/\'\'} +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL +ALTER SYSTEM SET password_encryption = 'md5'; +ALTER ROLE "$POSTGRES_USER" WITH PASSWORD '${ESCAPED_PASSWORD}'; +SELECT pg_reload_conf(); +EOSQL + +echo "✓ Configuración de autenticación aplicada (md5 + password sincronizada)" # Nota: No es necesario recargar aquí porque este script corre ANTES # de que PostgreSQL termine su inicialización. Los cambios se aplican diff --git a/nuxt4/server/database/README.md b/nuxt4/server/database/README.md index 516c61a..91ef22d 100644 --- a/nuxt4/server/database/README.md +++ b/nuxt4/server/database/README.md @@ -81,6 +81,13 @@ if ! grep -q "host all all all md5" "$PGDATA/pg_hba.conf"; then echo "host all all all md5" >> "$PGDATA/pg_hba.conf" fi +# Forzar md5 para almacenamiento de passwords y reescribir contraseña +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL +ALTER SYSTEM SET password_encryption = 'md5'; +ALTER ROLE "$POSTGRES_USER" WITH PASSWORD '${POSTGRES_PASSWORD}'; +SELECT pg_reload_conf(); +EOSQL + echo "✓ Configuración de autenticación aplicada (md5)" ``` @@ -89,6 +96,7 @@ echo "✓ Configuración de autenticación aplicada (md5)" - Los cambios en `pg_hba.conf` se aplican automáticamente al finalizar el inicio - No es necesario ejecutar `pg_ctl reload` manualmente - El método `md5` es compatible con el driver `pg` de Node.js +- Cada deploy vuelve a aplicar `password_encryption=md5` y resetea la contraseña vía Gitea Action para curar volúmenes antiguos ---