প্রকল্প সম্পর্কে

এই রিপোজিটরি একটি একক Docker Compose স্ট্যাক হিসাবে একটি স্ব-হোস্টেড XWiki স্থাপনাকে প্যাকেজ করে। XWiki, একটি এন্টারপ্রাইজ উইকি প্ল্যাটফর্ম, Traefik এর পিছনে চলে যা একটি রিবার্স প্রক্সি হিসাবে কাজ করে, এবং কনফিগার করা হোস্টনেমগুলির জন্য Let's Encrypt সার্টিফিকেট স্বয়ংক্রিয়ভাবে ইস্যু করা হয়। PostgreSQL 15 উইকি ডেটা সংরক্ষণ করে। সেটআপ একটি সংক্ষিপ্ত ক্রম অনুসরণ করে: রিপোজিটরিটি ক্লোন করুন, দুটি প্রত্যাশিত Docker নেটওয়ার্ক (traefik-network এবং xwiki-network) তৈরি করুন, .env.example কে .env এ কপি করুন এবং প্রয়োজনীয় মানগুলি পূরণ করুন (XWIKI_DB_PASSWORD, XWIKI_HOSTNAME, TRAEFIK_HOSTNAME, TRAEFIK_ACME_EMAIL, TRAEFIK_BASIC_AUTH), তারপর docker compose দিয়ে স্ট্যাকটি চালু করুন। README নোট করে যে প্রথমবার শুরু হতে বেশ কয়েক মিনিট সময় লাগে যখন XWiki তার স্কিমা এবং কোর পৃষ্ঠাগুলি ইনিশিয়ালাইজ করে, এবং সাধারণ প্রথম-স্থাপনা সমস্যাগুলির তালিকা দেয় যেমন DNS প্রচার না হওয়ার কারণে বা পোর্ট 80 পৌঁছানো না যাওয়ার কারণে সার্টিফিকেট ইস্যু ব্যর্থ হওয়া, নেটওয়ার্ক-তৈরি ধাপটি বাদ দেওয়ার কারণে নেটওয়ার্ক ত্রুটি, এবং অনুপস্থিত-ভেরিয়েবল ব্যর্থতা। একটি update.sh স্ক্রিপ্ট চেকআউটটিকে সর্বশেষ রিলিজ ট্যাগে নিয়ে যায় এবং docker compose up পুনরায় চালায়। এটি একটি প্রধান সংস্করণকে অযত্নে অতিক্রম করতে অস্বীকার করে, স্থানীয় পরিবর্তনের উপর চলতে অস্বীকার করে, এবং যে কোনও ভেরিয়েবলটি ইনস্টল করা সংস্করণ থেকে প্রয়োজনীয় হয়ে উঠেছে তা রিপোর্ট করে। একটি --dry-run পতাকা কাজটি পূর্বরূপ দেখায়। তিনটি Docker Hub অফিসিয়াল ইমেজ (traefik, xwiki, postgres) tag@sha256 ডাইজেস্ট হিসাবে ইন্টারপোলেশন ডিফল্ট হিসাবে পিন করা হয়েছে, তাই একটি সাধারণ git pull পরীক্ষিত সংমিশ্রণটি সরবরাহ করে। প্রতি-ইমেজ ওভাররাইড স্তরগুলি নথিভুক্ত করা হয়েছে: একটি সংস্করণ ভেরিয়েবল ডাইজেস্ট ছাড়া শুধুমাত্র ট্যাগটি বদল করে, যখন একটি ট্যাগ ভেরিয়েবল পুরো রেফারেন্সটি প্রতিস্থাপন করে। নেস্টেড ডিফল্টগুলির জন্য Docker Compose v2.5 বা তার চেয়ে নতুন প্রয়োজন। একটি দৈনিক CI চাকরি রেজিস্ট্রিগুলির বিপরীতে পিনগুলি পুনরায় সমাধান করে এবং পিন করা XWiki এবং Traefik সংস্করণগুলিকে আপস্ট্রিম রিলিজগুলির সাথে তুলনা করে; GitHub Actions গুলো commit SHA দ্বারা পিন করা হয়েছে এবং Dependabot দ্বারা তাজা রাখা হয়েছে। ব্যাকআপগুলি একটি ডেডিকেটেড কন্টেইনার দ্বারা পরিচালিত হয় যা একটি pg_dump কে gzip এর মাধ্যমে পাইপ করে এবং উইকি ডেটার একটি tar.gz আর্কাইভ তৈরি করে, তারপর পুরানো ব্যাকআপগুলি ছাঁটে এবং ঘুমায়। ডিফল্টগুলি হল 30-মিনিটের ওয়ার্ম-আপ, 24-ঘণ্টার ব্যবধান এবং 7-দিনের ধারণ। দুটি ইন্টারেক্টিভ পুনরুদ্ধার স্ক্রিপ্ট ডেটাবেস এবং অ্যাপ্লিকেশন ডেটা কভার করে। রিপোজিটরিটি হোস্ট-মাউন্টিং ব্যাকআপ ভলিউম এবং আপগ্রেডের আগে ব্যাকআপ নেওয়ার পরামর্শ দেয় কারণ XWiki সংস্করণ জাম্পের সময় তার স্কিমা মাইগ্রেট করে। হার্ডেনিং এক様に প্রয়োগ করা হয়: প্রতিটি পরিষেবা no-new-privileges সেট করে, ইনফ্রাস্ট্রাকচার কন্টেইনারগুলি সমস্ত ক্ষমতা বাদ দেয় এবং শুধুমাত্র তাদের এন্ট্রিপয়েন্টগুলির জন্য প্রয়োজনীয়গুলি যোগ করে (Traefik এর জন্য NET_BIND_SERVICE, ডেটাবেস ইমেজগুলির জন্য CHOWN/SETUID/SETGID), যখন অ্যাপ্লিকেশন কন্টেইনারগুলি ইচ্ছাকৃতভাবে ডিফল্ট ক্ষমতা সেট রাখে। প্রতিটি পরিষেবা মেমরি এবং CPU সীমা প্লাস রিজার্ভেশনগুলিকে compose ডিফল্ট হিসাবে বহন করে, যা .env ভেরিয়েবলগুলির মাধ্যমে ওভাররাইড করা যায়। একটি Deployment Verification ওয়ার্কফ্লো প্রতি পুশ, পুল রিকোয়েস্ট এবং দৈনিক 06:00 UTC তে চলে, যা shellcheck, actionlint, তিনটি পিন করা ইমেজের Trivy স্ক্যান, তাজা থাকার চেক, এবং একটি deploy-and-test চাকরি কভার করে যা ক্ষণস্থায়ী শংসাপত্র সহ স্ট্যাকটি বুট করে এবং Traefik এর মাধ্যমে উইকি UI এর উত্তর প্রয়োজন। একটি এন্ড-টু-এন্ড ব্যাকআপ/পুনরুদ্ধার স্ক্রিপ্ট একটি মার্কার সারি সন্নিবেশ করে, earliest ব্যাকআপটি পুনরুদ্ধার করে এবং asserts করে যে মার্কারটি চলে গেছে; এটি ব্যর্থতা সনাক্তকরণের প্রমাণ করার জন্য ডেটাবেস কন্টেইনারটিকে সাময়িকভাবে বন্ধ করে এবং এটি স্টেজিংয়ের জন্য meant, প্রোডাকশনের জন্য নয়। সিকিউরিটি নোটগুলি states করে যে শংসাপত্রগুলি একটি gitignored .env থেকে deploy সময় পড়া হয়, যে PostgreSQL শুধুমাত্র অভ্যন্তরীণ নেটওয়ার্কে শোনে, এবং যে v1.0.0 এর আগে রিলিজগুলি একটি ট্র্যাক করা .env সহ একটি generated-looking ডেটাবেস পাসওয়ার্ড পাঠিয়েছে যা যদি পুনরায় ব্যবহার করা হয় তবে তা ঘোরানো উচিত।