Actualización de la configuración de Docker y Nginx

This commit is contained in:
Juan Felipe Zapata Moreno 2025-12-30 14:00:04 -06:00
parent e8da447b68
commit 49e5adc249
5 changed files with 62 additions and 181 deletions

View File

@ -1,7 +1,7 @@
server {
listen 80;
server_name _;
root /var/www/golscontrols/public;
root /var/www/pdv.backend/public;
index index.php index.html;
# Logging
@ -17,7 +17,7 @@ server {
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass golscontrols:9000;
fastcgi_pass pdv-backend:9000;
fastcgi_index index.php;
# Timeouts importantes para evitar errores 500
@ -45,17 +45,17 @@ server {
# Handle storage files (Laravel storage link)
location /storage {
alias /var/www/golscontrols/storage/app;
alias /var/www/pdv.backend/storage/app;
try_files $uri =404;
}
location /profile {
alias /var/www/golscontrols/storage/app/profile;
alias /var/www/pdv.backend/storage/app/profile;
try_files $uri =404;
}
location /images {
alias /var/www/golscontrols/storage/app/images;
alias /var/www/pdv.backend/storage/app/images;
try_files $uri =404;
}

View File

@ -1,9 +1,9 @@
services:
repuve-backend:
pdv-backend:
build:
context: .
dockerfile: dockerfile.dev
working_dir: /var/www/repuve-v1
dockerfile: dockerfile
working_dir: /var/www/pdv.backend
environment:
- DB_HOST=mysql
- DB_USERNAME=${DB_USERNAME}
@ -11,27 +11,25 @@ services:
- DB_DATABASE=${DB_DATABASE}
- DB_PORT=${DB_PORT}
volumes:
- ./:/var/www/repuve-v1
- /var/www/repuve-v1/vendor
- ./:/var/www/pdv.backend
- /var/www/pdv.backend/vendor
networks:
- repuve-network
- pdv-network
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
nginx:
image: nginx:alpine
ports:
- "${NGINX_PORT}:80"
volumes:
- ./public:/var/www/repuve-v1/public
- ./public:/var/www/pdv.backend/public
- ./Docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
networks:
- repuve-network
- pdv-network
depends_on:
- repuve-backend
- pdv-backend
mysql:
image: mysql:8.0
@ -45,7 +43,7 @@ services:
volumes:
- mysql_data:/var/lib/mysql
networks:
- repuve-network
- pdv-network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
timeout: 15s
@ -61,27 +59,12 @@ services:
depends_on:
- mysql
networks:
- repuve-network
redis:
image: redis:alpine
ports:
- "${REDIS_PORT}:6379"
volumes:
- redis_data:/data
networks:
- repuve-network
healthcheck:
test: ["CMD", "redis-cli", "ping"]
timeout: 5s
retries: 5
- pdv-network
volumes:
mysql_data:
driver: local
redis_data:
driver: local
networks:
repuve-network:
pdv-network:
driver: bridge

View File

@ -1,8 +1,8 @@
FROM php:8.3-fpm
RUN mkdir -p /var/www/repuve-v1
RUN mkdir -p /var/www/pdv.backend
WORKDIR /var/www/repuve-v1
WORKDIR /var/www/pdv.backend
RUN apt-get update && apt-get install -y\
git \
@ -26,15 +26,15 @@ RUN composer install --optimize-autoloader --no-interaction --no-scripts
COPY . .
COPY entrypoint-dev.sh /usr/local/bin/entrypoint-dev.sh
RUN chmod +x /usr/local/bin/entrypoint-dev.sh
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
RUN mkdir -p storage/app/keys storage/logs bootstrap/cache
RUN chown -R www-data:www-data /var/www/repuve-v1/storage /var/www/repuve-v1/bootstrap/cache
RUN chmod -R 775 /var/www/repuve-v1/storage /var/www/repuve-v1/bootstrap/cache
RUN chown -R www-data:www-data /var/www/pdv.backend/storage /var/www/pdv.backend/bootstrap/cache
RUN chmod -R 775 /var/www/pdv.backend/storage /var/www/pdv.backend/bootstrap/cache
EXPOSE 9000
ENTRYPOINT ["/usr/local/bin/entrypoint-dev.sh"]
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["php-fpm"]

View File

@ -1,115 +0,0 @@
#!/bin/bash
set -e
git config --global --add safe.directory /var/www/repuve-v1
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 "$@"

View File

@ -1,7 +1,12 @@
#!/bin/bash
set -e
echo "=== Iniciando entrypoint ==="
git config --global --add safe.directory /var/www/pdv.backend
echo "=== Iniciando entrypoint DESARROLLO ==="
chown -R www-data:www-data /var/www/pdv.backend/storage /var/www/pdv.backend/bootstrap/cache
chmod -R 775 /var/www/pdv.backend/storage /var/www/pdv.backend/bootstrap/cache
# Variables desde Docker environment
DB_HOST=${DB_HOST:-mysql}
@ -40,8 +45,12 @@ done
echo "✓ MySQL está disponible"
# Comandos de inicialización
echo "Ejecutando comandos de inicialización..."
# 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
@ -49,8 +58,8 @@ 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 "Ejecutando configuración de desarrollo..."
composer run env:dev
echo "Creando directorio de claves Passport..."
mkdir -p storage/app/keys
@ -77,29 +86,33 @@ 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"
# Para desarrollo, siempre verificar migraciones
echo "=== VERIFICANDO BASE DE DATOS DESARROLLO ==="
# 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"
# Verificar si necesita migraciones
if php artisan migrate:status | grep -q "Pending"; then
echo "Ejecutando migraciones pendientes..."
php artisan migrate --force
fi
echo "=== Iniciando PHP-FPM ==="
# 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 "$@"