> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gorbit.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# RDS

> إعداد AWS RDS لـ Gorbit

يوفر استخدام AWS RDS قاعدة بيانات PostgreSQL مُدارة لـ Gorbit.
يغطي هذا الدليل المصادقة الأساسية ومصادقة IAM للأمان المحسّن.

## الدليل

<Steps>
  <Step title="إنشاء مثيل PostgreSQL RDS">
    انتقل إلى وحدة تحكم Amazon RDS وأنشئ قاعدة بيانات PostgreSQL جديدة.

    * انقر **Create database**
    * اختر **PostgreSQL** كنوع المحرك
    * اختر **Standard create** كطريقة إنشاء
    * اختر **إصدار PostgreSQL** المفضل لديك
    * اختر قالب **Production** أو **Dev/Test** حسب الحاجة
  </Step>

  <Step title="تكوين إعدادات قاعدة البيانات">
    قم بإعداد معرف قاعدة البيانات وبيانات الاعتماد وتكوين المثيل.

    **الإعدادات:**

    * اضبط **DB instance identifier** وصفياً مثل `gorbit-prod-db`
    * اضبط **Master username** (مثلاً، `postgres`)
    * اضبط **Master password** قويًا وأكده

    **تكوين المثيل:**

    * اختر **Instance class** مناسب (مثلاً، `db.t3.micro` للاختبار، `db.t3.medium` للإنتاج)
    * قم بتكوين حجم **Storage** وفعّل التوسع التلقائي إذا لزم الأمر

    <Tip>
      احفظ بيانات اعتماد قاعدة البيانات بشكل آمن - ستحتاجها لتكوين Gorbit.
    </Tip>
  </Step>

  <Step title="تكوين الاتصال والأمان">
    قم بإعداد الوصول إلى الشبكة ومجموعات الأمان لقاعدة البيانات.

    * اختر **VPC** و **Subnet group**
    * قم بتكوين **VPC security group** للسماح بالوصول من مثيل Gorbit الخاص بك
    * اضبط **Public access** على "No" للإنتاج (موصى به)
    * اختر **Availability Zone** المفضل لديك

    انقر **Create database** لتشغيل مثيل RDS.
  </Step>

  <Step title="تكوين متغيرات بيئة Gorbit">
    بمجرد تشغيل مثيل RDS، قم بتكوين Gorbit للاتصال به.

    احصل على تفاصيل قاعدة البيانات من وحدة تحكم RDS:

    * **Endpoint**: موجود في تفاصيل مثيل RDS
    * **Port**: عادةً `5432`
    * **Database name**: اسم قاعدة البيانات أو `postgres` إذا كنت تستخدم الافتراضي

    **لنشر Docker**، أضف هذه المتغيرات إلى ملف `.env`:

    ```bash theme={null}
    USE_IAM_AUTH=false
    POSTGRES_HOST=<your-rds-endpoint>
    POSTGRES_PORT=5432
    POSTGRES_DB=<your-database-name>
    POSTGRES_USER=<your-master-username>
    POSTGRES_PASSWORD=<your-master-password>
    ```

    **لنشر EKS**، أضف هذه إلى ملف `values.yaml`:

    ```yaml theme={null}
    auth:
      secrets:
        POSTGRES_PASSWORD: "<your-master-password>"
    configMap:
      USE_IAM_AUTH: "false"
      POSTGRES_HOST: "<your-rds-endpoint>"
      POSTGRES_PORT: "5432"
      POSTGRES_DB: "<your-database-name>"
      POSTGRES_USER: "<your-master-username>"
    ```

    سيتصل Gorbit الآن بمثيل PostgreSQL RDS باستخدام بيانات الاعتماد هذه.
  </Step>
</Steps>

## اختياري: تفعيل مصادقة IAM

للأمان المحسّن، يمكنك تفعيل مصادقة قاعدة بيانات IAM بدلاً من استخدام كلمات مرور ثابتة.
يتيح هذا لـ Gorbit الاتصال باستخدام بيانات اعتماد IAM قصيرة العمر.

