دیتابیسها و افزونهها
افزونه یک دیتابیس یا سرویس آماده است که گردو نگهداریاش را انجام میدهد: ساخت، رمز، دیسک، پشتیبانگیری روزانه و کنسول وب. آن را به سرویس وصل میکنید و متغیرهای اتصال (DATABASE_URL و بقیه) خودکار به سرویس اضافه میشوند.
انواع و نسخهها
| افزونه | نسخهها | پیشفرض | پشتیبان روزانه |
|---|---|---|---|
| PostgreSQL | ۱۵، ۱۶، ۱۷، ۱۸؛ و نسخههای pgvector و PostGIS برای ۱۶ تا ۱۸ | ۱۷ | ✓ |
| MariaDB (سازگار با MySQL) | ۱۰٫۱۱، ۱۱ | ۱۱ | ✓ |
| MongoDB | ۶، ۷ | ۷ | ✓ |
| Redis | ۶، ۷ | ۷ | ✓ (بازیابی ندارد) |
| RabbitMQ | ۳٫۱۲، ۳٫۱۳ | ۳٫۱۳ | — |
| MinIO (فضای فایل سازگار با S3) | آخرین نسخه | — | — |
نسخه فقط موقع ساخت انتخاب میشود. اگر برای جستجوی برداری یا هوش مصنوعی pgvector لازم دارید، یا برای دادههای مکانی PostGIS، همان اول نسخهٔ -pgvector یا -postgis را انتخاب کنید؛ بعداً نمیشود یک دیتابیس موجود را به آن نسخهها برد.
ساخت و اتصال
دیتابیس را بسازید
در پنل اپلیکیشن «افزودن ← پایگاه داده» (یا «+ پایگاه داده» زیر ستون دادهها) را بزنید و نوع و نسخه را انتخاب کنید. یا از صفحهٔ یک سرویس، دیتابیس را مستقیم برای همان سرویس اضافه کنید.
به سرویس وصل کنید
در صفحهٔ افزونه، بخش «اتصالها»، «اتصال به سرویس…» را بزنید و سرویس را انتخاب کنید. سرویس با متغیرهای تازه دوباره مستقر میشود.
در کد از متغیرها استفاده کنید
// Node.js + pg
const pool = new Pool({ connectionString: process.env.DATABASE_URL })# Django: settings.py
import dj_database_url
DATABASES = {"default": dj_database_url.config()}متغیرهایی که اضافه میشوند
| افزونه | متغیرها |
|---|---|
| PostgreSQL | DATABASE_URL، PGHOST، PGPORT، PGUSER، PGPASSWORD، PGDATABASE |
| MariaDB | DATABASE_URL، MYSQL_URL، MYSQL_HOST، MYSQL_PORT، MYSQL_USER، MYSQL_PASSWORD، MYSQL_DATABASE |
| MongoDB | DATABASE_URL، MONGO_URL، MONGODB_URI، MONGO_HOST، MONGO_PORT، MONGO_USER، MONGO_PASSWORD، MONGO_DATABASE |
| Redis | REDIS_URL، REDIS_HOST، REDIS_PORT، REDIS_PASSWORD |
| RabbitMQ | AMQP_URL، RABBITMQ_URL، RABBITMQ_HOST، RABBITMQ_PORT، RABBITMQ_USER، RABBITMQ_PASSWORD |
| MinIO | S3_ENDPOINT، S3_BUCKET، S3_ACCESS_KEY_ID، S3_SECRET_ACCESS_KEY، AWS_ACCESS_KEY_ID، AWS_SECRET_ACCESS_KEY |
اگر خود سرویس متغیری با همین نام داشته باشد، مقدار سرویس برنده است (ترتیب اولویت). اگر برنامه نام دیگری میخواهد (مثلاً DB_URL)، یک متغیر با ارجاع بسازید: DB_URL=${{ DATABASE_URL }}.
اگر یک سرویس به دو دیتابیس از یک نوع وصل شود، DATABASE_URLها با هم تداخل دارند. برای دیتابیس دوم نام متغیر جدا تعریف کنید.
دسترسی
افزونهها آدرس عمومی ندارند. فقط سرویسهای همان اپلیکیشن از طریق «آدرس داخلی» به آنها دسترسی دارند. برای کار مستقیم با داده دو راه هست:
کنسول
در صفحهٔ افزونه «مدیریت دادهها» را بزنید. یک ابزار مدیریت وب در مرورگر باز میشود، بدون نیاز به وارد کردن رمز: pgweb برای PostgreSQL، phpMyAdmin برای MariaDB، mongo-express برای MongoDB، Redis Commander برای Redis و کنسول خود MinIO. کنسول تا دو ساعت بعد از آخرین باز شدن فعال میماند و با تغییر رمز یا رفتن یکی از اعضا همان لحظه بسته میشود.
اجرای دستور در سرویس
در زبانهٔ «لاگها»ی سرویسی که به دیتابیس وصل است، در کادر «اجرای دستور» میتوانید migration یا یک کوئری کوتاه اجرا کنید (حداکثر ۶۰ ثانیه)، مثلاً npx prisma migrate deploy یا python manage.py migrate.
برای آوردن داده از دیتابیس قبلیتان: اسکریپت SQL کوچک را در کنسول اجرا کنید (phpMyAdmin برای MariaDB فایل هم میپذیرد). برای خروجیهای بزرگ pg_dump یا mysqldump، تیکت بزنید تا وارد کردنش را با هم انجام دهیم.
تغییر رمز
در بخش «تنظیمات» صفحهٔ افزونه، «رمز عبور جدید» را بنویسید (دستکم ۸ کاراکتر). همهٔ سرویسهای متصل با رمز تازه دوباره مستقر میشوند و کنسولهای باز بسته میشوند. اگر رمز را جای دیگری هم (مثلاً یک سرویس بیرون از گردو) نوشتهاید، آنجا را هم بهروز کنید.
توقف، راهاندازی مجدد و حذف
- راهاندازی مجدد: اتصالهای فعال چند لحظه قطع میشوند. دادهها میمانند، به جز دادهای که فقط در حافظه بوده (مثلاً کلیدهای Redis بدون ذخیره روی دیسک).
- توقف: افزونه تا روشن کردن دوباره در دسترس نیست. فضای دیسک میماند و هزینهاش ادامه دارد.
- حذف: افزونه، دادههایش و همهٔ اتصالهایش برای همیشه حذف میشوند و برنامههای متصل دیگر به آن دسترسی ندارند. قبل از حذف، از کنسول یک خروجی بگیرید.
هزینه
افزونه مثل هر سرویس دیگری بر اساس CPU و RAM مصرفی، فضای دیسک و حجم نسخههای پشتیبان حساب میشود. «هزینهٔ این ماه» را در صفحهٔ افزونه میبینید. دیسک افزونه خودکار بزرگ میشود؛ دیسک ماندگار را ببینید.
اگر به خطا خوردید
برنامه connection refused یا ECONNREFUSED میدهد
- سرویس و افزونه باید در یک اپلیکیشن و یک محیط باشند.
- بعد از اتصال، سرویس باید دوباره مستقر شده باشد. اگر پیام «دیتابیس اضافه شد؛ برای اتصال، سرویس را دوباره اجرا کنید» را دیدید، سرویس را دوباره اجرا کنید.
- آدرس را در کد ثابت ننوشته باشید (
localhost:5432روی گردو کار نمیکند)؛ ازDATABASE_URLاستفاده کنید.
«آمادهسازی کنسول طول کشید؛ دوباره تلاش کنید»
بار اول ساختن کنسول ممکن است بیشتر از چند ثانیه طول بکشد. دوباره «مدیریت دادهها» را بزنید.
SSL
اتصال داخلی است و از شبکهٔ خصوصی اپلیکیشن بیرون نمیرود، پس به SSL نیاز ندارد. اگر کتابخانهتان پیشفرض SSL میخواهد، آن را خاموش کنید (مثلاً ?sslmode=disable در PostgreSQL، یا ssl: false در گزینههای کتابخانه).