Programming

آموزش مرحله به مرحله نصب و استقرار لاراول روی سرور مجازی VPS

توسعه برنامه‌های وب مدرن full-stack به لطف لاراول بسیار آسان‌تر شده است، اما نصب و استقرار آن ها بر روی یک سرور واقعی مانند VPS ها داستان دیگری است. گزینه های بسیاری برای پیاده سازی آن وجود دارد مانند استفاده از هاست های مدیریت نشده، سرور های مجازی، سرور های اشتراکی و… در ادامه به بررسی دقیق تر می پردازیم.

نصب و استقرار یک اپلیکیشن لاراول روی یک سرور اشتراکی با استفاده از کنترل پنل cPanel به آسانی ذخیره کردن سورس کد به همراه تمام وابستگی ها و آپلود آن در سرور است. اما به خاطر داشته باشید که در هاست اشتراکی، کنترل زیادی روی سرور ندارید.

برای استفاده از یک سرور مناسب برای این کار، سرور های مجازی مدیریت نشده مقرون به صرفه هستند و کنترل زیادی روی سرور برای کاربران ارائه می دهند. شما می توانید از سروری با 2 گیگابایت رم، 75 گیگابایت فضای ذخیره سازی NVMe و پهنای باند نا محدود استفاده کنید که فقط 199 هزار تومان در ماه هزینه دارد.

برای مشاهده ارزان ترین و با کیفیت ترین پلن های VPS بر روی لینک زیر کلیک کنید

خرید بهترین VPS

مشکل سرور های مجازی خصوصی مدیریت نشده این است که آن ها مدیریت نمی شوند. شما مسئول نصب کلیه نرم افزار های لازم، پیکربندی و به روز نگه داشتن آن ها خواهید بود. اما در ممتاز سرور با پشتیبانی 24/7 جای نگرانی برای مدیریت سرور شما نیست.

در این مقاله، شما را گام به گام در فرآیند نصب و استقرار پروژه لاراول بر روی یک سرور مجازی VPS مدیریت نشده راهنمایی می کنیم. اگر می خواهید ابتدا مزایای فریم ورک لاراول را بررسی کنید، به این سوال پاسخ دهید که چرا باید از فریم ورک لاراول استفاده کنید.

پیش نیازها

فرض این مقاله اینست که شما تجربه قبلی کار با محیط CLI لینوکس را دارید. این سرور VPS برای نصب لاراول از اوبونتو به عنوان سیستم عامل خود استفاده می کند و شما باید تمام کار های لازم را از طریق ترمینال انجام دهید. این مقاله همچنین از شما انتظار دارد که مفاهیم پایه مانند Sudo، مجوز های فایل، تفاوت بین کاربر root و غیر root و git را درک کنید.

سورس کد پروژه و مراحل استقرار بر روی سرور

ما یک پروژه تست برای این مقاله ساخته ایم. این پروژه یک برنامه ساده برای صفحه سؤال است که در آن کاربران می توانند سؤالی را ارسال کنند و دیگران می توانند به آن سؤال پاسخ دهند. می‌توانید این برنامه در واقع نسخه‌ای از StackOverflow است.

سورس کد پروژه در https://github.com/fhsinchy/guide-to-deploying-laravel-on-vps موجود است. یک کپی از این منبع درست کنید و آن را در سیستم خود شبیه سازی کنید.

زمانی که یک کپی از پروژه را روی سیستم خود تهیه کردید، آماده شروع فرآیند نصب و استقرار لاراول هستید، شما با خرید یک سرور VPS جدید و پیدا کردن راهی برای انتقال سورس کد ها از سیستم خود به سرور شروع می‌کنید. در ممتاز سرور مراحل نصب و دسترسی به پورت ssh برای شما فراهم می شود، اما برای اطمینان از برقراری امنیت به شما پیشنهاد می شود که پورت ssh را تغییر دهید.


ایجاد کلید SSH جدید

به گفته ویکی پدیا – “Secure Shell (SSH) یک پروتکل شبکه رمزنگاری برای انجام عملیات ایمن شبکه در یک شبکه ناامن است.” این قابلیت به شما امکان می دهد با استفاده از یک رمز عبور یا یک کلید به یک سرور راه دور متصل شوید.

اگر قبلاً با SSH آشنایی دارید و قبلاً کلید SSH را در رایانه خود ایجاد کرده‌اید، می‌توانید از این بخش صرفنظر کنید. برای ایجاد یک کلید جدید در ماشین‌های macOS، Linux یا Windows 10، دستور زیر را اجرا کنید:

ssh-keygen -t rsa

