এজ মাইক্রোগেটওয়ের জন্য ডকার ব্যবহার করা

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

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

পূর্বশর্ত

ডকার কন্টেইনারে এজ মাইক্রোগেটওয়ে চালানোর আগে, আপনাকে অবশ্যই নিম্নলিখিত কাজগুলো করতে হবে:

  • আপনার Apigee অর্গানাইজেশন/এনভায়রনমেন্টের জন্য Edge Microgateway কনফিগার করুন:

    edgemicro configure -o your_org -e your_env -u your_username

    কনফিগারেশন সম্পর্কে আরও বিস্তারিত জানতে, পার্ট ১: এজ মাইক্রোগেটওয়ে কনফিগার করুন দেখুন।

  • কনফিগারেশন ধাপগুলো সম্পন্ন করার পর, কনফিগারেশন ফাইলটি খুঁজে বের করুন। এর ডিফল্ট অবস্থান এখানে:

    $HOME/.edgemicro/your_org-your_env-config.yaml

    যেখানে your_org এবং your_env হলো সেই অর্গানাইজেশন এবং এনভায়রনমেন্ট যা আপনি edgemicro config কমান্ডটি চালানোর সময় ব্যবহার করেছিলেন। একটি ডকার কন্টেইনারে Edge Microgateway চালু করার সময় আপনার এই ফাইলটির প্রয়োজন হবে।

  • নিশ্চিত করুন যে আপনার কাছে edgemicro config কমান্ডটি চালানোর পর প্রাপ্ত key এবং secret credentials আছে। উদাহরণস্বরূপ:

    The following credentials are required to start edge micro
      key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0
      secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
    
  • একটি ডকার কন্টেইনারে Edge Microgateway শুরু করার আগে, অথেনটিকেটেড এপিআই প্রক্সি কল করার জন্য প্রয়োজনীয় Apigee Edge এনটিটিগুলো আপনাকে তৈরি করতে হবে (বা তৈরি করিয়ে নিতে হবে)। এই এনটিটিগুলোর মধ্যে রয়েছে একটি Edge Microgateway-aware প্রক্সি, একটি এপিআই প্রোডাক্ট, একজন ডেভেলপার এবং একটি ডেভেলপার অ্যাপ। সম্পূর্ণ নির্দেশাবলীর জন্য, "Apigee Edge-এ এনটিটি তৈরি করুন" দেখুন।

