কম্পিউটার টিউটোরিয়াল

বিল্ডিং এনভিফ্লো:লারাভেল এবং আপস্ট্যাশ রেডিসের সাথে নিরাপদে পরিবেশের ভেরিয়েবল শেয়ার করা

আমি সম্প্রতি নুনো মাদুরোর প্রজেক্ট, পাইরে দ্বারা অনুপ্রাণিত হয়েছি। এটি একটি ওয়েব অ্যাপ যা আপনাকে যাকে খুশি তাকে স্বল্পস্থায়ী গোপন বার্তা পাঠাতে দেয়। এই বার্তাগুলি বিশ্রামে এনক্রিপ্ট করা হয়, এবং শুধুমাত্র আপনি বা আপনি যার সাথে ডিক্রিপশন লিঙ্কটি শেয়ার করেন তিনিই সেগুলি পড়তে পারেন৷

আমি Upstash Redis-এর সাথে অনুরূপ কিছু তৈরি করতে চেয়েছিলাম, তাই আমি একটি কুলুঙ্গি বেছে নিয়েছি:পরিবেশের ভেরিয়েবল শেয়ার করা৷ আমি বাজি ধরেছি যে কোনও সময়ে, আপনাকে আপনার সতীর্থদের সাথে গোপনীয়তা শেয়ার করতে হয়েছিল এবং ভাবতে হয়েছিল যে কীভাবে একটি সিস্টেম তৈরি করা যায় যা আপনাকে এটি নিরাপদে করতে দেয়৷

Envflow উপস্থাপন করছি, একটি Laravel নমুনা প্রকল্প যা আমি তৈরি করেছি যা Upstash Redis কে এনক্রিপ্ট করা ডেটা সংরক্ষণ ও শেয়ার করার জন্য প্রাথমিক ডাটাবেস হিসেবে ব্যবহার করে।

আমি আপনাকে এই প্রকল্পটি নির্মাণের প্রক্রিয়ার মধ্য দিয়ে নিয়ে যাব, শুরু থেকে শেষ পর্যন্ত বিরক্তিকর বিবরণগুলি এড়িয়ে যান৷

স্ট্যাক

প্রথমত, আমি পিএইচপি গ্রহণ করা বেছে নিয়েছি এবং বিখ্যাত TALL স্ট্যাক ব্যবহার করে প্রকল্পটি তৈরি করেছি:

  • Tailwind CSS
  • আল্পাইন জেএস
  • লারাভেল
  • লাইভওয়্যার
  • Upstash Redis

ডাটাবেস

এনক্রিপ্ট করা ডেটা সঞ্চয় করার জন্য আমার একটি জায়গা দরকার ছিল যা দ্রুত এবং সাশ্রয়ী হওয়ার সময় একটি নির্দিষ্ট সময়ের পরে মেয়াদ শেষ হতে পারে৷ আপনি যেমন অনুমান করতে পারেন, আমি Upstash Redis বেছে নিয়েছি৷

আপস্ট্যাশ রেডিস একটি সার্ভারহীন, রেডিস-সামঞ্জস্যপূর্ণ ডাটাবেস তাই এটি আসলে এই ব্যবহারের ক্ষেত্রে উপযুক্ত।

Psst... আমাদের কাছে Upstash Redis এবং Laravel এর জন্য একটি শুরু করার নির্দেশিকা আছে!

আরও জানুন

রুট / শেষ পয়েন্ট

Envflow তিনটি প্রধান রুটে চলে, এছাড়াও একটি সহায়ক রুট যা ব্যাখ্যা করে যে প্রকল্পটি কী। সেই রুটগুলি routes/web.php এ পাওয়া যাবে ফাইল।

হোমপেজ

হোমপেজ রুটটি শুধুমাত্র প্রজেক্টের জন্য একটি ল্যান্ডিং পৃষ্ঠা হিসেবে কাজ করে না কিন্তু এতে একটি লাইভওয়্যার ফর্মও রয়েছে যা আপনাকে আপনার পরিবেশের ভেরিয়েবল এনক্রিপ্ট করতে দেয়। এই পৃষ্ঠায় আপনি এনভায়রনমেন্ট ভেরিয়েবলগুলিকে কতবার ডিক্রিপ্ট করা যাবে এবং কতক্ষণের জন্য বৈধ থাকবে তা সেট করতে পারেন৷

বিল্ডিং এনভিফ্লো:লারাভেল এবং আপস্ট্যাশ রেডিসের সাথে নিরাপদে পরিবেশের ভেরিয়েবল শেয়ার করা

