feat(docker,pgsql): support postgresql in Dockerfile.prod, entrypoint and migrations

This commit is contained in:
michele 2026-09-11 18:39:11 +02:00
parent a0c441638e
commit f59c40af68
3 changed files with 47 additions and 39 deletions

View File

@ -13,44 +13,44 @@ public function up(): void
// Approccio alternativo: modificare la colonna per avere un valore di default
// e creare una stored procedure per generare il codice
// Prima, creiamo una stored procedure per generare il codice univoco
if (DB::connection()->getDriverName() !== 'sqlite') {
// Prima, creiamo una stored procedure per generare il codice univoco solo su MySQL
if (DB::connection()->getDriverName() === 'mysql') {
DB::unprepared('DROP PROCEDURE IF EXISTS generate_codice_univoco');
}
try {
DB::unprepared('
CREATE PROCEDURE generate_codice_univoco(IN table_name VARCHAR(50), OUT codice VARCHAR(8))
BEGIN
DECLARE codice_temp VARCHAR(8);
DECLARE codice_exists INT DEFAULT 1;
WHILE codice_exists > 0 DO
SET codice_temp = CONCAT(
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1)
);
IF table_name = "amministratori" THEN
SELECT COUNT(*) INTO codice_exists FROM amministratori WHERE codice_univoco = codice_temp;
ELSEIF table_name = "users" THEN
SELECT COUNT(*) INTO codice_exists FROM users WHERE codice_univoco = codice_temp;
END IF;
END WHILE;
SET codice = codice_temp;
END
');
echo "Stored procedure creata con successo.\n";
} catch (\Exception $e) {
echo "Errore nella creazione della stored procedure: " . $e->getMessage() . "\n";
try {
DB::unprepared('
CREATE PROCEDURE generate_codice_univoco(IN table_name VARCHAR(50), OUT codice VARCHAR(8))
BEGIN
DECLARE codice_temp VARCHAR(8);
DECLARE codice_exists INT DEFAULT 1;
WHILE codice_exists > 0 DO
SET codice_temp = CONCAT(
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1)
);
IF table_name = "amministratori" THEN
SELECT COUNT(*) INTO codice_exists FROM amministratori WHERE codice_univoco = codice_temp;
ELSEIF table_name = "users" THEN
SELECT COUNT(*) INTO codice_exists FROM users WHERE codice_univoco = codice_temp;
END IF;
END WHILE;
SET codice = codice_temp;
END
');
echo "Stored procedure creata con successo.\n";
} catch (\Exception $e) {
echo "Errore nella creazione della stored procedure: " . $e->getMessage() . "\n";
}
}
// Aggiornare i record esistenti che non hanno codice_univoco

View File

@ -11,6 +11,8 @@ RUN apt-get update && apt-get install -y \
libxml2-dev \
libzip-dev \
libicu-dev \
libpq-dev \
postgresql-client \
default-mysql-client \
mdbtools \
nodejs \
@ -18,7 +20,7 @@ RUN apt-get update && apt-get install -y \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd intl zip
RUN docker-php-ext-install pdo_mysql pdo_pgsql pgsql mbstring exif pcntl bcmath gd intl zip
# Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

View File

@ -35,8 +35,14 @@ rm -f \
if [[ "${WAIT_FOR_DB:-true}" == "true" ]] && [[ -n "${DB_HOST:-}" ]]; then
for i in {1..30}; do
if mysqladmin ping -h "${DB_HOST}" -P "${DB_PORT:-3306}" -u "${DB_USERNAME:-root}" -p"${DB_PASSWORD:-}" --silent; then
break
if [[ "${DB_CONNECTION:-mysql}" == "pgsql" ]]; then
if pg_isready -h "${DB_HOST}" -p "${DB_PORT:-5432}" -U "${DB_USERNAME:-postgres}" >/dev/null 2>&1; then
break
fi
else
if mysqladmin ping -h "${DB_HOST}" -P "${DB_PORT:-3306}" -u "${DB_USERNAME:-root}" -p"${DB_PASSWORD:-}" --silent; then
break
fi
fi
sleep 2
done