এতদিন আমরা পর্ব ৬-এ 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-এর জন্য আলাদা ভ্যারিয়েবল রাখা যায়।
- Pages প্রজেক্টে Settings → Environment variables-এ যান
- Production ও Preview — দুটো আলাদা সেকশন থাকে
- 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:
- নিজের Worker-এ একটা
[vars]ব্লক যোগ করো একটা সাধারণ ভ্যারিয়েবল দিয়ে, কোডেenvদিয়ে অ্যাক্সেস করে দেখো। .dev.varsফাইল বানাও, একটা টেস্ট সিক্রেট রাখো,.gitignore-এ যোগ করতে ভুলো না।- নিজের
wrangler.toml-এ[env.staging]ব্লক যোগ করেwrangler deploy --env stagingদিয়ে আলাদাভাবে ডেপ্লয় করো। - নিজের কোনো একটা প্রজেক্টের সব সিক্রেট/ভ্যারিয়েবলের তালিকা বানাও, প্রতিটাকে Secret নাকি Variable হিসেবে রাখা উচিত তা ঠিক করো।
পরের পর্বে যা থাকছে
পরের পর্বে আমরা শিখব Caching ও Performance অপটিমাইজেশন — Cloudflare-এর Cache API কীভাবে ব্যবহার করতে হয়, কোন কনটেন্ট কতক্ষণ ক্যাশ রাখা উচিত, আর সাইট দ্রুত করার প্র্যাকটিক্যাল কৌশল।