🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

كيفية استخدام متغيرات البيئة بشكل آمن في Node.js: دليل 2026 الكامل

⏱️3 min read  ·  466 words

تحافظ متغيرات البيئة على التكوين والأسرار بعيدًا عن التعليمات البرمجية الخاصة بك – ولكن إذا حدث خطأ، فإنها تؤدي إلى تسرب بيانات الاعتماد، أو تعطل الإنتاج، أو تفشل بصمت. يغطي هذا الدليل إدارة متغيرات البيئة الآمنة والقوية في Node.js لعام 2026.

لماذا متغيرات البيئة؟

  • تكوين منفصل عن الكود: يتم تشغيل نفس الكود في التطوير والتدريج والإنتاج بإعدادات مختلفة
  • احتفظ بالأسرار خارج نطاق التحكم بالمصادر: لا يتم الالتزام بمفاتيح API وكلمات المرور أبدًا
  • اتبع مبادئ التطبيق المكونة من اثني عشر عاملاً: التكوين في البيئة، وليس قاعدة التعليمات البرمجية

الإعداد الأساسي مع dotenv

npm install dotenv
# .env (NEVER commit this — add to .gitignore)
DATABASE_URL=postgresql://user:pass@localhost:5432/mydb
JWT_SECRET=your-long-random-secret
API_KEY=sk-1234567890
PORT=3000
NODE_ENV=development
// Load at the very top of your entry file
import 'dotenv/config';   // ESM
// or: require('dotenv').config();   // CommonJS

const port = process.env.PORT || 3000;
const dbUrl = process.env.DATABASE_URL;

هام: gitignore ملفات .env الخاصة بك

# .gitignore
.env
.env.local
.env.*.local

# ✅ DO commit a template with no real values
# .env.example
DATABASE_URL=
JWT_SECRET=
API_KEY=
PORT=3000

تتطلب المستندات المتغيرات دون الكشف عن القيم الحقيقية – يقوم المطورون الجدد بنسخها إلى.env.example وملء خاصة بهم..envالتحقق من صحة متغيرات البيئة عند بدء التشغيل

لا تدع تطبيقك يبدأ بتكوين مفقود أو غير صالح – يفشل بسرعة مع وجود خطأ واضح:

لا تفعل هذه أبدًا (التسريبات الشائعة)

npm install zod
// config.ts — validate and export typed config
import { z } from 'zod';

const envSchema = z.object({
  NODE_ENV: z.enum(['development', 'production', 'test']),
  PORT: z.coerce.number().default(3000),
  DATABASE_URL: z.string().url(),
  JWT_SECRET: z.string().min(32, 'JWT_SECRET must be at least 32 chars'),
  API_KEY: z.string().startsWith('sk-'),
});

// Validate on startup — throws with clear errors if invalid
const parsed = envSchema.safeParse(process.env);
if (!parsed.success) {
  console.error('❌ Invalid environment variables:');
  console.error(parsed.error.flatten().fieldErrors);
  process.exit(1);
}

export const config = parsed.data;   // typed, validated config
// Now use config.DATABASE_URL — TypeScript knows its type

تكوينات مختلفة لكل بيئة

// 🐛 Committing .env — the #1 way secrets leak
// Always gitignore it

// 🐛 Logging environment variables
console.log(process.env);   // ❌ dumps ALL secrets to logs
console.log(`Key: ${process.env.API_KEY}`);   // ❌ leaks to logs

// 🐛 Sending config to the frontend
// Server-side secrets must NEVER reach client-side code

// 🐛 Hardcoding as a "temporary" fallback
const key = process.env.API_KEY || 'sk-realkey123';   // ❌ hardcoded secret

// ✅ Fail if required secrets are missing (via validation above)

أسرار الإنتاج: ما وراء ملفات .env

# .env.development
DATABASE_URL=postgresql://localhost:5432/dev
LOG_LEVEL=debug

# .env.production
DATABASE_URL=postgresql://prod-host:5432/prod
LOG_LEVEL=error

# Load the right file based on NODE_ENV
import dotenv from 'dotenv';
dotenv.config({ path: `.env.${process.env.NODE_ENV || 'development'}` });

في الإنتاج

الملفات ليست مثالية للأسرار. استخدم مدير الأسرار المناسب:.envأسرار مزود السحابة:

  • AWS Secrets Manager، GCP Secret Manager، Azure Key Vaultبيئة النظام الأساسي vars:
  • قم بالتعيين مباشرة في Vercel أو Railway أو Fly.io أو CI/CD الخاص بك – وليس في الملفاتخزنة HashiCorp:
  • لإدارة سر المؤسسة بالتناوبمتغيرات بيئة الواجهة الأمامية (قواعد مختلفة)
