ডকার, ট্র্যাফিক এবং পোর্টেনারকে সম্পূর্ণ স্ট্যাক হিসেবে কীভাবে একীভূত করবেন

সর্বশেষ আপডেট: 7 মার্চ 2026
  • ট্রাফিক একটি গতিশীল বিপরীত প্রক্সি হিসেবে কাজ করে এবং TLS সার্টিফিকেট সমাধান করে, অন্যদিকে পোর্টেনার ডকার এবং সোয়ার্ম পরিচালনার জন্য একটি গ্রাফিক্যাল ইন্টারফেস অফার করে।
  • traefik.yml, dynamic.yml এবং docker-compose.yml এর সমন্বয় আপনাকে এন্ট্রিপয়েন্ট, সিকিউরিটি মিডলওয়্যার এবং লেবেল-ভিত্তিক HTTP/HTTPS রাউটিং সংজ্ঞায়িত করতে দেয়।
  • ডকার স্ট্যান্ডঅ্যালোন বা সোয়ার্ম পরিস্থিতিতে, কেবল প্রক্সি নেটওয়ার্কে পরিষেবাগুলিতে যোগদান করুন এবং সেগুলিকে ট্যাগ করুন যাতে ট্র্যাফিক নিরাপদে সেগুলি আবিষ্কার করতে এবং প্রকাশ করতে পারে।
  • ড্যাশবোর্ডে লেটস এনক্রিপ্ট, ডেডিকেটেড নেটওয়ার্ক এবং বেসিক প্রমাণীকরণের ব্যবহার একক সার্ভারে একাধিক অ্যাপ্লিকেশন স্থাপনের জন্য একটি শক্তিশালী পরিবেশকে সুসংহত করে।

ডকার পোর্টেনার ট্রাফিক

ডকার, ট্র্যাফিক এবং পোর্টেইনার দিয়ে একটি আধুনিক স্ট্যাক সেট আপ করা বর্তমানে একটি একক সার্ভারে কন্টেইনার পরিচালনা করার এবং কনফিগারেশনের জটিলতায় না জড়িয়ে HTTPS সহ একাধিক পরিষেবা উন্মুক্ত করার অন্যতম সহজ উপায়। এর বিশেষত্ব হলো, ট্র্যাফিক একটি ডাইনামিক রিভার্স প্রক্সি হিসেবে কাজ করে, অন্যদিকে পোর্টেইনার ডকার এবং চাইলে সোয়ার্মও পরিচালনা করার জন্য একটি অত্যন্ত সহজ ওয়েব ইন্টারফেস প্রদান করে।

এই প্রবন্ধে আপনি দেখতে পাবেন কিভাবে পোর্টেইনারের সামনে ট্র্যাফিককে বিপরীত প্রক্সি হিসেবে স্থাপন করা একটি "ক্লাসিক" ডকার (স্বতন্ত্র) দৃশ্যকল্প এবং একটি ডকার সোয়ার্ম ক্লাস্টার উভয় ক্ষেত্রেই, কীভাবে TLS (স্ব-স্বাক্ষরিত বা লেটস এনক্রিপ্ট) সংহত করতে হয় এবং কোন কনফিগারেশন ফাইলগুলি কার্যকর হয় (traefik.yml, dynamic.yml y docker-compose.yml) এবং Traefik-এ মিডলওয়্যার, নেটওয়ার্ক এবং সাধারণ ট্যাগিং সমস্যার কিছু সাধারণ কৌশল।

স্থাপত্যে ডকার, ট্রাফিক এবং পোর্টেইনারের কী ভূমিকা আছে?

এই ধরনের সেটআপে, ডকার হলো ভিত্তি স্তর যেখানে কন্টেইনারগুলো চলে, ট্র্যাফিক একটি রিভার্স প্রক্সি এবং লোড ব্যালান্সার হিসেবে কাজ করে যা পোর্ট ৮০ এবং ৪৪৩-এ সমস্ত HTTP/HTTPS অনুরোধ গ্রহণ করে এবং সেগুলোকে উপযুক্ত কন্টেইনারে পাঠায়, এবং পোর্টেইনার ইমেজ, কন্টেইনার, ভলিউম, নেটওয়ার্ক এবং ডকার বা সোয়ার্ম স্ট্যাক পরিচালনার জন্য একটি গ্রাফিক্যাল ইন্টারফেস প্রদান করে ।

