নিজের Git: Forgejo বা Gitea
ওয়েব ইন্টারফেস, SSH অ্যাক্সেস ও বিল্ড রানসহ ব্যক্তিগত রিপোজিটরি সার্ভার কীভাবে সেটআপ করবেন — এবং কোড হারানো এড়াতে কী কপি করবেন।
আপডেট: ২৩ আগস্ট, ২০২৬
আপনার নিজের Git দরকার যখন কোড অন্য কারও প্ল্যাটফর্মে যাওয়া উচিত নয়, অথবা যখন আপনি প্রাইভেট রিপোজিটরি এবং বিল্ড মিনিটে কোনো সীমা চান না। Forgejo এবং Gitea দুটি ঘনিষ্ঠভাবে সম্পর্কিত প্রকল্প (Forgejo, Gitea থেকে জন্ম নিয়েছে); দুটোই একটি একক কন্টেইনারে ইনস্টল হয় এবং সাধারণ মানের মেশিনে চলে।
কী বেছে নেবেন এবং কতটা রিসোর্স
দৈনন্দিন কাজে প্রায় কোনো পার্থক্য নেই: ইন্টারফেস, ইস্যু, পুল রিকোয়েস্ট, মিরর, বিল্ডের জন্য Actions। Forgejo একটি কমিউনিটি দ্বারা বিকশিত, Gitea একটি কোম্পানি দ্বারা। প্রকল্পের স্বাধীনতা আপনার কাছে গুরুত্বপূর্ণ হলে Forgejo বেছে নিন।
দুই বা তিনজনের জন্য VDS-1 যথেষ্ট। বিল্ডের জন্য একটি রানার যোগ করলেই VDS-3 বা তার উপরে নিন: বিল্ড CPU এবং ডিস্ক খেয়ে ফেলে, এবং ডিস্কের গতি টিয়ার দ্বারা সীমাবদ্ধ।
Compose দিয়ে ইনস্টল করা
services:
forgejo:
image: codeberg.org/forgejo/forgejo:11
container_name: forgejo
restart: unless-stopped
environment:
- USER_UID=1000
- USER_GID=1000
volumes:
- ./data:/data
- /etc/timezone:/etc/timezone:ro
ports:
- "3000:3000"
- "2222:22"
docker compose up -d
docker compose logs -f forgejo
http://<machine-address>:3000 খুলুন এবং প্রাথমিক সেটআপ সম্পন্ন করুন। প্রথম যে ইউজার তৈরি হয় সে-ই অ্যাডমিনিস্ট্রেটর হয়ে যায়।
পোর্ট 3000 বাইরের দিকে খোলা রাখার দরকার নেই। এটি বন্ধ করুন এবং সার্ভিসের সামনে সার্টিফিকেটসহ একটি ওয়েব সার্ভার বসান — এভাবে আপনি HTTPS পাবেন এবং বাইরের লোকদের কাছে সেটআপ প্যানেল দেখাবেন না। সেটআপ সম্পূর্ণ হওয়ার আগে যে কেউ ঠিকানা খুললে প্রথমে অ্যাডমিনিস্ট্রেটর তৈরি করতে পারে।
SSH অ্যাক্সেস
কন্টেইনারের ভিতরে পোর্ট 22 থেকে 2222-তে ফরওয়ার্ড করা হয়, কারণ 22 সিস্টেম SSH দ্বারা দখল করা। রিপোজিটরি সেটিংসে ঠিকানাটি এভাবে দেখাবে:
git clone ssh://git@example.com:2222/user/repo.git
আপনি যদি পোর্ট ছাড়া স্বাভাবিক git@example.com:user/repo.git চান, কন্টেইনারের জন্য 2222 রেখে দিন এবং সিস্টেম SSH-এর মাধ্যমে হোস্টে ফরওয়ার্ডিং সেট করুন, অথবা প্রশাসনিক SSH অন্য পোর্টে সরিয়ে নিন (অ্যাক্সেস সুরক্ষা দেখুন)।
বিল্ড
Actions একটি আলাদা রানার দ্বারা চালিত হয় — forgejo-runner কন্টেইনার, যা অ্যাডমিনিস্ট্রেটর সেটিংস থেকে একটি টোকেন দিয়ে রেজিস্টার করে। এটিকে Docker সকেটে অ্যাক্সেস শুধু সচেতনভাবেই দিন: এটি মেশিনে root-এর সমান। বিল্ডের জন্য, রানারকে মেমরি এবং CPU দ্বারা সীমাবদ্ধ করা ভালো — রিসোর্স সীমা দেখুন।
কী ব্যাক আপ করবেন
সমস্ত স্টেট ./data ভলিউমে সংরক্ষিত থাকে: রিপোজিটরি, ডেটাবেস, অ্যাটাচমেন্ট, কনফিগারেশন। ব্যাক আপ এভাবে করা হয়:
docker compose stop forgejo
restic -r <repository> backup ./data
docker compose start forgejo
সার্ভিসটি SQLite ব্যবহার করলে আপনাকে থামাতে হবে — নাহলে ডেটাবেস স্ন্যাপশট অসঙ্গত হতে পারে। PostgreSQL-এর ক্ষেত্রে, না থামিয়েই pg_dump যথেষ্ট। আরও বিস্তারিত জানতে দেখুন ঠিক কী ব্যাক আপ করবেন এবং Restic।
সাধারণ ভুল
- রিপোজিটরির আকার ভুলে যাওয়া। গেম সার্ভারের বিল্ড এবং মিডিয়া দ্রুত ডিস্ক স্পেস খেয়ে ফেলে: এন্ট্রি টিয়ারের 40 GB অলক্ষ্যে শেষ হয়ে যায়।
- ইমেইল সেট আপ না করা। এটি ছাড়া আমন্ত্রণ এবং পাসওয়ার্ড রিসেট কাজ করে না। নিজের মেইল সার্ভার সেট আপ করার চেয়ে একটি বাহ্যিক SMTP সংযুক্ত করা সহজ।
- ব্যাক আপ ছাড়া আপডেট করা। মেজর ভার্সন পরিবর্তন করলে ডেটাবেস স্কিমা বদলে যায়। প্রথমে ব্যাক আপ, তারপর
docker compose pull— কন্টেইনার আপডেট করা দেখুন।