আপনি app/Livewire/EncryptEnvPage.php এ Livewire পৃষ্ঠা উপাদান খুঁজে পেতে পারেন এবং resources/views/livewire/encrypt-env-page.blade.php অনুযায়ী টেমপ্লেট .

সফল পৃষ্ঠা

সাফল্য পৃষ্ঠা হল একটি সাধারণ পৃষ্ঠা যা ডিক্রিপশন লিঙ্ক ভাগ করার দুটি উপায় প্রদর্শন করে:একটিতে ডিক্রিপশন কী অন্তর্ভুক্ত থাকে, অন্যটি লিঙ্ক থেকে ডিক্রিপশন কীকে আলাদা করে৷

বিল্ডিং এনভিফ্লো:লারাভেল এবং আপস্ট্যাশ রেডিসের সাথে নিরাপদে পরিবেশের ভেরিয়েবল শেয়ার করা

আপনি app/Livewire/SuccessPage.php এ Livewire পৃষ্ঠা উপাদান খুঁজে পেতে পারেন এবং resources/views/livewire/success-page.blade.php অনুযায়ী টেমপ্লেট .

ডিক্রিপশন পৃষ্ঠা

এই পৃষ্ঠাটি যেখানে ডিক্রিপশনের সমস্ত জাদু ঘটে, মনে রাখবেন আমরা আমাদের আপস্ট্যাশ রেডিস ডাটাবেসে এনক্রিপশন কী সংরক্ষণ করি না, আমরা কেবল এনক্রিপ্ট করা মান সংরক্ষণ করি যা একগুচ্ছ জিবেরিশ। ডিক্রিপশন পৃষ্ঠার প্রধান কাজ হল ডিক্রিপশন কী নেওয়া এবং পরিবেশের ভেরিয়েবলগুলিকে ডিক্রিপ্ট করার চেষ্টা করা৷

বিল্ডিং এনভিফ্লো:লারাভেল এবং আপস্ট্যাশ রেডিসের সাথে নিরাপদে পরিবেশের ভেরিয়েবল শেয়ার করা

আপনি app/Livewire/DecryptEnvPage.php এ Livewire পৃষ্ঠা উপাদান খুঁজে পেতে পারেন এবং resources/views/livewire/decrypt-env-page.blade.php অনুযায়ী টেমপ্লেট .

ক্রিয়া

এই প্রকল্পের জন্য আমি আমার অ্যাপ্লিকেশনে ব্যবসায়িক যুক্তির প্রধান উপাদানগুলিকে সংগঠিত করার জন্য অ্যাকশন/এক্সিকিউটর প্যাটার্ন ব্যবহার করেছি৷ এটি আমাকে ভবিষ্যতের পুনঃব্যবহারযোগ্যতা, পরীক্ষাযোগ্যতা এবং রক্ষণাবেক্ষণযোগ্যতার জন্য অনুমতি দেয় যখন কোডটি বৃদ্ধি পায়, এটি আমাকে আমার অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে এই ধরনের আচরণগুলি ভাগ করার অনুমতি দেয়, আসুন বলি, একটি ভবিষ্যত API... কে জানে?...

আপনি app/Actions-এ অ্যাকশন খুঁজে পেতে পারেন কিন্তু আমি আপনাদের কাছে এনক্রিপ্ট এবং ডিক্রিপ্টেশন চাই কারণ এগুলো হল প্রধান উপাদান যা পরিবেশ ভেরিয়েবলের এনক্রিপশন এবং ডিক্রিপশন পরিচালনা করে।

এনক্রিপশন

আমি বেশ ভাগ্যবান যে লারাভেলের একটি অন্তর্নির্মিত এনক্রিপশন সহায়ক আছে কিন্তু আমার একটু ভিন্ন কিছু দরকার ছিল যেহেতু আমি রানটাইমে তৈরি একটি কাস্টম এনক্রিপশন কী প্রদান করতে চেয়েছিলাম৷

কিছুক্ষণ খনন করার পর একটা পথ পেলাম! আমরা লারাভেলের অন্তর্নিহিত ক্লাস Illuminate\Encryption\Encrypter ব্যবহার করতে পারি .

use Illuminate\Encryption\Encrypter;
 
$encrypter = new Encrypter(
 'custom-encryption-key', // this is the one we would want to generate
 config('app.cipher'), // we'll use Laravel default cipher
);
 
// Hooray! We can now encrypt our value
$encryptedValue = $encrypter->encryptString($value);

