Spar tid med Laravels miljøkonfiguration

Arbejder du sammen med andre på samme Laravel-projekt, kan I spare tid og mindske fejl med Laravels miljøkonfiguration.

Af Jens Just Iversen

29. NOV 2014

Arbejder du sammen med andre på samme Laravel-projekt, er chancen for, at I arbejder i hvert jeres udviklingsmiljø, stor.

For ikke at skulle tage højde for forskellige databasekonfigurationer, driverindstillinger og lignende, hver gang koden skifter placeringer (kolleger imellem eller blot fra udviklingsserver til produktionsserver), kan man drage fordel af Laravels miljøkonfiguration.

En lille tidsmæssig investering nu sparer besvær fremadrettet!

Miljøkonfiguration betyder, at Laravel kan genkende, hvilket system projektet afvikles på, og tilpasse konfigurationsfilerne hertil, så der fx oprettes forbindelse til databasen der bruges i udviklingsøjemed frem for produktionsdatabasen.

Forestil dig en situation, hvor du og din kollega er begyndt at bygge en side i Laravel. I har hver jeres webserver kørende, men du vil ikke have, at din kollega ser den adgangskode, du har valgt til din database.

Desuden skal det være nemt at lægge siden op på en produktionsserver, når den første version er klar.

Lad Laravel genkende miljø

Ved at angive dit og din kollegas computernavn i filen bootstrap/start.php fortæller man Laravel, hvornår det er din computer og hvornår det er din kollegas computer, der agerer server.

Omkring linje 27 vil du finde et kald til funktionen detectEnvironment() med et array som parameter - arrayet udfyldes med miljønavnet og computernavne.

Det kunne se således ud:

$env = $app->detectEnvironment(array(
    'miljoe1' => array('minPc'),
    'miljoe2' => array('kollega-Pc'),
));

Når serverens computernavn er minPc ved Laravel nu, at der er tale om “miljoe1” og så fremdeles.

I Windows findes computernavnet ved at højreklikke og vælge “Egenskaber” på “Computer”.

På Unix-systemer findes computernavnet ved at skrive “hostname” i terminalen.

Overskriv bestemte konfigurationer

Nu kan Laravel genkende din server, og du har dermed mulighed for at tilpasse konfigurationsfilerne.

Dette gøres ved at oprette en mappe i app/config med navnet på dit miljø.

I vores eksempel vil vi derfor oprette 2 mapper:

app/config/miljoe1 (dine konfigurationsfiler)
app/config/miljoe2 (din kollegas konfigurationsfiler)

Ved at placere konfigurationsfiler i mapperne har man nu mulighed for at overskrive hele eller dele af en fil. Filen skal indeholde et array med samme struktur som den oprindelige konfigurationsfil fra app/config, men behøves blot at indeholde de elementer, man vil overskrive.

Ønsker du fx at bruge din egen MySQL-server, opretter du filen database.php i mappen “miljoe1” med dine databaseoplysninger i. Det kunne fx se sådan ud:

<?php
return array(
'connections' => array(
    'mysql' => array(
        'host' => 'localhost',
        'database' => 'mindatabase',
        'username' => 'user',
        'password' => 'qwerty',
        ),
    ),
);

Herved overskrives kun ovenstående informationer - resten bruges fra den oprindelige database.php.

Beskyt følsomme oplysninger

Nu og har du og din kollega opsat hver jeres miljøkonfigurationer, men når I deler jeres projekt med hinanden, kan du se din kollegas personlige database-password og omvendt. Det vil I ikke have!

Ved hjælp af PHP’s $_ENV-variabel og Laravels specielle filer til følsomme oplysninger, kan du holde din adgangskode for dig selv og ligeså kan din kollega.

I projektets rodmappe opretter du en fil ved navn “.env.miljoe1.php” og udfylder den med et array med dine følsomme variabler. Det kunne se sådan ud:

<?php
return array(
    'dbpass' => 'qwerty',
);

I dine konfigurationsfiler hentes de følsomme data ud vha. $_ENV[‘key’].

app/config/miljoe1/database.php kunne derfor se sådan ud:

<?php
return array(
    'connections' => array(
        'mysql' => array(
            'host' => 'localhost',
            'database' => 'mindatabase',
            'username' => 'user',
            'password' => $_ENV['dbpass'],
        ),
    ),
);

Nu vil passwordet blive trukket fra vores nye fil “.env.miljoe1.php”.

Det er derfor vigtigt, at din kollega ikke får denne fil.

Bruger I Git, skal filen tilføjes til .gitignore.

Bruger I SVN, skal filen tilføjes ignorelisten.

Bruger I ikke noget, så lad være at overføre den til ham :-)

Standard konfiguration

Hvis ikke Laravel genkender et miljø, vil det som standard blive opfattet som produktionsserveren og dermed bruges de oprindelige konfigurationsfiler fra app/config.

En fil til følsomme miljøvariabler skal på produktionsserveren hedde “.env.php”.

Det hjælper miljøkonfigurationer dig også med

Miljøkonfiguration kan udover skiftende databaser også bruges til mange andre konfigurationer.

Oplagte indstillinger er fx

  • om debug skal være slået til (udviklingsservere) eller fra (produktionsservere)

  • hvis man i forskellige server-setups er nødt til at bruge forskellige drivere

  • hvis man ønsker forskellige e-mail-indstillinger serverne imellem.

Du vil opleve, at denne måde at strukturere konfigurationsfilerne på gør det nemmere at bruge skiftende servere og mindsker fejl, når siden skal lægges i produktion. Derudover kan du med god samvittighed medtage alle konfigurationsfilerne, hvis I benytter versionsstyring til projektet (fx Git eller SVN) og dermed følge med i hinandens indstillinger uden at blotte følsomme oplysninger.