push کردن پروژه در سرور با استفاده از گیت

سلام

در این آموزش می‌خواهم به یک موضوع جالب و حائز اهمیت در گیت بپردازم. خیلی از دوستانی که چندین ساله در حوزه برنامه نویسی فعالیت دارن با گیت آشنایی دارن. اما موضوعی که گیت رو برای خیلی از برنامه نویسان جالب می کنه امکان ارتباط با سرور و پوش کردن تغییرات پروژه در سرور هست.

در اینجا یک تعریف مقدماتی از گیت ارائه میدم و بعد به ارتباط سرور و کامپیوتر مبدا در گیت می پردازیم:

گیت یک نرم افزار ورژن کنترل است که برای دنبال کردن تغییر فایل های پروژه و دنبال کردن کارهای انجام شده روی آن ها مفیده.

گیت بیشتر برای پروژه‌هایی استفاده میشه که چند نفر از اعضای یک تیم برنامه نویسی به طور همزمان روی سورس کد اون کار می کنن. در این جا قصد ندارم گیت رو آموزش بدم. اما می خوام به بحث ارتباط بین یک کامپیوتر مبدا و سرور با استفاده از گیت بپردازم. بهتره یکبار برای همیشه با این مفهوم و کاربرد اون به طور کامل آشنا بشید. مطمئنم بالاخره یه جایی حتما براتون مفید و موثر خواهد بود.

و اما اصل مطلب:

دو راه برای اعمال تغییرات سورس پروژه روی سرور وجود داره:

راه اول اینه که به محض اینکه یک فایل از فایل های پروژه رو تغییر میدیم بلافاصله اونو روی سرور آپلود کنیم و تغییرات رو مشاهده کنیم. در این روش برای ارتباط با سرور از پروتکل FTP استفاده می کنیم و به محض تغییر یک فایل (حتی تغییر یک خط از اون) اون رو در سرور آپلود می کنیم. بیشتر ما برنامه نویسا با این روش آشنایی داریم.

و اما راه دوم و روش بهینه تر: در روش دوم یک ریپوسیتوری گیت روی سرور ایجاد می کنیم و سورس پروژه رو که روی کامپیوتر مبدا (لوکال هاست) داریم با هم دیگه به هنگام سازی می کنیم. در این روش به هنگام کامیت کردن تغییرات روی کامپیوتر مبدا و پس از اون پوش کردن اون ها روی سرور اطلاعات مستقیما به سرور منتقل می شن.

قبل از هرچیزی بهتره شما رو با معایب و مزیت های این روش آشنا کنم

در روش اول (یعنی اتصال با استفاده از FTP و آپلود فایل ها) پهنای باند اینترنت شما بیش از حد مورد استفاده قرار میگیره. چون اگر شما به عنوان مثال 20 فایل رو آپلود کنید و هر فایل مثلا حجمی برابر 10 کیلو بایت داشته باشه مصرف پهنای باند شما 200 کیلو بایت میشه. (البته درسته که این اعداد، اعداد کوچیکی هستند اما در روند کار یک پروژه در طولانی مدت مصرف پهنای باند شما به شدت افزایش پیدا می کنه).

اما در روش دوم (یعنی با استفاده از گیت) شما فایلی رو آپلود نمی کنید. بلکه تغییرات فایل ها رو در سرور پوش می‌کنید. (حالا توضیح میدم یعنی چی!). مثلا از همون مثال بالا استفاده می کنیم. اگر شما 20 تا فایل داشته باشید که هر کدوم 10 کیلوبایت باشن و اون ها رو در سرور پوش کنید اینجا شما 200 کیلوبایت پهنای باند مصرف نکردید. چون امکان داره که هر کدوم از این 20 فایل فقط یه خطشون تغییر کرده باشه و گیت هم دقیقا میاد اون یه خط تغییر رو در سرور ثبت می کنه (در واقع تغییرات رو در فایل های روی سرور اعمال می کنه. نه اینکه یک فایل رو به طور کامل آپلود کنه).

حالا وقتش رسیده است که یک راه حل علمی یاد بگیریم

قبل از هرچیزی لازمه بگم برای این کار وقت و حوصله بزارید و با دقت تمام انجامش بدید.

شنونده خوبی باشید و تمام نکاتی که گفته میشه رو با دقت گوش کنید، بازم تاکید می کنم که شنونده خوبی باشید.

اول از همه باید گیت رو روی سرور مجازی یا اختصاصی مون نصب کنیم. فرض کنیم که شما از سیستم عامل لینوکس (سنت او اس) استفاده می کنید.

بدون هیچ معطلی شروع کنید.

برای نصب گیت در سرور از دستور زیر استفاده می کنیم:

yum install git

بعد از اتمام نصب برای اینکه مطمئن بشید گیت نصب شده دستور زیر را به کار می‌بریم:

git --version

با وارد کردن دستور بالا ورژن گیت نصب شده روی سرور نشون داده میشه که این نشون دهنده موفقیت آمیز بودن نصب هست.