ঠিক আছে... তাই আমরা এনক্রিপশন কাজ করতে পেরেছি, আপনি যদি আমার শেয়ার করা ফাইলগুলি পরীক্ষা করে থাকেন, আপনি হয়তো লক্ষ্য করেছেন যে এই কোডটি এনক্রিপ্ট এবং ডিক্রিপ্ট অ্যাকশনগুলিতে পাওয়া যেতে পারে৷

স্টোরেজ

আমরা কীভাবে অ্যাকশন এবং লারাভেলের নেটিভ Encrypter ব্যবহার করি তা আমরা কভার করেছি আমাদের মানগুলিকে এনক্রিপ্ট এবং ডিক্রিপ্ট করার জন্য ক্লাস, কিন্তু আমরা কীভাবে সেগুলিকে আপস্ট্যাশ রেডিসে সংরক্ষণ করি তা আমরা এখনও কভার করিনি৷

সেই কোডটি StoreEnvFile-এ থাকে অ্যাকশন।

আমি সেই ফাইল থেকে কিছু জিনিস হাইলাইট করতে চাই, নিচের কোড।

// ...
 
RedisFacade::pipeline(function (Redis $pipe) use (...) {
 $options = ['EX' => $ttl]; // here is where we set the expiration time
 $pipe->set("envfile:$id", $encrypted->value, $options);
 $pipe->set("envfile:$id:shareLimit", $shareLimit, $options);
});
 
// ...

উপরের কোডটিতে আপনি একটি রেডিস পাইপলাইন ব্যবহার করা দেখতে পাচ্ছেন, যা নিশ্চিত করবে যে সমস্ত কমান্ড একটি একক লেনদেনে কার্যকর করা হয়েছে। এটি গুরুত্বপূর্ণ কারণ সেট কমান্ড ব্যর্থ হলে আমরা এনক্রিপ্ট করা মান সংরক্ষণ করতে চাই না।

ডিপ্লয়মেন্ট

স্থাপনার জন্য আমি সম্প্রতি প্রকাশিত লারাভেল ক্লাউড ব্যবহার করেছি।

লারাভেল ক্লাউডে স্থাপন করা অবিশ্বাস্যভাবে সহজ ছিল, রিপোজিটরি থেকে সংযুক্ত রেডিস ইনস্ট্যান্স এবং একটি প্রভিশনড ডোমেন সহ একটি সম্পূর্ণরূপে নিয়োজিত অ্যাপে যেতে আমার এক মিনিটেরও কম সময় লেগেছে। এমনকি এখন, স্থাপনা 30 সেকেন্ডেরও কম সময় নেয়। 🚀

বিল্ডিং এনভিফ্লো:লারাভেল এবং আপস্ট্যাশ রেডিসের সাথে নিরাপদে পরিবেশের ভেরিয়েবল শেয়ার করা

আপনি https://envflow.laravel.cloud.

-এ স্থাপন করা উৎপাদন পরিবেশ দেখতে পারেন

উপসংহার

আমি আশা করি আপনি এই পোস্টটি উপভোগ করেছেন এবং এটি আপনাকে বুঝতে সাহায্য করেছে যে আমি কীভাবে Envflow তৈরি করেছি৷

আমি মনে করি এমন অনেকগুলি অ্যাপ্লিকেশন রয়েছে যা একটি প্রাথমিক ডাটাবেস হিসাবে Upstash Redis ব্যবহার করতে পারে, এমনকি এখানে Redis একটি KV স্টোরিট হিসাবে ব্যবহার করা হয়েছিল এর চেয়ে অনেক বেশি করতে পারে এবং আমি নিশ্চিত করব যে আমি ভবিষ্যতের আর্টিলে আমি এটিকে অন্য একটি প্রকল্পের সাথে কভার করব যাতে আমি কাজ করব৷

এই প্রোজেক্টের সোর্স কোডটি GitHub-এ পাওয়া যায়, নির্দ্বিধায় এটি পরীক্ষা করে দেখুন এবং আপনার যদি কোনো ধারণা বা পরামর্শ থাকে (বা কোনো বাগ খুঁজে পান) তাহলে অবদান রাখুন।


  1. C++ ব্যবহার করে একটি স্ট্রিং এর সাবস্ট্রিং এর সংখ্যা খুঁজুন

  2. HTML DOM শৈলী বর্ডার রেডিয়াস প্রপার্টি

  3. অ্যান্ড্রয়েডে ওয়াইফাই কীভাবে নিষ্ক্রিয় করবেন?

  4. কিভাবে অ্যান্ড্রয়েডে সব কার্যক্রম একবারে বন্ধ করবেন?