اتصال اپ به دیتابیس
ابرکلیک اتصال اپلیکیشنهای PaaS را به دیتابیسهای DBaaS از طریق تزریق خودکار متغیرهای محیطی مدیریت میکند. پس از لینک کردن، آدرس اتصال، اعتبارنامهها و اطلاعات پورت بهصورت خودکار در محیط اجرای اپ شما در دسترس قرار میگیرند.
اتصال از طریق داشبورد
مرحله ۱: ورود به تنظیمات اپ
وارد داشبورد ابرکلیک شوید، به صفحه جزئیات اپ بروید و روی تب دیتابیسهای لینکشده کلیک کنید.
مرحله ۲: افزودن اتصال
دکمه + اتصال دیتابیس را بزنید. در پنجره باز شده:
- دیتابیس مورد نظر را از لیست انتخاب کنید.
- پیشوند متغیر (env prefix) را تعریف کنید (یا خالی بگذارید).
- تغییرات را ذخیره کنید.
مرحله ۳: استقرار مجدد
متغیرهای محیطی در دیپلوی بعدی به اپ تزریق میشوند. برای اعمال فوری:
abrclick deploy
متغیرهای محیطی تزریقشده
PostgreSQL
| متغیر | مثال |
|---|---|
DATABASE_URL | postgresql://user:pass@svc-host:5432/dbname |
DATABASE_HOST | db-<id>-postgresql.tenant-my-project.svc.cluster.local |
DATABASE_PORT | 5432 |
DATABASE_NAME | mydb |
DATABASE_USER | mydb_user |
DATABASE_PASSWORD | s3cr3t |
Redis
| متغیر | مثال |
|---|---|
REDIS_URL | redis://:pass@svc-host:6379 |
MongoDB
| متغیر | مثال |
|---|---|
MONGO_URL | mongodb://user:pass@svc-host:27017/dbname |
ابرکلیک از DNS داخلی Kubernetes استفاده میکند. اپ و دیتابیس هر دو در یک namespace قرار دارند؛ بنابراین ترافیک اتصال از شبکه داخلی کلاستر میگذرد و هیچگاه از اینترنت عبور نمیکند. این معماری سرعت و امنیت اتصال را بهطور همزمان تضمین میکند.
استفاده از پیشوند متغیر
یک دیتابیس (بدون پیشوند)
اگر فیلد پیشوند را خالی بگذارید، متغیرها با نام پیشفرض تزریق میشوند:
DATABASE_URL=postgresql://...
REDIS_URL=redis://...
MONGO_URL=mongodb://...
چند دیتابیس (با پیشوند)
اگر اپ به چند دیتابیس متصل باشد، برای هر اتصال یک پیشوند منحصربهفرد تعریف کنید تا تداخل پیش نیاید.
مثال: دو دیتابیس PostgreSQL — یکی برای دادههای اصلی و یکی برای analytics:
| دیتابیس | پیشوند | متغیر نهایی |
|---|---|---|
| db-main | DB_PRIMARY_ | DB_PRIMARY_DATABASE_URL |
| db-analytics | DB_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