Edge Micro-কে একটি ডকার কন্টেইনার হিসেবে চালান

  1. Edge Microgateway-এর জন্য ডকার ইমেজটি ডাউনলোড করুন:

    docker pull gcr.io/apigee-microgateway/edgemicro:latest
  2. পরবর্তী ধাপে যাওয়ার আগে, নিশ্চিত হয়ে নিন যে আপনি পূর্বশর্ত বিভাগে উল্লিখিত সমস্ত ধাপ সম্পন্ন করেছেন।

  3. $HOME/.edgemicro তে অবস্থিত Edge Microgateway কনফিগারেশন ফাইলটিকে base64-এনকোড করতে নিম্নলিখিত কমান্ডটি চালান:

    export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`

    যেখানে your_org এবং your_env হলো সেই অর্গানাইজেশন এবং এনভায়রনমেন্ট যা আপনি edgemicro config কমান্ডটি চালানোর সময় ব্যবহার করেছিলেন।

    কমান্ডের চারপাশে ব্যাক-টিক (`) বসাতে মনে রাখবেন। উদাহরণস্বরূপ:

    export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
  4. Edge Microgateway-কে একটি কন্টেইনার হিসেবে চালান। এই কমান্ডটি বেশ কিছু এনভায়রনমেন্ট ভেরিয়েবল সেট করে, যা কন্টেইনার রানটাইম Edge Microgateway চালু করার জন্য ব্যবহার করে:

    chown -R 100:101 ~/.edgemicro/ \
    docker run -P -p 8000:8000 -d --name edgemicro \
    -v /var/tmp:/opt/apigee/logs \
    -e EDGEMICRO_PROCESSES=1 \
    -e EDGEMICRO_ORG=your_org \
    -e EDGEMICRO_ENV=your_env \
    -e EDGEMICRO_KEY=your_key \
    -e EDGEMICRO_SECRET=your_secret \
    -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
    -e "LOG_CONSOLE_OUTPUT_TO_FILE=false" \
    -e SERVICE_NAME=edgemicro \
    --security-opt=no-new-privileges \
    --cap-drop=ALL \
    gcr.io/apigee-microgateway/edgemicro:latest

    প্যারামিটার

      <tr>
        <td><code>SERVICE_NAME</code></td>
        <td>If you are on Kubernetes, this parameter is auto-populated. Otherwise,
          you can set it to anything you wish. If you specify nothing, the service
          name is set to <code>default</code>.</td>
      </tr>
      <tr>
        <tr>
        <td><code>DEBUG</code></td>
        <td>Set to <code>*</code> to enable debugging. </td>
      </tr>
      <tr>
        <td><code>HTTP_PROXY</code>
            <code>HTTPS_PROXY</code></td>
        <td>Use when Edge Microgateway is
          running behind a firewall and the gateway cannot communicate with Apigee
          Edge. For more
          information, see <a href="operation-and-configuration-reference-edge-microgateway#settingupedgemicrogatewaybehindacompanyfirewall">Setting up Edge Microgateway behind a company firewall</a>. 
          <p>For example: <code>HTTP_PROXY=http://10.203.0.1:5187/</code></p></td>
      </tr>
      <tr>
        <td><code>NO_PROXY</code></td>
        <td>A comma delimited list of domains that Edge Microgateway should not proxy to. 
          For more information, see <a href="operation-and-configuration-reference-edge-microgateway#settingupedgemicrogatewaybehindacompanyfirewall">Setting up Edge Microgateway behind a company firewall</a>.
          <p>For example: <code>localhost,127.0.0.1,localaddress,.localdomain.com</code></p></td>
      </tr>
      <tr>
      <tr>
        <tr>
        <td><code>NODE_EXTRA_CA_CERTS</code></td>
        <td>(Optional) Use this parameter if you are using a CA that's not trusted
          by default by Node.js. Set the value of this parameter to the path to a
          file containing one or more trusted certificates in PEM format. For
          details, see <a href="#tls_certificates">TLS certificates</a>.</td>
      </tr>
      <tr>
        <td><code>--security-opt</code></td>
        <td>(Optional) Sets desired Docker security options. See <a href="https://docs.docker.com/engine/reference/run/#security-configuration">Security configuration</a> in the Docker documentation.</td>
      </tr>
      <tr>
        <td><code>--cap-drop</code></td>
        <td>(Optional) Sets limits on Linux capabilities permitted in the container. See <a href="https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities">Runtime privilege and Linux capabilities</a> in the Docker documentation.</td>
      </tr>
    </tbody>
    

    প্যারামিটার বর্ণনা
    -P হোস্টের কাছে সমস্ত উন্মুক্ত পোর্ট প্রকাশ করুন। ডকার রান রেফারেন্সও দেখুন।
    -p একটি একক পোর্ট বা পোর্টসমূহের একটি পরিসর স্পষ্টভাবে ম্যাপ করুন। আরও দেখুন ডকার রান রেফারেন্স
    -d ডিটাচড মোডে চালান। ডকার রান রেফারেন্সও দেখুন।
    -v, -- volume একটি ভলিউম মাউন্ট নির্দিষ্ট করে। মনে রাখবেন যে, যদি আপনি ডকার কন্টেইনারে TLS ব্যবহার করার জন্য Edge Microgateway কনফিগার করেন, তাহলে লগ ফাইল ডিরেক্টরি মাউন্ট করার সময় আপনাকে অবশ্যই 8443 পোর্টটি উন্মুক্ত করতে হবে। আরও দেখুন VOLUME [শেয়ার্ড ফাইলসিস্টেম] । আরও দেখুন ডকার কন্টেইনারে TLS ব্যবহার
    -w, -- workdir (ঐচ্ছিক) সেই ডিরেক্টরির পথ নির্দিষ্ট করে যেখানে edgemicro.sock এবং edgemicro.pid ফাইলগুলো তৈরি করা হবে। আপনি root edgemicro ফাইলের নামটি পরিবর্তন করতে পারবেন না। ডিফল্ট হিসেবে বর্তমান ওয়ার্কিং ডিরেক্টরির পথ ব্যবহৃত হয়।

    উদাহরণ:

    docker run -P -p 8000:8000 -d -w /tmp --name edgemicro 
    ...
    EDGEMICRO_ORG Edge Microgateway কনফিগার করতে আপনি যে Apigee অর্গানাইজেশনটি ব্যবহার করেছেন তার নাম।
    EDGEMICRO_ENV Edge Microgateway কনফিগার করতে আপনি যে Apigee এনভায়রনমেন্টটি ব্যবহার করেছেন তার নাম।
    EDGEMICRO_PROCESSES শুরু করার জন্য প্রসেসের সংখ্যা।
    EDGEMICRO_KEY আপনি Edge Microgateway কনফিগার করার সময় যে কী-টি ফেরত পেয়েছেন।
    EDGEMICRO_SECRET আপনি Edge Microgateway কনফিগার করার সময় গোপনীয় তথ্যটি ফেরত পেয়েছেন।
    EDGEMICRO_CONFIG একটি ভেরিয়েবল, যা বেস৬৪-এনকোডেড এজ মাইক্রোগেটওয়ে কনফিগারেশন ফাইল ধারণ করে।
    LOG_CONSOLE_OUTPUT_TO_FILE (বুলিয়ান) লগ আউটপুট কোথায় পাঠানো হবে তা নির্দিষ্ট করার সুযোগ দেয়। লগ ফাইলের অপশন নির্দিষ্ট করা দেখুন।

    উদাহরণস্বরূপ:

    chown -R 100:101 ~/.edgemicro/ 
    docker run -P -p 8000:8000 -d --name edgemicro
    -v /var/tmp:/opt/apigee/logs
    -e EDGEMICRO_PROCESS=1
    -e EDGEMICRO_ORG=docs
    -e EDGEMICRO_ENV=test
    -e EDGEMICRO_KEY=d9c34e1aff68ed969273b016699eabf48780e4f652242e72fc88a23e21252cb0
    -e EDGEMICRO_SECRET=3bc95a71c86a3c8ce04137fbcb788158731t51dfc6cdec13b7c05aa0bd969430
    -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG"
    -e SERVICE_NAME=edgemicro
    --security-opt=no-new-privileges
    --cap-drop=ALL
    gcr.io/apigee-microgateway/edgemicro

    1. কন্টেইনারটি চলছে কিনা তা পরীক্ষা করতে:

      docker ps

      আপনি নিম্নলিখিতের অনুরূপ আউটপুট দেখতে পাবেন:

      CONTAINER ID    IMAGE         COMMAND                CREATED          STATUS          PORTS                                             NAMES
      8b92e082ea9c    edgemicro    "/tmp/entrypoint.sh"   12 minutes ago   Up 12 minutes    0.0.0.0:8000->8000/tcp, 0.0.0.0:32775->8443/tcp    edgemicro
      

    লগ ফাইল আউটপুট বিকল্পগুলি নির্দিষ্ট করা

    Edge Microgateway-এর `to_console` কনফিগারেশন প্যারামিটারটি আপনাকে লগ ফাইলের পরিবর্তে স্ট্যান্ডার্ড আউটপুটে লগ তথ্য পাঠানোর বিকল্প দেয়। আপনি যদি একটি ডকার কন্টেইনারে Edge Microgateway চালানোর ধাপগুলো অনুসরণ করেন, তাহলে কন্টেইনারটি ডিফল্টরূপে stdout এবং error আউটপুটকে কন্টেইনারের ভেতরে থাকা ${APIGEE_ROOT}/logs/edgemicro.log লোকেশনের একটি ফাইলে রিডাইরেক্ট করে।

    edgemicro.log এ লগ তথ্য পাঠানো বন্ধ করতে, কন্টেইনারটি চালানোর সময় LOG_CONSOLE_OUTPUT_TO_FILE ভেরিয়েবলটি ব্যবহার করুন।

    নিম্নলিখিত সারণিতে to_console সাথে LOG_CONSOLE_OUTPUT_TO_FILE ব্যবহার করার সময় লগ আউটপুটের আচরণ বর্ণনা করা হয়েছে:

    to_console: true

    LOG_CONSOLE_OUTPUT_TO_FILE=false

    to_console: true

    LOG_CONSOLE_OUTPUT_TO_FILE=true

    to_console: false

    LOG_CONSOLE_OUTPUT_TO_FILE=true

    • লগ ফাইলগুলি পরিচালনা (Managing log files) অংশে বর্ণিত পদ্ধতি অনুসারে লগগুলি Edge Microgateway লগ ফাইলে পাঠানো হবে।
    • লগগুলো edgemicro.log ফাইলে পাঠানো হবে।

    একটি এপিআই কল পরীক্ষা করা হচ্ছে

    কন্টেইনারে Edge Microgateway চালু করার পর, আপনি এতে API কল করতে পারবেন। উদাহরণস্বরূপ, যদি আপনার API-এর বেসপ্যাথ /hello হয়:

    http://localhost:8000/hello

    নমুনা আউটপুট:

    {"error":"missing_authorization","error_description":"Missing Authorization header"}
    

    আপনি যদি এই প্রতিক্রিয়াটি দেখেন, তার মানে হলো Edge Microgateway সফলভাবে API কলটি পরিচালনা করেছে। তবে, ডিফল্টরূপে, Edge Microgateway প্রমাণীকরণের জন্য একটি API কী চায়। পরবর্তী অংশে, আপনি একটি বৈধ API কী দিয়ে API-টি পরীক্ষা করবেন।

    বৈধ এপিআই কী দিয়ে একটি এপিআই পরীক্ষা করুন

    Edge UI-তে, আপনার পূর্বে তৈরি করা ডেভেলপার অ্যাপটিতে যান। ডেভেলপার অ্যাপ পেজে, কনজিউমার কী (Consumer Key) দেখান এবং এটি কপি করুন। এই ভ্যালুটিই হলো এপিআই কী (API key)। অথেনটিকেটেড এপিআই কল করার জন্য আপনি এই কী-টি ব্যবহার করবেন।

    নিম্নলিখিতভাবে x-api-key হেডার ব্যবহার করে API-কে কল করুন। আপনি ডেভেলপার অ্যাপ থেকে যে কনজিউমার কী (Consumer Key) ভ্যালুটি কপি করেছেন, সেটিই হলো API কী। ডিফল্টরূপে, Edge Microgateway আশা করে যে আপনি x-api-key নামক একটি হেডারে কী-টি পাস করবেন, যেমনটা এখানে দেখানো হয়েছে:

    curl -i http://localhost:8000/hello -H "x-api-key:apikey"

    উদাহরণস্বরূপ:

    curl -i http://localhost:8000/hello -H "x-api-key:PydUKRDGIXRqF2xh4usn1FLHbhGKVIz"

    আপনি যদি এপিআই কী এবং ওঅথ টোকেন ব্যবহার করে এজ মাইক্রোগেটওয়ের মাধ্যমে প্রমাণীকৃত এপিআই কল করা সম্পর্কে আরও জানতে চান, তাহলে পর্ব ৪: সুরক্ষিত এজ মাইক্রোগেটওয়ে দেখুন।

    স্টপিং এজ মাইক্রোগেটওয়ে

    Edge Microgateway বন্ধ করতে নিম্নলিখিত ডকার কমান্ডটি ব্যবহার করুন:

    docker stop edgemicro
    

    এজ মাইক্রোগেটওয়ে পুনরায় চালু করা হচ্ছে

    Edge Microgateway বন্ধ করার পর, আপনি এই ডকার কমান্ডটি দিয়ে এটি পুনরায় চালু করতে পারেন:

    docker start edgemicro
    

    ডকার কন্টেইনারে TLS ব্যবহার করা

    এই বিভাগে একটি ডকার কন্টেইনারে চলমান এজ মাইক্রোগেটওয়ের জন্য টিএলএস কীভাবে কনফিগার করতে হয় তা ব্যাখ্যা করা হয়েছে। আপনি এজ মাইক্রোগেটওয়ে সার্ভারকে ইনকামিং রিকোয়েস্টের (নর্থবাউন্ড ডিরেকশন) জন্য টিএলএস ব্যবহার করতে কনফিগার করতে পারেন, এবং টার্গেট এন্ডপয়েন্টগুলিতে আউটগোয়িং রিকোয়েস্টের (সাউথবাউন্ড ডিরেকশন) জন্য এজ মাইক্রোগেটওয়েকে একটি টিএলএস ক্লায়েন্ট হিসেবে কনফিগার করতে পারেন।

    সার্টিফিকেট ফাইলগুলো কোথায় রাখতে হবে

    Edge Microgateway চালিত Docker কন্টেইনারটির /opt/apigee/.edgemicro তে একটি মাউন্ট পয়েন্ট রয়েছে। যখন আপনি TLS সার্টিফিকেট ব্যবহার করার জন্য Edge Microgateway কনফিগার করেন, তখন আপনি সেই মাউন্ট পয়েন্টে সার্টিফিকেট ফাইলগুলো উপলব্ধ করতে পারেন এবং Edge Microgateway কনফিগারেশন ফাইলে সেগুলোর উল্লেখ করতে পারেন। এই কনফিগারেশন ফাইলটি সাধারণত $HOME/.edgemicro ডিরেক্টরিতে থাকে এবং এর নাম হয় your_org - your_env -config.yaml । উদাহরণস্বরূপ:

    ...
    edgemicro:
      ssl:
       key: /opt/apigee/.edgemicro/southbound/tls.key
       cert: /opt/apigee/.edgemicro/southbound/tls.crt
    ...
    

    Node.js দ্বারা বিশ্বস্ত নয় এমন একটি CA ব্যবহার করা

    আপনি যদি এমন কোনো সার্টিফিকেট অথরিটি (CA) ব্যবহার করেন যা Node.js দ্বারা ডিফল্টভাবে বিশ্বস্ত নয় (যেমনটি সেলফ-সাইন্ড সার্টিফিকেটের ক্ষেত্রে হয়), তাহলে কন্টেইনারটি চালানোর সময় NODE_EXTRA_CA_CERTS প্যারামিটারটি ব্যবহার করার কথা বিবেচনা করতে পারেন।

    এই প্যারামিটারটিকে PEM ফরম্যাটে থাকা এক বা একাধিক বিশ্বস্ত সার্টিফিকেট সম্বলিত একটি ফাইলের পাথে সেট করুন। এই প্যারামিটারটি কীভাবে ব্যবহৃত হয় তা দেখতে, ' How to configure northbound TLS' এবং 'How to configure southbound TLS' উদাহরণগুলো দেখুন।

    উদাহরণস্বরূপ:

    chown -R 100:101 ~/.edgemicro/ \
    docker run -P -p 8443:8443 -d --name edgemicro \
    -v $HOME/.edgemicro:/opt/apigee/.edgemicro \
    -v $HOME/.edgemicro:/opt/apigee/logs \
    -e NODE_EXTRA_CA_CERTS=/opt/apigee/.edgemicro/rootca.pem \
    -e EDGEMICRO_PORT=8443 \
    -e EDGEMICRO_ORG=docs \
    -e EDGEMICRO_ENV=test \
    -e EDGEMICRO_KEY=ac36574905fb54fdae65fc5433e831bec2680efb98220a355f2e917e52973c \
    -e EDGEMICRO_SECRET=aac81dff6c326eaa222d53c15c8841fa78ea863bf4472568c9ce2d80a3bc56 \
    -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
    --link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
    

    আরও দেখুন Edge Micro-কে একটি Docker কন্টেইনার হিসেবে চালান

    TLS যাচাইকরণ বন্ধ করা

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

    1. https://github.com/apigee-internal/microgateway থেকে Edge Microgateway সোর্স রিপোজিটরিটি ক্লোন বা ডাউনলোড করুন।

    2. সোর্স কোড ডিরেক্টরিতে থাকা microgateway/kubernetes/docker/edgemicro ডিরেক্টরিতে cd

      উদাহরণস্বরূপ:

      cd $HOME/git/microgateway/kubernetes/docker/edgemicro
      
    3. entrypoint.sh ফাইলটি খুলুন এবং NODE_TLS_REJECT_UNAUTHORIZED এনভায়রনমেন্ট ভেরিয়েবলটি গ্রহণ করার জন্য কোডটি পরিবর্তন করুন। পরবর্তীতে, যখন আপনি কন্টেইনারটি চালাবেন, তখন এই ভেরিয়েবলটির জন্য একটি মান নির্দিষ্ট করে দেবেন।

    4. ডকার কন্টেইনারটি তৈরি করুন:

      docker build -t edgemicro .
      
    5. যখন আপনি কন্টেইনারটি চালাবেন, তখন -e NODE_TLS_REJECT_UNAUTHORIZED = 1 অপশনটি নির্দিষ্ট করুন। উদাহরণস্বরূপ:

    chown -R 100:101 ~/.edgemicro/ \
    docker run -P -p 8443:8443 -d --name edgemicro \
    -v $HOME/.edgemicro:/opt/apigee/.edgemicro \
    -v $HOME/.edgemicro:/opt/apigee/logs \
    -e NODE_TLS_REJECT_UNAUTHORIZED = 1 \
    -e EDGEMICRO_PORT=8443 \
    -e EDGEMICRO_ORG=docs \
    -e EDGEMICRO_ENV=test \
    -e EDGEMICRO_KEY=ac36574905fb54fdae65fc5433e831bec2680efb98220a355f2e917e52973c \
    -e EDGEMICRO_SECRET=aac81dff6c326eaa222d53c15c8841fa78ea863bf4472568c9ce2d80a3bc56 \
    -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
    --link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
    

    উদাহরণ: নর্থবাউন্ড TLS কীভাবে কনফিগার করবেন

    এই বিভাগে এজ মাইক্রোগেটওয়ে সার্ভারে কীভাবে একটি নর্থবাউন্ড (ইনকামিং) TLS সংযোগ স্থাপন করতে হয় তা ব্যাখ্যা করা হয়েছে। নর্থবাউন্ড TLS ক্লায়েন্টদের এজ মাইক্রোগেটওয়েতে API কল করার সময় HTTPS ব্যবহার করার সুযোগ দেয়। নীচের উদাহরণটিতে সেলফ-সাইন্ড সার্টিফিকেট ব্যবহার করা হয়েছে।

    ১. প্রাথমিক সেটআপের ধাপসমূহ

    1. আপনার সিস্টেমে openssl.cnf ফাইলটি খুঁজুন। উদাহরণস্বরূপ, /etc/ssl/openssl.cnf
    2. সম্পাদনার জন্য opensssl.cnf ফাইলটি খুলুন।
    3. আপনার কনফিগারেশন ফাইলে req_extensions গুলো আছে কিনা তা নিশ্চিত করুন। উদাহরণস্বরূপ, আপনার ফাইলে নিম্নলিখিত তথ্যের মতো তথ্য থাকা উচিত:

      [ req ]
      ...
      req_extensions          = v3_req
      ...
      
      [ v3_req ]
      extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection
      basicConstraints = CA:FALSE
      keyUsage = nonRepudiation, digitalSignature, keyEncipherment
      
    4. সঠিক SNI অ্যাট্রিবিউট তৈরি করতে openssl.cnf এ নিম্নলিখিত স্ট্যানজাটি যোগ করুন:

      [ alt_names ]
      DNS.1 = www.example.com
      DNS.2 = example.com
      DNS.3 = localhost
      DNS.4 = localhost.localdomain
      DNS.5 = 127.0.0.1
      DNS.6 = ::1
      DNS.7 = fe80::1
      

      opensssl.cnf ফাইলের উদাহরণ:

      [ req ]
      distinguished_name      = req_distinguished_name
      attributes              = req_attributes
      req_extensions          = v3_req
      
      [ v3_req ]
      extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection
      basicConstraints = CA:FALSE
      keyUsage = nonRepudiation, digitalSignature, keyEncipherment
      
      [ req_distinguished_name ]
      countryName                     = Country Name (2 letter code)
      countryName_min                 = 2
      countryName_max                 = 2
      stateOrProvinceName             = State or Province Name (full name)
      localityName                    = Locality Name (eg, city)
      0.organizationName              = Organization Name (eg, company)
      organizationalUnitName          = Organizational Unit Name (eg, section)
      commonName                      = Common Name (eg, fully qualified host name)
      commonName_max                  = 64
      emailAddress                    = Email Address
      emailAddress_max                = 64
      
      [ req_attributes ]
      challengePassword               = A challenge password
      challengePassword_min           = 4
      challengePassword_max           = 20
      
      [ alt_names ]
      DNS.1 = www.example.com
      DNS.2 = example.com
      DNS.3 = localhost
      DNS.4 = localhost.localdomain
      DNS.5 = 127.0.0.1
      DNS.6 = ::1
      DNS.7 = fe80::1
      
    5. আপনি যদি আগে থেকে Edge Microgateway ইনিশিয়ালাইজ এবং কনফিগার না করে থাকেন, তবে তা করার জন্য পূর্বশর্ত (Prerequisites) বিভাগে দেওয়া ধাপগুলো অনুসরণ করুন। এটি সম্পন্ন হলে, আপনার একটি Edge Microgateway-aware প্রক্সি, একটি API প্রোডাক্ট, একটি ডেভেলপার এবং একটি ডেভেলপার অ্যাপ তৈরি হয়ে যাবে। এছাড়াও, আপনাকে edgemicro configure কমান্ডটি চালাতে হবে এবং একটি key ও secret পেতে হবে।

    ২. স্ব-স্বাক্ষরিত সার্টিফিকেট তৈরি করুন

    এরপরে, TLS স্থাপনের জন্য প্রয়োজনীয় সার্টিফিকেট এবং কীগুলো তৈরি করুন:

    1. $HOME/.edgemicro ডিরেক্টরিতে cd
    2. নিম্নলিখিত ব্যাশ স্ক্রিপ্টটি তৈরি করুন। আপনি আপনার ইচ্ছামতো এর নাম দিতে পারেন। উদাহরণস্বরূপ: keygen.sh

      #!/bin/bash
      # generate ca
      openssl genrsa -out rootca.key 2048
      openssl req -x509 -new -nodes -key rootca.key -sha256 -days 1024 -out rootca.pem
      # generate key
      openssl genrsa -out tls.key 2048
      openssl req -new -key tls.key -out tls.csr
      # sign cert
      openssl x509 -req -in tls.csr -CA rootca.pem -CAkey rootca.key -CAcreateserial -out tls.crt -days 1024 -sha256 -extensions 'v3_req' -extfile path/openssl.cnf
      
    3. bash ফাইলে openssl.cnf ফাইলের পাথটি সঠিক আছে কিনা, তা নিশ্চিত করুন।

    4. ব্যাশ ফাইলটি চালান। আপনার কাছে সার্টিফিকেটের তথ্য চাওয়া হবে। কমন নেম (Common Name) হিসেবে অবশ্যই localhost ব্যবহার করবেন।

    5. নিম্নলিখিত ফাইলগুলি তৈরি হয়েছে কিনা তা পরীক্ষা করুন:

      • rootca.key
      • rootca.pem
      • tls.key
      • tls.csr
      • rootca.srl
      • tls.crt

    ৩. Edge Microgateway কনফিগারেশন ফাইলটি সম্পাদনা করুন

    1. একটি এডিটরে Edge Micro কনফিগ ফাইলটি খুলুন। উদাহরণস্বরূপ:

      vi $HOME/.edgemicro/myorg-test-config.yaml
      
    2. edgemicro স্ট্যানজাটি নিম্নরূপভাবে সম্পাদনা করুন। লক্ষ্য করুন যে আপনি port এবং ssl অ্যাট্রিবিউটগুলিতে পরিবর্তন করছেন:

      edge_config:
      ...
      edgemicro:
        port: 8443
        max_connections: 1000
        config_change_poll_interval: 600
        ssl:
          key: /opt/apigee/.edgemicro/tls.key
          cert: /opt/apigee/.edgemicro/tls.crt
          passphrase: admin123
          rejectUnauthorized: true
          requestCert: false
        logging:
      ...
      
    3. $HOME/.edgemicro তে অবস্থিত Edge Microgateway কনফিগারেশন ফাইলটিকে base64-এনকোড করতে নিম্নলিখিত কমান্ডটি চালান:

      export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`

      যেখানে your_org এবং your_env হলো সেই অর্গানাইজেশন এবং এনভায়রনমেন্ট যা আপনি edgemicro config কমান্ডটি চালানোর সময় ব্যবহার করেছিলেন।

      কমান্ডের চারপাশে ব্যাক-টিক (`) বসাতে মনে রাখবেন। উদাহরণস্বরূপ:

      export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`

    আরও দেখুন, Edge Micro-কে একটি ডকার কন্টেইনার হিসেবে চালান

    ৪. কন্টেইনারটি চালান।

    1. Edge Microgateway সহ Docker কন্টেইনারটি চালানোর জন্য নিম্নলিখিত কমান্ডটি চালান:

      chown -R 100:101 ~/.edgemicro/ \
      docker run -P -p 8443:8443 -d --name edgemicro \
      -v path_to_your_edgemicro_dir:/opt/apigee/.edgemicro \
      -v path_to_your_logs_dir:/opt/apigee/logs \
      -e NODE_EXTRA_CA_CERTS=/opt/apigee/.edgemicro/rootca.pem \
      -e EDGEMICRO_PORT=8443 \
      -e EDGEMICRO_ORG=$EDGEMICRO_ORG \
      -e EDGEMICRO_ENV=$EDGEMICRO_ENV \
      -e EDGEMICRO_KEY=$EDGEMICRO_KEY \
      -e EDGEMICRO_SECRET=$EDGEMICRO_SECRET \
      -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
      gcr.io/apigee-microgateway/edgemicro:latest
      
    2. কমান্ডে ব্যবহৃত নিম্নলিখিত প্যারামিটারগুলো লক্ষ্য করুন; এগুলো "Run Edge Micro as a Docker container" অংশে বর্ণিত মৌলিক কমান্ড থেকে ভিন্ন।

      • port 8443 এ সেট করা আছে।
      • কী এবং সার্টিফিকেট ফাইলগুলো মাউন্ট করার জন্য ভলিউম মাউন্ট ব্যবহার করা হয়।
      • NODE_EXTRA_CA_CERTS ভেরিয়েবলটি একটি কাস্টম CA যোগ করতে ব্যবহৃত হয় (যেমনটি সেলফ-সাইন্ড সার্টিফিকেটের ক্ষেত্রে প্রয়োজন হয়)।

    ৫. TLS কনফিগারেশন পরীক্ষা করুন

    1. সেটআপটি পরীক্ষা করার জন্য নিম্নলিখিত cURL কমান্ডটি চালান। কমান্ডে আপনার বেসপাথ এবং এপিআই কী প্রতিস্থাপন করুন। নিম্নলিখিত উদাহরণটি ধরে নেয় যে আপনি সেই ডিরেক্টরিতে আছেন যেখানে rootca.pem অবস্থিত এবং আপনার তৈরি করা প্রক্সির বেসপাথ হল /hello :

      curl -v https://localhost:8443/hello --cacert rootca.pem \
      -H "x-api-key: Az82fdnfONVCOOE4NKhajxAboDgA3FAo"
      
    2. বিস্তারিত cURL আউটপুটে TLS হ্যান্ডশেকিংয়ের প্রতিটি ধাপ দেখানো হয়। যদি আপনি একটি HTTP 200 রেসপন্স দেখতে পান, তাহলে কনফিগারেশনটি সফল হয়েছে:

      *   Trying ::1...ey:Az82fdnfONVCOOE4NKhajxAboDgA3FAo"
      * TCP_NODELAY set
      * Connected to localhost (::1) port 8443 (#0)
      * ALPN, offering h2
      * ALPN, offering http/1.1
      * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
      * successfully set certificate verify locations:
      *   CAfile: rootca.pem
        CApath: none
      * TLSv1.2 (OUT), TLS handshake, Client hello (1):
      * TLSv1.2 (IN), TLS handshake, Server hello (2):
      * TLSv1.2 (IN), TLS handshake, Certificate (11):
      * TLSv1.2 (IN), TLS handshake, Server key exchange (12):
      * TLSv1.2 (IN), TLS handshake, Server finished (14):
      * TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
      * TLSv1.2 (OUT), TLS change cipher, Client hello (1):
      * TLSv1.2 (OUT), TLS handshake, Finished (20):
      * TLSv1.2 (IN), TLS change cipher, Client hello (1):
      * TLSv1.2 (IN), TLS handshake, Finished (20):
      * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
      * ALPN, server accepted to use http/1.1
      * Server certificate:
      *  subject: C=US; ST=CO; L=Boulder; O=Docs; OU=Docs; CN=localhost; emailAddress=docs@apigee.com
      *  start date: Dec 14 22:35:28 2018 GMT
      *  expire date: Oct  3 22:35:28 2021 GMT
      *  common name: localhost (matched)
      *  issuer: C=US; ST=CO; L=Boulder; O=Docs; OU=Docs; CN=localhost; emailAddress=docs@apigee.com
      *  SSL certificate verify ok.
      > GET /hello HTTP/1.1
      > Host: localhost:8443
      > User-Agent: curl/7.54.0
      > Accept: */*
      > x-api-key:Az82fdnfaONVCOE4NKhajxAboDA3FAo
      >
      < HTTP/1.1 200 OK
      < x-powered-by: Apigee
      < access-control-allow-origin: *
      < x-frame-options: ALLOW-FROM RESOURCE-URL
      < x-xss-protection: 1
      < x-content-type-options: nosniff
      < content-type: text/plain; charset=utf-8
      < etag: W/"d-GHB1ZrJKk/wdVTdB/jgBsw"
      < date: Fri, 14 Dec 2018 22:43:13 GMT
      < via: 1.1 google
      < alt-svc: clear
      < x-response-time: 1325
      < Connection: keep-alive
      < Transfer-Encoding: chunked
      <
      * Connection #0 to host localhost left intact
      Hello, Guest!
      

    উদাহরণ: সাউথবাউন্ড TLS কীভাবে কনফিগার করবেন

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

    ১. প্রাথমিক সেটআপের ধাপসমূহ

    1. আপনার সিস্টেমে openssl.cnf ফাইলটি খুঁজুন। উদাহরণস্বরূপ, /etc/ssl/openssl.cnf
    2. সম্পাদনার জন্য opensssl.cnf ফাইলটি খুলুন।
    3. আপনার কনফিগারেশন ফাইলে req_extensions গুলো আছে কিনা তা নিশ্চিত করুন। উদাহরণস্বরূপ, আপনার ফাইলে নিম্নলিখিত তথ্যের মতো তথ্য থাকা উচিত:

      [ req ]
      ...
      req_extensions          = v3_req
      ...
      
      [ v3_req ]
      extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection
      basicConstraints = CA:FALSE
      keyUsage = nonRepudiation, digitalSignature, keyEncipherment
      
    4. সঠিক SNI অ্যাট্রিবিউট তৈরি করতে openssl.cnf এ নিম্নলিখিত স্ট্যানজাটি যোগ করুন:

      [ alt_names ]
      DNS.1 = helloworld
      DNS.2 = localhost
      DNS.3 = localhost.localdomain
      DNS.4 = 127.0.0.1
      DNS.5 = ::1
      DNS.6 = fe80::1
      

      opensssl.cnf ফাইলের উদাহরণ:

      [ req ]
      distinguished_name      = req_distinguished_name
      attributes              = req_attributes
      req_extensions          = v3_req
      
      [ v3_req ]
      extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection
      basicConstraints = CA:FALSE
      keyUsage = nonRepudiation, digitalSignature, keyEncipherment
      
      [ req_distinguished_name ]
      countryName                     = Country Name (2 letter code)
      countryName_min                 = 2
      countryName_max                 = 2
      stateOrProvinceName             = State or Province Name (full name)
      localityName                    = Locality Name (eg, city)
      0.organizationName              = Organization Name (eg, company)
      organizationalUnitName          = Organizational Unit Name (eg, section)
      commonName                      = Common Name (eg, fully qualified host name)
      commonName_max                  = 64
      emailAddress                    = Email Address
      emailAddress_max                = 64
      
      [ req_attributes ]
      challengePassword               = A challenge password
      challengePassword_min           = 4
      challengePassword_max           = 20
      
      [ alt_names ]
      DNS.1 = helloworld
      DNS.2 = localhost
      DNS.3 = localhost.localdomain
      DNS.4 = 127.0.0.1
      DNS.5 = ::1
      DNS.6 = fe80::1
      
    5. edgemicro configure কমান্ডটি চালান:

      edgemicro configure -o your_org -e your_env -u your_username

      কনফিগারেশন সম্পর্কে আরও বিস্তারিত জানতে, পার্ট ১: এজ মাইক্রোগেটওয়ে কনফিগার করুন দেখুন।

    6. edgemicro configure থেকে প্রাপ্ত key এবং secret ক্রেডেনশিয়ালগুলো কপি করুন। কন্টেইনারটি চালানোর জন্য আপনার এই মানগুলো প্রয়োজন হবে। উদাহরণস্বরূপ:

      The following credentials are required to start edge micro
        key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0
        secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
      

    ২. একটি Node.js টার্গেট অ্যাপ্লিকেশন তৈরি করুন।

    1. .edgemicro ডিরেক্টরিতে cd

    2. নিম্নলিখিত ব্যাশ স্ক্রিপ্টটি তৈরি করুন। আপনি আপনার ইচ্ছামতো এর নাম দিতে পারেন। উদাহরণস্বরূপ: keygen.sh

      #!/bin/bash
      # generate ca
      openssl genrsa -out rootca.key 2048
      openssl req -x509 -new -nodes -key rootca.key -sha256 -days 1024 -out rootca.pem
      # generate key
      openssl genrsa -out tls.key 2048
      openssl req -new -key tls.key -out tls.csr
      # sign cert
      openssl x509 -req -in tls.csr -CA rootca.pem -CAkey rootca.key -CAcreateserial -out tls.crt -days 1024 -sha256 -extensions 'v3_req' -extfile path/openssl.cnf
      
    3. bash ফাইলে openssl.cnf ফাইলের পাথটি সঠিক আছে কিনা, তা নিশ্চিত করুন।

    4. ব্যাশ ফাইলটি চালান। আপনাকে সার্টিফিকেটের তথ্য দিতে বলা হবে। কমন নেম (Common Name) হিসেবে অবশ্যই hellworld ব্যবহার করবেন।

    5. নিম্নলিখিত ফাইলগুলি তৈরি হয়েছে কিনা তা পরীক্ষা করুন:

      • rootca.key
      • rootca.pem
      • tls.key
      • tls.csr
      • rootca.srl
      • tls.crt
    6. server.js নামে একটি নতুন ফাইল তৈরি করুন।

      'use strict';
      
      const express = require('express');
      const https = require('https');
      const fs = require('fs');
      
      const options = {
        key: fs.readFileSync("tls.key"),
        cert: fs.readFileSync("tls.crt")
      };
      
      // Constants
      const PORT = 9443;
      const HOST = '0.0.0.0';
      
      // App
      const app = express();
      app.get('/', (req, res) => {
        res.send('Hello world\n');
      });
      
      https.createServer(options, app).listen(PORT);
      
    7. server.js ফাইলের ডিরেক্টরিতেই একটি package.json ফাইল তৈরি করুন। উদাহরণস্বরূপ:

      {
        "name": "helloworld",
        "version": "1.0.0",
        "description": "",
        "main": "server.js",
        "scripts": {
          "test": "echo \"Error: no test specified\" && exit 1",
          "start": "node server.js"
        },
        "author": "",
        "license": "ISC",
        "dependencies": {
          "express": "^4.16.4",
          "fs": "0.0.1-security",
          "https": "^1.0.0"
        }
      }
      
    8. ডিপেন্ডেন্সিগুলো পেতে npm install চালান।

    9. server.js ফাইলটি যে ডিরেক্টরিতে আছে, সেই একই ডিরেক্টরিতে একটি নতুন Dockerfile তৈরি করুন, যেখানে WORKDIR হলো আপনার Node.js অ্যাপের রুটের পাথ:

      FROM node:8-alpine
      WORKDIR path-to-your-node-app
      COPY package*.json ./
      
      RUN npm install
      COPY . .
      EXPOSE 9443
      CMD [ "npm", "start" ]
      
    10. ডকার ইমেজটি তৈরি করুন:

      docker build -t helloworld . 
      
    11. নমুনা অ্যাপটি চালু করুন:

      docker run -P -p 9443:9443 --name helloworld helloworld
      

    ৩. Apigee Edge-এ এনটিটি তৈরি করুন

    1. এই সেটিংস ব্যবহার করে একটি Edge Microgateway-aware প্রক্সি তৈরি করুন। আরও তথ্যের জন্য, Edge-এ একটি Edge Microgateway-aware API প্রক্সি তৈরি করুন দেখুন।

      • প্রক্সি নাম: edgemicro_local
      • সংশোধন: 1
      • বেসপাথ: /local
      • লক্ষ্য: https://helloworld:9443
    2. একটি এপিআই পণ্য তৈরি করুন। বিস্তারিত জানতে, ‘পণ্য তৈরি করুন’ দেখুন।

    3. একজন ডেভেলপার তৈরি করুন। বিস্তারিত জানতে, ‘একজন ডেভেলপার তৈরি করুন’ দেখুন।

    4. একটি ডেভেলপার অ্যাপ তৈরি করুন। বিস্তারিত জানতে, ‘ডেভেলপার অ্যাপ তৈরি করুন’ দেখুন।

    ৪. কন্টেইনারটি চালান।

    1. একটি এডিটরে Edge Micro কনফিগ ফাইলটি খুলুন। উদাহরণস্বরূপ:

      vi $HOME/.edgemicro/myorg-test-config.yaml
      
    2. edgemicro স্ট্যানজাটি নিম্নরূপভাবে সম্পাদনা করুন। লক্ষ্য করুন যে আপনি port এবং ssl অ্যাট্রিবিউটগুলিতে পরিবর্তন করছেন:

      edge_config:
      ...
      edgemicro:
        port: 8443
        max_connections: 1000
        config_change_poll_interval: 600
        ssl:
          key: /opt/apigee/.edgemicro/tls.key
          cert: /opt/apigee/.edgemicro/tls.crt
          passphrase: admin123
          rejectUnauthorized: true
          requestCert: false
        logging:
      ...
      
    3. $HOME/.edgemicro তে অবস্থিত Edge Microgateway কনফিগারেশন ফাইলটিকে base64-এনকোড করতে নিম্নলিখিত কমান্ডটি চালান:

      export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`

      যেখানে your_org এবং your_env হলো সেই অর্গানাইজেশন এবং এনভায়রনমেন্ট যা আপনি edgemicro config কমান্ডটি চালানোর সময় ব্যবহার করেছিলেন।

      কমান্ডের চারপাশে ব্যাক-টিক (`) বসাতে মনে রাখবেন। উদাহরণস্বরূপ:

      export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
    4. ডকার কন্টেইনারে এজ মাইক্রোগেটওয়ে চালু করতে নিম্নলিখিত কমান্ডটি চালান।

      chown -R 100:101 ~/.edgemicro/ \
      docker run -P -p 8443:8443 -d --name edgemicro \
      -v path_to_your_edgemicro_dir:/opt/apigee/.edgemicro \
      -v path_to_your_logs_dir:/opt/apigee/logs \
      -e EDGEMICRO_PORT=8443 \
      -e EDGEMICRO_ORG=$EDGEMICRO_ORG \
      -e EDGEMICRO_ENV=$EDGEMICRO_ENV \
      -e EDGEMICRO_KEY=$EDGEMICRO_KEY \
      -e EDGEMICRO_SECRET=$EDGEMICRO_SECRET \
      -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
      --link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
      

    ৫. TLS কনফিগারেশন পরীক্ষা করুন

    1. সেটআপটি পরীক্ষা করার জন্য নিম্নলিখিত cURL কমান্ডটি চালান। আপনার মাইক্রোগেটওয়ে-অ্যাওয়্যার প্রক্সিতে ব্যবহৃত বেসপাথ এবং Apigee Edge-এ তৈরি করা ডেভেলপার অ্যাপ থেকে প্রাপ্ত API কী-টি এখানে প্রতিস্থাপন করুন। উদাহরণস্বরূপ:

      curl https://localhost:8443/local -k -H "x-api-key: xxxx" -v
      

      আপনি এই ত্রুটিটি দেখতে পাবেন:

      ...
      *  subject: C=CA; ST=Ontario; L=Toronto; O=Google Canada; OU=Google Cloud Platform; CN=edgemicro; emailAddress=srinandans@google.com
      *  start date: Dec 10 02:12:22 2018 GMT
      *  expire date: Sep 29 02:12:22 2021 GMT
      *  issuer: C=CA; ST=Ontario; L=Toronto; O=Google Canada; OU=Google Cloud Platform; CN=edgemicro; emailAddress=srinandans@google.com
      *  SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
      > GET /local HTTP/1.1
      > Host: localhost:8443
      > User-Agent: curl/7.54.0
      > Accept: */*
      > x-api-key: 9fVC65pFj8LrmlPmVyxFjx4KgAHTxqSd
      >
      < HTTP/1.1 502 Bad Gateway
      < Date: Wed, 12 Dec 2018 05:25:01 GMT
      < Connection: keep-alive
      < Content-Length: 93
      <
      * Connection #0 to host localhost left intact
      {"message":"unable to verify the first certificate","code":"UNABLE_TO_VERIFY_LEAF_SIGNATURE"}
      
    2. Edge Microgateway পুনরায় চালান, তবে এবার NODE_EXTRA_CA_CERTS ভেরিয়েবলটি যোগ করুন।

      chown -R 100:101 ~/.edgemicro/ \
      docker run -P -p 8443:8443 -d --name edgemicro \
      -v path_to_your_edgemicro_dir:/opt/apigee/.edgemicro \
      -v path_to_your_logs_dir:/opt/apigee/logs \
      -e NODE_EXTRA_CA_CERTS=/opt/apigee/.edgemicro/rootca.pem \
      -e EDGEMICRO_PORT=8443 \
      -e EDGEMICRO_ORG=$EDGEMICRO_ORG \
      -e EDGEMICRO_ENV=$EDGEMICRO_ENV \
      -e EDGEMICRO_KEY=$EDGEMICRO_KEY \
      -e EDGEMICRO_SECRET=$EDGEMICRO_SECRET \
      -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
      --link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
      
    3. নিম্নলিখিত cURL কমান্ডটি চালান। আগের মতোই আপনার বেসপাথ এবং এপিআই কী প্রতিস্থাপন করুন। উদাহরণস্বরূপ:

      curl https://localhost:8443/local -k -H "x-api-key: xxxx" -v
      
    4. আউটপুটটি যাচাই করুন। সফল হলে, আপনি একটি HTTP 200 স্ট্যাটাস রেসপন্স পাবেন:

      ...
      > GET /local HTTP/1.1
      > Host: localhost:8443
      > User-Agent: curl/7.54.0
      > Accept: */*
      > x-api-key: 9fVC65pFj8LrmlPmVyxFjx4KgAHTxqSd
      >
      < HTTP/1.1 200 OK
      < x-powered-by: Express
      < content-type: text/html; charset=utf-8
      < etag: W/"c-M6tWOb/Y57lesdjQuHeB1P/qTV0"
      < date: Wed, 12 Dec 2018 05:49:28 GMT
      < x-response-time: 421
      < Connection: keep-alive
      < Transfer-Encoding: chunked
      <
      Hello world
      

    একটি কাস্টম প্লাগইন যোগ করা

    কাস্টম প্লাগইন লিখে আপনি মাইক্রোগেটওয়েতে নতুন বৈশিষ্ট্য ও সক্ষমতা যোগ করতে পারেন। কাস্টম প্লাগইন আপনাকে মাইক্রোগেটওয়ের মধ্য দিয়ে প্রবাহিত অনুরোধ এবং প্রতিক্রিয়াগুলির সাথে প্রোগ্রাম্যাটিকভাবে যোগাযোগ করার সুযোগ দেয়।

    ডকার কন্টেইনারে চলমান একটি এজ মাইক্রোগেটওয়ে ইনস্ট্যান্সে প্লাগইন স্থাপন করার জন্য আপনার কাছে দুটি বিকল্প রয়েছে:

    এই বিভাগের বাকি অংশে ধরে নেওয়া হচ্ছে যে আপনি একটি স্ট্যান্ডার্ড এজ মাইক্রোগেটওয়ে সেটআপের জন্য প্লাগইন লেখা এবং কনফিগার করার বিষয়ে পরিচিত। যদি তা না হয়, তবে কাস্টম প্লাগইন তৈরি করুন (Develop custom plugins) অংশটি দেখুন।

    বিকল্প A: প্লাগইন ডিরেক্টরিটি একটি ভলিউমে মাউন্ট করুন।

    (v.2.5.27-এ যোগ করা হয়েছে) ভলিউম মাউন্টের মাধ্যমে প্লাগইন যোগ করার ধাপগুলো Edge Microgateway-তে যেকোনো কাস্টম প্লাগইন যোগ করার ধাপগুলোর মতোই। যখন আপনি ডকার কন্টেইনারটি চালান, তখন আপনি আপনার লোকাল সিস্টেমের প্লাগইন ডিরেক্টরিটি (ভলিউম) কন্টেইনার মাউন্ট পয়েন্টে মাউন্ট করতে পারেন, যা হলো /opt/apigee/plugins । এরপর আপনি Edge Microgateway কনফিগারেশন ফাইলে লোকাল ভলিউম ডিরেক্টরিটি নির্দিষ্ট করে দেন।

    নিম্নলিখিত ধাপগুলিতে দেখানো হয়েছে কিভাবে একটি ডকার মাউন্ট পয়েন্ট ব্যবহার করে কাস্টম প্লাগইন অন্তর্ভুক্ত করা যায়।

    1. এজ মাইক্রোগেটওয়ে বন্ধ করুন:

      edgemicro stop
      
    2. আপনার কাস্টম প্লাগইনগুলির জন্য একটি ডিরেক্টরি তৈরি করুন। উদাহরণস্বরূপ, তৈরি করুন

      $HOME/edgemicro/custom/plugins
      
    3. Edge Microgateway কনফিগারেশন ফাইলে কাস্টম প্লাগইন ডিরেক্টরিটি যোগ করুন। উদাহরণস্বরূপ:

        plugins:
          dir: $HOME/edgemicro/custom/plugins
          sequence:
            - oauth
            - response-uppercase
        ````
      
    4. "একটি সাধারণ প্লাগইন লিখুন" এর নির্দেশাবলী অনুসারে আপনার প্লাগইনটি লিখুন এবং পরীক্ষা করুন। আপনার প্লাগইন কোডটি সঠিক ডিরেক্টরি কাঠামোতে রাখতে ভুলবেন না। উদাহরণস্বরূপ:

      custom
        |
        |-- plugins
          |
          |- response-uppercase
          |     |- index.js
          |     |- package.json
          |- request-headers
          |     | - index.js
                | - package.json
      
    5. নিচের মতো একটি কমান্ড দিয়ে ডকার কন্টেইনারটি চালান, যেখানে আপনি প্লাগইন ডিরেক্টরিটি ডকার ভলিউমে মাউন্ট করার জন্য -v অপশনটি ব্যবহার করবেন। নিচের উদাহরণ কমান্ডে, প্লাগইন ডিরেক্টরি $HOME/edgemicro/custom/plugins (যেখানে কাস্টম প্লাগইনটি অবস্থিত) কন্টেইনারের মাউন্ট পয়েন্ট /opt/apigee/plugins এ ম্যাপ করা হয়েছে:

      chown -R 100:101 ~/.edgemicro/ \
      docker run -P -p 8000:8000 -d --name edgemicro \
      -v /var/tmp:/opt/apigee/logs \
      -v $HOME/edgemicro/custom/plugins:/opt/apigee/plugins \
      -e EDGEMICRO_PROCESSES=1 \
      -e EDGEMICRO_ORG=jdoe \
      -e EDGEMICRO_ENV=test \
      -e EDGEMICRO_KEY=39c4b561100cd7f258768d1072f3e1d7c17b5f36a18fe89972bb5c9ce7e58fb \
      -e EDGEMICRO_SECRET=f5f9e239a38b4e6cc99c2aa067716a84aebdcff9580a7925fc500e402b1a5fa \
      -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
      -e SERVICE_NAME=edgemicro \
      --security-opt=no-new-privileges \
      --cap-drop=ALL gcr.io/apigee-microgateway/edgemicro:latest
      
    6. প্লাগইনটি পরীক্ষা করতে আপনার এপিআই কল করুন।

    আরও তথ্যের জন্য, ভলিউম [শেয়ার্ড ফাইলসিস্টেম] দেখুন।

    বিকল্প B: প্লাগইনগুলিকে কন্টেইনারের মধ্যে তৈরি করুন

    এই বিকল্পে, আপনি প্লাগইনগুলিকে আপনার কন্টেইনারের মধ্যে বিল্ড করেন।

    ১. আপনার প্লাগইনগুলি প্যাকেজ করুন

    1. "একটি সহজ প্লাগইন লিখুন" এর নির্দেশাবলী অনুসারে আপনার প্লাগইনটি লিখুন এবং পরীক্ষা করুন।

    2. আপনার প্লাগইন কোড সঠিক ডিরেক্টরি কাঠামোতে রাখুন। প্লাগইন ডিরেক্টরিগুলোকে অবশ্যই একটি নির্দিষ্ট কাঠামো অনুসরণ করতে হবে। নিম্নলিখিত উদাহরণটি সেই কাঠামো দেখায় যা আপনাকে অবশ্যই অনুসরণ করতে হবে, যেখানে response-uppercase এবং request-headers হলো কাস্টম প্লাগইন কোড ধারণকারী ফোল্ডারগুলোর নাম (এই নামগুলো শুধুমাত্র উদাহরণ, আপনার ফোল্ডারের নাম ভিন্ন হতে পারে):

      plugin
        |
        |-- plugins
          |
          |- response-uppercase
          |     |- index.js
          |     |- package.json
          |- request-headers
          |     | - index.js
                | - package.json
      
    3. plugin ফোল্ডারে cd ব্যবহার করুন।

    4. plugin ফোল্ডারের ভিতরে, সম্পূর্ণ plugins ফোল্ডারটি জিপ করুন:

      zip -r plugins.zip plugins/

    ২. একটি ডকার ইমেজ তৈরি করুন

    এরপরে, আপনার প্লাগইন কোড একটি Edge Microgateway ইমেজে যুক্ত করার জন্য একটি Dockerfile তৈরি করুন।

    1. যে ডিরেক্টরিতে জিপ ফাইলটি রয়েছে, সেই একই ডিরেক্টরিতে Dockerfile নামে একটি নতুন ফাইল তৈরি করুন।
    2. Dockerfile এ নিম্নলিখিত কোডটি যোগ করুন এবং ফাইলটি সংরক্ষণ করুন:

      USER root
      RUN apk update && \
          apk upgrade && \
          apk add zipapk add zip && \
          mkdir /opt/apigee/customplugins && \
          chown apigee:apigee /opt/apigee/customplugins
      COPY plugins.zip /opt/apigee/customplugins
      RUN su - apigee -c "unzip /opt/apigee/customplugins/plugins.zip -d /opt/apigee/customplugins"
      EXPOSE 8000
      EXPOSE 8443
      USER apigee
      ENTRYPOINT ["entrypoint"]
      
    3. আপনার প্লাগইনগুলো দিয়ে একটি নতুন Edge Microgateway ডকার ইমেজ তৈরি করুন:

      docker build -t image-name .

      উদাহরণস্বরূপ:

      docker build -t edgemicroplugins .

    ৩. এজ মাইক্রোগেটওয়ে কনফিগারেশন আপডেট করুন

    এখন যেহেতু প্লাগইনগুলো প্যাকেজ করা হয়ে গেছে, আপনাকে সেগুলো Edge Microgateway কনফিগারেশন ফাইলে যোগ করতে হবে।

    1. একটি এডিটরে Edge Microgateway কনফিগারেশন ফাইলটি খুলুন:

      $HOME/.edgemicro/org-env-config.yaml
      

      উদাহরণস্বরূপ:

      vi $HOME/.edgemicro/myorg-test-config.yaml
    2. কনফিগারেশন ফাইলে প্লাগইন ডিরেক্টরিটি যোগ করুন। নিচের উদাহরণে, ' dir অ্যাট্রিবিউটটি প্লাগইন কোডের অবস্থান নির্দিষ্ট করে (যা আপনি Dockerfile-এ উল্লেখ করেছেন)। আপনাকে অবশ্যই প্লাগইন ডিরেক্টরির নামও উল্লেখ করতে হবে, যা নিচের উদাহরণে ' response-uppercase

      edgemicro:
        ...
        plugins:
          dir: /opt/apigee/plugins
          sequence:
            - oauth
            - response-uppercase
      

    ৪. মাইক্রোগেটওয়ে চালু করুন

    অবশেষে, আপনাকে কন্টেইনারের মধ্যে মাইক্রোগেটওয়েটি চালু করতে হবে।

    1. $HOME/.edgemicro তে অবস্থিত Edge Microgateway কনফিগারেশন ফাইলটিকে base64-এনকোড করতে নিম্নলিখিত কমান্ডটি চালান:

      export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`

      যেখানে your_org এবং your_env হলো সেই অর্গানাইজেশন এবং এনভায়রনমেন্ট যা আপনি edgemicro config কমান্ডটি চালানোর সময় ব্যবহার করেছিলেন।

      কমান্ডের চারপাশে ব্যাক-টিক (`) বসাতে মনে রাখবেন। উদাহরণস্বরূপ:

      export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
    2. Edge Microgateway-কে একটি কন্টেইনার হিসেবে চালান। এই কমান্ডটি বেশ কিছু এনভায়রনমেন্ট ভেরিয়েবল সেট করে, যা কন্টেইনার রানটাইম Edge Microgateway চালু করার জন্য ব্যবহার করে:

      docker run -P -p 8000:8000 -d --name edgemicroplugins \
      -e EDGEMICRO_PLUGIN_DIR=/opt/apigee/customplugins/plugins \
      -e EDGEMICRO_ORG=your_org \
      -e EDGEMICRO_ENV=your_env \
      -e EDGEMICRO_KEY=your_key \
      -e EDGEMICRO_SECRET=your_secret \
      -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
      -e SERVICE_NAME=edgemicroplugins image_name

      উদাহরণস্বরূপ:

      docker run -P -p 8000:8000 -d --name edgemicroplugins \
      -e EDGEMICRO_PLUGIN_DIR=/opt/apigee/customplugins/plugins \
      -e EDGEMICRO_ORG=docs \
      -e EDGEMICRO_ENV=test \
      -e EDGEMICRO_KEY=d9c34e1aff68ed969273b016699eabf48780e4f652242e72fc88a23e21252cb0 \
      -e EDGEMICRO_SECRET=3bc95a71c86a3c8ce04137fbcb788158731t51dfc6cdec13b7c05aa0bd969430 \
      -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
      -e SERVICE_NAME=edgemicroplugins edgemicroplugins
    3. প্লাগইনটি পরীক্ষা করতে আপনার এপিআই কল করুন:

      আপনার এপিআই (API) কল করে এবং আউটপুট প্রত্যাশিত কিনা তা যাচাই করে প্লাগইন কোডটি কার্যকর হচ্ছে কিনা তা পরীক্ষা করুন:

      curl -i http://localhost:8000/hello -H "x-api-key:apikey"

      উদাহরণস্বরূপ, response-uppercase প্লাগইনটি এই ধরনের একটি প্রতিক্রিয়া ফেরত দিতে পারে:

      curl -i http://localhost:8000/hello -H "x-api-key:PydUKRDGIXRqF2xh4usn1FLHbhGKVIz"
        HELLO, WORLD!