چندین دستور را در ترمینال خود خواهید دید. با فشردن اینتر می توانید از آن ها عبور کنید. شما هم لازم نیست رمز عبور بگذارید. هنگامی که کلید را ایجاد کردید، فایلی به نام id_rsa.pub در دایرکتوری ~/.ssh/ پیدا خواهید کرد.


انجام تنظیمات اولیه

بعد از خرید هاست vps که سرور جدید شما راه اندازی شده است، زمان آن رسیده که تنظیمات اولیه را انجام دهید. ابتدا از SSH با آدرس IP سرور برای ورود به عنوان کاربر اصلی استفاده کنید.

ssh root@104.248.157.172

می توانید آدرس IP سرور را در داشبورد یا در داخل جزئیات سرور پیدا کنید. هنگامی که داخل سرور هستید، اولین کاری که باید انجام دهید این است که یک کاربر غیر root جدید ایجاد کنید.

به‌طور پیش‌فرض، هر سرور فقط با کاربر اصلی یا همان root ارائه می‌شود. همانطور که قبلاً می دانید کاربر اصلی بسیار قدرتمند است. اگر کسی موفق شود سرور شما را هک کند و به عنوان کاربر root وارد شود، هکر می تواند تمامی اطلاعات شما را ویران کند. غیرفعال کردن ورود به سیستم برای کاربر root می تواند از چنین اتفاقات ناگواری جلوگیری کند.

همچنین، ورود به سیستم با استفاده از کلید SSH، امن تر از ورود با استفاده از رمز عبور است. بنابراین، غیرفعال کردن ورود به سرور با استفاده از رمز عبور باید برای همه کاربران غیرفعال شود. برای ایجاد یک کاربر جدید از ترمینال، دستور زیر را در سرور خود اجرا کنید:

adduser nonroot

نام nonroot می تواند هر چیزی باشد که شما می خواهید نامگذاری کنید. ما از nonroot به عنوان نام استفاده کردیم تا این مسئله را روشن کنیم که این یک کاربر غیر root است. برنامه adduser یک رمز عبور و چندین اطلاعات دیگر را می خواهد. یک رمز عبور قوی قرار دهید و بقیه را خالی بگذارید.

پس از ایجاد کاربر، باید این کاربر جدید را به گروه sudo اضافه کنید. در غیر این صورت، کاربر nonroot قادر به اجرای دستورات با استفاده از sudo نخواهد بود.

usermod -aG sudo nonroot

در این دستور sudo نام گروه و nonroot نام کاربری است. حال، اگر بخواهید وارد این حساب کاربری شوید، با خطای permission denied مواجه خواهید شد.

این خطا به این دلیل اتفاق می افتد که اکثر ارائه دهندگان VPS هنگام اضافه کردن یک کلید SSH به سرور، ورود با استفاده از رمز عبور را غیرفعال می کنند و کاربر جدید را برای استفاده از کلید SSH پیکربندی نکرده اید و اینگونه قادر به شروع نصب لاراول بر روی سرور خود نخواهید بود. یک راه آسان برای رفع این مشکل، کپی کردن محتوای پوشه /root/.ssh در پوشه /home/nonroot/.ssh است. برای این کار می توانید از برنامه rsync استفاده کنید.

rsync --archive --chown=nonroot:nonroot /root/.ssh /home/nonroot

گزینه –archive برای rsync دایرکتوری ها را به صورت بازگشتی کپی می کند و پیوند های نمادین، مالکیت کاربر و گروه و برچسب های زمانی را حفظ می کند. گزینه –chown کاربر nonroot را به عنوان مالک در مقصد تعیین می کند. اکنون باید بتوانید با استفاده از SSH به عنوان کاربر جدید وارد شوید.

پس از وارد شدن به عنوان یک کاربر غیر root، باید سیستم عامل را شامل تمامی برنامه های نصب شده روی سرور به روز رسانی کنید. برای این کار دستور زیر را اجرا کنید:

sudo apt update && sudo apt upgrade -y && sudo apt dist-upgrade -y

دانلود و نصب آپدیت ها چند دقیقه طول می کشد. در طی این فرآیند، اگر صفحه‌ای با عنوان «Configuring openssh-server» مشاهده کردید که در مورد برخی تغییرات فایل سؤال می‌کند، گزینه «keep the local version now installed» را انتخاب کرده و enter را فشار دهید.

پس از اتمام فرآیند به روز رسانی، با اجرای دستور sudo reboot سرور را راه اندازی مجدد کنید. چند دقیقه صبر کنید تا سرور دوباره بوت شود و دوباره به عنوان یک کاربر غیر روت وارد شوید.


استقرار کد لاراول روی سرور

