একাধিক সার্ভার কনফিগারেশন ফাইলের জন্য গিট ব্যবহার করুন


14

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

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

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

 / # সংগ্রহস্থলের মূল
 + - www এর জন্য www.domain.com/ # কনফিগারেশন
 | \ - ইত্যাদি /
 | \ - apache2 /
 + - dev.domain.com/ # ডিভাইসের জন্য কনফিগারেশন
 | - ইত্যাদি /
 | \ - অপ্ট /
 | \ - app1 /         
 | on - অ্যাপ্লিকেশন 1 এর জন্য কনফারেন্স / # কনফিগারেশন dev
 \ - মঞ্চের জন্য staging.domain.com/ # কনফিগারেশন

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

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

  • আমরা কেবল একটি একক সংগ্রহস্থল চাই
  • সহজেই কেন্দ্রীয় দূরবর্তীটিতে পরিবর্তনগুলি ঠেলে দেওয়া উচিত should
  • চেঞ্জসেটগুলিতে আসল লেখক থাকা উচিত

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

  1. তাহলে .git সংগ্রহস্থলের একটি নির্দিষ্ট অবস্থানে রয়েছে, যেমন কোথাও মধ্যে প্রথমেই / var , আমরা উপ-পথে "লক্ষ্য" কাজ ডিরেক্টরি থেকে সংযোগ আছে পারে। মূল সমস্যা: আমি কেবলমাত্র সামগ্রীগুলি আমদানি করার জন্য / ইত্যাদি থেকে অন্য ডিরেক্টরিতে "লিঙ্ক" করার কোনও উপায় জানতাম না , একক ফাইলগুলিকে সিলেকিং করা ব্যতীত
  2. আমি এই এসও প্রশ্নে অন্য একটি বিকল্প খুঁজে পেয়েছি , একটি ভাণ্ডারে একাধিক শাখা রাখার পরামর্শ দিয়েছি । এটি অবশ্যই জটিলতা বাড়িয়ে তুলবে, তবে আমি আমাদের এভাবে চেষ্টা করতে দেখতে পেলাম।

কনফিগারেশন ফাইল পরিচালনার জন্য একটি একক মেশিনে গিট ব্যবহার করা ভাল কাজ করে তবে আমি বিশ্বাস করি যে এমন কোনও ব্যক্তি অবশ্যই আছে যা আমরা এটির মতো ব্যবহার করতে চাইছি।

ধন্যবাদ
ক্যারিম

উত্তর:


14

আমি এর আগেও এরকম কিছু ব্যবহার করেছি; এইভাবে এটি কাজ করে।

রেপো সেটআপ

  1. একটি গিট রেপো, "ইত্যাদি_ ফাইলগুলি" তৈরি করুন।
  2. প্রতিটি মেশিনের ধরণের জন্য একটি শাখা তৈরি করুন, যেমন, "সার্ভার / www", "সার্ভার / দেব", ইত্যাদি
    • গিট শাখার নামগুলিতে স্ল্যাশ সমর্থন করে। এটি আমার মাথার ডালগুলি সোজা রাখতে সহায়তা করে।
    • আপনার যদি পর্যাপ্ত পরিমাণ মেশিন থাকে তবে তার পরিবর্তে প্রতিটি পৃথক মেশিনের জন্য আপনার একটি শাখা থাকতে পারে।
  3. ভাগ করা অবকাঠামোর প্রতিটি অংশের জন্য একটি শাখা তৈরি করুন, যেমন "মডিউল / অ্যাপাচি", "মডিউল / কাপ" ইত্যাদি etc.
    • এই শাখাগুলি ফাইল রাখার জন্য যা সমস্ত মেশিনের মধ্যে একই রকম /etc/resolv.conf। এইগুলি আপনি এখন "এসভিএন: এক্সটার্নালস" রেপোগুলিতে রাখবেন।

একটি নতুন মেশিন নির্মাণ

  1. একটি নতুন মেশিনে, গিট রেপো ক্লোন করুন এবং সেই মেশিনের ধরণের জন্য শাখাটি পরীক্ষা করে দেখুন।
    • লোকে পরীক্ষা না করে উত্পাদন মেশিন থেকে পরিবর্তন আনতে বাধা দেওয়ার জন্য আমি এটি একটি পঠনযোগ্য ক্লোন তৈরি করেছি।
  2. git pullপ্রতিদিন স্বয়ংক্রিয়ভাবে রেপোতে ক্রোন জব সেট আপ করুন ।

যন্ত্র শাখা পরিবর্তন করা হচ্ছে

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

মডিউল শাখা পরিবর্তন করা হচ্ছে

