Closed aurelijusb closed 5 years ago
Daugiau automatizacijos – reiškia daugiau kodo – bandysiu iškelti sudėtingas dalis į https://github.com/nfqakademija/docker, kad liktų daugiau pačio Symfony kodo
.env
parametrai produkcinėje aplinkoje turėtų būti dedami į nginx
ir ~/.bashrc
, nes skaityti iš env
yra greičiau nei iš failo, ypač kai eina 200 užklausų per sekundę.
Bet tai apsunkina programavimo aplinkos paruošimą:
:orange_book: Reikia sekti, kad egzistuoja ir kada pakeistas .env
:orange_book: Reikia generuoti nginx
konfiguraciją ir perkrauti ją, kai yra pakeitimai (nesinori ant NFQ Akademijos serverio tai daryti su kiekvienu studento noru, nes vieno failo klaidos blokuos pakeitimus kitiems)
:orange_book: Nepavyko automatizuoti ir su docker
//bash
magija (CMD while [ true ]; do if [ -f /code/.env ]; then $(cat /code/.env | grep -v "#" | grep "=" | sed 's/^/export /'); fi; sleep 1; done & php-fpm
), kad su docker exec -it php.symfony bash
parametrai būtų uždėti. Reikėtų atskiro wraper'io pačiam docker exec
:orange_book: Bandant magiją su lua
+nginx
irgi būtų sunku, nes reikėtų specialiai sukompiliuotos nginx
versijos, bet tai moko blogų praktikų – į produkcinę aplinką niekas nedėtų LUA
, kuris su kiekviena užklausa skaitytų .env
(PHP gal net greičiau veiktų dėl opcache ar pan.)
Taigi, liekama tiesiog su .env
failu ir jo iškėlimu iš require-dev
į require
– be jokių parametrų iš env
ar iš fastcgi_param
.
Testuojama ne ta duomenų bazė
Bet dokumentacijoje specialiai padaryta su 330 7:
Kad naudotų
docker
yje esantį MySql'ą ir jis nesikirstų su įdiegtų perapt-get install
ar pan.Kaip patikrinti:
docker ps
rodo port'usphp.symfony
bin/console doctrine:database:create
rodo duomenų bazės pavadinimąphp.symfony
env | grep DATABASE_URL
rodo realią reikšmęKomandos paleidžiamos
prod
/dev
konteineriuosePakeičiamas
DATABASE_URL
reikšmė.env
faile, betbin/console
vis tiek meta klaidas Yra skirtumas tarp dev ir prod irci.nfqakademija.lt
:Vienur imama iš
.env
, kitur įmituojamas padavimas pernginx
/environment
Keliant į akademijos serverius,
.env
failas pakeičiamas jau sugeneruotų. Jei reikia papildomų pakeitimų (magiškai iš .env.dist nepaima), tai reikia per SSH prisijungti prie akademijos serveriųKaip patikrinti:
env
– ir žiūrėti reikšmes (ypačAPP_ENV
)Pakeitimai išmėtyti per
.env
,site.conf
irdocker-compose.yml
Pakeitimai
.env
faile neatsinaujina neperkrovusdocker
konteinerių :beetle:docker-compose perduoda
APP_ENV
kitmaąjį iš.env
, bet (index.php)[https://github.com/nfqakademija/kickstart/blob/master/public/index.php#L11] ima duomenis iš.env
tik kai nėra nustatytasAPP_ENV
Apėjimas:
docker-compose kill
irdocker-compose up -d
Dėkui @xeriaz už surastą klaidą
Yra daug vietų, kur keisti konfigūraciją – gal galima sugeneruoti :bulb:
Dabar
DATABASE_URL=mysql://root:p9iijKcfgENjBWDYgSH7@mysql.symfony:3306/symfon
yra tiesiogcopy-paste
docker-compose.yml, .env.dist ir site.conf failuoseĮmanoma būtų padaryti
--endpoint
script'ą, kad sugeneruotų reikiamus parametrus įenvironment
irnginx
. Pradinė idėja buvo – su kodo generavimu bus per daug magijos – bet sucopy-paste
yra per daug klaidų.