پس از تکمیل تنظیمات اولیه، مورد بعدی که باید با آن مقابله کنید، نصب وابستگی ها و استقرار کد لاراول بر روی سرور VPS است. بعضی از برنامه نویسان سورس کد را در جایی در سرور تولید شبیه‌سازی می‌کنند و هر زمان که تغییرات جدیدی در کد ایجاد می‌شود، وارد سرور می‌شوند تا یک pull انجام دهند.

راه بسیار بهتری برای انجام این کار وجود دارد. به جای ورود به سرور برای انجام عملیات pull، می توانید از خود سرور به عنوان یک مخزن (repository) استفاده کنید و کد را مستقیماً به سرور بفرستید. همچنین می‌توانید مراحل پس از استقرار مانند نصب وابستگی‌ها، اجرای مهاجرت‌ها و غیره را خودکار کنید، که استقرار لاراول روی سرور VPS را به یک اقدام بدون زحمت تبدیل می‌کند. اما قبل از انجام همه این ها، ابتدا باید PHP و Composer را روی سرور نصب کنید.

نصب PHP

می توانید لیستی از پکیج های PHP مورد نیاز لاراول را در قسمت docs لاراول پیدا کنید. برای نصب تمام این پکیج ها، دستور زیر را بر روی سرور خود اجرا کنید:

sudo apt install php7.4-fpm php7.4-bcmath php7.4-json php7.4-mbstring php7.4-xml -y

بسته به اینکه از MySQL یا PostgreSQL یا SQLite در پروژه خود استفاده می کنید، باید یکی از پکیج های زیر را نصب کنید:

sudo apt install php7.4-mysql php7.4-pgsql php7.4-sqlite3 -y

بسته زیر از پایگاه داده های حافظه داخلی Redis پشتیبانی می کند:

sudo apt install php7.4-redis

به غیر از این پکیج ها، به ابزار های php-curl، php-zip، zip، unzip و curl نیز نیاز دارید.

sudo apt install zip unzip php7.4-zip curl php7.4-curl -y

این پروژه بانک سوالات از MySQL به عنوان سیستم پایگاه داده و Redis برای عملیات کش و اجرای صف ها استفاده می کند، بنابراین شما باید بسته های php7.4-mysql و php7.4-redis را نصب کنید.

بسته به پروژه، ممکن است مجبور شوید پکیج های PHP بیشتری نصب کنید. به عنوان مثال، پروژه هایی که با تصاویر کار می کنند و مثال هایی از این قبیل. همچنین، لازم نیست نسخه PHP را با نام هر بسته ذکر کنید. اگر شماره نسخه را مشخص نکنید، APT به‌طور خودکار آخرین نسخه را نصب می‌کند.

نصب Composer

پس از نصب PHP و تمامی پکیج های مورد نیاز روی سرور، اکنون آماده نصب Composer هستید. برای انجام این کار، به صفحه رسمی دانلود کامپوزر بروید و دستورالعمل های نصب را دنبال کنید یا دستورات زیر را اجرا کنید:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
sudo php composer-setup.php --install-dir /usr/local/bin --filename composer
php -r "unlink('composer-setup.php');"

اکنون که PHP و Composer را روی سرور خود نصب کرده اید، آماده پیکربندی برای استقرار کد لاراول خود بر روی سرور مجازی VPS هستید.

استقرار کد با استفاده از Git

برای استقرار خودکار کد روی سرور، به عنوان یک کاربر غیر root وارد شوید و یک دایرکتوری جدید در پوشه /home/nonroot ایجاد کنید. شما از این دایرکتوری به عنوان repository استفاده می کنید و کد تولید را به آن تزریق می کنید.

mkdir -p /home/nonroot/repo/question-board.git

گزینه -p در دستور mkdir هر مخزن والد موجود را ایجاد می کند. در مرحله بعد، cd را به فهرستی که به تازگی ایجاد شده است اضافه کنید و یک مخزن گیت خالی جدید را مقداردهی اولیه کنید.

cd /home/nonroot/repo/question-board.git
git init --bare

یک bare مانند یک مخزن git معمولی است، با این تفاوت که “درخت کاری” ندارد. استفاده عملی از چنین مخزن git به عنوان یک منبع راه دور است. اگر الان متوجه جمله قبل نشدید، نگران نباشید. در ادامه همه چیز شفاف می شود.

با فرض اینکه هنوز داخل دایرکتوری /home/nonroot/repo/question-board.git هستید، cd را در زیر شاخه hooks قرار دهید و یک فایل جدید به نام post-receive ایجاد کنید.

cd hooks
touch post-receive

