کارآفرین، تهیهکننده و طراح بازی، موسس و مدیرعامل طراحان سفید و غیره!
تنظیم Virtual Hosts در XAMPP و نظمی که به پروژهها میده
چند روزیه که برای چند پروژه فعال در طراحان سفید نیاز به توسعه وبسرویس و API داریم. منم فرصت رو غنیمت شمردم و به جای اینکه یک یا دو نفر از بچههای فنی رو درگیر کنم، خودم رفتم سراغ کدنویسی و لذتهای کدنویسی.
شاید براتون جالب باشه که بدونین چطور میشه مدیریت یک شرکت رو انجام داد و کارهای اجرایی و فنی رو هم ادامه داد؟! مدیریت یک تیم چند نفره که چند پروژه همزمان هم کار میکنند خودش یک کار تمام وفته، منتهی ما در طراحان سفید به صورت تیمی کار مدیریت رو انجام میدیم و همین کار فرصتی برای من ایجاد کرده تا بتونم اون کاری که بیشتر دوست دارم رو هم دنبال کنم: کار فنی!
طبق معمولی اخلاق کاری خودم، قبل از شروع هر کاری یک work station دلخواه و جمعجور برای پروژه ایجاد کردم. مکبوک پرو و ترکیب Visual studio code و Dropbox و XAMPP و سیستم مدیریت نسخه دلخواه من Git تونست اون انعطافپذیری و قدرتی که دوست داشتم رو برای من ایجاد کنه. فقط مونده بود چند تنظیم و تمام! همه چیز آماده شروع پروژه بود.
از دیگر مزیتهای این ترکیب multi-platform بودن اونه. خیلی وقتها میشه به دلیل مشغلههای کاری بخوام ادامه کار رو در راه یا خانه انجام بدم و این یعنی work station باید همه جا درست کار کنه و صد البته کاملا Sync باشه.
فقط یک کار در مکبوک باقیمانده: تنظیم Virtual Hosts و اجرای کدها در یک server مجازی مجزا. من علاقه دارم پروژهها رو در سرورهای مجازی جداگانه نگهداری و تست میکنم. این کار مزیتهایی داره که یکی از اونها جلوگیری از افزونگی فایلهای پروژه ست. همچنین چون برای پروژهها دامنه مجزا تعریف میکنم، در هر سیستمی که ادامه کار رو انجام بدم، بدون نیاز به تغییرات کانفیگ پروژه کار رو میشه انجام داد.
برای تست و اجرای سرویس های تحت وب در محیط آزمایشگاهی، xampp یکی از بهترین و قدیمیترین گزینههاست. من در این مطلب تمامی مسیردهیها و نکات رو برای سیستمعامل مک گفتم، ولی میتونین به سادگی این کارها رو برای هر سیستمعاملی که علاقه دارید هم استفاده کنید.
در این پست از مقاله خوب جاناتان نیکول خیلی استفاده شده + تجربههای شخصی و چند ساعت درجا زدن برای حل خطاهای پیش اومده :)
مقدمه: Virtual Hosts چیست؟
در وبسرور Apache از Virtual Hosts (VH) برای مشخص کردن مسیر قرار گرفتن یک وبسایت روی سیستم محلی استفاده میشه. محدودیت خاصی در تعداد virtual host ها نیست و شما میتونین برای هر کدام از پروژههایی که دارید یک آدرس مجزا تعریف کنید که به صورت مستقیم به محل ذخیره سایت شما روی filesystem اشاره میکنه.
برای مثال برای یک پروژه سایت رستوران، میتونیم به جای آدرسی مثل
http://localhost/projects/resturant/public/
میتونین به سادگی و با تعریف VH با وارد کردن آدرسی مثل
http://resturant.local
در مرورگر به سایت مدنظر دسترسی داشته باشید.
گام اول: فعال کردن Virtual Hosts برای Apache
معمولا به صورت پیشفرض امکان تعریف VH های سفارشی در xampp غیر فعاله. برای فعال کردن این امکان ابتدا فایل زیر رو بازی کنید:
/Applications/XAMPP/xamppfiles/etc/httpd.conf
سپس علامت # رو از ابتدای خط دوم بردارید تا این خط فعال (uncomment) بشه:
# Virtual hosts
Include /Applications/XAMPP/etc/extra/httpd-vhosts.conf
این خط باید مشابه بالا باشه. فایل رو با این تنظیمات جدید save کنید.
گام دوم: ساخت Virtual Host
همه VHها در آپاچی در فایلی در مسیر زیر نگهداری میشن. برای ادامه کار باید این فایل رو مطابق اون چیزی که نیاز داریم ویرایش کنیم:
/Applications/XAMPP/xamppfiles/etc/extra/httpd-vhosts.conf
انتهای این فایل یک سری نمونه از VH ها هست که میتونین اونها رو پاک کنین (یا کامنت کنید با #)
قبل از اینکه هاستهای خودمون رو تعریف کنیم، بهتره هاست پیشفرض localhost را هم تعریف کنیم تا اگر خواستیم از مسیر htdocs که ویژه xampp هست استفاده کنیم، مشکلی نداشته باشیم. برای اینکار این هاست رو به انتهای فایل اضافه کنید:
# localhost
<VirtualHost *:80>
ServerName localhost
DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs"
<Directory "/Applications/XAMPP/xamppfiles/htdocs">
Options Indexes FollowSymLinks Includes execCGI
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
خب، حالا میشه هاستهایی که میخوایم رو هم اضافه کنیم. من برای این پروژه یک هاست میسازم به آدرس salema.local که مسیر اصلی اون منتهی میشه به پوشه work space همین پروژه در Dropbox. اینکه به جای یک آدرس com یا ir از پسوند local استفاده کردم به خاطر این بود که این هاست برای تست استفاده میشه و ممکنه با هاست اصلی پروژه که روی اینترنت قرار داره اشتباه گرفته بشه و باگهایی برای من ایجاد کنه.
# Salema dev host
<VirtualHost *:80>
ServerName salema.local
ServerAlias salema.local *.salema.local
DocumentRoot "/users/sadegh/Dropbox/Salema/Server"
<Directory "/users/sadegh/Dropbox/Salema/Server">
Options Indexes FollowSymLinks Includes execCGI
AllowOverride All
Require all granted
</Directory>
ErrorLog "logs/salema.local-error_log"
</VirtualHost>
شما میتونین اسناد کامل Apache virtual hosts رو هم مطالعه کنید.
گام سوم: تنظیم فایل hosts
من هاستی که ساختم رو به دامنه salema.local متصل کردم. این دامنه به صورت پیش فرض در سیستم وجود نداره و برای اینکه کامپیوتر متوجه بشه این دامنه باید چه IP ای رو باز کنه، میتونیم فایل hosts رو ویرایش کنیم و اون رو به این فایل اضافه کنیم. خیلی راحت. اینجا قراره این دامنه به IP من یعنی 127.0.0.1 اشاره کنه.
فایل رو از مسیر زیر با یک ادیتور مثل sublime یا VS code و... باز کنید:
/etc/hosts
و سپس در انتهای این فایل عبارت زیر رو اضافه کنید:
127.0.0.1 salema.local
و فایل رو save کنید. تمام.
فقط حواستون باشه که این دامنه فقط در سیستم شما کار میکنه و اگه میخواین مثلا در یک سیستم دیگه هم با زدن این دامنه، هاست شما باز بشه باید یا در DNS سازمانتون این رو تعریف کنید یا اینکه در تمامی اون سیستمها، فایل hosts رو ویرایش کنید.
گام چهارم: آپاچی رو Restart کنید
برای اینکه تنظیمات virtual hosts اعمال بشه، باید یکبار آپاچی سرور رو restart کنیم. خود xampp امکان مدیریت آپاچی رو داره که از طریق کنترل پنل این اپلیکیشن میتونین اون رو پیدا کنید:
/Applications/XAMPP/XAMPP Control.app
بعد از restart شدن آپاچی، دامنه رو در مرورگر وارد کنید و تست کنید که آیا درست کار میکنه؟ نه؟ خطاهای مرسوم:
- خطای 404 server not found: یعنی فایل hosts درست ذخیره نشده یا IP درست تنظیم نشده. در واقع این دامنه در سیستم شما شناخته نمیشه. گام سوم رو درست انجام دادید؟
- خطای 403 forbidden: وقتی که آپاچی اجازه دسترسی به مسیری که مشخص کردیم رو نداره. اینجا IP درسته ولی مشکلی در آپاچی هست که باید رفع کنیم.
- مشکل نمایش صفحه پیشفرض xampp به جای صفحه اول هاست مجازی شما.
حل مشکل خطای ۴۰۳
این مشکل وقتی پیش میاد که آپاچی اجازه دسترسی به مسیرهایی که شما مدنظر دارید رو نداشته باشه. برای حل کردن این مشکل میتونین فایل زیر رو ویرایش کنین:
/Applications/XAMPP/xamppfiles/etc/httpd.conf
در بخش زیر، user رو با user خودتون در سیستم جایگزین کنید:
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User daemon
Group daemon
که مثلا بشه:
User your_user_name
بعد حتما آپاچی رو مجددا restart کنید.
این روش برای موقعی که xampp شما از طریق اینترنت در دسترس نباشه امنیت داره و مشکلی برای شما پیش نمیاره. اگه روی امنیت خیلی وسواس دارید، میتونین از طریق این صفحه راههای جایگزین رو ببینید.
حل مشکل نمایش صفحه پیش فرض Xampp
خب، من همه کارها رو انجام دادم و مطمئنم که همه چیز درست انجام شده ولی وقتی دامنه هاست رو وارد میکنم به جای مسیری که برای Document root دادم، صفحه پیشفرض xampp باز میشه... چه کنم؟
احتمالا به یک دلیلی سیستم شما داره به جای http از https برای باز کردن این هاست استفاده میکنه. درسته؟ اگر اینطوره، باید یک VH دیگه هم اضافه کنید که گوش به زنگ پورت ۴۴۳ و ارتباطات SSL باشه تا اگه درخواستی اومد متوجه بشه که مربوط به است هاسته:
<VirtualHost *:443>
ServerName salema.local
ServerAlias salema.local *.salema.local
DocumentRoot "/users/sadegh/Dropbox/Salema/Server"
SSLEngine on
SSLCertificateFile "/Applications/XAMPP/xamppfiles/etc/ssl.crt/server.crt"
SSLCertificateKeyFile "/Applications/XAMPP/xamppfiles/etc/ssl.key/server.key"
<Directory "/users/sadegh/Dropbox/Salema/Server">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
ErrorLog "logs/salema.local-error_log"
</VirtualHost>
اگر تمایل دارید برای ارتباط با هاستی که ساختید از SSL استفاده کنید هم میتونین از این روش استفاده کنید.
امیدوارم به دردتون بخوره :)
مطلبی دیگر از این انتشارات
نصب IonCube روی لوکال هاست با نرمافزار Xampp
مطلبی دیگر از این انتشارات
رفع مشکل گالری تصویر ووکامرس و تداخل با Visual Composer وردپرس
مطلبی دیگر از این انتشارات
آموزش وردپرس قسمت 9(قسمت اخر)