Konfigurowanie bazy danych
Strona internetowa ksi臋gi go艣ci konferencji dotyczy zbierania opinii podczas konferencji. Komentarze uczestnik贸w konferencji musz膮 by膰 utrwalone w bazie danych.
Komentarz najlepiej opisuje ustalona struktura danych: autor, jego e-mail, tekst opinii i opcjonalne zdj臋cie. Jest to rodzaj danych, kt贸re mog膮 by膰 wygodnie przechowywane w tradycyjnym silniku relacyjnej bazy danych.
PostgreSQL to silnik bazodanowy, kt贸rego b臋dziemy u偶ywa膰.
Dodawanie PostgreSQL do Docker Compose
Na naszej lokalnej maszynie zdecydowali艣my si臋 u偶y膰 Dockera do zarz膮dzania us艂ugami. Wygenerowany plik docker-compose.yml
ju偶 zawiera PostgreSQL jako us艂ug臋:
Ta operacja zainstaluje serwer PostgreSQL i skonfiguruje niekt贸re zmienne 艣rodowiskowe, kt贸re kontroluj膮 nazw臋 bazy danych i dane uwierzytelniaj膮ce. Warto艣ci nie maj膮 wi臋kszego znaczenia.
Udost臋pniamy r贸wnie偶 port PostgreSQL (5432
) kontenera do lokalnego hosta. To pomo偶e nam uzyska膰 dost臋p do bazy danych z naszej maszyny:
Note
Rozszerzenie pdo_pgsql
powinno by膰 zainstalowane po tym, jak konfigurowali艣my PHP w poprzednim kroku.
Uruchamianie Docker Compose
Uruchom Docker Compose w tle ( -d
):
1
$ docker-compose up -d
Poczekaj chwil臋, a偶 baza danych si臋 uruchomi i sprawd藕, czy wszystko dzia艂a prawid艂owo:
1 2 3 4 5
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------
guestbook_database_1 docker-entrypoint.sh postgres Up 0.0.0.0:32780->5432/tcp
Je艣li nie ma uruchomionych kontener贸w lub je艣li kolumna State
nie ma warto艣ci Up
, sprawd藕 logi Docker Compose:
1
$ docker-compose logs
Dost臋p do lokalnej bazy danych
Korzystanie z narz臋dzia psql
w linii polece艅 mo偶e okaza膰 si臋 przydatne od czasu do czasu, ale musisz wtedy zna膰 dane uwierzytelniaj膮ce i nazw臋 bazy danych a tak偶e, co jest mniej oczywiste, lokalny port, na kt贸rym dzia艂a baza danych. Docker wybiera losowy port, dzi臋ki czemu mo偶esz pracowa膰 nad wi臋cej ni偶 jednym projektem korzystaj膮cym z serwera PostgreSQL w tym samym czasie (port lokalny jest cz臋艣ci膮 danych wyj艣ciowych docker-compose ps
).
Je艣li uruchomisz psql
za pomoc膮 Symfony CLI nie musisz o niczym pami臋ta膰.
Symfony CLI automatycznie wykrywa us艂ugi Docker uruchomione dla projektu i udost臋pnia zmienne 艣rodowiskowe, kt贸rych psql
potrzebuje do po艂膮czenia z baz膮 danych.
Dzi臋ki tym zasadom dost臋p do bazy danych poprzez symfony run
jest znacznie 艂atwiejszy:
1
$ symfony run psql
Note
Je艣li nie masz binarnej wersji psql
na swoim komputerze, mo偶esz uruchomi膰 go za po艣rednictwem polecenia docker-compose
:
1
$ docker-compose exec database psql main main
Zrzucanie i przywracanie bazy danych
Skorzystaj z polecenia pg_dump
w celu wykonania zrzutu bazy danych:
1
$ symfony run pg_dump --data-only > dump.sql
I przywr贸膰 baz臋:
1
$ symfony run psql < dump.sql
Dodawanie PostgreSQL do Platform.sh
W przypadku infrastruktury produkcyjnej na Platform.sh, dodanie us艂ugi takiej jak PostgreSQL powinno by膰 wykonane w pliku .platform/services.yaml
, kt贸ry zosta艂 utworzony za pomoc膮 przepisu z pakietu webapp
:
Us艂uga database
jest baz膮 danych PostgreSQL (w takiej wersji, jaka jest w Dockerze), kt贸r膮 chcemy udost臋pni膰 z dyskiem o powierzchni 1GB.
Musimy r贸wnie偶 "po艂膮czy膰" baz臋 danych z kontenerem aplikacji, kt贸ry jest opisany w .platform.app.yaml
:
Us艂uga database
typu postgresql
jest okre艣lona jako database
w kontenerze aplikacyjnym.
Sprawd藕 czy rozszerzenie pdo_pgsql
jest ju偶 zainstalowane dla 艣rodowiska uruchomieniowego PHP:
Dost臋p do bazy danych w Platform.sh
PostgreSQL dzia艂a teraz zar贸wno lokalnie poprzez Dockera, jak i na produkcji w Platform.sh.
Jak w艂a艣nie widzieli艣my, uruchamianie symfony run psql
automatycznie 艂膮czy si臋 z baz膮 danych hostowan膮 przez Dockera dzi臋ki zmiennym 艣rodowiskowym udost臋pnionym przez symfony run
.
Je艣li chcesz si臋 po艂膮czy膰 z PostgreSQL hostowanym w kontenerach produkcyjnych, mo偶esz otworzy膰 tunel SSH pomi臋dzy lokalnym komputerem a infrastruktur膮 Platform.sh:
1 2
$ symfony cloud:tunnel:open
$ symfony var:expose-from-tunnel
Domy艣lnie us艂ugi Platform.sh nie s膮 udost臋pniane jako zmienne 艣rodowiskowe na lokalnym komputerze. Musisz to zrobi膰 samodzielnie, korzystaj膮c z flagi --expose-env-vars
. Dlaczego? Pod艂膮czenie do produkcyjnej bazy danych jest niebezpieczn膮 operacj膮. Mo偶esz w ten spos贸b namiesza膰 z prawdziwymi danymi.
Po艂膮cz si臋 teraz ze zdaln膮 baz膮 danych PostgreSQL korzystaj膮c z symfony run psql
, jak poprzednio:
1
$ symfony run psql
Kiedy sko艅czysz, nie zapomnij zamkn膮膰 tunelu:
1
$ symfony cloud:tunnel:close
Tip
Aby uruchomi膰 niekt贸re zapytania SQL w produkcyjnej bazie danych zamiast korzysta膰 z pow艂oki, mo偶esz wykorzysta膰 polecenie symfony sql
.
Udost臋pnianie zmiennych 艣rodowiskowych
Docker Compose i Platform.sh dobrze wsp贸艂pracuj膮 z Symfony dzi臋ki zmiennym 艣rodowiskowym.
Sprawd藕 wszystkie zmienne 艣rodowiskowe udost臋pnione przez symfony
poprzez wykonanie polecenia symfony var:export
:
1 2 3 4 5 6 7 8
$ symfony var:export
PGHOST=127.0.0.1
PGPORT=32781
PGDATABASE=main
PGUSER=main
PGPASSWORD=main
# ...
Zmienne 艣rodowiskowe PG*
s膮 odczytywane przez narz臋dzie psql
. A co z innymi?
Kiedy tunel jest zestawiony z Platform.sh z var:expose-from-tunnel
, polecenie var:export
zwraca r贸wnie偶 zdalne zmienne 艣rodowiskowe:
1 2 3 4
$ symfony cloud:tunnel:open
$ symfony var:expose-from-tunnel
$ symfony var:export
$ symfony cloud:tunnel:close
Opisywanie infrastruktury
By膰 mo偶e jeszcze nie zdawa艂e艣 sobie z tego sprawy, ale posiadanie infrastruktury przechowywanej w plikach wraz z kodem bardzo pomaga. Docker i Platform.sh u偶ywaj膮 plik贸w konfiguracyjnych do opisania infrastruktury projektu. Gdy nowa funkcja wymaga dodatkowej us艂ugi, zmiany kodu i zmiany infrastruktury s膮 cz臋艣ci膮 tej samej poprawki.