ব্যবহারকারীদের জন্য আলাদা আলাদা ওয়েব সাইট ব্যবহার করে কি ডকার ব্যবহার করা সম্ভব?


12

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

আমি যা বুঝি সেগুলি থেকে আপনি ডকর উদাহরণটি তাদের পোর্টগুলির মাধ্যমে প্রকাশ করতে পারেন, সুতরাং আপনি যদি একই সার্ভারে দুটি ডকার উদাহরণ চালান, আপনাকে দুটি পৃথক পোর্ট প্রকাশ করতে হবে।

তবে কী বন্দর নয়, সার্ভারের নাম রফতানি করা সম্ভব:

  • www.somewebsite.com: ডকার উদাহরণ 1
  • www.otherwebsite.com: ডকার উদাহরণ 2
  • www.etc.com: ডকার উদাহরণ ...

এবং যে, একই সার্ভারে।

আমি সার্ভারে কেবল অ্যাপাচি ইনস্টল করার বিষয়ে ভেবেছিলাম, এটি সার্ভারের নামের উপর ভিত্তি করে ডেডিকেটেড ডকার উদাহরণটিতে পুনর্নির্দেশ করবে, তবে তারপরে আমাকে অ্যাপাচি (আবার!) এবং মাইএসকিউএল যে কোনও ডকারে ইনস্টল করতে হবে।

এটি কি সম্ভব এবং তদতিরিক্ত, পারফরম্যান্সের ক্ষেত্রে এটি কি আকর্ষণীয় (বা একেবারেই নয়)?

আপনার সাহায্যের জন্য ধন্যবাদ।


1
তাত্ত্বিকভাবে এটি সম্ভব, প্রতিটি ডকার উদাহরণ শুনছে বন্দরের দিকে অ্যাপাচি একটি প্রক্সিপাস করবে।
থানাসিস্ক

উত্তর:


12

হ্যা এটা সম্ভব. আপনাকে যা করতে হবে তা হ'ল বেশ কয়েকটি 80 টি বন্দর সরবরাহ করা। প্রতিটি ইউআরএল জন্য একটি। আপনি এটি ব্যবহার করে এটি করতে পারেন, উদাহরণস্বরূপ ডকার হোস্ট সার্ভারে চলমান আপাচের ভার্চুয়াল হোস্ট।

  1. ডিএনএস সিএনএম সেট করুন।
  2. ডকারের দৃষ্টান্তগুলি চালান এবং তাদের পোর্টটি 80 বন্দরটিতে ম্যাপ করুন, বলুন, ডকার হোস্টের 12345 ~ 12347।
  3. ডকার হোস্টে অ্যাপাচি সার্ভার চালান এবং প্রতিটি ইউআরএলের জন্য ভার্চুয়াল হোস্ট সেট করে এবং প্রক্সিপাস এবং প্রক্সিপাস রিভার্সকে লোকালহোস্ট: 12345 এ সেট করুন যা আপনার ডকারের উদাহরণগুলির মধ্যে একটি।

অ্যাপাচি কনফিগারেশন ফাইলটি এর মতো দেখতে পাবেন:

<VirtualHost *:80>
ServerName www.somewebsite.com
  <Proxy *>
    Allow from localhost
  </Proxy>
  ProxyPass        / http://local.hostname.ofDockerHost:12345/
  ProxyPassReverse / http://local.hostname.ofDockerHost:12345/
</VirtualHost>

4
ধন্যবাদ! এটি অনেক সাহায্য করেছিল। এছাড়াও, রয়েছে ProxyPreserveHost On, তাই আপনি স্থানীয়.hostname.ofDockerHost: 12345- এ আপনার প্রচুর লিঙ্ক শেষ করবেন না । : আরও তথ্যের যে আমার কাছে সহায়ক ছিল digitalocean.com/community/tutorials/...
সেবাস্তিয়ান রামিরেজ

ডকার ডাটাবেস ইত্যাদিতে পরিবর্তনগুলি সংরক্ষণ করবে?
এমেনিজ আর্টাস

3

এটা সম্ভব. প্রতিটি কনটেইনার অ্যাপাচি পোর্টগুলিতে আপনাকে পুনঃনির্দেশ করতে প্রধান সার্ভারে আপনি অ্যাপাচি (বা আরও ভাল, হ্যাপ্রোক্সি, এনজিনেক্স বা বার্নিশ, এটি কেবল সেই পুনঃনির্দেশ টাস্কের জন্য অ্যাপাচি থেকে আরও দক্ষ হতে পারে) ব্যবহার করতে পারেন।

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


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

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

একটি ধারকটিতে পিএইচপি-এফপিএম কমপক্ষে কিছুটা রিডানড্যান্ট ফাইলস্পেস - ওয়াইস হতে হবে: কোড. google.com/p/sna/wiki/NginxWithPHPFPM অ্যাপাচি / এনগিনেক্সের জন্য পিএইচপি-ফাইলগুলি পিএইচপি-এফপিএম ধারকটিতে অনুলিপি করতে হবে এই সিস্টেমটি কাজ করার জন্য। মাউন্ট করা ভাগ করা ডেটা ধারক কি এই সমস্যাটি সমাধান করবে?
ওজ্রস্ক

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

