Hoe maak je een Drupal multisite installatie
Ik ga er even van uit dat een normale drupal installatie gelukt is.
Misschien wil je 2 heel verschillende sites hosten, bijvoorbeeld een Blog en een site over je postzegelcollectie. Of je wil een testafdeling op je site, misschien om nieuwe modules, templates of inhoud te testen. Als je die gescheiden wil houden wat de inhoud en de structuur betreft, maar niet voor elke site die je maakt een complete Drupal installatie wil hebben en voor elke installatie apart modules en templates wil installeren, kom je al snel terecht bij het Drupal multisite concept.
Één Drupal codebase, met meerdere sites die daarvan gebruik maken. Het grote voordeel is dat je op 1 plaats je Drupal core, modules en templates hebt staan en ze ook maar 1 keer hoeft te updaten bij nieuwe versies. Bedenk wel dat je dan eventueel op meerdere sites het update script moet draaien om ervoor te zorgen dat aangepaste modules eventuele database aanpassingen kunnen doen, de databases zijn tenslotte apart per subsite.
Wat is de manier om zoiets voor elkaar te krijgen? Als je meerdere site over dezelfde Drupal installatie wil laten lopen, moet je die sites onderbrengen in de folder drupal/sites. Ik had daar al een ‘main’ site en een ‘lageweg’ site. Voor deze tutorial maak ik er een ‘testsite’ bij. Via een FTP tool als Filezilla maak ik de directory aan.
Ik zorg verder voor een nieuwe lege mysql database, en ik maak de folder ‘frankvanhof.nl.testsite’ aan onder drupal/sites. Een foldernaam met een slash erin mag niet, dus vervang die door een punt. Je zou denken dat ‘testsite’ alleen zou volstaan, maar drupal heeft de rest van de site naam nodig in die naam. Dan moet je nog uit sites/default het bestand default.settings.php kopiëren naar sites/testsite, hernoemen naar settings.php en daarin de connectie informatie naar de nieuwe Mysql database zetten. Ik heb ergens gelezen dat je in settings.php een declaratie van $base_url moet uncommenten en aanpassen op deze manier:
$base_url = 'http://www.frankvanhof.nl/testsite';
Ik heb dat niet gedaan en het werkt, maar als je problemen hebt kun je het proberen.
De website zal dus benaderbaar zijn via http://www.frankvanhof.nl/testsite, maar dit gaat nu nog niet werken, de webserver zal zoeken naar de subdirectory ‘testsite’ van je web root, en die bestaat niet. Je hebt een symlink nodig, een soort shortcut voor de webserver, waardoor die weet dat als die een verzoek heeft voor de ‘testsite’, dit doorgestuurd moet worden naar de drupal installatie. Drupal zal dan zorgen dat de testsite settings en codebase benaderd worden. Het mooie is dat je in je 'frankvanhof.nl.testsite' folder modules en templates kan installeren die alleen voor de 'testsite' zijn, maar dat je ook modules en templates kan gebruiken uit de 'all' folder. Dus algemene modules en templates kan je daar zetten en overal gebruiken.
Een symlink maken op een shared host kan het makkelijkst via een php scriptje. Open je PHP editor, of een tekstverwerker, en typ het volgende:
<?php symlink('/home/frank/domains/frankvanhof.nl/public_html/drupal/', '/home/frank/domains/frankvanhof.nl/public_html/testsite'); ?>
De eerste parameter staat voor het fysieke pad waar het request heen gestuurd moet worden, de tweede is het deel van het request dat op die manier doorgelinkt moet worden.
Bij mij staat de drupal installatie in een eigen subdirectory, drupal. Dit is niet de standaard, het is eigenlijk beter om die in je web root te zetten, public_html in de meeste gevallen. Pas in dat geval je symlink script aan.
Sla het bestand op als ‘maaksymlink.php’ en upload het met je FTP client naar de root van je webserver, ‘/home/frank/domains/frankvanhof.nl/public_html/’ in mijn geval. Pak dan je browser en navigeer naar ‘http://www.frankvanhof.nl/maaksymlink.php’. Nu zou je klaar moeten zijn en kun je ‘testsite’ verder installeren als je navigeert naar ‘http://www.frankvanhof.nl/testsite’.
Reacties
Multisite met geheel andere domeinnaam
Dag Frank, Mooie site en erg nuttig voor mensen die zelf multisite opzetten zoals ikzelf. Heb via jou site alles aan de gang gekregen. Tot nu toe werkt het geweldig met multisite omdat het steeds op mijn domeinnaam blijft en er alleen een alias /.. achter wordt geplaatst. Nu heb ik echter een vraag voor je: Als ik nu voor Drupal de installatie op http://mijnsite.nl doe en daar dan bv http://mijnsite.nl/subdomein gebruik is het inmiddels een bekend verhaal. Wat als ik op dezelfde codebase http://anderesite.nl zou willen gebruiken? Ik ga ervan uit dat dit zonder meer moet kunnen? Ik loop dan b.v. tegen het probleem aan bij flexwebhosting dat in de root niet een alias als /.. moet worden gebruikt maar dat de gehele oplossing wel anders moet denk ik? Alvast dank, hoop dat je er wat mee kunt. Groeten, Klaas
Nieuwe reactie inzenden