Laravel installeren op shared hosting

Deze tutorial is geschreven voor Laravel 5.1.

Recentelijk moest ik voor FriesWerk kijken hoe ik Laravel werkend kon krijgen op een shared hosting omgeving. Ik maak hiervan gebruik van een hostingpakket van Antagonist. Zij maken gebruik van DirectAdmin, maar ik denk dat iets soortgelijks met Cpanel of andere alternatieven ook best mogelijk is.

Mappenstructuur

In de Laravel docs wordt besproken dat je vanwege de veiligheid het beste de framework bestanden buiten de document root kunt houden. Op deze manier zijn config bestanden en framework relateerde bestanden niet zichtbaar voor normale bezoekers. Op shared hosting kun je meestal de document root niet aanpassen, dus moeten we dit anders gaan oplossen doormiddel van het plaatsen van de bestanden buiten public_html.

Directadmin werkt standaard met de volgende mappenstructuur:

/domains
/imap
/public_html

Laravel noemt de map waarin de index.php en assets opgeslagen zijn public. Kopieer de inhoud van de public map in de public_html map. De rest van de mappen (inclusief vendor!) kun je kwijt in de root van je hosting pakket.

Aanpassen van je index.php

Alles lijkt nu in orde, maar dat is het nog niet. Laravel gaat nog uit van de oude positie van het framework tegenover je public map. Hou rekening met het feit dat public_html in je root map simpelweg een verwijzing is. De echte public_html staat in /domains/$domeinnaam/public_html. Ga naar je public_html/index.php en pas de volgende regels aan.

Van: 

require __DIR__.'/../bootstrap/autoload.php';

$app = require_once __DIR__.'/../bootstrap/app.php';

Naar:

require __DIR__.'/../../../bootstrap/autoload.php';

$app = require_once __DIR__.'/../../../bootstrap/app.php';

Deze wijziging houdt er rekening mee dat de index.php een paar mappen dieper staat dan normaal. Het framework staat zo buiten de public_html map en je index.php kan het framework nog steeds vinden.

Composer

In een shared hosting omgeving heb je niet de toegang tot een SSH verbinding. Dit betekent dat je een composer update niet gaat werken. Je zult in dit geval dus de hele vendor map moeten kopieren. Denk er later wanneer je updates toepast dan ook aan om de hele vendor map weer mee te kopieren, anders kun je wel eens errors gaan krijgen op je live site.

Wat werkt er niet?

Commands (als in console commands) werken niet op shared hosting omdat je geen code kunt uitvoeren op de command line. Cron commands (met dispatcher) werken hierdoor ook niet. Heb je dit nodig? Ga dan voor een VPS. TransIP heeft met BladeVPS een goede VPS om Laravel projecten op te draaien.

Conclusie

Ik moet zeggen dat ik aangenaam verrast ben door de snelheid van Laravel op shared hosting. Ik had verwacht dat het erg traag zou zijn, maar de tijd tot eerste response blijft gemiddeld onder 100 ms wat erg goed is. Met de juiste caching kun je zelfs redelijk complexe applicaties op shared hosting draaien. Heb je console command met cron nodig, dan zou ik toch voor een VPS gaan. Maar voor simpele projecten, zoals FriesWerk, is shared hosting een prima oplossing!

Deel deze post: