پرش به مطلب اصلی

اتصال اپ به دیتابیس

🖼
تصویر: اتصال اپلیکیشن به دیتابیسplaceholder — تصویر را اینجا جایگزین کنید

ابرکلیک اتصال اپلیکیشن‌های PaaS را به دیتابیس‌های DBaaS از طریق تزریق خودکار متغیرهای محیطی مدیریت می‌کند. پس از لینک کردن، آدرس اتصال، اعتبارنامه‌ها و اطلاعات پورت به‌صورت خودکار در محیط اجرای اپ شما در دسترس قرار می‌گیرند.

اتصال از طریق داشبورد

مرحله ۱: ورود به تنظیمات اپ

وارد داشبورد ابرکلیک شوید، به صفحه جزئیات اپ بروید و روی تب دیتابیس‌های لینک‌شده کلیک کنید.

مرحله ۲: افزودن اتصال

دکمه + اتصال دیتابیس را بزنید. در پنجره باز شده:

  1. دیتابیس مورد نظر را از لیست انتخاب کنید.
  2. پیشوند متغیر (env prefix) را تعریف کنید (یا خالی بگذارید).
  3. تغییرات را ذخیره کنید.

مرحله ۳: استقرار مجدد

متغیرهای محیطی در دیپلوی بعدی به اپ تزریق می‌شوند. برای اعمال فوری:

abrclick deploy

متغیرهای محیطی تزریق‌شده

PostgreSQL

متغیرمثال
DATABASE_URLpostgresql://user:pass@svc-host:5432/dbname
DATABASE_HOSTdb-<id>-postgresql.tenant-my-project.svc.cluster.local
DATABASE_PORT5432
DATABASE_NAMEmydb
DATABASE_USERmydb_user
DATABASE_PASSWORDs3cr3t

Redis

متغیرمثال
REDIS_URLredis://:pass@svc-host:6379

MongoDB

متغیرمثال
MONGO_URLmongodb://user:pass@svc-host:27017/dbname
آدرس داخلی

ابرکلیک از DNS داخلی Kubernetes استفاده می‌کند. اپ و دیتابیس هر دو در یک namespace قرار دارند؛ بنابراین ترافیک اتصال از شبکه داخلی کلاستر می‌گذرد و هیچ‌گاه از اینترنت عبور نمی‌کند. این معماری سرعت و امنیت اتصال را به‌طور همزمان تضمین می‌کند.


استفاده از پیشوند متغیر

یک دیتابیس (بدون پیشوند)

اگر فیلد پیشوند را خالی بگذارید، متغیرها با نام پیش‌فرض تزریق می‌شوند:

DATABASE_URL=postgresql://...
REDIS_URL=redis://...
MONGO_URL=mongodb://...

چند دیتابیس (با پیشوند)

اگر اپ به چند دیتابیس متصل باشد، برای هر اتصال یک پیشوند منحصربه‌فرد تعریف کنید تا تداخل پیش نیاید.

مثال: دو دیتابیس PostgreSQL — یکی برای داده‌های اصلی و یکی برای analytics:

دیتابیسپیشوندمتغیر نهایی
db-mainDB_PRIMARY_DB_PRIMARY_DATABASE_URL
db-analyticsDB_ANALYTICS_DB_ANALYTICS_DATABASE_URL

در کد اپ:

// اتصال اصلی
const mainDb = new Client({ connectionString: process.env.DB_PRIMARY_DATABASE_URL });

// اتصال analytics
const analyticsDb = new Client({ connectionString: process.env.DB_ANALYTICS_DATABASE_URL });
import os
import psycopg2

main_conn = psycopg2.connect(os.environ["DB_PRIMARY_DATABASE_URL"])
analytics_conn = psycopg2.connect(os.environ["DB_ANALYTICS_DATABASE_URL"])
انتخاب پیشوند

پیشوندها را واضح و توصیفی انتخاب کنید. از _ در انتهای پیشوند استفاده کنید تا نام متغیر خوانا بماند: CACHE_CACHE_REDIS_URL.


نمونه کد اتصال

Node.js — PostgreSQL

import { Pool } from 'pg';

const pool = new Pool({
connectionString: process.env.DATABASE_URL,
});

export default pool;

Node.js — Redis

import { createClient } from 'redis';

const client = createClient({
url: process.env.REDIS_URL,
});

await client.connect();

Node.js — MongoDB

import { MongoClient } from 'mongodb';

const client = new MongoClient(process.env.MONGO_URL!);
await client.connect();

Python — PostgreSQL

import os
import psycopg2

conn = psycopg2.connect(os.environ["DATABASE_URL"])

Python — Redis

import os
import redis

r = redis.from_url(os.environ["REDIS_URL"])

Go — PostgreSQL

import (
"os"
"database/sql"
_ "github.com/lib/pq"
)

db, err := sql.Open("postgres", os.Getenv("DATABASE_URL"))

PHP — PostgreSQL

$dsn = getenv('DATABASE_URL');
$pdo = new PDO($dsn);

بررسی اتصال

پس از دیپلوی، می‌توانید با اجرای یک دستور در کانتینر اپ، اتصال را تست کنید:

# بررسی متغیرهای محیطی تزریق‌شده
abrclick run env | grep DATABASE

# تست اتصال PostgreSQL
abrclick run psql "$DATABASE_URL" -c "SELECT 1"

# تست اتصال Redis
abrclick run redis-cli -u "$REDIS_URL" ping

یا از طریق shell تعاملی:

abrclick shell
# در داخل کانتینر:
echo $DATABASE_URL

نکات مهم

تغییر متغیرها پس از لینک

اگر دیتابیس را حذف و دوباره بسازید، اعتبارنامه‌ها تغییر می‌کنند. در این صورت اتصال موجود را حذف و مجدداً لینک کنید تا متغیرهای به‌روز تزریق شوند.

ایزولاسیون شبکه

هر پروژه در یک namespace جداگانه Kubernetes اجرا می‌شود. اپ‌های پروژه‌های مختلف نمی‌توانند مستقیماً به دیتابیس‌های یکدیگر دسترسی داشته باشند — حتی اگر آدرس داخلی را بدانند. این ایزولاسیون توسط سیاست شبکه (NetworkPolicy) اعمال می‌شود.

محیط توسعه محلی

در محیط local از فایل .env استفاده کنید. مقدار DATABASE_URL را با آدرس دیتابیس محلی خود پر کنید. فایل .env را به .gitignore اضافه کنید و هرگز آن را در مخزن کد commit نکنید.

# .env (فقط برای توسعه محلی)
DATABASE_URL=postgresql://postgres:password@localhost:5432/myapp_dev