ধারণাটি হল ডকারের সাথে একটি একক হোস্ট থাকা যেখানে ট্রাফিক "গেটওয়ে" তে অবস্থিত: প্রবেশপথে শুনুন web (80) এবং websecure (443), TLS সার্টিফিকেটগুলি সমাধান করে (সাধারণত Let's Encrypt এর সাথে) এবং ডকার প্রদানকারীর সাথে ইন্টিগ্রেশনের জন্য ধন্যবাদ, কন্টেইনারগুলিতে লেবেল যুক্ত করে আপনার দ্বারা প্রকাশিত পরিষেবাগুলি স্বয়ংক্রিয়ভাবে আবিষ্কার করে।

অন্যদিকে, পোর্টেইনার অন্য একটি পাত্রের মতো চলে, কিন্তু এর মধ্য দিয়ে উন্মুক্ত থাকে একটি নির্দিষ্ট সাবডোমেন, উদাহরণস্বরূপ portainer.tudominio.com, TLS দ্বারা সুরক্ষিত এবং, যদি ইচ্ছা হয়, Portainer এর নিজস্ব লগইনের বাইরে একটি অতিরিক্ত প্রমাণীকরণ মিডলওয়্যারের পিছনে। এই সমস্ত কিছু একটি দিয়ে সাজানো হয় Docker-রচনা যা ট্র্যাফিক, পোর্টেইনার এবং সাধারণ নেটওয়ার্কের ধরণকে সংজ্ঞায়িত করে proxy.

এই পদ্ধতির একটি সুস্পষ্ট সুবিধা হলো, আপনি আপনার কন্টেইনারগুলিতে শুধু লেবেল যোগ করেই নতুন সার্ভিস ডেপ্লয় করতে পারেন : Traefik ডকারে পরিবর্তনটি শনাক্ত করে, তাৎক্ষণিকভাবে রাউটার, সার্ভিস এবং মিডলওয়্যার তৈরি করে, এবং কয়েক সেকেন্ডের মধ্যেই স্ট্যাটিক কনফিগারেশন ফাইলগুলিতে ম্যানুয়ালি হাত না দিয়েই আপনার একটি নতুন সাবডোমেইন বা রাউট চালু হয়ে যায়।

ট্র্যাফিক স্ট্যাটিক কনফিগারেশন: traefik.yml

ট্রাফিকের স্ট্যাটিক কনফিগারেশন সাধারণত একটি ফাইলে সংরক্ষণ করা হয় যেমন traefik.ymlযা পাত্রের ভেতরে মাউন্ট করা আছে। এখানে এটি সংজ্ঞায়িত করা হয়েছে ড্যাশবোর্ড, এন্ট্রিপয়েন্ট, প্রোভাইডার এবং সার্টিফিকেট সমাধানকারী আসুন, অন্যান্য জিনিসের মধ্যে, এনক্রিপ্ট করি।

একটি সাধারণ YAML কনফিগারেশন API এবং কন্ট্রোল প্যানেল সক্রিয় করার মাধ্যমে শুরু হয় যেমন কিছু দিয়ে api: dashboard: trueএটি ওয়েব ইন্টারফেসে অ্যাক্সেসের অনুমতি দেয় যেখানে আপনি রাউটার, পরিষেবা এবং মিডলওয়্যার দেখতে পারবেন। এই প্যানেলটি ডিফল্টরূপে প্রমাণীকরণ করা হয় না, তাই আমরা পরে দেখব কিভাবে ডায়নামিক কনফিগারেশন থেকে মৌলিক প্রমাণীকরণের মাধ্যমে এটি সুরক্ষিত করা যায়।

এরপর, প্রবেশের স্থানগুলি সংজ্ঞায়িত করা হয়। সাধারণত, আছে একটি প্রবেশ বিন্দু web পোর্ট ৫৯৮৪ এ এবং অন্যান্য websecure 443 তে। মধ্যে web একটি স্বয়ংক্রিয় পুনঃনির্দেশ সাধারণত কনফিগার করা হয় websecureযাতে যেকোনো HTTP অ্যাক্সেস HTTPS-এ পুনঃনির্দেশিত হয়:

একটি সাধারণ রূপরেখায় একটি বিভাগ অন্তর্ভুক্ত থাকবে http.redirections.entryPoint.to: websecure সেই পুনঃনির্দেশনা জোর করে এবং নিরাপদ প্রবেশ বিন্দুতে সমস্ত এনক্রিপ্ট করা ট্র্যাফিককে কেন্দ্রীভূত করতে।

পাড়া websecure এটি নির্দেশিত যে TLS ব্যবহার করা উচিত এবং একটি লিঙ্ক প্রদান করা হয়েছে। সার্টিরিসলভার (উদাহরণস্বরূপ letsencrypt) যা সার্টিফিকেটগুলি স্বয়ংক্রিয়ভাবে পরিচালনার জন্য দায়ী থাকবে। এই সমস্ত কিছু দ্বারা সমর্থিত একমি, যা হল সেই প্রোটোকল যা Let's Encrypt সার্টিফিকেট ইস্যু এবং পুনর্নবীকরণের জন্য ব্যবহার করে।

ব্লকে প্রদানকারীর ডকার সরবরাহকারীটি সকেটের দিকে নির্দেশ করে কনফিগার করা হয়েছে unix:///var/run/docker.sockএকটি মূল বিকল্প সহ: exposedByDefault: falseএর মাধ্যমে, ট্রাফিক ডিফল্টরূপে সমস্ত কন্টেইনার প্রকাশ করে না; শুধুমাত্র লেবেল বহনকারী কন্টেইনারগুলি traefik.enable=trueআপনি একটি ফাইল সরবরাহকারীও কনফিগার করতে পারেন (file) উদাহরণস্বরূপ, একটি অতিরিক্ত গতিশীল কনফিগারেশন লোড করতে, /configurations/dynamic.yml.

অবশেষে, স্ট্যাটিক ফাইলে সাধারণত বিভাগটি অন্তর্ভুক্ত থাকে certificatesResolversযেখানে ACME সমাধানকারী সংজ্ঞায়িত করা হয়: নিবন্ধন ইমেল, স্টোরেজ ফাইল (সাধারণত acme.json), কী টাইপ (উদাহরণস্বরূপ EC384) এবং যাচাইকরণ পদ্ধতি (উদাহরণস্বরূপ httpChallenge প্রবেশের স্থানে webএটা গুরুত্বপূর্ণ যে একটি আসল ইমেল সেট আপ করুন এই বিভাগে কারণ Let's Encrypt এটি নোটিশ এবং পুনর্নবীকরণের জন্য ব্যবহার করে; যদি আপনি একটি ডামি বা ত্রুটিপূর্ণ মান রেখে যান তবে Traefik কন্টেইনার শুরু করার সময় আপনি ত্রুটির সম্মুখীন হতে পারেন।

  লিনাক্স এবং অন্যান্য প্রয়োজনীয় ফাইল সিস্টেমে NTFS PLUS

এই YAML কনফিগারেশন ছাড়াও, এমন কিছু স্থাপনা রয়েছে যা ব্যবহার করে TOML ফর্ম্যাট (traefik.toml)কিন্তু যুক্তি একই: তারা সমাধানকারী সার্টিফিকেটগুলিকে ভাগ করে (উদাহরণস্বরূপ [certificatesResolvers.main.acme]), চ্যালেঞ্জগুলি সংজ্ঞায়িত করুন (যেমন dnsChallenge বিরূদ্ধে provider = "route53") এবং ডিফল্ট TLS বিকল্পগুলি যোগ করুন, যেমন forzar minVersion = "VersionTLS13" অথবা একটি তালিকা কনফিগার করুন cipherSuites অনুমোদিত

ডকার আর্কিটেকচার ট্রাফিক পোর্টেনার

গতিশীল কনফিগারেশন: মিডলওয়্যার, টিএলএস এবং নিরাপত্তা

ট্রাফিকের গতিশীল অংশ সাধারণত একটি ফাইলে যায় যেমন dynamic.yml, ফাইল প্রদানকারী দ্বারা লোড করা হয়েছে। এখানে আপনি সংজ্ঞায়িত করবেন মিডলওয়্যার এবং টিএলএস বিকল্পগুলি যা ট্র্যাফিক কন্টেইনার পুনরায় চালু না করেই পরিবর্তন করা যেতে পারে, যা তাৎক্ষণিকভাবে নিরাপত্তা সামঞ্জস্য করার জন্য খুবই কার্যকর।

একটি সাধারণ ঘটনা হল হেডার মিডলওয়্যার তৈরি করা, উদাহরণস্বরূপ secureHeadersযা HSTS সম্পর্কিত নীতি এবং HTTPS এর বাধ্যতামূলক ব্যবহার যোগ করে। YAML-এ আপনি প্যারামিটারগুলি খুঁজে পেতে পারেন যেমন sslRedirect: true, forceSTSHeader: true, stsIncludeSubdomains: true, stsPreload: true এবং একটি stsSeconds উচ্চ (উদাহরণস্বরূপ, সেকেন্ডে এক বছর)। এটি ব্রাউজার দিক থেকে ট্র্যাফিক নিরাপত্তা জোরদার করে।

আরেকটি সাধারণ মিডলওয়্যার হল মৌলিক প্রমাণীকরণের জন্য একটি, উদাহরণস্বরূপ user-auth প্রকারের basicAuth, যেখানে ব্যবহারকারীদের একটি তালিকা বিন্যাসে ঘোষণা করা হয় usuario:hashহ্যাশ সাধারণত তৈরি হয় htpasswd এবং ফাইলটিতে এমবেড করা থাকে। এই মিডলওয়্যারটি সাধারণত ট্র্যাফিক ড্যাশবোর্ড রাউটারের সাথে যুক্ত থাকে, তাই HTTPS অ্যাক্সেস ছাড়াও, এটির জন্য একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড প্রয়োজন।

একই গতিশীল কনফিগারেশনের মধ্যে, একটি ব্লক দেখা সাধারণ tls.options একটি ডিফল্ট প্রোফাইল সহ (default) যেখানে সমর্থিত সাইফার এবং ন্যূনতম TLS সংস্করণ সেট করা আছে, উদাহরণস্বরূপ VersionTLS12কিছু স্থাপনার ক্ষেত্রে, বেশ কয়েকটি বিকল্প সংজ্ঞায়িত করা হয় (উদাহরণস্বরূপ, একটি প্রোফাইল যাকে বলা হয় tls12 এবং অন্যান্য default) প্রয়োজনে বিভিন্ন পরিষেবার সাথে নিরাপত্তা স্তরকে অভিযোজিত করা।

যেসব পরিবেশে এটি ব্যবহার করা পছন্দসই, অভ্যন্তরীণভাবেও TLS Traefik এবং ব্যাকএন্ড পরিষেবাগুলির (যেমন Portainer) মধ্যে, একটি সমস্যা দেখা দিতে পারে যেখানে সেই পরিষেবাগুলির একটি পাবলিক CA দ্বারা স্বীকৃত শংসাপত্র নেই। সেখানেই বিকল্পটি কার্যকর হয়। insecureSkipVerify, যা, এর অধীনে কনফিগার করা হয়েছে providers.http.tls অথবা উপযুক্ত TLS বিকল্পগুলিতে, এটি Traefik কে ব্যাকএন্ড সার্টিফিকেট যাচাইকরণ বাইপাস করার অনুমতি দেয়। এটি ল্যাব পরিবেশ বা অভ্যন্তরীণ স্ব-স্বাক্ষরিত সার্টিফিকেটের জন্য কার্যকর, তবে সতর্কতার সাথে ব্যবহার করা উচিত কারণ এটি যাচাইকরণকে শিথিল করে।

একটি ব্যবহারিক বিবরণ: ফাইলটি dynamic.yml এটি তাৎক্ষণিকভাবে সম্পাদনা করা যেতে পারে।ট্র্যাফিক রিস্টার্ট ছাড়াই ডায়নামিক কনফিগারেশন পুনরায় লোড করে, যাতে আপনি প্রক্সি প্রাপ্যতাকে প্রভাবিত না করেই মিডলওয়্যার যোগ করতে বা অপসারণ করতে, নিরাপত্তা শিরোনাম পরিবর্তন করতে, অথবা মৌলিক প্রমাণীকরণ পরিবর্তন করতে পারেন।

ডকার-কম্পোজ, ট্রাফিক এবং পোর্টেইনারের সাথে, ডকার-স্ট্যান্ডএলোনে

একটি খালি ডকার পরিস্থিতিতে, সোয়ার্ম ছাড়া, সবচেয়ে সাধারণ কাজ হল লঞ্চ করা ট্র্যাফিক এবং পোর্টেনার একটি একক সহ docker-compose.yml যা পরিষেবা এবং একটি ভাগ করা সেতু-ধরণের নেটওয়ার্ক উভয়কেই সংজ্ঞায়িত করে, উদাহরণস্বরূপ, proxy.

সেবা ট্রাফিক এটি সাধারণত অফিসিয়াল ছবি ব্যবহার করে, উদাহরণস্বরূপ traefik:latest অথবা একটি নির্দিষ্ট সংস্করণ যেমন traefik:v3.4পোর্টগুলি ম্যাপ করা হয়েছে। 80 এবং 443 ওয়েব ট্র্যাফিকের জন্য এবং কিছু উদাহরণে, পোর্ট 8080 অভ্যন্তরীণভাবে নিয়ন্ত্রণ প্যানেলটি প্রকাশ করার জন্য। অতিরিক্তভাবে, বিকল্পটি যোগ করা হয়েছে restart: unless-stopped এবং নিরাপত্তা জোরদার করা হয় security_opt: - no-new-privileges:true কন্টেইনারের মধ্যে বিশেষাধিকার বৃদ্ধির ঝুঁকি কমাতে।

ভলিউমের ক্ষেত্রে, ট্র্যাফিককে কেবল পঠনযোগ্য ডকার সকেট মাউন্ট করতে হবে (/var/run/docker.sock:/var/run/docker.sock:ro) কন্টেইনার আবিষ্কার করতে, স্ট্যাটিক ফাইল traefik.yml এবং ডাইরেক্টরি যেখানে ডায়নামিক কনফিগারেশন সংরক্ষণ করা হবে (./traefik-data/configurations:/configurationsফাইলটিও মাউন্ট করা আছে। acme.jsonএখানেই Traefik Let's Encrypt দ্বারা জারি করা সার্টিফিকেট সংরক্ষণ করে। এই ফাইলটি হোস্টে তৈরি করা হয় এবং অনুমতি দেওয়া হয়। 600 যাতে শুধুমাত্র উপযুক্ত ব্যবহারকারীই এটি পড়তে এবং লিখতে পারে; যদি আপনি এটি 644 দিয়ে রাখেন, তাহলে ট্রাফিক সাধারণত অভিযোগ করে।

ট্রাফিকের জাদু দেখানোর মূল চাবিকাঠি হল পরিষেবা লেবেলঅন্যান্য জিনিসের মধ্যে, আপনি পাবেন: traefik.enable=true (যাতে ডকার প্রদানকারী এই পরিষেবাটি প্রকাশ করে), traefik.docker.network=proxy (কন্টেইনারের সাথে যোগাযোগ করার জন্য ট্রাফিকের কোন নেটওয়ার্ক ব্যবহার করা উচিত তা নির্দেশ করে), এবং রাউটার এর মতো traefik.http.routers.traefik-secure, লেবেল সহ যা এর প্রবেশবিন্দু নির্ধারণ করে (websecure), হোস্ট নিয়ম (উদাহরণস্বরূপ Host(`traefik.tudominio.com`)), সংশ্লিষ্ট পরিষেবা (api@internal) এবং প্রমাণীকরণ মিডলওয়্যার (user-auth@file).

  ভ্যালহাইম সার্ভার কীভাবে সেট আপ করবেন: একটি সম্পূর্ণ নির্দেশিকা

সেবা পোর্টেইনার একইভাবে docker-compose.yml সাধারণত ব্যবহার করে portainer/portainer-ce:latest (অথবা যদি আপনার লাইসেন্স থাকে তাহলে এন্টারপ্রাইজ সংস্করণ)। অনুরূপ ভলিউম মাউন্ট করা হয়েছে: ডকার সকেট, ডেটা ফোল্ডার (./portainer-data:/data) এবং প্রায়শই /etc/localtime যাতে এটি হোস্টের টাইম জোন উত্তরাধিকারসূত্রে পায়।

পোর্টেইনারের লেবেলগুলি এটি ট্র্যাফিকের সাথে নিবন্ধিত করে: traefik.enable=true, traefik.docker.network=proxyএই ধরণের রাউটার traefik.http.routers.portainer-secure এন্ট্রিপয়েন্ট সহ websecure এবং একটি হোস্ট নিয়ম যেমন Host(`portainer.tudominio.com`)অতিরিক্তভাবে, ট্র্যাফিকের যে পরিষেবাটি ব্যবহার করা উচিত তা সংজ্ঞায়িত করা হয়েছে, পোর্টেইনারের অভ্যন্তরীণ পোর্টের দিকে নির্দেশ করে, উদাহরণস্বরূপ traefik.http.services.portainer.loadbalancer.server.port=9000.

এই সবকিছুর সাথে সাথে, চালু হওয়ার পর docker compose up -d স্ট্যাক ডিরেক্টরিতে, ট্র্যাফিক ছবিগুলি ডাউনলোড করে এবং নেটওয়ার্ক তৈরি করে। proxy যদি এটিকে বহিরাগত হিসাবে ঘোষণা করা হয় এবং কনফিগার করা সাবডোমেনে উভয় প্যানেলকে প্রকাশ করে, তাহলে লেটস এনক্রিপ্টের মাধ্যমে স্বয়ংক্রিয় HTTPSসেই দিক থেকে, নতুন পরিষেবা যোগ করা হল আপনার প্রকল্পের ক্লোনিং, কয়েকটি ট্রাফিক লেবেল যোগ করা এবং এটিকে নেটওয়ার্কের সাথে সংযুক্ত করার বিষয়। proxy.

ডকার সোয়ার্মের দৃশ্য: পোর্টেইনার এবং ট্রাফিক একটি দলে

যখন আপনি ডকার সোয়ার্ম (Docker Swarm) সক্রিয় করেন, তখন কিছু বিষয় বদলে যায়, কারণ সার্ভিসগুলো স্ট্যাক হিসেবে ডেপ্লয় করা হয় এবং নেটওয়ার্কগুলো সাধারণত ওভারলে-ভিত্তিক হয়ে থাকে। তবে, ট্র্যাফিক (Traefik) এবং পোর্টেইনারের (Portainer) ক্ষেত্রে অন্তর্নিহিত কার্যপ্রণালী প্রায় একই রকম: ট্র্যাফিক একটি রিভার্স প্রক্সি এবং ডাইনামিক সার্ভিস ডিসকভারার হিসেবে কাজ করে চলে, এবং পোর্টেইনার ক্লাস্টারের ভেতরের রিমোট নোডগুলো পরিচালনা করার জন্য স্ট্যান্ডঅ্যালোন মোড এবং পোর্টেইনার + এজেন্ট মোড—উভয়ভাবেই কাজ করতে পারে।

একটি সাধারণ সোয়ার্ম স্থাপনার ক্ষেত্রে, স্ট্যাকটি প্রয়োগ করার আগে তৈরি করা হয়। দুটি ওভারলে নেটওয়ার্ক যা ট্র্যাফিক নোডগুলির মধ্যে ট্র্যাফিক রুট করার জন্য ব্যবহার করবে। অতিরিক্তভাবে, পোর্টেনার ডেটা (উদাহরণস্বরূপ) ধরে রাখার জন্য একটি ভলিউম তৈরি করা হয়। portainer_data) এবং, যদি আপনার প্রয়োজন হয়, তাহলে একটি acme.json অথবা সেই ডিরেক্টরি যেখানে Traefik সার্টিফিকেট এবং কনফিগারেশন সংরক্ষণ করে।

El docker-compose.yml (যা তারপর প্রকাশ পায় docker stack deploy উদাহরণস্বরূপ, ব্যবহার করে, -c portainer.yml) সাধারণত দুটি পরিষেবা সংজ্ঞায়িত করে: পোর্টেনার এজেন্ট, যা মোডে চলে global সমস্ত লিনাক্স নোডে, এবং প্রধান পোর্টেনার পরিষেবা (CE বা EE), যা সাধারণত প্রতিলিপি মোডে থাকে এবং শুধুমাত্র পরিচালকদের উপর চালানোর সীমাবদ্ধতা থাকে।

পোর্টেইনার এজেন্ট ডকার সকেট এবং ভলিউম ডিরেক্টরি মাউন্ট করে (/var/lib/docker/volumes) সম্পদ পরিদর্শন করতে সক্ষম হতে। এটি ওভারলে নেটওয়ার্কের সাথে সংযোগ স্থাপন করে যা এটি ট্র্যাফিকের সাথে ভাগ করবে, উদাহরণস্বরূপ traefik_publicপ্রধান পোর্টেনার পরিষেবাটি TCP এর মাধ্যমে এজেন্টের সাথে যোগাযোগ করার জন্য কনফিগার করা যেতে পারে (tcp://tasks.agent:9001) এবং, প্রকৃতপক্ষে, কিছু উদাহরণে সেই কমান্ডটি দেখানো হয়েছে --tlsskipverify মন্তব্য করেছেন, প্রয়োজনে TLS যাচাইকরণ এড়িয়ে যেতে।

একই স্ট্যাক বা অন্য কোনও স্ট্যাকে, ট্রাফিক সোয়ার্ম মোডে ডকার প্রদানকারীর সাথে শুরু করে (swarmMode = true TOML-এ অথবা ফ্ল্যাগে সমতুল্য বিকল্প), ট্যাগ করা পরিষেবাগুলি পর্যবেক্ষণ করে। এর কনফিগারেশনে একটি অন্তর্ভুক্ত রয়েছে certificatesResolvers.main.acme লেটস এনক্রিপ্টের জন্য, a dnsChallenge যেমন সরবরাহকারীর সাথে রুট53 যদি আপনি DNS দ্বারা সার্টিফিকেট যাচাই করতে চান, এবং একটি ব্লক tls.options যেখানে, উদাহরণস্বরূপ, এটি জোরপূর্বক করা হয় minVersion = "VersionTLS13" ডিফল্ট প্রোফাইলের জন্য এবং একটি স্পষ্ট তালিকা সংজ্ঞায়িত করা হয়েছে cipherSuites একটি TLS 1.2 প্রোফাইলের জন্য।

সোয়ার্মে পোর্টেনারের লেবেলগুলি একই দর্শন অনুসরণ করে: traefik.enable=trueরাউটার এর মতো traefik.http.routers.portainer বিরূদ্ধে Host(`portainer.midominio.com`), traefik.http.routers.portainer.entrypoints=https (o websecure (নামকরণ অনুসারে), এবং traefik.http.routers.portainer.tls=true সেই রাউটারে TLS সক্ষম করতে। অতিরিক্তভাবে, আপনি নির্দিষ্ট করতে পারেন সার্টিরিসলভার বিরূদ্ধে traefik.http.routers.portainer.tls.certresolver=main এবং ব্যাকএন্ড স্কিমা যদি পরিষেবাটি অভ্যন্তরীণভাবে HTTPS এর সাথে কথা বলে traefik.http.services.portainer.loadbalancer.server.scheme=https.

Swarm-এর Traefik ডিবাগ লগে আপনি জেনারেট করা কনফিগারেশন দেখতে পাবেন: রাউটার যেমন api y portainer, আবিষ্কৃত পরিষেবাগুলি (উদাহরণস্বরূপ portainer en http://10.0.1.12:9000 এবং একটি পরিষেবা traefik (ড্যাশবোর্ডের পোর্ট 8080 এর দিকে নির্দেশ করে), এবং, যদি খারাপভাবে সংজ্ঞায়িত লেবেলগুলির সাথে কোনও সমস্যা থাকে, তাহলে বার্তাগুলি যেমন "রাউটারের পরিষেবার নাম নির্ধারণ করা যায়নি: অনেক বেশি পরিষেবা"যা সাধারণত রাউটারের সাথে সম্পর্কিত পরিষেবাগুলির দ্বন্দ্ব বা সদৃশতা নির্দেশ করে।

ন্যূনতম উদাহরণ: ট্রাফিকের সাথে হুয়ামি, রুট এবং টিএলএস

Portainer কে সমীকরণে আনার আগে, ছবির মতো খুব সহজ ব্যাকএন্ড দিয়ে Traefik ব্যবহার করে দেখা বেশ বাস্তবসম্মত। traefik/whoamiযা অনুরোধ সম্পর্কে তথ্য প্রদান করে। এটি আপনাকে যাচাই করতে সাহায্য করে যে Traefik সঠিকভাবে কনফিগার করা হয়েছে এবং রাউটিং নিয়মগুলি কাজ করছে।

Un docker-compose.yml মৌলিক পরিষেবা অন্তর্ভুক্ত থাকতে পারে traefik ছবির সাথে traefik:v3.4, ডকার সকেট মাউন্ট করা এবং বুট ফ্ল্যাগগুলিকে এইভাবে সংজ্ঞায়িত করা --providers.docker=true, --providers.docker.exposedbydefault=false, --providers.docker.network=proxy এবং প্রবেশ বিন্দু --entryPoints.web.address=:80হোস্টে 80 এবং 8080 পোর্টগুলির বিজ্ঞাপন দেওয়া হয় এবং একটি নেটওয়ার্ক তৈরি করা হয়। proxy যা পাত্রটিও ব্যবহার করবে whoami.

সেবা whoami এটি একই নেটওয়ার্কে শুরু হয় এবং এর সাথে চিহ্নিত করা হয় traefik.enable=trueতারপর একটি রাউটার লেবেল দিয়ে সংজ্ঞায়িত করা হয় traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`) এবং এটি নির্দেশিত যে আপনার প্রবেশ বিন্দু হল webযদি আপনি এর সাথে একটি অনুরোধ করেন curl -H "Host: whoami.docker.localhost" http://localhost/আপনি হোস্টনেম, আইপি, হেডার ইত্যাদি সহ একটি প্রতিক্রিয়া দেখতে পাবেন, যা নিশ্চিত করে যে ট্র্যাফিক সঠিকভাবে রাউটিং করছে।

  সার্ভার কী এবং এটি কীভাবে কাজ করে: প্রকার এবং বৈশিষ্ট্য

সেখান থেকে, এটা সহজ। পাথ অনুসারে রাউটিং যোগ করুনউদাহরণস্বরূপ, আপনি অন্য একটি পরিষেবা তৈরি করতে পারেন। whoami-api একই ছবি সহ, একই নেটওয়ার্কে, এবং এটিকে একই ধরণের নিয়ম দিয়ে ট্যাগ করুন Host(`whoami.docker.localhost`) && PathPrefix(`/api`)সুতরাং, মূল / যাও whoami মূল এবং অনুরোধগুলি /api তাদের সেবা করবে whoami-apiআপনি অনুরোধ করে এটি যাচাই করতে পারেন / ইতিমধ্যে /api একই হোস্টের সাথে।

সক্রিয় করতে TLS এর এই স্থানীয় পরিবেশে, একটি বিকল্প হল ডোমেনের জন্য একটি স্ব-স্বাক্ষরিত শংসাপত্র তৈরি করা *.docker.localhost বিরূদ্ধে opensslতুমি একটি ডিরেক্টরি তৈরি করো certs, আপনি উত্পন্ন local.key y local.crt, এবং তারপর আপনি একটি গতিশীল ফাইল যোগ করুন (উদাহরণস্বরূপ dynamic/tls.yml) বিভাগের সাথে tls: এবং রুটগুলি certFile y keyFile ঐ ফাইলগুলোর দিকে ইঙ্গিত করে।

এরপর, আপনি Traefik পরিষেবার সংজ্ঞা আপডেট করুন docker-compose.yml ফোল্ডারটি মাউন্ট করতে ./certs এবং ফোল্ডার ./dynamic কন্টেইনারের ভিতরে, আপনি সুরক্ষিত API সক্রিয় করেন --api.dashboard=true, তুমি এন্ট্রিপয়েন্ট তৈরি করো websecure (--entryPoints.websecure.address=:443) এবং সেখানে TLS সক্ষম করুন --entryPoints.websecure.http.tls=trueআপনি ড্যাশবোর্ড রাউটার এবং রাউটারগুলিকেও লেবেল করুন whoami তাদের ব্যবহারের জন্য websecure এবং আছে tls=true.

একবার এটি চালু হয়ে গেলে, আপনি অ্যাক্সেস করতে পারবেন https://whoami.docker.localhost/ এবং ট্রাফিক প্যানেলে একটি স্ব-স্বাক্ষরিত শংসাপত্র সহ, ব্রাউজারের নিরাপত্তা সতর্কতা গ্রহণ করে। এই অভিজ্ঞতাটি পরবর্তীতে Let's Encrypt এর সাথে উৎপাদনে আপনার যা হবে তার সাথে খুব মিল, তবে পাবলিক DNS সার্ভারের উপর নির্ভর না করেই।

সেরা অনুশীলন, অ্যাপ স্থাপন এবং সাধারণ সমস্যা সমাধান

এই সমস্ত উদাহরণে একটি প্যাটার্ন পুনরাবৃত্তি হয় তা হল ট্রাফিক নতুন অ্যাপ্লিকেশন স্থাপনের কাজকে ব্যাপকভাবে সহজ করে তোলে।একবার আপনার বেস স্ট্যাক হয়ে গেলে (ট্রেফিক + পোর্টেনার + নেটওয়ার্ক) proxy (+ সার্টিফিকেট), একটি নতুন পরিষেবা যোগ করার ক্ষেত্রে সাধারণত নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত থাকে:

প্রকল্পটি ক্লোন করুন অথবা আপনার কপি করুন docker-compose.yml সার্ভারে, একটি সাবডোমেন হোস্টের আইপি ঠিকানায় নির্দেশ করুন a ব্যবহার করে রেকর্ড এ আপনার DNS-এ (উদাহরণস্বরূপ app.tudominio.com), এবং তারপর পরিষেবাটিতে কী লেবেলগুলি যুক্ত করুন: traefik.enable=true, traefik.docker.network=proxy এবং সেই সাবডোমেনের জন্য একটি হোস্ট নিয়ম সহ একটি রাউটার, যা নিরাপদ এন্ট্রিপয়েন্ট নির্দিষ্ট করে websecure এবং সঠিক অভ্যন্তরীণ পোর্ট সহ পরিষেবা.

অনেক টিউটোরিয়ালে দেখা যাবে, উদাহরণস্বরূপ, একটি ছোট অ্যাপের স্থাপনা ফাস্টএপিআই পৃথক: চারটি লেবেল যুক্ত করা হয়, যাতে এটি নেটওয়ার্কের সাথে যুক্ত হয়। proxy বিভাগে networks এর docker-compose.ymlএবং করার পর docker compose up -d অ্যাপটি স্বয়ংক্রিয়ভাবে TLS সক্ষম করে Traefik ড্যাশবোর্ডে উপস্থিত হয়। Traefik এর অটো-ডিসকভারি মানে আপনাকে এর স্ট্যাটিক সেটিংস সামঞ্জস্য করারও প্রয়োজন নেই।

সবকিছু সুষ্ঠুভাবে সম্পন্ন করার জন্য, কয়েকটি বিশদে মনোযোগ দেওয়া গুরুত্বপূর্ণ: একই রাউটার শনাক্তকারী পুনরায় ব্যবহার করবেন না বিভিন্ন অ্যাপে, প্রতিটি রাউটারের সাথে শুধুমাত্র একটি পরিষেবা যুক্ত আছে কিনা তা পরীক্ষা করুন ("অনেক পরিষেবা" ত্রুটি এড়াতে), সামঞ্জস্যপূর্ণ নেটওয়ার্ক নাম ব্যবহার করুন (উদাহরণস্বরূপ, proxy আপনি যে সমস্ত স্ট্যাকগুলি প্রকাশ করতে চান), এবং, যদি আপনি Let's Encrypt ব্যবহার করেন, তাহলে নিশ্চিত করুন যে acme.json এর অনুমতি 600 আছে এবং কনফিগার করা ইমেলটি বৈধ।

সোয়ার্ম পরিবেশে, ট্রাফিক কনফিগারেশনে ডকার সরবরাহকারী অন্তর্ভুক্ত রয়েছে কিনা তাও পরীক্ষা করুন। swarmMode=true y watch=trueএবং পরিষেবাগুলির সীমাবদ্ধতা (উদাহরণস্বরূপ node.role == manager (পোর্টেনারের জন্য) ট্র্যাফিক কোথায় স্থাপন করা হয়েছে তার সাথে বিরোধ করবেন না। ডিবাগ লগগুলি খুবই স্পষ্ট কিন্তু রাউটিং বা TLS সমস্যাগুলি সনাক্ত করার জন্য গুরুত্বপূর্ণ।

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