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

View File

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

View File

@ -1,8 +1,8 @@
FROM php:8.3-fpm 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\ RUN apt-get update && apt-get install -y\
git \ git \
@ -26,15 +26,15 @@ RUN composer install --optimize-autoloader --no-interaction --no-scripts
COPY . . COPY . .
COPY entrypoint-dev.sh /usr/local/bin/entrypoint-dev.sh COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint-dev.sh RUN chmod +x /usr/local/bin/entrypoint.sh
RUN mkdir -p storage/app/keys storage/logs bootstrap/cache 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 chown -R www-data:www-data /var/www/pdv.backend/storage /var/www/pdv.backend/bootstrap/cache
RUN chmod -R 775 /var/www/repuve-v1/storage /var/www/repuve-v1/bootstrap/cache RUN chmod -R 775 /var/www/pdv.backend/storage /var/www/pdv.backend/bootstrap/cache
EXPOSE 9000 EXPOSE 9000
ENTRYPOINT ["/usr/local/bin/entrypoint-dev.sh"] ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["php-fpm"] 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 #!/bin/bash
set -e 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 # Variables desde Docker environment
DB_HOST=${DB_HOST:-mysql} DB_HOST=${DB_HOST:-mysql}
@ -40,8 +45,12 @@ done
echo "✓ MySQL está disponible" echo "✓ MySQL está disponible"
# Comandos de inicialización # Comandos de inicialización para desarrollo
echo "Ejecutando comandos de inicialización..." 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..." echo "Ejecutando package:discover..."
php artisan package:discover --ansi php artisan package:discover --ansi
@ -49,8 +58,8 @@ php artisan package:discover --ansi
echo "Creando enlaces simbólicos..." echo "Creando enlaces simbólicos..."
php artisan storage:link --force || true php artisan storage:link --force || true
echo "Ejecutando configuración de producción..." echo "Ejecutando configuración de desarrollo..."
composer run env:prod composer run env:dev
echo "Creando directorio de claves Passport..." echo "Creando directorio de claves Passport..."
mkdir -p storage/app/keys mkdir -p storage/app/keys
@ -77,29 +86,33 @@ chown www-data:www-data storage/app/keys/oauth-*.key
echo "✓ Claves de Passport verificadas" echo "✓ Claves de Passport verificadas"
# Archivo de control para primera ejecución # Para desarrollo, siempre verificar migraciones
FIRST_RUN_FLAG="/var/www/holos.backend/.first_run_completed" echo "=== VERIFICANDO BASE DE DATOS DESARROLLO ==="
# Solo en la primera ejecución # Verificar si necesita migraciones
if [ ! -f "$FIRST_RUN_FLAG" ]; then if php artisan migrate:status | grep -q "Pending"; then
echo "=== PRIMERA EJECUCIÓN DETECTADA ===" echo "Ejecutando migraciones pendientes..."
php artisan migrate --force
echo "Ejecutando migraciones y seeders..."
if composer run db:prod; then
echo "✓ db:prod completado"
else
echo "ERROR: Falló db:prod"
exit 1
fi fi
# Marcar como completado # Verificar si la base de datos tiene datos
touch "$FIRST_RUN_FLAG" USER_COUNT=$(php -r "
echo "✓ Primera ejecución completada exitosamente" 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 else
echo "✓ No es primera ejecución, omitiendo setup inicial" echo "✓ Base de datos ya tiene datos ($USER_COUNT usuarios)"
fi fi
echo "=== Iniciando PHP-FPM ===" echo "✓ Configuración de desarrollo completada"
echo "=== Iniciando PHP-FPM DESARROLLO ==="
# Iniciar PHP-FPM # Iniciar PHP-FPM
exec "$@" exec "$@"