মডিউল শাখার জন্য কোড পরিবর্তন করা কিছুটা বেশি জটিল কারণ এটিতে দুটি পদক্ষেপ জড়িত:

  1. git checkout উপযুক্ত মডিউল শাখা
  2. আপনার পরিবর্তনগুলি করুন এবং সেগুলি সেন্ট্রালাইজড সার্ভারে প্রতিশ্রুতিবদ্ধ।
  3. git checkoutপ্রতিটি মেশিন শাখা যা সেই মডিউল শাখা ব্যবহার করে এবং তারপরে মডিউল শাখাটি মার্জ করে। গিটটি বুঝতে পারে যে আপনি সেই মডিউল শাখাটি আগে মার্জ করে দিয়েছিলেন এবং কেবল সর্বশেষ সাধারণ পিতামাতার পরে ঘটে যাওয়া পরিবর্তনগুলি লক্ষ্য করেন।

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


বিকল্প হিসাবে, গিটের নতুন সংস্করণগুলি " সাবমডিউলস " নামে পরিচিত এমন কিছু সমর্থন করে :

সাবমডিউলগুলি বিদেশী সংগ্রহস্থলগুলিকে উত্স গাছের একটি উত্সর্গীকৃত উপ-ডিরেক্টরিতে এম্বেড করার অনুমতি দেয়, সর্বদা নির্দিষ্ট প্রতিশ্রুতিতে নির্দেশ করে।

এটি আপনাকে "এসএনএন: এক্সটার্নালস" গাছের মতো কিছুটা তৈরি করার অনুমতি দেবে, যা আপনি এখনকার মতো একইভাবে আপডেট করতে পারবেন।


আমি বিকল্পটিতে পরামর্শ দেওয়ার জন্য বিকল্প 2 এর এটি একটি খুব বিশদ বিবরণ। গ্রেট! যাইহোক, দ্বিতীয় প্রয়োজনীয়তা (পরিবর্তনগুলি পিছনে ঠেলে দেওয়া) বাস্তবায়ন করা কঠিন, যদি /লেখার অনুমতিগুলির কারণে রিপোজিটরির মূলটি থাকতে হয় ।
ক্যারিম

আপনি কি / ইত্যাদিতে অনুমতি লিখতে চান? অথবা ভান্ডার প্রতিশ্রুতিবদ্ধ করতে সক্ষম হতে? আমি ভয় করি যে সমস্যাটি কোথা থেকে এসেছে আমি বুঝতে পারি না।
হ্যান্ডিম্যান 5

@ Handyman5: On a new machine, clone the git repo and check out the branch for that machine type। আমি কি অন্যান্য শাখাগুলিকে অ্যাক্সেসযোগ্য (নিরাপত্তার কারণে) তৈরি করতে পারি?
ইউজিন ইয়ার্মাশ

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

@ হ্যান্ডিম্যান 5: দেখে মনে হচ্ছে যে সাবভার্সনটি আসলে কাজের জন্য সঠিক সরঞ্জাম। আপনার সাহায্যের জন্য ধন্যবাদ.
ইউজিন ইয়ারমশ

1

একটি নুব বিট এখানে কিন্তু এটি পোস্ট একটি হুক কাজ মত কাজ করতে পারে মনে হচ্ছে

রেপো মাস্টারটি / var / মাস্টারটিতে
হুকের ক্লোনটিকে / var / লোকালক্লোনতে সংরক্ষণ করা হয় তার
পরে হোস্টের নির্দিষ্ট বিশদটি অনুলিপি করে আপনার
প্রতিটি সার্ভারে স্থানীয়ভাবে .git / পোস্ট-রিসিভ হুক স্থাপন করতে হবে (উপযুক্ত সেটিংস সহ)

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


1

এখানে একটি দ্রুত কাজ যা আমি ভেবেছিলাম ১ টি বলে
একটি কেন্দ্রীয় ভান্ডার আছে /var/repo
২. ডিরেক্টরিতে সমস্ত ডোমেনের কাছে বিশ্বব্যাপী এমন ফাইল রাখুন।
3. প্রত্যেক সাবডোমেন জন্য শাখা তৈরি করুন /var/repo/subdomain1, /var/repo/subdomain2ইত্যাদি
4. একটি পোস্ট হুক যেখানে শাখা কোনো ধাক্কা মাস্টার সঙ্গে মিশে গিয়ে তৈরি করুন।

সুতরাং আপনি যখন এর কনফিগারেশন পরিবর্তন করবেন /var/repo/subdomain2তা অবিলম্বে মাস্টারের সাথে একত্রীকরণ করা হবে যাতে আপনি রেপো পুরোপুরি টানতে পারেন এবং সমস্ত কনফিগারেশন ফাইল রাখতে পারেন
যখন আপনি পৃথক সাবডোমেন কনফিগারেশনগুলি টানতে চান, কেবল উপযুক্ত শাখাটি টানুন।

আপনি কীভাবে আপনার কনফিগার করা ফাইলগুলি /var/repo/*সম্পূর্ণ আলাদা বিষয় (ক্রোন ট্যাব, আমি ভাবতে পারি) is

~ $

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