Cloudflare এর হাতেখড়ি (পর্ব ১০) – Environment Variables ও Secrets ম্যানেজমেন্ট

Cloudflare Environment Variables ও Secrets ম্যানেজমেন্ট

এতদিন আমরা পর্ব ৬-এ wrangler secret put দিয়ে একটা সিক্রেট যোগ করেছিলাম। কিন্তু বাস্তব প্রজেক্টে একাধিক এনভায়রনমেন্ট থাকে — লোকাল ডেভেলপমেন্ট, স্টেজিং, প্রোডাকশন — প্রতিটার নিজস্ব কনফিগারেশন লাগে। এই পর্বে শিখব কীভাবে এই তিনটা এনভায়রনমেন্ট গুছিয়ে রাখতে হয়, আর Variables ও Secrets-এর মধ্যে পার্থক্য কী।

Variables vs Secrets — পার্থক্য কী

  • Variables — সাধারণ, সংবেদনশীল না এমন মান (যেমন API URL, ফিচার ফ্ল্যাগ) — কোডে বা wrangler.toml-এ প্লেইন টেক্সটে রাখা যায়
  • Secrets — সংবেদনশীল মান (API key, ডেটাবেজ পাসওয়ার্ড, Firebase এর হাতেখড়ি পর্ব ৬-এর Database Secret) — এনক্রিপ্টেড, কখনো কোডে বা Git-এ দৃশ্যমান না

Variables — wrangler.toml-এ রাখা

সাধারণ Variables সরাসরি wrangler.toml-এ [vars]-এর নিচে লেখা যায়।

# wrangler.toml
name = "my-worker"
main = "src/index.js"

[vars]
API_BASE_URL = "https://my-first-app-default-rtdb.firebasedatabase.app"
FEATURE_NEW_UI = "false"
// কোডে ব্যবহার
export default {
  async fetch(request, env, ctx) {
    const url = `${env.API_BASE_URL}/books.json`;
    const isNewUI = env.FEATURE_NEW_UI === "true";
    // ...
  },
};

নোট: এই ফাইলটা Git-এ commit হয়, তাই এখানে শুধু সেই ডেটা রাখুন যা এক্সপোজ হলেও কোনো সমস্যা নেই।

Secrets — কমান্ড লাইন দিয়ে

পর্ব ৬-এ শেখা প্যাটার্নটাই মনে করিয়ে দিই —

wrangler secret put FIREBASE_DB_SECRET
wrangler secret put STRIPE_API_KEY

# তালিকা দেখা (মান দেখাবে না, শুধু নাম)
wrangler secret list

# মুছে ফেলা
wrangler secret delete STRIPE_API_KEY

কোডে Variables আর Secrets দুটোই একইভাবে env-এর মাধ্যমে অ্যাক্সেস হয় — Worker কোড থেকে দেখতে কোনো পার্থক্য নেই, শুধু কীভাবে সেট করা হয়েছে তা আলাদা।

একাধিক Environment — dev, staging, production

wrangler.toml-এ [env.staging], [env.production] ব্লক দিয়ে প্রতিটা এনভায়রনমেন্টের নিজস্ব Variables আলাদা রাখা যায়।

# wrangler.toml
name = "my-worker"
main = "src/index.js"

[vars]
API_BASE_URL = "https://staging-db.firebasedatabase.app"  # ডিফল্ট (dev)

[env.staging]
vars = { API_BASE_URL = "https://staging-db.firebasedatabase.app" }

[env.production]
vars = { API_BASE_URL = "https://my-first-app-default-rtdb.firebasedatabase.app" }
# লোকাল ডেভেলপমেন্ট
wrangler dev

# স্টেজিং-এ ডেপ্লয়
wrangler deploy --env staging

# প্রোডাকশনে ডেপ্লয়
wrangler deploy --env production

Secrets-ও এনভায়রনমেন্ট-ভিত্তিক আলাদা রাখা যায় — wrangler secret put FIREBASE_DB_SECRET --env staging দিয়ে স্টেজিং-এর জন্য আলাদা সিক্রেট, প্রোডাকশনের জন্য আরেকটা।

Pages-এ Environment Variables

Firebase এর হাতেখড়ি পর্ব ১২-তে Cloudflare Pages-এ VITE_FIREBASE_API_KEY-এর মতো ভ্যারিয়েবল সেট করেছিলাম Dashboard-এ। Pages-এও Production আর Preview-এর জন্য আলাদা ভ্যারিয়েবল রাখা যায়।

  1. Pages প্রজেক্টে Settings → Environment variables-এ যান
  2. ProductionPreview — দুটো আলাদা সেকশন থাকে
  3. Production-এ লাইভ Firebase config, Preview-এ চাইলে একটা টেস্ট/স্টেজিং Firebase প্রজেক্টের config বসানো যায়

