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. Dutch
  5. Een database opzetten

Een database opzetten

De website van het conferentiegastenboek verzamelt feedback tijdens conferenties. We moeten de reacties van deelnemers aan de conferentie ergens permanent opslaan.

Een reactie kunnen we beschrijven met een vaste datastructuur: een auteur, zijn e-mail, de tekst van de feedback en een optionele foto. Dit soort gegevens kunnen het beste opgeslagen worden in een traditioneel relationeel databasesysteem.

PostgreSQL is het database systeem dat we zullen gebruiken.

PostgreSQL aan Docker Compose toevoegen

Op onze lokale machine gebruiken we Docker om onze services te beheren. Het gegenereerde docker-compose.yml bestand bevat reeds PostgreSQL als service:

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 ###

Dit zal een PostgreSQL server installeren en een aantal omgevingsvariabelen configureren om de databasenaam en inloggegevens in te stellen. De waarden hiervan doen er niet direct toe.

We zetten ook de PostgreSQL-poort (5432) van de container open voor de lokale host. Dat zal ons toegang geven tot de database vanaf onze machine:

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

Note

De pdo_pgsql extensie zou moeten zijn geïnstalleerd toen PHP opgezet werd in een vorige stap.

Docker Compose starten

Start Docker Compose in de achtergrond ( -d ):

1
$ docker-compose up -d

Wacht even tot de database volledig opgestart is en controleer dan of alles goed draait:

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

Als er geen containers draaien of als de State kolom niet Up bevat, bekijk dan de Docker Compose logs:

1
$ docker-compose logs

De lokale database benaderen

Het psql command-line hulpprogramma kan soms van pas komen. Je moet dan wel de inloggegevens en de naam van de database onthouden. Maar iets minder handig is dat je ook moet weten op welke lokale poort de database op de host draait. Docker kiest hiervoor namelijk een willekeurige poort, zodat je aan meer dan één project tegelijk met PostgreSQL kunt werken (de lokale poort kan je vinden via het docker-compose ps commando).

Als je psql via de Symfony CLI draait, hoef je niets te onthouden.

De Symfony CLI detecteert automatisch de Docker-services die voor het project draaien en stelt de omgevingsvariabelen in die psql nodig heeft om een verbinding te maken met de database.

Dankzij deze conventies is het benaderen van de database via symfony run veel eenvoudiger:

1
$ symfony run psql

Note

Als de psql binary niet aanwezig is op jouw lokale host kun je deze ook uitvoeren via docker-compose:

1
$ docker-compose exec database psql main main

Database data dumpen en terugzetten

Gebruik pg_dump om de database data te dumpen:

1
$ symfony run pg_dump --data-only > dump.sql

En zet de data terug:

1
$ symfony run psql < dump.sql

PostgreSQL toevoegen aan Platform.sh

Voor de productie infrastructuur op Platform.sh, zou je een service zoals PostgreSQL moeten toevoegen in het .platform/services.yaml bestand, wat reeds gedaan werd door het recept van de webapp package:

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

De database service is een PostgreSQL database (dezelfde versie als we in Docker gebruiken) die we willen opzetten met met 1GB schijfruimte.

We moeten de DB ook "koppelen" aan de applicatie-container die beschreven staat in .platform.app.yaml:

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

In de applicatie-container wordt er aan de database service van het type postgresql gerefereerd met de naam database.

Controleer of de pdo_pgsql extensie reeds geïnstalleerd is voor de PHP-runtime:

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

Toegang tot de Platform.sh database

PostgreSQL draait nu zowel lokaal via Docker als in productie op Platform.sh.

Zoals we zojuist hebben gezien kun je met het symfony run psql commando, automatisch een verbinding maken naar de database die door Docker wordt gehost, dit alles dankzij de omgevingsvariabelen die door symfony run werden ingesteld.

Als je verbinding wil maken met PostgreSQL in de containers van de productieomgeving, kun je een SSH tunnel leggen tussen de lokale machine en de Platform.sh infrastructuur:

1
2
$ symfony cloud:tunnel:open
$ symfony var:expose-from-tunnel

Platform.sh services worden standaard niet via omgevingsvariabelen op de lokale machine ingesteld. Je moet dit expliciet doen door het var:expose-from-tunnel commando te draaien. Waarom? Verbinding maken met een productiedatabase is gevaarlijk. Je kan echte data om zeep helpen.

Verbind nu met de externe PostgreSQL database via symfony run psql:

1
$ symfony run psql

Vergeet niet de tunnel te sluiten wanneer je klaar bent:

1
$ symfony cloud:tunnel:close

Tip

Om wat SQL queries uit te voeren op de productiedatabase, kan je ook het symfony sql commando gebruiken, in plaats van een shell te starten.

Werken met omgevingsvariabelen

Docker Compose en Platform.sh werken naadloos samen met Symfony dankzij het gebruik van omgevingsvariabelen.

Controleer alle omgevingsvariabelen die door symfony gebruikt worden via 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
# ...

De PG* omgevingsvariabelen worden gebruikt door het psql hulpprogramma. En de rest?

Wanneer er een tunnel ligt naar Platform.sh via var:expose-from-tunnel, geeft het var:export commando de externe omgevingsvariabelen weer:

1
2
3
4
$ symfony cloud:tunnel:open
$ symfony var:expose-from-tunnel
$ symfony var:export
$ symfony cloud:tunnel:close

Je Infrastructuur omschrijven

Je hebt het misschien nog niet gerealiseerd, maar het helpt veel om de infrastructuur naast de code in bestanden op te slaan. Docker en Platform.sh gebruiken configuratiebestanden om de project-infrastructuur te omschrijven. Wanneer een nieuwe functie een aanvullende service nodig heeft, veranderen de code en maken de wijzigingen in de infrastructuur deel uit van dezelfde patch.

Verder gaan

  • Platform.sh diensten;
  • Platform.sh tunnel;
  • PostgreSQL documentatie;
  • docker-compose commando's.
Previous page Een controller aanmaken
Next page Beschrijving van de gegevensstructuur
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

    Check Code Performance in Dev, Test, Staging & Production

    Check Code Performance in Dev, Test, Staging & Production

    Online exam, become Sylius certified today

    Online exam, become Sylius certified today

    Version:
    Locale:
    ebook

    This book is backed by:

    see all backers

    Symfony footer

    Avatar of Robin Lehrmann, a Symfony contributor

    Thanks Robin Lehrmann for being a Symfony contributor

    2 commits • 103 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