ADD: Se crearon los scripts para ejecutar comandos artisan
This commit is contained in:
parent
6ff33f6ccb
commit
05d819687e
@ -1,61 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Database\Seeders\DevSeeder;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
// Solo ejecutar en desarrollo y si no existen datos
|
||||
if ($this->shouldSeed()) {
|
||||
(new DevSeeder)->run();
|
||||
|
||||
$this->createPassportClient();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Verificar si debe ejecutar el seeding
|
||||
*/
|
||||
private function shouldSeed(): bool
|
||||
{
|
||||
// Verificar si ya existen usuarios del sistema
|
||||
$usersExist = DB::table('users')
|
||||
->whereIn('email', ['developer@notsoweb.com', 'admin@notsoweb.com'])
|
||||
->exists();
|
||||
|
||||
return !$usersExist;
|
||||
}
|
||||
|
||||
/**
|
||||
* Crear cliente Passport si no existe
|
||||
*/
|
||||
private function createPassportClient(): void
|
||||
{
|
||||
// Verificar si ya existe un cliente personal con el nombre "Holos"
|
||||
$clientExists = DB::table('oauth_clients')
|
||||
->where('name', 'Holos')
|
||||
->where('personal_access_client', true)
|
||||
->exists();
|
||||
|
||||
if (!$clientExists) {
|
||||
Artisan::call('passport:client', [
|
||||
'--personal' => true,
|
||||
'--name' => 'Holos',
|
||||
'--no-interaction' => true
|
||||
]);
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -4,6 +4,12 @@ services:
|
||||
context: .
|
||||
dockerfile: dockerfile.dev
|
||||
working_dir: /var/www/holos.backend
|
||||
environment:
|
||||
- DB_HOST=mysql
|
||||
- DB_USERNAME=${DB_USERNAME}
|
||||
- DB_PASSWORD=${DB_PASSWORD}
|
||||
- DB_DATABASE=${DB_DATABASE}
|
||||
- DB_PORT=${DB_PORT}
|
||||
volumes:
|
||||
- ./:/var/www/holos.backend
|
||||
- /var/www/holos.backend/vendor
|
||||
|
||||
@ -4,6 +4,12 @@ services:
|
||||
context: .
|
||||
dockerfile: dockerfile
|
||||
working_dir: /var/www/holos.backend
|
||||
environment:
|
||||
- DB_HOST=mysql
|
||||
- DB_USERNAME=${DB_USERNAME}
|
||||
- DB_PASSWORD=${DB_PASSWORD}
|
||||
- DB_DATABASE=${DB_DATABASE}
|
||||
- DB_PORT=${DB_PORT}
|
||||
volumes:
|
||||
- app_storage:/var/www/holos.backend/storage
|
||||
networks:
|
||||
|
||||
10
dockerfile
10
dockerfile
@ -12,7 +12,8 @@ RUN apt-get update && apt-get install -y\
|
||||
libxml2-dev \
|
||||
zip \
|
||||
unzip \
|
||||
libzip-dev
|
||||
libzip-dev \
|
||||
openssl
|
||||
|
||||
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip
|
||||
|
||||
@ -24,11 +25,12 @@ RUN composer install --no-dev --no-scripts --optimize-autoloader --no-interactio
|
||||
|
||||
COPY . .
|
||||
|
||||
RUN php artisan package:discover --ansi \
|
||||
&& php artisan storage:link --force || true
|
||||
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||
RUN chmod +x /usr/local/bin/entrypoint.sh
|
||||
|
||||
RUN chown -R www-data:www-data /var/www/holos.backend/storage /var/www/holos.backend/bootstrap/cache
|
||||
|
||||
EXPOSE 9000
|
||||
|
||||
CMD ["sh", "-c", "sleep 10 && php artisan migrate --force && php artisan migrate --path=database/migrations/path --force && php-fpm"]
|
||||
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|
||||
CMD ["php-fpm"]
|
||||
|
||||
@ -13,7 +13,8 @@ RUN apt-get update && apt-get install -y\
|
||||
zip \
|
||||
unzip \
|
||||
libzip-dev\
|
||||
nano
|
||||
nano \
|
||||
openssl
|
||||
|
||||
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip
|
||||
|
||||
@ -25,11 +26,15 @@ RUN composer install --optimize-autoloader --no-interaction --no-scripts
|
||||
|
||||
COPY . .
|
||||
|
||||
RUN php artisan package:discover --ansi \
|
||||
&& php artisan storage:link --force || true
|
||||
COPY entrypoint-dev.sh /usr/local/bin/entrypoint-dev.sh
|
||||
RUN chmod +x /usr/local/bin/entrypoint-dev.sh
|
||||
|
||||
RUN mkdir -p storage/app/keys storage/logs bootstrap/cache
|
||||
|
||||
RUN chown -R www-data:www-data /var/www/holos.backend/storage /var/www/holos.backend/bootstrap/cache
|
||||
RUN chmod -R 775 /var/www/holos.backend/storage /var/www/holos.backend/bootstrap/cache
|
||||
|
||||
EXPOSE 9000
|
||||
|
||||
CMD ["sh", "-c", "sleep 10 && php artisan migrate --force && php artisan migrate --path=database/migrations/path --force && php-fpm"]
|
||||
ENTRYPOINT ["/usr/local/bin/entrypoint-dev.sh"]
|
||||
CMD ["php-fpm"]
|
||||
|
||||
113
entrypoint-dev.sh
Normal file
113
entrypoint-dev.sh
Normal file
@ -0,0 +1,113 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "=== Iniciando entrypoint DESARROLLO ==="
|
||||
|
||||
# Variables desde Docker environment
|
||||
DB_HOST=${DB_HOST:-mysql}
|
||||
DB_USERNAME=${DB_USERNAME:-root}
|
||||
DB_PASSWORD=${DB_PASSWORD:-}
|
||||
DB_DATABASE=${DB_DATABASE:-laravel}
|
||||
MAX_RETRIES=30
|
||||
RETRY_COUNT=0
|
||||
|
||||
echo "Configuración de BD: Host=${DB_HOST}, Usuario=${DB_USERNAME}, Base=${DB_DATABASE}"
|
||||
|
||||
# Función para verificar conectividad con MySQL usando PHP
|
||||
check_mysql() {
|
||||
php -r "
|
||||
try {
|
||||
\$pdo = new PDO('mysql:host=${DB_HOST};port=3306', '${DB_USERNAME}', '${DB_PASSWORD}');
|
||||
\$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
exit(0);
|
||||
} catch (Exception \$e) {
|
||||
exit(1);
|
||||
}
|
||||
"
|
||||
}
|
||||
|
||||
# Esperar a que MySQL esté disponible
|
||||
echo "Esperando conexión a MySQL..."
|
||||
until check_mysql; do
|
||||
RETRY_COUNT=$((RETRY_COUNT + 1))
|
||||
if [ $RETRY_COUNT -ge $MAX_RETRIES ]; then
|
||||
echo "ERROR: No se pudo conectar a MySQL después de $MAX_RETRIES intentos"
|
||||
exit 1
|
||||
fi
|
||||
echo "Intento $RETRY_COUNT/$MAX_RETRIES - Esperando a MySQL..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
echo "✓ MySQL está disponible"
|
||||
|
||||
# Comandos de inicialización para desarrollo
|
||||
echo "Ejecutando comandos de inicialización de DESARROLLO..."
|
||||
|
||||
# Instalar dependencias (incluye dev)
|
||||
echo "Instalando dependencias de desarrollo..."
|
||||
composer install --optimize-autoloader --no-interaction
|
||||
|
||||
echo "Ejecutando package:discover..."
|
||||
php artisan package:discover --ansi
|
||||
|
||||
echo "Creando enlaces simbólicos..."
|
||||
php artisan storage:link --force || true
|
||||
|
||||
echo "Ejecutando configuración de desarrollo..."
|
||||
composer run env:dev
|
||||
|
||||
echo "Creando directorio de claves Passport..."
|
||||
mkdir -p storage/app/keys
|
||||
|
||||
echo "Generando claves de Passport..."
|
||||
php artisan passport:keys --force || true
|
||||
|
||||
# Verificar que las claves se crearon
|
||||
if [ ! -f "storage/app/keys/oauth-private.key" ] || [ ! -f "storage/app/keys/oauth-public.key" ]; then
|
||||
echo "ERROR: Las claves de Passport no se generaron correctamente"
|
||||
echo "Intentando generar manualmente..."
|
||||
|
||||
# Generar claves manualmente usando OpenSSL
|
||||
openssl genrsa -out storage/app/keys/oauth-private.key 4096
|
||||
openssl rsa -in storage/app/keys/oauth-private.key -pubout -out storage/app/keys/oauth-public.key
|
||||
|
||||
echo "✓ Claves generadas manualmente"
|
||||
fi
|
||||
|
||||
# Establecer permisos correctos para las claves
|
||||
chmod 600 storage/app/keys/oauth-private.key
|
||||
chmod 644 storage/app/keys/oauth-public.key
|
||||
chown www-data:www-data storage/app/keys/oauth-*.key
|
||||
|
||||
echo "✓ Claves de Passport verificadas"
|
||||
|
||||
# Para desarrollo, siempre verificar migraciones
|
||||
echo "=== VERIFICANDO BASE DE DATOS DESARROLLO ==="
|
||||
|
||||
# Verificar si necesita migraciones
|
||||
if php artisan migrate:status | grep -q "Pending"; then
|
||||
echo "Ejecutando migraciones pendientes..."
|
||||
php artisan migrate --force
|
||||
fi
|
||||
|
||||
# Verificar si la base de datos tiene datos
|
||||
USER_COUNT=$(php -r "
|
||||
require 'vendor/autoload.php';
|
||||
\$app = require 'bootstrap/app.php';
|
||||
\$app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();
|
||||
echo \App\Models\User::count();
|
||||
")
|
||||
|
||||
if [ "$USER_COUNT" -eq "0" ]; then
|
||||
echo "Base de datos vacía, ejecutando seeders de desarrollo..."
|
||||
composer run db:dev
|
||||
else
|
||||
echo "✓ Base de datos ya tiene datos ($USER_COUNT usuarios)"
|
||||
fi
|
||||
|
||||
echo "✓ Configuración de desarrollo completada"
|
||||
|
||||
echo "=== Iniciando PHP-FPM DESARROLLO ==="
|
||||
|
||||
# Iniciar PHP-FPM
|
||||
exec "$@"
|
||||
105
entrypoint.sh
Normal file
105
entrypoint.sh
Normal file
@ -0,0 +1,105 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "=== Iniciando entrypoint ==="
|
||||
|
||||
# Variables desde Docker environment
|
||||
DB_HOST=${DB_HOST:-mysql}
|
||||
DB_USERNAME=${DB_USERNAME:-root}
|
||||
DB_PASSWORD=${DB_PASSWORD:-}
|
||||
DB_DATABASE=${DB_DATABASE:-laravel}
|
||||
MAX_RETRIES=30
|
||||
RETRY_COUNT=0
|
||||
|
||||
echo "Configuración de BD: Host=${DB_HOST}, Usuario=${DB_USERNAME}, Base=${DB_DATABASE}"
|
||||
|
||||
# Función para verificar conectividad con MySQL usando PHP
|
||||
check_mysql() {
|
||||
php -r "
|
||||
try {
|
||||
\$pdo = new PDO('mysql:host=${DB_HOST};port=3306', '${DB_USERNAME}', '${DB_PASSWORD}');
|
||||
\$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
exit(0);
|
||||
} catch (Exception \$e) {
|
||||
exit(1);
|
||||
}
|
||||
"
|
||||
}
|
||||
|
||||
# Esperar a que MySQL esté disponible
|
||||
echo "Esperando conexión a MySQL..."
|
||||
until check_mysql; do
|
||||
RETRY_COUNT=$((RETRY_COUNT + 1))
|
||||
if [ $RETRY_COUNT -ge $MAX_RETRIES ]; then
|
||||
echo "ERROR: No se pudo conectar a MySQL después de $MAX_RETRIES intentos"
|
||||
exit 1
|
||||
fi
|
||||
echo "Intento $RETRY_COUNT/$MAX_RETRIES - Esperando a MySQL..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
echo "✓ MySQL está disponible"
|
||||
|
||||
# Comandos de inicialización
|
||||
echo "Ejecutando comandos de inicialización..."
|
||||
|
||||
echo "Ejecutando package:discover..."
|
||||
php artisan package:discover --ansi
|
||||
|
||||
echo "Creando enlaces simbólicos..."
|
||||
php artisan storage:link --force || true
|
||||
|
||||
echo "Ejecutando configuración de producción..."
|
||||
composer run env:prod
|
||||
|
||||
echo "Creando directorio de claves Passport..."
|
||||
mkdir -p storage/app/keys
|
||||
|
||||
echo "Generando claves de Passport..."
|
||||
php artisan passport:keys --force || true
|
||||
|
||||
# Verificar que las claves se crearon
|
||||
if [ ! -f "storage/app/keys/oauth-private.key" ] || [ ! -f "storage/app/keys/oauth-public.key" ]; then
|
||||
echo "ERROR: Las claves de Passport no se generaron correctamente"
|
||||
echo "Intentando generar manualmente..."
|
||||
|
||||
# Generar claves manualmente usando OpenSSL
|
||||
openssl genrsa -out storage/app/keys/oauth-private.key 4096
|
||||
openssl rsa -in storage/app/keys/oauth-private.key -pubout -out storage/app/keys/oauth-public.key
|
||||
|
||||
echo "✓ Claves generadas manualmente"
|
||||
fi
|
||||
|
||||
# Establecer permisos correctos para las claves
|
||||
chmod 600 storage/app/keys/oauth-private.key
|
||||
chmod 644 storage/app/keys/oauth-public.key
|
||||
chown www-data:www-data storage/app/keys/oauth-*.key
|
||||
|
||||
echo "✓ Claves de Passport verificadas"
|
||||
|
||||
# Archivo de control para primera ejecución
|
||||
FIRST_RUN_FLAG="/var/www/holos.backend/.first_run_completed"
|
||||
|
||||
# Solo en la primera ejecución
|
||||
if [ ! -f "$FIRST_RUN_FLAG" ]; then
|
||||
echo "=== PRIMERA EJECUCIÓN DETECTADA ==="
|
||||
|
||||
echo "Ejecutando migraciones y seeders..."
|
||||
if composer run db:prod; then
|
||||
echo "✓ db:prod completado"
|
||||
else
|
||||
echo "ERROR: Falló db:prod"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Marcar como completado
|
||||
touch "$FIRST_RUN_FLAG"
|
||||
echo "✓ Primera ejecución completada exitosamente"
|
||||
else
|
||||
echo "✓ No es primera ejecución, omitiendo setup inicial"
|
||||
fi
|
||||
|
||||
echo "=== Iniciando PHP-FPM ==="
|
||||
|
||||
# Iniciar PHP-FPM
|
||||
exec "$@"
|
||||
Loading…
x
Reference in New Issue
Block a user