Despliegue Laravel
Integración con Traefik y base de datos MySQL.
docker-compose.yml
Section titled “docker-compose.yml”Añadir al archivo /root/docker-compose.yml:
laravel-app: build: context: ./laravel12vps container_name: laravel-app restart: unless-stopped env_file: - ./laravel12vps/.env depends_on: - laravel-db labels: - traefik.enable=true - traefik.http.routers.laravel.rule=Host(`laravel12vps.electodata.es`) - traefik.http.routers.laravel.tls=true - traefik.http.routers.laravel.entrypoints=web,websecure - traefik.http.routers.laravel.tls.certresolver=mytlschallenge - traefik.http.services.laravel.loadbalancer.server.port=80
laravel-db: image: mysql:8.0 container_name: laravel-db restart: unless-stopped environment: MYSQL_DATABASE: laravel MYSQL_USER: laravel_user MYSQL_PASSWORD: tu_password_seguro MYSQL_ROOT_PASSWORD: root_password_seguro volumes: - laravel_db_data:/var/lib/mysql
volumes: laravel_db_data:Importante:
contextapunta a la carpeta de tu proyecto Laravel (./laravel12vps)env_filecarga todas las variables de.envautomáticamentevolumesdefine el volumen para persistir la base de datos MySQL- Asegúrate de que
MYSQL_PASSWORDcoincida exactamente conDB_PASSWORDdel.env - Cambia
tu_password_seguroyroot_password_seguropor contraseñas reales y diferentes
Compilar Assets (en local)
Section titled “Compilar Assets (en local)”Antes de desplegar, compila los assets en tu máquina local:
# En tu máquina localnpm installnpm run build
# Añadir al repositorio (forzar porque está en .gitignore)git add -f public/buildgit commit -m "Add compiled assets"git push origin mainConstruir y Desplegar
Section titled “Construir y Desplegar”En el VPS:
cd /rootdocker compose build laravel-appdocker compose up -d laravel-app laravel-dbEjecutar Migraciones
Section titled “Ejecutar Migraciones”# Esperar 10 segundos a que MySQL iniciesleep 10
# Ejecutar migracionesdocker exec -it laravel-app php artisan migrate --force
# Optimizar para produccióndocker exec -it laravel-app php artisan config:cachedocker exec -it laravel-app php artisan route:cachedocker exec -it laravel-app php artisan view:cacheVerificar Configuración HTTPS
Section titled “Verificar Configuración HTTPS”Asegúrate de que Laravel está usando HTTPS correctamente:
docker exec -it laravel-app php artisan tinkerDentro de Tinker, ejecuta:
config('app.url')config('app.asset_url')Debe mostrar tu dominio con https://. Si muestra http:// o localhost, verifica que el .env dentro del contenedor tenga las variables correctas:
docker exec -it laravel-app cat /var/www/html/.env | grep -E "APP_URL|ASSET_URL"Si no son correctas, edita /root/tu-proyecto/.env y reconstruye:
cd /rootdocker compose down laravel-appdocker compose up -d --build laravel-appVerificar
Section titled “Verificar”docker compose logs -f laravel-appAcceder a https://laravel12vps.electodata.es.
Con IP en lugar de Dominio
Section titled “Con IP en lugar de Dominio”labels: - traefik.enable=true - traefik.http.routers.laravel.rule=PathPrefix(`/laravel`) - traefik.http.routers.laravel.tls=false - traefik.http.routers.laravel.entrypoints=web - traefik.http.services.laravel.loadbalancer.server.port=80Acceder: http://TU_IP/laravel