// Example: load a secret from AWS Secrets Manager at startup
import { SecretsManagerClient, GetSecretValueCommand } from '@aws-sdk/client-secrets-manager';

async function loadSecret(name: string) {
  const client = new SecretsManagerClient({ region: 'us-east-1' });
  const resp = await client.send(new GetSecretValueCommand({ SecretId: name }));
  return JSON.parse(resp.SecretString!);
}

const secrets = await loadSecret('myapp/production');
const dbPassword = secrets.DB_PASSWORD;

الأسئلة المتداولة

// Frontend env vars are PUBLIC — anyone can read them in the browser
// NEVER put secrets in frontend env vars

// Vite — only VITE_ prefixed vars are exposed to the client
VITE_API_URL=https://api.example.com   // ✅ public config, fine
VITE_SECRET_KEY=sk-123                  // ❌ NEVER — this is public!

// Next.js — NEXT_PUBLIC_ prefix for client-exposed vars
NEXT_PUBLIC_API_URL=https://api.example.com   // ✅ public
DATABASE_URL=...                               // server-only, safe

س: هل dotenv آمن للإنتاج؟

ج: بالنسبة للتكوين غير الحساس، فلا بأس. بالنسبة للأسرار في الإنتاج، تفضل مدير الأسرار أو متغيرات بيئة النظام الأساسي (المحددة في لوحة معلومات الاستضافة) بدلاً من الالتزام أو النشر
الملفات مع الأسرار..envس: يعمل ملف .env الخاص بي محليًا ولكن المتغيرات غير محددة في الإنتاج. لماذا؟

ج: من المحتمل ألا يقوم الإنتاج بتحميل
الملف (تم تجاهله بشكل صحيح). قم بتعيين المتغيرات في إعدادات بيئة منصة الاستضافة الخاصة بك، أو أسرار CI/CD، أو مدير الأسرار بدلاً من ذلك..envس: كيف يمكنني مشاركة الأسرار مع فريقي بشكل آمن؟

ج: لا يتم ذلك مطلقًا عبر الدردشة/البريد الإلكتروني/الالتزامات. استخدم مدير أسرار مشتركًا، أو مدير كلمات مرور مع مشاركة الفريق، أو أدوات مثل Doppler/1Password التي تقوم بمزامنة env vars بشكل آمن مع المطورين المعتمدين.
س: هل يجب علي التحقق من صحة متغيرات البيئة؟

ج: نعم — يتم التحقق من الصحة عند بدء التشغيل باستخدام مخطط (Zod). فهو يلتقط التكوين المفقود أو المشوه على الفور مع وجود خطأ واضح، بدلاً من حالات الفشل الغامضة العميقة في تطبيقك عندما يكون المتغير غير محدد.
س: لماذا لا يمكنني استخدام أسرار الخادم في كود الواجهة الأمامية؟

ج: يتم تشغيل كود الواجهة الأمامية في متصفح المستخدم حيث يمكن لأي شخص فحصه. أي “سر” مجمع في كود الواجهة الأمامية يكون عامًا. احتفظ بالأسرار من جانب الخادم واكشف فقط عن التكوينات غير الحساسة (مثل عناوين URL العامة لواجهة برمجة التطبيقات) للعميل.
الخلاصة

تعتمد إدارة متغيرات البيئة الآمنة في Node.js على بعض القواعد:

gitignore ملفات .env الخاصة بك، وتنفيذ قالب .env.example، والتحقق من صحة المتغيرات عند بدء التشغيل باستخدام مخطط، وعدم تسجيل الأسرار أو تشفيرها مطلقًا، واستخدام مدير الأسرار المناسب في الإنتاج بدلاً من نشر ملفات .env. تذكر أن متغيرات env للواجهة الأمامية عامة — احتفظ بالأسرار من جانب الخادم. يؤدي اتباع هذه الممارسات إلى الحفاظ على أمان بيانات الاعتماد الخاصة بك، واكتشاف أخطاء التكوين مبكرًا، وجعل تطبيقك يعمل بشكل موثوق عبر كل بيئة. بدلاً من نشر ملفات .env. تذكر أن متغيرات env للواجهة الأمامية عامة — احتفظ بالأسرار من جانب الخادم. يؤدي اتباع هذه الممارسات إلى الحفاظ على أمان بيانات الاعتماد الخاصة بك، واكتشاف أخطاء التكوين مبكرًا، وجعل تطبيقك يعمل بشكل موثوق عبر كل بيئة.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা