خطوة 7: إعداد قاعدة بيانات
إعداد قاعدة بيانات¶
يدور موقع سجل زوار المؤتمر حول جمع التعليقات أثناء المؤتمرات. نحتاج إلى تخزين التعليقات التي ساهم بها حضور المؤتمر في مخزن دائم.
يتم وصف التعليق بشكل أفضل من خلال بنية بيانات ثابتة: المؤلف ، بريده الإلكتروني ، نص الملاحظات ، وصورة اختيارية. نوع البيانات التي يمكن تخزينها بشكل أفضل في محرك قاعدة بيانات علائقية تقليدي.
PostgreSQL هو محرك قاعدة البيانات الذي سنستعمل.
إضافة PostgreSQL إلى Docker Compose¶
على الجهاز المحلي لدينا ، قررنا استخدام Docker لإدارة الخدمات. قم بإنشاء ملف docker-compose.yaml
وإضافة PostgreSQL كخدمة:
1 2 3 4 5 6 7 8 9 10 | version: '3'
services:
database:
image: postgres:13-alpine
environment:
POSTGRES_USER: main
POSTGRES_PASSWORD: main
POSTGRES_DB: main
ports: [5432]
|
سيؤدي هذا إلى تثبيت خادم PostgreSQL وتكوين بعض متغيرات البيئة التي تتحكم في اسم قاعدة البيانات وبيانات الاعتماد. القيم لا تهم حقا.
نكشف أيضًا منفذ PostgreSQL (`` 5432``) من الحاوية container إلى المضيف المحلي. سيساعدنا ذلك في الوصول إلى قاعدة البيانات من الجهاز الخاص بنا.
Note
يجب أن يكون قد تم تثبيت ملحق pdo_pgsql` عندما تم إعداد PHP في خطوة سابقة.
بدء Docker Compose¶
بدء Docker Compose في الخلفية (`` -d``):
1 | $ docker-compose up -d
|
انتظر قليلاً للسماح بتشغيل قاعدة البيانات والتحقق من أن كل شيء يسير على ما يرام:
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
|
إذا لم تكن هناك حاويات قيد التشغيل أو إذا كان عمود State
لا يقرأ Up
، فتحقق من سجلات Docker Compose:
1 | $ docker-compose logs
|
الوصول إلى قاعدة البيانات المحلية¶
قد يكون استخدام الأداة المساعدة لسطر الأوامر psql
مفيدًا من وقت لآخر. ولكن عليك أن تتذكر بيانات الاعتماد واسم قاعدة البيانات. أقل وضوحا ، تحتاج أيضا إلى معرفة المنفذ المحلي الذي تديره قاعدة البيانات على المضيف. يختار Docker منفذًا عشوائيًا حتى تتمكن من العمل على أكثر من مشروع باستخدام PostgreSQL في نفس الوقت (المنفذ المحلي هو جزء من مخرجات docker-compose ps
).
إذا قمت بتشغيل psql
عبر Symfony CLI ، فلن تحتاج إلى تذكر أي شيء.
يقوم Symfony CLI بالكشف تلقائيًا عن خدمات Docker التي يتم تشغيلها للمشروع ويكشف متغيرات البيئة التي يحتاجها psql
للاتصال بقاعدة البيانات.
بفضل هذه الاتفاقيات، أصبح الوصول إلى قاعدة البيانات عبر symfony run
أسهل كثيرًا:
1 | $ symfony run psql
|
Note
إذا لم يكن لديك مشغل psql
الثنائي على مضيفك المحلي ، يمكنك أيضًا تشغيله عبر docker-compose
:
1 | $ docker-compose exec database psql main
|
فحص واستعادة بيانات قاعدة البيانات¶
استخدم pg_dump
لتفريغ بيانات قاعدة البيانات:
1 | $ symfony run pg_dump --data-only > dump.sql
|
واستعادة البيانات:
1 | $ symfony run psql < dump.sql
|
Warning
لا تتصل أبدًا بـ docker-compose down
إذا كنت لا تريد أن تفقد البيانات. أو النسخ الاحتياطي أولاً.
إضافة PostgreSQL إلى SymfonyCloud¶
بالنسبة للبنية التحتية للإنتاج على SymfonyCloud ، يجب إضافة خدمة مثل PostgreSQL في ملف .symfony/services.yaml
الفارغ حاليا:
1 2 3 4 | db:
type: postgresql:13
disk: 1024
size: S
|
خدمة db
هي قاعدة بيانات PostgreSQL (نفس الشيء بالنسبة لـ Docker) التي نريد توفيرها في حاوية صغيرة بسعة 1 جيجابايت من القرص.
نحتاج أيضًا إلى "ربط" قاعدة البيانات بحاوية التطبيق الموضحة في .symfony.cloud.yaml
:
1 2 | relationships:
database: "db:postgresql"
|
تتم الإشارة إلى خدمة db
من النوع postgresql
على أنها database
في حاوية التطبيق.
الخطوة الأخيرة هي إضافة ملحق pdo_pgsql
إلى وقت تشغيل PHP:
1 2 3 4 | runtime:
extensions:
- pdo_pgsql
# other extensions here
|
ها هو الفرق الكامل لتغييرات .symfony.cloud.yaml
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | --- a/.symfony.cloud.yaml
+++ b/.symfony.cloud.yaml
@@ -4,6 +4,7 @@ type: php:7.4
runtime:
extensions:
+ - pdo_pgsql
- apcu
- mbstring
- sodium
@@ -21,6 +22,9 @@ build:
disk: 512
+relationships:
+ database: "db:postgresql"
+
web:
locations:
"/":
|
قم بتنفيذ هذه التغييرات ثم أعد النشر إلى SymfonyCloud:
1 2 3 | $ git add .
$ git commit -m'Configuring the database'
$ symfony deploy
|
الوصول إلى قاعدة بيانات SymfonyCloud¶
يعمل PostgreSQL الآن محليًا عبر Docker وفي الإنتاج على SymfonyCloud.
كما رأينا للتو ، فإن تشغيل symfony run psql
يتصل تلقائيًا بقاعدة البيانات التي يستضيفها Docker بفضل متغيرات البيئة المتاحة بواسطة symfony run
.
إذا كنت ترغب في الاتصال بـ PostgreSQL المستضافة على حاويات الإنتاج ، يمكنك فتح نفق SSH بين الجهاز المحلي والبنية الأساسية لــ SymfonyCloud:
1 | $ symfony tunnel:open --expose-env-vars
|
بشكل افتراضي ، لا يتم كشف خدمات SymfonyCloud كمتغيرات بيئة على الجهاز المحلي. يجب عليك القيام بذلك بشكل صريح باستخدام علامة --expose-env-vars
. لماذا ؟ الاتصال بقاعدة بيانات الإنتاج عملية خطيرة. يمكنك العبث مع بيانات حقيقية. الزامية طلب العلامة هو ما يؤكد أن هذا بالفعل ما تريد القيام به.
الآن ، قم بالاتصال بقاعدة بيانات PostgreSQL عن بعد من خلال symfony run psql
كما كان من قبل:
1 | $ symfony run psql
|
عند الانتهاء ، لا تنس إغلاق النفق:
1 | $ symfony tunnel:close
|
Tip
لتشغيل بعض استعلامات SQL في قاعدة بيانات الإنتاج بدلاً من الحصول على محث الأوامر ، يمكنك أيضًا استخدام أمر``symfony sql``.
فضح متغيرات البيئة¶
يعمل Docker Compose و SymfonyCloud بسلاسة مع Symfony بفضل متغيرات البيئة.
تحقق من كل متغيرات البيئة المكشوفة بواسطة symfony
عن طريق تنفيذ 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
# ...
|
تتم قراءة متغيرات البيئة PG*
بواسطة الأداة المساعدة psql
. ماذا عن الآخرين؟
عندما يكون النفق مفتوحًا لـ SymfonyCloud مع مجموعة العلامة --expose-env-vars
، فإن الأمر var:export
يُرجع متغيرات البيئة البعيدة:
1 2 3 | $ symfony tunnel:open --expose-env-vars
$ symfony var:export
$ symfony tunnel:close
|
وصف البنية التحتية الخاصة بك¶
ربما لم تكن قد أدركت ذلك حتى الآن ، لكن تخزين البنية التحتية في ملفات بجانب الكود يساعد كثيرًا.Docker و SymfonyCloud يستخدمان ملفات التكوين لوصف البنية التحتية للمشروع. عندما تحتاج ميزة جديدة إلى خدمة إضافية ، فإن التغييرات البرمجية وتغييرات البنية التحتية هي جزء من نفس التصحيح.
- « Previous خطوة 6: إنشاء وحدة تحكم
- Next » خطوة 8: وصف هيكل البيانات
This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.