بعد از اون باید public key کامپیوترتون رو درفایل مربوطه روی سرور قرار بدین تا بتونید از دستور push به راحتی استفاده کنید.

برای اینکار در سرور از دستور زیر استفاده می کنیم تا بتونیم فایلی رو که کلید های عمومی در اون قرار دارن رو ویرایش کنیم.

cd ~/.ssh

حالا کلید های عمومی در فایلی در همین مسیر با نام authorized_keys قرار دارن. بنابراین دستور زیر رو وارد میکنیم:

vi authorized_keys

و کلید عمومی رو که روی کامپیوتر مبدا وجود داره در انتهای این فایل قرار میدیم.

نکته: برای دسترسی به فایل کلید عمومی روی کامپیوتر مبدا و کپی محتویات اون در لینوکس می تونیم به مسیر

~/.ssh/id_rsa.pub

و در ویندوز می تونیم به مسیر

C:\Users\Farhad\.ssh\id_rsa.pub 

بریم.

که Farhad نام کاربری ویندوزتون هست.

در مرحله بعد یک دایرکتوری فرضی روی سرور می‌سازیم و یک ریپوسیتوری گیت در اون ایجاد می کنیم. نکته قابل توجه اینه که ریپوسیتوری هایی که روی سرور ایجاد میشه باید از نوع bare باشه. ریپوسیتوری bare ریپوسیتوری ای هست که روی سرور ها ایجاد میشه و برای انتقال فایل ها بین کلاینت و سرور مورد استفاده قرار می گیره.

برای اینکار در سرور به مسیر زیر میریم:

cd /home/admin/domains/domain.com/public_html

سپس یک دایرکتوری فرضی ایجاد می‌کنیم و وارد اون می‌شیم:

mkdir repo && cd repo

و سپس یک ریپوسیتوری از نوع bare می سازیم:

git init repo.git –-bare

که repo.git اسم دایرکتوری گیت هست. درحالت معمول نام دایرکتوری گیت .git هست اما در اینجا ما نام دایرکتوری رو به repo.git تغییر دادیم.

در مرحله بعد باید وارد مسیر زیر بشیم:

cd repo.git
cd hooks

و حالا از دستور زیر استفاده می کنیم:

cat > post-receive

و سپس:

#!/bin/sh
git --work-tree=/home/admin/domains/domain.com/public_html/repo --git-dir=/home/admin/domains/domain.com/public_html/repo/repo.git  checkout -f

بعد از اون کلید های ctrl + d رو می زنیم.

منظور از work-tree آدرس دایرکتوری هست که ریپوسیتوری توی اون قرار داره و منظور از git-dir آدرس پوشه ریپوسیتوری هست. (همون repo.git )

بعد از این مرحله باید به فایل ساخته شده با نام post-receive حالت اجرایی بدیم. برای اینکار دستور زیر رو وارد میکنیم.

chmod +x post-receive

تا اینجای کار، ریپوسیتوری گیت روی سرور ساخته شده و حالا حالا وقت این رسیده که فایل ها رو از کامپیوتر مبدا به سرور منتقل کنیم.

حالا باید ریپوسیتوری رو از سرور clone کنیم که بهتره شما هم دست به کار بشید و اینکارو با هم انجام میدیم.

روی کامپیوتر مبدا دستور زیر رو در گیت بش وارد می کنیم:

git clone ssh://root@192.168.1.1/home/admin/domains/domain.com/public_html/repo/repo.git

به جای root می تونید نام کاربری که با اون وارد ترمینال سرور شدید رو قرار بدید و به جای 192.168.1.1 آدرس آی پی سرور رو قرار بدید.

حالا سیستم از ما رمز عبور ssh key رو میخواد که اون رو وارد می کنیم.

و حالا یک ریپوسیتوری خالی در کامپیوتر مبدا ساخته میشه.

و در مرحله آخر فایل های پروژه رو در دایرکتوری ایجاد شده در کامپیوتر مبدا کپی می کنیم و سپس از دستور add استفاده میکنیم. به صورت زیر:

git add .

و سپس کامیت میکنیم:

git commit –m “test message”

در انتها تغییرات رو روی سرور پوش می کنیم:

git push –u origin --all

در اینجا سیستم مجددا ازتون رمز عبور ssh key رو می خواد که اون رو وارد میکنیم.

حالا اگر وارد ترمینال سرور بشید و دایرکتوری مربوطه رو ببینید مشاهده می کنید که فایل ها به درستی روی سرور پوش شده

تبریک میگم! شما تونستید انتقال فایل ها رو بین کامپیوتر مبدا و سرور با استفاده از گیت به درستی انجام بدید.

حالا دیگه به عنوان یک برنامه نویس حرفه ای با مفهوم گیت و کاربرد اون آشنایی کامل دارید.

اگر سوال، نظر یا پیشنهادی در رابطه با این مقاله دارید، خوشحال میشم با من مطرح کنید. از طریق بخش کامنت‌های این مقاله با من در تماس باشید.