FreeBSD + fcgiwrap + cgit ব্যবহার করে একটি Git ওয়েব ফ্রন্টএন্ড এবং Git সার্ভার তৈরি করা

7 min

language: ja bn de en es fr hi ko pt ru zh-cn zh-tw

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

সুতরাং, আমি git এর জন্য একটি পৃথক ওয়েব ফ্রন্টএন্ড হিসাবে cgit গ্রহণ করেছি এবং SSH এর মাধ্যমে রিমোট অবস্থানে git সংরক্ষণ করে আমার ইচ্ছামতো সেটআপ তৈরি করতে পেরেছি।

git পুশ সক্ষম করা

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

গিট ব্যবহারকারী তৈরি করুন

FreeBSD এর ক্ষেত্রে, আপনি "adduser" কমান্ড ব্যবহার করে ইন্টারেক্টিভভাবে এটি তৈরি করতে পারেন।

adduser

এখানে git ব্যবহারকারী তৈরি করার পরে, তাতে স্যুইচ করুন এবং ক্লায়েন্টের পাবলিক কী .ssh/authorized_keys এ যোগ করুন।

su - git
mkdir .ssh
chmod 700 .ssh
vim .ssh/authorized_keys
# অথবা
echo "ক্লায়েন্টের পাবলিক কী" > ".ssh/authorized_keys"
chmod 600 .ssh/authorized_keys

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

mkdir repos

তারপর, git config ব্যবহার করে ডিফল্ট শাখা সেট করুন।

git config --global init.defaultBranch main

ক্লায়েন্ট থেকে সার্ভারে রিপোজিটরি তৈরি সক্ষম করা

এভাবে থাকলে প্রতিবার গিট সার্ভারে লগইন করে, রিপোজিটরি তৈরি করে এবং ক্লায়েন্ট থেকে git push করতে হবে, যা খুব ঝামেলার। তাই আমি ক্লায়েন্ট থেকে এই কাজগুলি করার ব্যবস্থা করব।
আমি নিম্নলিখিতগুলি .bashrc এ যোগ করেছি।

mkr() {
  ssh git@bsd "git init --bare repos/$1.git"
  ssh git@bsd "cd repos/$1.git; git branch -m main"
  echo "remote add origin git@bsd:~/repos/$1.git"
}

এখন, আর্গুমেন্ট হিসাবে প্রদত্ত রিপোজিটরি নাম ব্যবহার করে ক্লায়েন্ট পাশে রিপোজিটরি তৈরি করা যাবে।
অবশেষে, রিমোট URL কার্যকর করার কমান্ডটি স্ট্যান্ডার্ড আউটপুটে প্রিন্ট করার মাধ্যমে রিমোট URL সেট করা সহজ হবে।

cgit ইনস্টলেশন

cgit ব্যবহার করার জন্য cgi প্রয়োজন, তাই প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করুন। ধরে নেওয়া হচ্ছে যে Nginx ইতিমধ্যেই ইনস্টল করা আছে।

pkg install cgit fcgiwrap

Nginx কে UNIX সকেটের মাধ্যমে www:www ব্যবহারকারী এবং গ্রুপ অনুমতি সহ অ্যাক্সেস করতে সক্ষম হতে হবে এবং পরিষেবাটি সক্ষম করতে হবে।

sysrc fcgiwrap_enable=YES
sysrc fcgiwrap_user=www
sysrc fcgiwrap_group=www
sysrc fcgiwrap_socket_owner=www
sysrc fcgiwrap_socket_group=www
service fcgiwrap start

cgit কনফিগারেশন

আপনাকে cgit কনফিগার করতে হবে।
এইবার, আমি ডিফল্ট থেকে কিছুটা কাস্টমাইজ করেছি, তাই এটি নিম্নরূপ হয়েছে।

$ cat /usr/local/etc/cgitrc 
root-title=Git
root-desc=public repositories

virtual-root=/
scan-path=/home/git/repos/

css=/style.css
logo=/top.png

head-include=/usr/local/www/cgit/head.html
readme=:README.md
readme=:README.rst
enable-commit-graph=1

প্যাকেজ ইনস্টল করার সময় পরিবেশন করার জন্য ফাইলগুলি /usr/local/www/cgit/ এর অধীনে তৈরি হয়েছিল।

Nginx কনফিগারেশন

এখন, এখানে Nginx।

server {
    if ($host = git.soulminingrig.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    server_name git.soulminingrig.com;
    listen 80;
}

server {
    server_name git.soulminingrig.com;
    listen 443 ssl;

    root /usr/local/www/cgit;

    location / {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /usr/local/www/cgit/cgit.cgi;
        fastcgi_param PATH_INFO $uri;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock;
    }

    location ~* \.(css|png|ico)$ {
        root /usr/local/www/cgit;
    }

    ssl_certificate /usr/local/etc/letsencrypt/live/git.soulminingrig.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /usr/local/etc/letsencrypt/live/git.soulminingrig.com/privkey.pem; # managed by Certbot
}

উপরের conf ফাইল তৈরি করার পর, nginx -t দিয়ে সিনট্যাক্স চেক করে রিস্টার্ট করুন।

nginx -t
service nginx restart

উল্লেখ্য, আমি ইতিমধ্যেই certbot দিয়ে সার্টিফিকেট পেয়ে গিয়েছিলাম।

certbot --nginx -d git.soulminingrig.com

এখন এটি অ্যাক্সেসযোগ্য হয়েছে।

উপসংহার

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

আবার দেখা হবে। শুভেচ্ছা রইল।