فایل‌های داخل این دایرکتوری اسکریپت‌های پوسته معمولی هستند که وقتی رویداد مهمی در یک مخزن اتفاق می‌افتد، گیت را فراخوانی می‌کنند. هر زمان که مقداری کد را push کنید، git منتظر می ماند تا تمام کد ها دریافت شود و سپس اسکریپت پس از دریافت را فراخوانی می کند.

با فرض اینکه هنوز در دایرکتوری hooks هستید، اسکریپت پس از دریافت را با اجرای دستور زیر باز کنید:

nano post-receive

اکنون محتوای اسکریپت را به صورت زیر آپدیت کنید:

#!/bin/sh
sudo /sbin/deploy

همانطور که قبلاً حدس زده اید، /sbin/deploy اسکریپت دیگری است که باید ایجاد کنید. دایرکتوری /sbin عمدتاً مسئول ذخیره اسکریپت هایی است که وظایف اداری را انجام می دهند. ادامه دهید و اسکریپت /sbin/deploy را پیدا کنید و آن را با استفاده از ویرایشگر متن نانو باز کنید.

sudo touch /sbin/deploy
sudo nano /sbin/deploy

اکنون محتوای اسکریپت را به صورت زیر به روز کنید:

#!/bin/sh
git --work-tree=/srv/question-board --git-dir=/home/nonroot/repo/question-board.git checkout -f

با خط #!/bin/sh مشخص است، این یک اسکریپت پوسته است. پس از آن خط، تنها خط کد موجود در این اسکریپت محتوای مخزن /home/nonroot/repo/question-board.git را در فهرست راهنمای /srv/question-board کپی می کند.

در اینجا گزینه –work-tree فهرست مقصد را مشخص می کند و گزینه –git-dir مخزن منبع را مشخص می کند. ما از دایرکتوری srv/ برای ذخیره فایل های ارائه شده توسط این سرور استفاده کنم. اگر می خواهید از پوشه /var/www استفاده کنید، ادامه دهید.

با زدن Ctrl + O فایل را ذخیره کنید و با زدن کلیدهای ترکیبی Ctrl + X از nano خارج شوید. با اجرای دستور زیر مطمئن شوید که اسکریپت دارای مجوز اجرایی است:

sudo chmod +x post-receive

آخرین مرحله برای کاربردی کردن این فرآیند، ایجاد درخت کاری یا فهرست مقصد است. برای این کار دستور زیر را اجرا کنید:

sudo mkdir /srv/question-board

اکنون یک فهرست درخت کاری مناسب، یک مخزن خالی و یک post hook دارید که به نوبه خود اسکریپت /sbin/deploy را با sudo فراخوانی می‌کند. اما، چگونه hook پس از دریافت، اسکریپت /sbin/deploy را با استفاده از sudo بدون رمز عبور فراخوانی می کند؟

فایل /etc/sudoers را با استفاده از ویرایشگر متن نانو روی سرور خود باز کنید و خط کد زیر را در انتهای فایل اضافه کنید:

nonroot ALL=NOPASSWD: /sbin/deploy

این خط کد به این معنی است که کاربر nonroot می‌تواند اسکریپت /sbin/deploy را با sudo روی همه میزبان‌ها با NOPASSWD یا بدون رمز عبور اجرا کند. فایل را با فشردن کلیدهای Ctrl + O ذخیره کنید و با فشردن کلیدهای ترکیبی Ctrl + K از nano خارج شوید.

در نهایت پس از این مراحل نصب، شما آماده هستید تا سورس کد پروژه لاراول را به سرور VPS خود push کنید. با فرض اینکه قبلاً مخزن https://github.com/fhsinchy/guide-to-deploying-laravel-on-vps را در سیستم خود فورک کرده و کلون کرده اید، ترمینال خود را در root پروژه باز کرده و دستور زیر را اجرا کنید. :

git remote add production ssh://nonroot@104.248.157.172/home/nonroot/repo/question-board.git

مطمئن شوید که آدرس IP این پروژه را با آدرس IP سرور خود جایگزین کنید. حال با فرض اینکه کد پایدار، شاخه اصلی نیست، می توانید با اجرای دستور زیر کد را به سرور push کنید:

git push production master

پس از ارسال کد به سرور، مجدداً به عنوان یک کاربر غیر root وارد شوید و در فهرست /srv/question-board سی دی قرار دهید. از دستور ls برای فهرست کردن محتوا استفاده کنید و باید ببینید که git با موفقیت کد پروژه شما را بررسی کرده است.

تبریک می گویم! شما پروژه لاراول را مستقیماً روی سرور مستقر کردید و از این مرحله به بعد می توانید با نصب و به روز رسانی وابستگی ها، پروژه خود را اجرا کرده و به راحتی بر روی سرور مجازی خود کار کنید.

منبع: adevait.com

منتشر شده توسط
H.Asadi