ایجاد آسان محیط توسعه لاراول با valet-linux

با کمک Valet-Linux به آسانی می‌توان دامنه با پشتیبانی SSL محلی برای پروژه‌های لاراول ایجاد کرد. در این مقاله درباره این ابزار می‌نویسم.

مدتی است که کار با #لاراول را شروع کرده‌ام. یکی از چالش‌ها، ایجاد محیط توسعه و به ویژه تخصیص دامنه محلی برای هر پروژه بوده است. لاراول ابزار خوبی به نام Valet دارد که متاسفانه مخصوص سیستم‌عامل مکینتاش توسعه داده شده. با این حال، در یک جسجوی اینترنتی به انشعابی از این پروژه برای سیستم‌عامل گنو/لینوکس رسیدم به نام Valet-Linux که بسیار کارم را راحت کرد. در این مقاله قدری درباره آن می‌نوسم. اگر راه بهتری می‌شناسید، حتما معرفی کنید.

صورت مساله چیست؟

در حین توسعه یک نرم‌افزار وب تحت لاراول، ممکن است برنامه‌نویس به طور هم زمان یا موازی روی چند پروژه کار کند. اگر بخواهد از دستور php artisan serve استفاده کند لازم است هر کدام را روی یک درگاه (port) اجرا کند. طبیعتا این مشکل ممکن است پیش بیاید که کدام پروژه روی کدام درگاه اجرا شده بود قبلا. اگر بشود دامنه‌ای مثل project.local یا مثلا project.test یا نظایر آن به هر پروژه داد خیلی کار راحت‌تر می‌شود. این کار را می‌توان به راحتی و البته با صرف قدری زمان و انجام کاری تکراری حل کرد.

افزون بر این، گاهی حتی لازم می‌شود پروژه تحت رمزنگاری SSL (همان https در نشانی وب‌گاه) اجرا شود. ابزارهایی مثل mkcert برای تسهیل ایجاد گواهی محلی وجود دارند اما بعد از کلی تلاش موفق نشدم از آن‌ها برای دست‌یابی به چنین هدفی بهره ببرم.

ابزار Velet هر دو کار را بسیار ساده انجام می‌دهد. یعنی هم امکان ایجاد دامنه محلی را می‌دهد و هم اینکه می‌توان پروژه را در آن دامنه، با SSL اجرا کرد.

همچنین بد نیست به این نکته هم اشاره کنم که valet تنها برای لاراول نیست. برای پروژه‌های مختلفی که با لاراول، لومن، سمفون، زند، کیک‌پی‌اچ‌پی، وردپرس و… و حتی HTML ساده نوشته شده باشند هم می‌توان از Valet استفاده کرد.

نصب

پیش از هر چیز توصیه اکید این است که این ابزار را با کاربر ریشه (root) یا دستور sudo نصب نکنید. برای نصب کافی است با بسته مورد نظر را با کمک کامپوزر نصب کنیم:

composer global require cpriego/valet-linux

پس از آن با اجرای دستور valet install تنظیمات و تغییرات لازم اعمال می‌شوند. ممکن است بلافاصله بعد از نصب از طریق کامپوزر، valet در پایانه شناسایی نشود. اگر چنین شد، یک پایانه جدید باز کنید. الان باید به راحتی شناسایی شده و قابل اجرا باشد.

برای به‌روزرسانی هم کافی است از composer global update استفاده شود.

استفاده

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

حال نوبت می‌رسد به اجرا وب‌گاه‌ها روی دامنه‌ها دلخواه. به طور پیش‌فرض valet از پس‌وند test استفاده می‌کند؛ یعنی مثلا website.test. اگر پس‌وند دیگری مثلا dev مدنظرتان است می‌توانید با دستور زیر آن را جایگزین کنید:

valet domain dev

به این شکل پروژه روی webiste.dev اجرا می‌شود. حال چه طور دامنه را مشخص کنیم؟ Valet دو روش برای این کار دارد. اولی استفاده از دستور park است. کاربرد این دستور برای زمانی است که شما یک پوشه حاوی پروژه‌های مختلف دارید و می‌خواهید هر کدام از آن‌ها با دامنه‌ای به نام پوشه‌شان اجرا شوند. مثلا اگر در پوشه جاری، سه پوشه به نام‌های site1 و site2 و site3 داشته باشیم، بخواهیم که این پروژه‌ها به ترتیب روی site1.test و site2.test و site3.test اجرا شوند. برای این کار کافی است در پوشه اصلی، دستور valet part را اجرا کنیم.

روش دوم برای زمانی است که پروژه‌ها در جاهای مختلفی باشند و ما بخواهیم به صورت موردی بگوییم فلان دامنه به فلان پوشه اشاره کند. برای این کار کافی است وارد پوشه ریشه پروژه شویم. اگر بخواهیم دامنه myproject باشد کافی است دستور زیر را اجرا کنیم:

valet link myproject

پس از آن باید بتوانید در نشانی myproject.test پروژه به پروژه دسترسی پیدا کنیم. به همین سادگی. هر زمان هم که بخواهیم این دامنه حذف شود کافی است در همان پوشه دستور valet unlink را اجرا کنیم. دستور valet links هم فهرست همه دامنه‌های ثبت‌شده به هماه نشانی‌ای که به آن‌ها اشاره می‌کنند را نمایش می‌دهد.

ارتباط امن برای دامنه‌ها

گفتم که امکان دیگر valet، تسهیل ایجاد اتصال امن SSL برای دامنه‌های محلی است. مثلا اگر بخواهیم SSL را برای دامنه myproject.test فعال کنیم کافی است دستور زیر را اجرا کنیم:

valet secure myproject

به همین سادگی! برای حذف SSL هم کافی است همان دستور را با unsecure اجرا کنیم. خلاص!

خوش‌بختانه Valet به صورت خودکار بعد از هر بار راه‌اندازی دستگاه اجرا می‌شود. لذا نیازی نیست پیش از استفاده از دستوری مثل valet start استفاده کنیم.