3

আমি জানি এটি ইতিমধ্যে জবাব দেওয়া হয়েছে তবে আমি আরও একধাপ এগিয়ে নিয়ে যেতে চেয়েছিলাম এবং আরও সম্পূর্ণ উত্তর দেওয়ার জন্য আপনাকে কীভাবে এটি করা যায় তার একটি উদাহরণ দেখাতে চাই।

দয়া করে এখানে আমার ডকার চিত্রটি কীভাবে ব্যবহার করবেন সে সম্পর্কে নির্দেশাবলী সহ এটি আপনাকে দুটি সাইট https://hub.docker.com/r/vect0r/httpd-proxy/ কনফিগার করার পদ্ধতি দেখায়

জিহুন যেমন বলেছিল আপনাকে নিশ্চিত করতে হবে যে আপনার ভোস্ট কনফিগারেশন সেট রয়েছে। আমার উদাহরণটি পরীক্ষার সাইট উদাহরণ.কম প্রদর্শন করার জন্য 80 বন্দর এবং পরীক্ষার সাইট উদাহরণ 2.com প্রদর্শন করতে 81 ব্যবহার করে। এছাড়াও লক্ষণীয় গুরুত্বপূর্ণ যে আপনাকে আপনার সামগ্রী নির্দিষ্ট করতে হবে এবং আপনার ডকফাইফিলের মধ্যে প্রয়োজনীয় পোর্টগুলি যেমন প্রকাশ করতে হবে;

FROM centos:latest
Maintainer vect0r
LABEL Vendor="CentOS"

RUN yum -y update && yum clean all
RUN yum -y install httpd && yum clean all

EXPOSE 80 81

#Simple startup script to aviod some issues observed with container restart
ADD run-httpd.sh /run-httpd.sh
RUN chmod -v +x /run-httpd.sh

#Copy config file across
COPY ./httpd.conf /etc/httpd/conf/httpd.conf
COPY ./example.com /var/www/example.com
COPY ./example2.com /var/www/example2.com
COPY ./sites-available /etc/httpd/sites-available
COPY ./sites-enabled /etc/httpd/sites-enabled

CMD ["/run-httpd.sh"]

আশা করি এটি প্রক্রিয়াটি আরও কিছুটা ব্যাখ্যা করতে সহায়তা করবে। দয়া করে আমাকে এ সম্পর্কে আরও কোনও প্রশ্ন জিজ্ঞাসা করুন, সহায়তা করে খুশি।

শুভেচ্ছা সহ,

ভী


আমি এই চিত্রটি গিথুবে তৈরি করতে ব্যবহৃত ফাইলগুলিও আপলোড করেছি; github.com/V3ckt0r/docker-httpd-proxy
Vect0r

1

আমার ক্ষেত্রে আমাকে এসএসএল প্রক্সিইঙ্গাইন অন , প্রক্সিপ্রিজারহস্ট অন এবং রিকোয়েস্ট হাইডার আমার অ্যাপাচি ২.৪ ভোস্ট ফাইলটিতে ফ্রন্ট-এন্ড-এইচটিপিএস "চালু" সেট করা দরকার , কারণ আমি ডকারের ধারকটিতে এসএসএল সক্ষম করতে চেয়েছিলাম। আমাদের সম্পর্কে local.hostname.ofDockerHost , আমার ক্ষেত্রে Docker ধারক চলমান হোস্ট সার্ভারের নাম ছিল লুকাস , এবং পোর্ট Docker ধারক বন্দর 443 ম্যাপ ছিল 1443 (কারণ পোর্ট 443 হোস্টে Apache দ্বারা ব্যবহারের ইতিমধ্যে ছিল সার্ভার), যাতে এই লাইনটি এভাবে শেষ হয় https: // lucas: 1443 /

এটি চূড়ান্ত সেটআপ, এবং এটি ঠিক কাজ করছে!

<VirtualHost *:443> # Change to *:80 if no https required
    ServerName www.somewebsite.com
    <Proxy *>
        Allow from localhost
    </Proxy>
    SSLProxyEngine On # Comment this out if no https required
    RequestHeader set Front-End-Https "On" # Comment this out if no https required
    ProxyPreserveHost    On
    ProxyPass        / http://local.hostname.ofDockerHost:12345/
    ProxyPassReverse / http://local.hostname.ofDockerHost:12345/
</VirtualHost>

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

nginx['redirect_http_to_https'] = true
nginx['proxy_set_headers'] = {
    "Host" => "$http_host",
    "X-Real-IP" => "$remote_addr",
    "X-Forwarded-For" => "$proxy_add_x_forwarded_for",
    "X-Forwarded-Proto" => "https",
    "X-Forwarded-Ssl" => "on"
}
nginx['real_ip_trusted_addresses'] = ['10.0.0.77'] # IP for lucas host
nginx['real_ip_header'] = 'X-Real-IP'
nginx['real_ip_recursive'] = 'on'

অ্যাপাচি, আইএসপি কনফিগারেশন, উবুন্টু সার্ভারের জন্য সম্পূর্ণ গাইড 16.04 এখানে https://www.howtoforge.com/commune/threads/subdomain-or-subfolder-route-requests-to-running-docker-image.73845/#post-347744

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.