Skip to content

Despliegue Laravel

Integración con Traefik y base de datos MySQL.

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:

  • context apunta a la carpeta de tu proyecto Laravel (./laravel12vps)
  • env_file carga todas las variables de .env automáticamente
  • volumes define el volumen para persistir la base de datos MySQL
  • Asegúrate de que MYSQL_PASSWORD coincida exactamente con DB_PASSWORD del .env
  • Cambia tu_password_seguro y root_password_seguro por contraseñas reales y diferentes

Antes de desplegar, compila los assets en tu máquina local:

Terminal window
# En tu máquina local
npm install
npm run build
# Añadir al repositorio (forzar porque está en .gitignore)
git add -f public/build
git commit -m "Add compiled assets"
git push origin main

En el VPS:

Terminal window
cd /root
docker compose build laravel-app
docker compose up -d laravel-app laravel-db
Terminal window
# Esperar 10 segundos a que MySQL inicie
sleep 10
# Ejecutar migraciones
docker exec -it laravel-app php artisan migrate --force
# Optimizar para producción
docker exec -it laravel-app php artisan config:cache
docker exec -it laravel-app php artisan route:cache
docker exec -it laravel-app php artisan view:cache

Asegúrate de que Laravel está usando HTTPS correctamente:

Terminal window
docker exec -it laravel-app php artisan tinker

Dentro 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:

Terminal window
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:

Terminal window
cd /root
docker compose down laravel-app
docker compose up -d --build laravel-app
Terminal window
docker compose logs -f laravel-app

Acceder a https://laravel12vps.electodata.es.

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=80

Acceder: http://TU_IP/laravel