اتصال هاست به گیت
گیت هاب (github) یک بستر محبوب و مشهور برای توسعه پروژههای فردی و سازمانی میباشد. به علت سادگی کار و امکانات فراوانی که برای کاربران خود فراهم کرده است مورد استقبال و استفاده زیادی قرار گرفته است. یکی از مواردی که سیپنل برای راحتی فرآیند و کار کاربران در نظر گرفته است، استفاده از git version control و اتصال به گیت هاب برای مدیریت و دیپلوی آسان تر پروژهها میباشد. در این آموزش قصد داریم تا نحوه استفاده از git version control برای سهولت در مدیریت پروژهها و همچنین اضافه کردن دریافت خودکار (auto pull) به پروژه میباشد.
ساختن توکن شخصی در گیت هاب (Personal Access Token)
برای اتصال پروژهها و همچنین ایجاد دسترسی برای دریافت پروژه توسط سیپنل، در قدم اول باید یک توکن دسترسی یا یک personal access token در گیت هاب ایجاد کنیم. برای این منظور، ابتدا از لینک زیر در حساب گیت هاب خود لاگین کنید. از نوار بالا در بخش سمت راست بر روی آیکون پروفایل خود کلیک کنید.
پس از کلیک بر روی این مورد، از منوی باز شده وارد بخش setting میشوید. در صفحه جدید، اسکرول داون کنید و در انتهای منوی سمت چپ، گزینه Developer settings را انتخاب بفرمایید.
در صفحه جدید، از منوی سمت چپ گزینه personal access token را انتخاب کرده و در ادامه بر روی Tokens (classic) کلیک میکنیم. صفحه جدیدی تحت عنوان personal access token (classic) باز میشود. بر روی generate new token کلیک کرده و گزینه generate new token (classic) را انتخاب میکنیم.
در صفحه باز شده، باید توکن مد نظر خود را به همراه تنظیمات آن ایجاد کنیم. صفحهای که مشاهده میکنید به این صورت میباشد :
Notes : میتوانید نوشته یا نام اختصاری برای این توکن قرار دهید. این مورد به این منظور میباشد که در صورتی که توکنهای مختلفی برای موارد مختلف تولید کردهاید، بتوانید راحتتر آنها را تشخیص دهید.
Expiration : در این بخش زمان انقضای توکن را مشخص میکنیم که گزینههای مختلفی برای ما قرار دارد. میتوان این زمان را به صورت 7 روزه، یک ماهه، دو ماهه، سه ماهه، مدت زمان custom و همچنین به صورت بدون انقضا (no expiration) تعیین کرد.
از بین Scope هایی که در بخش پایین تر قرار دارند و می توان آن ها را انتخاب کرد، فقط تیک گزینه repo را انتخاب میکنیم. در نهایت، به انتهای صفحه رفته و گزینه Generate token را کلیک میکنیم تا توکن ما ایجاد شود. پس از این مورد به صفحه قبلی ریدایرکت میشود و توکن شما در این صفحه نمایش داده میشود.
نکته: توجه بفرمایید که توکن نمایش داده شده را حتما کپی کنید، زیرا مجدد این توکن به شما نمایش داده نخواهد شد. اما بنا به هر دلیلی اگر موفق به انجام این مورد نشدید و یا توکن خود را فراموش کردید، میتوانید بر روی نام توکن کلیک کرده و آن را regenerate کنید.
پس از انجام این مراحل، personal access token مورد نیاز خود را ایجاد کردیم. حال باید در سیپنل، ادامه مراحل را جهت اتصال هاست به پروژه انجام دهیم.
ایجاد یک رکورد Git version control
ابتدا وارد به سیپنل میشویم. برای این که بتوانیم یک رکورد git version control ایجاد کنیم، وارد فایل منیجر هاست میشویم و سپس در روت اصلی آن (قبل از public_html)، یک فایل به نام netrc. ایجاد میکنیم. پس از ایجاد این فایل، مجوز آن را به 0600 تغییر میدهیم. حال فایل را باز کنید و کد های زیر را در آن قرار دهید.
machine github.com login UserName password PAT
UserName : به جای این مقدار باید username حساب گیت هاب خود را وارد کنید. در نظر داشته باشید که مقدار ایمیل قابل قبول نمیباشد و باید username گیت هاب به صورت درست و کامل وارد شود. برای مشاهده این مورد می توانید در گیت هاب از بخش نوار بالا و در سمت راست، بر روی آیکون حساب خود کلیک بفرمایید، در مقابل پروفایل خود و در خط اول می توانید یوزرنیم خود را مشاهده کنید.
PAT : توکن دسترسی که در مراحل قبل ایجاد کردیم (personal access token) را جایگزین این مقدار میکنیم.
سپس موارد اضافه شده در فایل را سیو میکنیم و سپس اقدام به ایجاد یک رکورد git version control میکنیم.
در سیپنل، بخش Git version control را پیدا کرده و روی آن کلیک کنید.
در این صفحه می توانید رکوردهای ایجاد شده توسط git version control را مشاهده و مدیریت بفرمایید. برای اضافه کردن یک رکورد جدید، گزینه create را انتخاب میکنیم.
در صفحه جدید، باید تنظیمات مربوط به این اتصال جدید نظیر آدرس repository، مسیر ایجاد فایل در هاست و نام این رکورد را قرار دهیم.
Clone a Repository: توجه داشته باشید که تیک این گزینه فعال باشد.
Clone URL : در این بخش باید url ریپازیتوری را جهت کلون کردن کپی کرده و در این بخش قرار دهید. برای یافتن url جهت کلون کردن وارد مسیر ریپازیتوری مذکور در گیت هاب شوید. بر روی بخش Code کلیک کرده، در تب لوکال و از بخش HTTPS میتوانید url مد نظر را مشاهده و کپی کنید.
Repository Path : در این بخش مسیر قرار گرفتن پروژه خود را در هاست مشخص میکنیم. می توانید آدرس فولدری را وارد کنید که در حال حاضر وجود دارد و یا اینکه نام فولدر جدیدی را وارد کنید تا ساخته شود و پروژه در آن قرار گیرد.
Repository Name : در این بخش نام رکوردی که در git version control را وارد میکنیم.
سپس گزینه create را انتخاب میکنیم و رکورد مد نظر ما ایجاد شده و پروژه در هاست Clone میشود.
در حال حاضر، هاست به ریپازیتوری مد نظر ما متصل شده است. برای مدیریت کردن دستی پروژه، به این صورت که تغییرات را بر روی گیت هاب آپلود کنیم و یا تغییرات جدید گیت هاب را در هاست دریافت کنیم می توانیم در بخش git version control در مقابل رکورد مد نظر، بر روی manage کلیک کنیم.
سپس در صفحه جدید در تب basic information می توانیم مواردی نظیر نام repository و یا برنج انتخابی را تغییر داده و آپدیت کنیم. همچنین در این بخش میتوانیم مواردی نظیر آخرین کامیت، clone url و اطلاعات دیگر در رابطه با این رکورد مشاهده کنیم.
در تب pull or deploy می توانیم علاوه بر اطلاعات این رکورد، دو گزینه Update from remote و Deploy Head commit را مشاهده میکنیم. برای دریافت دستی آپدیتهای جدید پروژه از گیت هاب، می توانیم از گزینه Update from remote استفاده کنیم.
فعال کردن auto pull برای پروژه
یکی از موارد مورد توجه که میتواند فرآیند آپدیت کردن پروژه را در هاست آسان تر کند، اضافه کردن دریافت خودکار یا همان auto pull برای پروژه میباشد. با اضافه کردن این مورد، دیگر نیازی به آپدیت و دریافت دستی از هاست نبوده و با هر push کردن در گیت هاب، تغییرات اعمال شده در هاست نیز اعمال میشوند.
برای این منظور از وب هوکهای تعبیه شده توسط گیت هاب استفاده میکنیم. برای استفاده از این مورد ما در مسیر دامنه یا ساب دامنه یک فایل به نام webhook.php ایجاد میکنیم و مجوز آن را به 0600 تغییر میدهیم.
نکته: در این آموزش مسیر به صورت پیش فرض public_html و نام فایل webhook.php در نظر گرفته شده است. اگر پروژه بر روی Addon domain و یا Subdomain است، در آن مسیر باید موارد را انجام دهید. توصیه میشود این فایل را در مسیر پروژه و با همین نام webhook.php ایجاد کنید. همچنین در صورتی که نام فایل را غیر از webhook.php قرار بدهید، باید دقت کنید در ادامنه در آدرسدهی نایم فایل را تغییر دهید.
فایل webhook.php را باز کرده و کد های زیر را در این فایل قرار می دهیم:
<?php $secret = 'your-secret-key'; $rawPost = file_get_contents('php://input'); $signature = $_SERVER['HTTP_X_HUB_SIGNATURE'] ?? ''; if ($signature && hash_equals('sha1=' . hash_hmac('sha1', $rawPost, $secret), $signature)) { $repoPath = '/home/your-username/your-repo-path'; $branch = 'main'; // Run the git pull command $output = []; exec("cd $repoPath && git reset --hard origin/$branch && git pull 2>&1", $output); } else { http_response_code(403); echo "Access denied!"; }
your-secret-key : به جای این مقدار باید یک کلید secret به صورت رندوم تولید کنیم و در این فایل قرار دهیم. برای این منظور میتوانید از اسکریپتهای دست شخصی و یا از ابزار های آنلاین استفاده بفرمایید.
$repoPath : برای این مقدار باید مسیر دقیق پروژه در هاست را قرار دهید. دقت بفرمایید در ابتدای آدرس باید home/host-username/ را قرار دهید و سپس بقیه مسیر را از فایل منیجر هاست اضافه کنید.
$branch : این مورد هم بیانگر برنچ مد نظر برای دیپلوی در هاست میباشد.
در نظر داشته باشید اگر بخواهیم دستورات خاصی را پس از آپدیت پروژه در سیپنل ران کنیم، میتوانیم کد ها را به این صورت قرار دهیم:
<?php $secret = 'your-secret-key'; $rawPost = file_get_contents('php://input'); $signature = $_SERVER['HTTP_X_HUB_SIGNATURE'] ?? ''; if ($signature && hash_equals('sha1=' . hash_hmac('sha1', $rawPost, $secret), $signature)) { $repoPath = '/home/your-username/your-repo-path'; $branch = 'main'; // Run the git pull command $output = []; exec("cd $repoPath && git reset --hard origin/$branch && git pull 2>&1", $output); // Run additional command exec("cd $repoPath && sample command 2>&1", $output); exec("cd $repoPath && composer install 2>&1", $output); } else { http_response_code(403); echo "Access denied!"; }
در بخش Run additional command می توانیم به جای عبارت sample command، دستور مورد نظر را قرار دهید تا در ترمینال ران شود. به عنوان مثال دستور نصب composer در خط بعد آن قرار گرفته است. به همین میتوانید دستور های مد نظر خود را پس از دریافت خودکار اجرا کنید و محدودیتی در تعداد این دستور ها جهت ران شدن وجود ندارد.
پس از اینکه موارد گفته شده را تغییر دادیم و فایل را سیو کردیم، باید به اکانت گیت هاب خود مراجعه کنیم تا وبهوک را برای این پروژه ست کنیم. در گیت هاب وارد ریپازیتوری متصل شده به هاست میشویم. سپس از بخش نوار بالای پروژه، گزینه setting را انتخاب کنید. در صفحه جدید، از منوی باز شده گزینه webhooks را انتخاب میکنیم تا صفحه جدیدی لود شود. سپس گزینه add webhook را انتخاب میکنیم.
در صفحه جدید که باز میشود باید مشخصات وب هوک خود را وارد کرده و رکورد آن را ایجاد کنیم.
Payload URL : در این بخش باید دامنه خود و سپس یک روت خاص از آن را وارد بفرمایید که در صورت تغییر پروژه گیت هاب در اثر push کردن، این تغییرات جدید به این Payload URL ارسال شود. در نظر داشته باشید که webhook/ پس از دامنه یک مورد پیش فرض است که ایجاد کردیم. اگر میخواهید روت خاص و دیگری را برای این مورد اختصاص دهید، میتوانید به این صورت عمل کنید اما در نظر داشته باشید که در ادامه باید مسیری که انتخاب کردهاید را به جای webhook/ وارد کنید. همچنین این مورد را در نظر داشته باشید که حدالامکان مسیری که برای این مورد انتخاب میکنید، روت پروژه شما نباشد.
Content type : مقدار را بر روی application/json قرار میدهیم.
Secret: همان کلید سکرتی که در قدم های قبل ایجاد کردیم و در فایل webhook.php قرار دادیم، باید در این فیلد وارد شود.
SSL verification : باید گزینه Enable SSL verification انتخاب شده باشد.
برای سوال ?Which events would you like to trigger this webhook هم باید گزینه Just the push event انتخاب شده باشد.
دقت داشته باشید که حتما تیک گزینه Active هم فعال باشد. سپس بر روی Add webhook کیلک میکنیم و وبهوک مد نظر ما ایجاد میشود.
حال فقط نیاز داریم تا قدم آخر را برای این مورد برداشته و auto pull را برای پروژه خود فعال کنیم. وارد فایل منیجیر سیپنل میشویم. سپس وارد مسیر پروژه شده و فایل htaccess. را باز میکنیم.
نکته: دقت بفرمایید که منظور از مسیر پروژه در آموزش ما به طور پیش فرض مسیر دامنه اصلی یا public_html میباشد. در صورتی که از Addon domain و یا Subdomain استفاده میکنید، مسیر مربوطه را باز کنید.فایل htaccess. موجود در این مسیر را باز کنید و در صورتی این فایل ایجاد نشده است، آنرا ایجاد بفرمایید.
کد های زیر را در htaccess. و حتما در ابتدای فایل قرار دهید:
RewriteEngine On RewriteRule ^webhook$ /webhook.php [L]
در این بخش باید به 2 نکته توجه بفرمایید:
1) در صورتی که در بخش اضافه کردن وبهوک در گیت هاب، مسیر را به صورت https://domain.com/webhook قرار داده اید، بخش $webhook^ را بدون تغییر بگذارید. اما اگر در این بخش هر مسیر دیگری به جای webhook قرار داده اید، باید این بخش از htaccess. را هم تغییر دهید. به عنوان مثال اگر url را به صورت https://domain.com/hookroot وارد کرده اید، در htaccess به جای $webhook^ باید قرار دهید $hookroot^ .
2) اگر فایل webhook.php را در مسیر پروژه ایجاد کردهاید، بخش webhook.php/ بدون تغییر می ماند. اما اگر در مسیر دیگری ایجاد شده است، باید مسیر فایل به صورت کامل جایگزین شود. به عنوان مثال باید به صورت (home/host-user/fileroot/filename.php/) قرار دهید.
سپس فایل را سیو میکنیم و کار ما در این مرحله به اتمام میرسد. اکنون هر گونه تغییری در پروژه ایجاد شود و در repository گیت هاب push شود، فایل پروژه در هاست نیز آپدیت میشود.
اضافه کردن لاگ webhook
وجود لاگ همواره می تواند اطلاعات کاملتری در ارتباط با روند پروژه برای ما محیا کند. مواردی مانند روند توسعه و تغییر پروژه، برخورد با ارور های مختلف در صورت این تغییرات و … ممکن است منجر به اختلال در پروژه شود. در این صورت وجود فایل لاگ میتواند کمک شایانی در برطرف کردن این مورد برای ما باشد. در نظر داشته باشید در این روند اگر اروری در روند pull شدن پروژه به وقوع بپیوندد، شما قادر به مشاهده آن نیستید. مگر اینکه اقدام به pull کردن به صورت دستی کنید که در اواسط آموزش خدمت شما گفته شد. با این کار، شما میتوانید پیغام ارور را مشاهده کنید.
اما اگر میخواهید که روند فعال شدن و تغییرات اعمال شده در پروژه بر اثر trigger شدن وبهوک را به صورت کامل مشاهده بفرمایید، میتوانیم بنا بر مواردی که در ادامه خواهیم گفت، یک فایل لاگ برای وبهوک ایجاد کنیم. برای این مورد در مسیری که فایل webhook.php قرار دارد، یک فایل به نام webhook.log ایجاد کرده و مجور آن را به 0666 تغییر میدهیم. سپس فایل webhook.php را به این صورت تغییر می دهیم.
<?php $secret = 'your-secret-key'; $logFile = '/home/your-username/webhook.log'; function logMessage($message) { global $logFile; $timestamp = date('Y-m-d H:i:s'); file_put_contents($logFile, "[$timestamp] $message\n", FILE_APPEND); } $rawPost = file_get_contents('php://input'); $signature = $_SERVER['HTTP_X_HUB_SIGNATURE'] ?? ''; logMessage("Webhook triggered."); if ($signature && hash_equals('sha1=' . hash_hmac('sha1', $rawPost, $secret), $signature)) { logMessage("Signature verified successfully."); $repoPath = '/home/your-username/your-repo-path'; $branch = 'main'; $output = []; $returnVar = 0; exec("cd $repoPath && git reset --hard origin/$branch && git pull 2>&1", $output, $returnVar); foreach ($output as $line) { logMessage("GIT OUTPUT: $line"); } if ($returnVar === 0) { logMessage("Git pull completed successfully."); } else { logMessage("Git pull failed with return code: $returnVar"); } echo "Webhook processed successfully."; } else { logMessage("Invalid signature or access denied."); http_response_code(403); echo "Access denied!"; } logMessage("Webhook process ended."); ?>
secret : برای این مقدار، کلید secret خود را که در webhook گیت هاب ست کرده بودیم، قرار میدهیم.
logFile: مسیر دقیق فایل لاگ را مشخص میکنیم تا موارد مورد نیاز را در این فایل ذخیره کنیم.
repoPath : برای این مقدار هم، مسیر فایل پروژه را قرار میدهیم تا تغییرات در این مسیر اعمال شوند.
branch: در این بخش هم نام branch مد نظر خود را قرار میدهیم.
با انجام این مورد، پس از هرگونه تغییر، یک فایل لاگ با جزئیات از روند تغییرات پروژه خود داریم که می تواند در صورت مواجه شدن با مورد خاصی، کمک زیادی کند. در نظر داشته باشید اگر پس از تغییرات، پروژه شما در سیپنل آپدیت نمیشود، باید این فایل را بررسی بفرمایید تا ارور مربوطه را مشاهده و رفع بفرمایید.
نکته: در صورتی که مسیر فایل webhook.php را تغییر داده اید و در مسیری در غیر پروژه قرار داده اید، جهت سهولت کار، فایل webhook.log را نیز در مسیر همین فایل ایجاد کنید و مسیر دهی ها را در کد اصلاح بفرمایید.
امیدواریم که این آموزش برای شما مفید واقع شده باشد. در صورت بروز با هرگونه مشکل و یا سوالی، می توانید به بخش پشتیبانی تیکت ارسال بفرمایید تا همکاران ما در اسرع وقت شما را راهنمایی کنند.