<Steps>
  <Step title="تفعيل مصادقة IAM على RDS">
    انتقل إلى مثيل RDS في وحدة تحكم AWS وفعل مصادقة IAM.

    * اذهب إلى مثيل PostgreSQL RDS
    * انقر **Modify**
    * تحت **Database authentication**، فعّل **IAM database authentication**
    * انقر **Continue**، ثم **Apply immediately**
  </Step>

  <Step title="إنشاء مستخدم قاعدة بيانات IAM">
    اتصل بقاعدة البيانات وأنشئ مستخدمًا لمصادقة IAM.

    باستخدام بيانات الاعتماد الرئيسية، قم بتشغيل أوامر SQL هذه:

    ```sql theme={null}
    CREATE ROLE gorbituser LOGIN;
    GRANT rds_iam TO gorbituser;
    ALTER ROLE gorbituser WITH NOINHERIT;
    GRANT CREATE ON DATABASE <your-db-name> TO gorbituser;
    GRANT USAGE ON SCHEMA public TO gorbituser;
    GRANT CREATE ON SCHEMA public TO gorbituser;
    ```
  </Step>

  <Step title="تكوين سياسة IAM">
    أنشئ سياسة IAM للسماح باتصالات قاعدة البيانات.

    احصل على `DbiResourceId` أو `DbClusterResourceId`:

    ```bash theme={null}
    aws rds describe-db-instances \
      --db-instance-identifier <your-db-instance-name> \
      --region <your-region>
    ```

    أنشئ سياسة IAM هذه، املأ `region` و `account-id` و `resource-id`، وأرفقها بدور مثيل EC2:

    ```json theme={null}
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "rds-db:connect",
          "Resource": "arn:aws:rds-db:<region>:<account-id>:dbuser:<resource-id>/gorbituser"
        }
      ]
    }
    ```
  </Step>

  <Step title="تحميل شهادة SSL">
    حمّل حزمة شهادة CA لـ RDS للاتصالات الآمنة.

    ```bash theme={null}
    wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
    ```

    <Note>
      شهادة SSL مطلوبة لكي تعمل مصادقة IAM بشكل صحيح.
    </Note>
  </Step>

  <Step title="تكوين Gorbit لمصادقة IAM">
    حدّث متغيرات البيئة لاستخدام مصادقة IAM.

    **لنشر Docker**، أضف هذه المتغيرات إلى ملف `.env`:

    ```bash theme={null}
    USE_IAM_AUTH=true
    AWS_REGION=<your-region>
    POSTGRES_HOST=<your-rds-endpoint>
    POSTGRES_PORT=5432
    POSTGRES_DB=<your-database-name>
    POSTGRES_USER=gorbituser
    ```

    ثبت شهادة SSL في ملف `docker-compose.yml`:

    ```yaml docker-compose-prod.yml theme={null}
    services:
      api_server:
        volumes:
          - ./rds-combined-ca-bundle.pem:/app/bundle.pem:ro
    ```

    **لنشر Kubernetes**، أضف هذه إلى ملف `values.yaml`:

    ```yaml theme={null}
    configMap:
      USE_IAM_AUTH: "true"
      AWS_REGION: "<your-region>"
      POSTGRES_HOST: "<your-rds-endpoint>"
      POSTGRES_PORT: "5432"
      POSTGRES_DB: "<your-database-name>"
      POSTGRES_USER: "gorbituser"
    ```

    أنشئ سر لشهادة SSL وثبتها:

    ```bash theme={null}
    kubectl create secret generic bundle-pem-secret --from-file=rds-combined-ca-bundle.pem
    ```

    بعد ذلك، سنثبت الشهادة في جميع حاوياتنا في ملف `values.yaml`.

    **انتقل عبر كل حاوية واستبدل `volumes` و `volumeMounts` الفارغة بالتالي:**

    ```yaml theme={null}
    volumes:
    - name: rds-ca
        secret:
          secretName: bundle-pem-secret

    volumeMounts:
      - name: rds-ca
        mountPath: "/app/bundle.pem"
        subPath: bundle.pem
        readOnly: true
    ```
  </Step>

  <Step title="إعادة تشغيل Gorbit">
    أعِد تشغيل مثيل Gorbit لتطبيق التغييرات.

    ```bash Docker theme={null}
    docker compose -f docker-compose.dev.yml -p gorbit-stack up -d --build --force-recreate
    ```

    ```bash kubectl theme={null}
    kubectl rollout restart deployment
    ```
  </Step>
</Steps>

لمزيد من التفاصيل،
راجع [وثائق مصادقة IAM لـ AWS RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html).