এভাবে পর্ব ১-এর Preview URL-এ টেস্ট করার সময় ভুলবশত লাইভ ডেটাবেজে কিছু লেখা হয়ে যাওয়ার ঝুঁকি এড়ানো যায়।

.dev.vars — লোকাল টেস্টিং-এর জন্য

লোকালে wrangler dev চালানোর সময় সিক্রেট টাইপ না করে একটা .dev.vars ফাইলে রাখা যায়।

# .dev.vars — শুধু লোকাল ডেভেলপমেন্টের জন্য
FIREBASE_DB_SECRET=local-test-secret-value
STRIPE_API_KEY=sk_test_xxxxx

খুবই গুরুত্বপূর্ণ: এই ফাইলটা .gitignore-এ অবশ্যই যোগ করতে হবে — GitHub Actions-এর (পর্ব ২) মতোই, সিক্রেট কখনো রিপোজিটরিতে commit হওয়া উচিত না।

# .gitignore
.dev.vars
node_modules/
dist/

সবকিছু একসাথে — একটা বাস্তব সেটআপ

Pathok Ghar-এর মতো একটা প্রজেক্টের জন্য সম্পূর্ণ কনফিগারেশন কেমন দেখতে হতে পারে —

# wrangler.toml
name = "pathok-ghar-api"
main = "src/index.js"

[vars]
ENVIRONMENT = "development"

[[kv_namespaces]]
binding = "SITE_SETTINGS"
id = "dev-kv-id"

[env.production]
vars = { ENVIRONMENT = "production" }

[[env.production.kv_namespaces]]
binding = "SITE_SETTINGS"
id = "prod-kv-id"

# Secrets আলাদাভাবে যোগ করা হয়:
# wrangler secret put FIREBASE_DB_SECRET --env production
# wrangler secret put FIREBASE_DB_SECRET (ডেভেলপমেন্টের জন্য, .dev.vars-এও রাখা যায়)

ইন্টারেক্টিভ — কোথায় কী রাখবেন

নিচে বিভিন্ন ধরনের ডেটা দেওয়া আছে — ক্লিক করে দেখো এগুলো Variable নাকি Secret হিসেবে রাখা উচিত।

ভালো অভ্যাস

  • সন্দেহ হলে Secret হিসেবে রাখুন — Variable ভেবে ভুল করে সংবেদনশীল কিছু commit করে ফেলার চেয়ে বাড়তি সতর্কতা ভালো
  • .dev.vars সবসময় .gitignore-এ রাখুন — একবার Git হিস্টোরিতে সিক্রেট চলে গেলে, শুধু ফাইল ডিলিট করলেই মুছে যায় না
  • staging ও production-এর সিক্রেট আলাদা রাখুন — স্টেজিং-এ টেস্ট করার সময় ভুলবশত লাইভ সিস্টেমে প্রভাব ফেলার ঝুঁকি কমায়

নিজে চেষ্টা করো

Exercise:

  1. নিজের Worker-এ একটা [vars] ব্লক যোগ করো একটা সাধারণ ভ্যারিয়েবল দিয়ে, কোডে env দিয়ে অ্যাক্সেস করে দেখো।
  2. .dev.vars ফাইল বানাও, একটা টেস্ট সিক্রেট রাখো, .gitignore-এ যোগ করতে ভুলো না।
  3. নিজের wrangler.toml-এ [env.staging] ব্লক যোগ করে wrangler deploy --env staging দিয়ে আলাদাভাবে ডেপ্লয় করো।
  4. নিজের কোনো একটা প্রজেক্টের সব সিক্রেট/ভ্যারিয়েবলের তালিকা বানাও, প্রতিটাকে Secret নাকি Variable হিসেবে রাখা উচিত তা ঠিক করো।

পরের পর্বে যা থাকছে

পরের পর্বে আমরা শিখব Caching ও Performance অপটিমাইজেশন — Cloudflare-এর Cache API কীভাবে ব্যবহার করতে হয়, কোন কনটেন্ট কতক্ষণ ক্যাশ রাখা উচিত, আর সাইট দ্রুত করার প্র্যাকটিক্যাল কৌশল।

একটি মন্তব্য পোস্ট করুন

নবীনতর পূর্বতন

যোগাযোগ ফর্ম