From 7503b2bedaf1e99449a669ed62ae383281f9b21f Mon Sep 17 00:00:00 2001 From: Juan Felipe Zapata Moreno Date: Thu, 11 Sep 2025 16:22:03 -0600 Subject: [PATCH] ADD: Se agregaron los comandos php artisan para las migraciones y los seeders, para el YAML de prod y dev --- .env.example | 5 +- bd-init.sh | 33 ++++++++++ .../path/2025_09_11_115824_seed_seeders.php | 61 +++++++++++++++++++ docker-compose-dev.yml | 18 +++++- docker-compose.yml | 18 +++++- dockerfile | 7 ++- dockerfile.dev | 8 ++- 7 files changed, 139 insertions(+), 11 deletions(-) create mode 100644 bd-init.sh create mode 100644 database/migrations/path/2025_09_11_115824_seed_seeders.php diff --git a/.env.example b/.env.example index 8c494c5..7bd6183 100644 --- a/.env.example +++ b/.env.example @@ -34,7 +34,10 @@ DB_PORT=3306 DB_DATABASE=holos-backend DB_USERNAME=notsoweb DB_PASSWORD= -PMA_PORT=8081 # Port para phpMyAdmin +PMA_PORT=8081 # Puerto para phpMyAdmin + +REDIS_PORT=6379 # Puerto para Redis +NGINX_PORT=8080 # Puerto para Nginx SESSION_DRIVER=database SESSION_LIFETIME=120 diff --git a/bd-init.sh b/bd-init.sh new file mode 100644 index 0000000..635e760 --- /dev/null +++ b/bd-init.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# Esperar a que MySQL esté disponible +echo "Esperando conexión a MySQL..." +wait_for_mysql() { + echo "Esperando a que MySQL esté disponible..." + + until php -r " + try { + \$pdo = new PDO('mysql:host=${DB_HOST};port=${DB_PORT}', '${DB_USERNAME}', '${DB_PASSWORD}'); + echo 'MySQL está disponible' . PHP_EOL; + exit(0); + } catch (PDOException \$e) { + echo 'MySQL no disponible: ' . \$e->getMessage() . PHP_EOL; + exit(1); + } + "; do + echo "Esperando MySQL..." + sleep 2 + done +} + +# Esperar a MySQL +wait_for_mysql + +echo "MySQL conectado, ejecutando migraciones..." + +# Ejecutar migraciones y seeders +php artisan migrate:fresh --seeder=DevSeeder --force +php artisan passport:client --personal --name=Holos + +# Iniciar PHP-FPM +exec php-fpm diff --git a/database/migrations/path/2025_09_11_115824_seed_seeders.php b/database/migrations/path/2025_09_11_115824_seed_seeders.php new file mode 100644 index 0000000..9182762 --- /dev/null +++ b/database/migrations/path/2025_09_11_115824_seed_seeders.php @@ -0,0 +1,61 @@ +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 + ]); + } + } +}; diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 28d9354..6c468d4 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -10,13 +10,15 @@ services: networks: - holos-network depends_on: - - mysql - - redis + mysql: + condition: service_healthy + redis: + condition: service_healthy nginx: image: nginx:alpine ports: - - "8080:80" + - "${NGINX_PORT}:80" volumes: - ./public:/var/www/holos.backend/public - ./Docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf @@ -38,6 +40,10 @@ services: - mysql_data:/var/lib/mysql networks: - holos-network + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + timeout: 15s + retries: 10 phpmyadmin: image: phpmyadmin/phpmyadmin @@ -53,10 +59,16 @@ services: redis: image: redis:alpine + ports: + - "${REDIS_PORT}:6379" volumes: - redis_data:/data networks: - holos-network + healthcheck: + test: ["CMD", "redis-cli", "ping"] + timeout: 5s + retries: 5 volumes: mysql_data: diff --git a/docker-compose.yml b/docker-compose.yml index c237fdf..b62341d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,13 +10,15 @@ services: networks: - holos-network depends_on: - - mysql - - redis + mysql: + condition: service_healthy + redis: + condition: service_healthy nginx: image: nginx:alpine ports: - - "8080:80" + - "${NGINX_PORT}:80" volumes: - ./public:/var/www/holos.backend/public - ./Docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf @@ -38,6 +40,10 @@ services: - mysql_data:/var/lib/mysql networks: - holos-network + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + timeout: 15s + retries: 10 phpmyadmin: image: phpmyadmin/phpmyadmin @@ -53,10 +59,16 @@ services: redis: image: redis:alpine + ports: + - "${REDIS_PORT}:6379" volumes: - redis_data:/data networks: - holos-network + healthcheck: + test: ["CMD", "redis-cli", "ping"] + timeout: 5s + retries: 5 volumes: mysql_data: diff --git a/dockerfile b/dockerfile index 914e48f..c3b2f67 100644 --- a/dockerfile +++ b/dockerfile @@ -24,6 +24,11 @@ RUN composer install --no-dev --no-scripts --optimize-autoloader --no-interactio COPY . . +RUN php artisan package:discover --ansi \ + && php artisan storage:link --force || true + +RUN chown -R www-data:www-data /var/www/holos.backend/storage /var/www/holos.backend/bootstrap/cache + EXPOSE 9000 -CMD ["php-fpm"] +CMD ["sh", "-c", "sleep 10 && php artisan migrate --force && php artisan migrate --path=database/migrations/path --force && php-fpm"] diff --git a/dockerfile.dev b/dockerfile.dev index 6bd38e6..dba94be 100644 --- a/dockerfile.dev +++ b/dockerfile.dev @@ -25,9 +25,11 @@ RUN composer install --optimize-autoloader --no-interaction --no-scripts COPY . . -# Ejecutar los scripts de Laravel después de copiar el código -RUN composer run-script post-autoload-dump +RUN php artisan package:discover --ansi \ + && php artisan storage:link --force || true + +RUN chown -R www-data:www-data /var/www/holos.backend/storage /var/www/holos.backend/bootstrap/cache EXPOSE 9000 -CMD ["php-fpm"] +CMD ["sh", "-c", "sleep 10 && php artisan migrate --force && php artisan migrate --path=database/migrations/path --force && php-fpm"]