Skip to content
  • About
    • What is Symfony?
    • Community
    • News
    • Contributing
    • Support
  • Documentation
    • Symfony Docs
    • Symfony Book
    • Screencasts
    • Symfony Bundles
    • Symfony Cloud
    • Training
  • Services
    • Platform.sh for Symfony Best platform to deploy Symfony apps
    • SymfonyInsight Automatic quality checks for your apps
    • Symfony Certification Prove your knowledge and boost your career
    • SensioLabs Professional services to help you with Symfony
    • Blackfire Profile and monitor performance of your apps
  • Other
  • Blog
  • Download
sponsored by
  1. Home
  2. Documentation
  3. Symfony: The Fast Track
  4. Polish
  5. Konfigurowanie bazy danych

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ę:

docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
###> doctrine/doctrine-bundle ###
database:
    image: postgres:${POSTGRES_VERSION:-13}-alpine
    environment:
    POSTGRES_DB: ${POSTGRES_DB:-app}
    # You should definitely change the password in production
    POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-ChangeMe}
    POSTGRES_USER: ${POSTGRES_USER:-symfony}
volumes:
    - db-data:/var/lib/postgresql/data:rw
    # You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
    # - ./docker/db/data:/var/lib/postgresql/data:rw
###< doctrine/doctrine-bundle ###

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:

docker-compose.override.yml
1
2
3
4
5
###> doctrine/doctrine-bundle ###
database:
    ports:
    - "5432"
###< doctrine/doctrine-bundle ###

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:

.platform/services.yaml
1
2
3
database:
    type: postgresql:13
    disk: 1024

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:

.platform.app.yaml
1
2
relationships:
    database: "database:postgresql"

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:

.platform.app.yaml
1
2
3
4
5
runtime:
    extensions:
        # other extensions
        - pdo_pgsql
        # other extensions

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.

Idąc dalej

  • Usługi Platform.sh;
  • Tunel Platform.sh;
  • Dokumentacja PostgreSQL;
  • Polecenia docker-compose
Previous page Tworzenie kontrolera
Next page Opis struktury danych
This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.
TOC
    Version

    Symfony 5.4 is backed by

    Measure & Improve Symfony Code Performance

    Measure & Improve Symfony Code Performance

    The life jacket for your team and your project

    The life jacket for your team and your project

    Version:
    Locale:
    ebook

    This book is backed by:

    see all backers

    Symfony footer

    Avatar of Vicent Soria Durá, a Symfony contributor

    Thanks Vicent Soria Durá (@vicentgodella) for being a Symfony contributor

    3 commits • 43 lines changed

    View all contributors that help us make Symfony

    Become a Symfony contributor

    Be an active part of the community and contribute ideas, code and bug fixes. Both experts and newcomers are welcome.

    Learn how to contribute

    Symfony™ is a trademark of Symfony SAS. All rights reserved.

    • What is Symfony?

      • What is Symfony?
      • Symfony at a Glance
      • Symfony Components
      • Symfony Releases
      • Security Policy
      • Logo & Screenshots
      • Trademark & Licenses
      • symfony1 Legacy
    • Learn Symfony

      • Symfony Docs
      • Symfony Book
      • Reference
      • Bundles
      • Best Practices
      • Training
      • eLearning Platform
      • Certification
    • Screencasts

      • Learn Symfony
      • Learn PHP
      • Learn JavaScript
      • Learn Drupal
      • Learn RESTful APIs
    • Community

      • Symfony Community
      • SymfonyConnect
      • Events & Meetups
      • Projects using Symfony
      • Contributors
      • Symfony Jobs
      • Backers
      • Code of Conduct
      • Downloads Stats
      • Support
    • Blog

      • All Blog Posts
      • A Week of Symfony
      • Case Studies
      • Cloud
      • Community
      • Conferences
      • Diversity
      • Living on the edge
      • Releases
      • Security Advisories
      • Symfony Insight
      • Twig
      • SensioLabs Blog
    • Services

      • SensioLabs services
      • Train developers
      • Manage your project quality
      • Improve your project performance
      • Host Symfony projects

      Powered by

    Follow Symfony