Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hur konfigurera med .env filer till studentservern? #37

Open
mosbth opened this issue May 10, 2021 · 6 comments
Open

Hur konfigurera med .env filer till studentservern? #37

mosbth opened this issue May 10, 2021 · 6 comments
Assignees
Labels
documentation Improvements or additions to documentation enhancement New feature or request

Comments

@mosbth
Copy link
Member

mosbth commented May 10, 2021

Flera ramverk använder .env filer för att konfigurera "sig". När vi kommer till kmom05 vill man eventuellt ha olika konfigurationer för sin utvecklingsmiljö och för sin produktionsmiljö (studentservern) när det gäller databaskopplingen, iallafall om man kör MySQL/MariaDB.

Grunden för hur .env filer läses in är följande (enligt Symfonys kommentarer i sin egen .env fil).

.env                contains default values for the environment variables needed by the app
.env.local          uncommitted file with local overrides
.env.$APP_ENV       committed environment-specific defaults
.env.$APP_ENV.local uncommitted environment-specific overrides

Jag har bett IT-helpdesk om att sätta APP_ENV="student" på studentservrarna. När det är klart så kan du alltså skapa följande två filer för att hantera din konfiguration på den servern.

* .env.student       committed environment-specific defaults
* .env.student.local uncommitted environment-specific overrides

Dessutom, förutsatt att du har gjort en dbwebb update, så kommer filer som heter .env*.local att inte laddas upp till studentservern. De filerna är alltså lokala för din egen server. Undantaget är filen .env.student.local som kommer att laddas upp till studentservern.

Vill du läsa mer om hur detta fungerar och hur olika ramverk kan ha olika syn på detta så kika i följande.

Laravel säger i sin dokumentation att man inte skall checka in .env. Men följer man de rekommendationer som finns i Ruby DotEnv samt i Symfonys manual så går det utmärkt att checka in .env, jag tycker det låter som en bra idé. Men man måste ha koll på var man placerar sina hemlisar.

I README för Ruby DotEnv finns en tabell som visar ordningen för konfigurationsfilerna samt med rekommendationer för vilka filer som bör checkas in till Git och vilka man inte bör checka in, givet att man följer rekommendationerna och alltid har sina hemligheter i filerna som slutar med .local.

@mosbth mosbth self-assigned this May 10, 2021
@mosbth mosbth added documentation Improvements or additions to documentation enhancement New feature or request labels May 10, 2021
@mosbth
Copy link
Member Author

mosbth commented May 12, 2021

Nu har IT fixat så att följande stämmer på studentservrarna:

sweet~: echo $APP_ENV
student

@datalowe
Copy link

Jag använder Laravel och har testat den här lösningen med det. Laravel själva nämner inte i sin dokumentation tekniken att använda en $APP_ENV-miljövariabel, men samtidigt bygger Laravel på Symfony. Det visade sig nu när jag testade att Laravel måste använda den här biten av Symfony, eftersom .env.student används på dbwebb som väntat.

Jag har ett fåtal enhetstester som rör vid databasen, något som är ganska ovanligt vad jag nu förstått. Ett problem med '.env.student' mm som uppstår i fall som mitt är att när man kör phpunit-tester (php artisan test eller make phpunit) så görs det i en separat miljö alt på ett alternativt sätt så att $APP_ENV inte är tillgänglig/används, även om man försökt att initiera miljövariabeln i samma terminal först. Därför får man felmeddelanden för databasrelaterade tester ifall man inte också har en fil döpt till .env, med lämpliga specifikationer för testning.

@mosbth
Copy link
Member Author

mosbth commented May 17, 2021

Ett problem med '.env.student' mm som uppstår i fall som mitt är att när man kör phpunit-tester (php artisan test eller make phpunit) så görs det i en separat miljö alt på ett alternativt sätt så att $APP_ENV inte är tillgänglig/används, även om man försökt att initiera miljövariabeln i samma terminal först.

Det står lite om liknande saker här (påverka APP_ENV från phpunit):
https://stackoverflow.com/questions/45922358/why-phpunit-is-not-getting-the-correct-app-env-as-specified-in-phpunit-xml

Men när jag testar så är miljöns värde på APP_ENV även synlig när man kör enhetstester med make phpunit.

Men det borde inte vara ett bekymmer kopplat till studentservern eller till .env.student eller .env.student.local då vi inte kör enhetstesterna på den maskinen.

En variant är att man jobbar med .env.test och .env.test.local med specifika inställningar för test. Så som det är beskrivet i "grundkoden" för ursprunget till dotenv:
https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use

@mosbth
Copy link
Member Author

mosbth commented Apr 26, 2022

Här kan man testa att APP_ENV är satt till rätt värde student på studentservern.
https://www.student.bth.se/~mosstud/test/env.php

@mosbth
Copy link
Member Author

mosbth commented Apr 26, 2022

Inuti sin kontroller kan man även kolla vilka värden som gäller för tillfället.

echo $_ENV['APP_ENV'];
echo $_ENV['DATABASE_URL'];

@mosbth
Copy link
Member Author

mosbth commented Apr 29, 2022

Nu har IThelpdesk fixat så att APP_ENV har sitt rätta värde både på ssh.student och på www.student.

Det innebär i korthet följande.

  • .env läses alltid in, lokalt och på studentservern
  • .env.local läses alltid in, både lokalt och på studentservern

Om man vill ha andra inställningar på studentservern så kan man skapa följande två filer som enbart läses in på ssh.student och www.student. Dessa båda filer läses in efter att ovan filer är inlästa så de skriver över eventuella inställningar som gjorts.

  • .env.student denna filen går bra att committa till Git repot och skall inte innehålla några känsliga detaljer.
  • .env.student.local kan innehålla känsliga detaljer som databas-kopplingar men denna filen skall inte checkas in till Git repot.

Normalt tänker man att de filer som slutar på .local kan innehålla känsliga detaljer och de skall inte checkas in till Git repot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants