Morteza Khodarahmi
4 سال پیش توسط Morteza Khodarahmi مطرح شد
8 پاسخ

آپلود پروژه جداگانه Laravel و React js روی Cpanel

سلام دوستان.
من یه پروژه دارم که UI رو React js کار کردم و سمت سرور هم laravel.این دوتا پروژه جدا از هم هستن چطور میتونم روی Cpanel آپلودشون کنم؟
ممنون میشم راهنمایی کنید.


ثبت پرسش جدید
مهدی عقیقی
تخصص : برنامه نویس وب
@MehdiAghighi 4 سال پیش آپدیت شد
0

@mrkhodarahmii سلام وقتتون بخیر.

این که پروژه لاراول رو بزارید روی ساب‌دومین یک راه‌حله ولی من خودم راه زیر رو ترجیح می‌دم.
کاری که می‌خوایم انجام بدیم اینه که پروژه لاراول روی آدرس https://domain.com/api بیاد بالا و پروژه ریکت هم روی آدرس اصلی

  • اول تمام فایل‌های پروژه لاراول رو توی روت‌ هاست آپلود کنید. یعنی پوشه قبل از publichtml.
  • بعدش برید داخل پوشه publichtml و یه پوشه جدید داخلش بسازید مثلا به اسم api.
    حالا تمام محتویات پوشه‌ی public ( اونی که با پروژه لاراول آپلود کردید ) رو بریزید توی اون پوشه api که داخل publichtml درست کردید.

حالا فایل index.php رو باز کنید و یک سری تغییرات باید داخل این فایل بدید:

  • دو یا سه تا فایل ( bootstrap و autoload ) توی index.php فراخونی شده که خب آدرس اونارو باید درست کنید. یعنی باید ../ قبل از آدرس‌ها اضافه کنید که یه پوشه دیگه بره عقب و از اونجا دنبال فایل‌ها برگرده ( چون الان خود پروژه لاراول دو تا پوشه بالاتر از index.php هست باید این کار رو بکنید )
  • بعدش با کمک این لینک مسیر پوشه public رو تغییر بدید به اون پوشه api که ساختید.

حالا اتفاقی که می‌افته اینه که برای دسترسی به api باید توی آدرس دو تا /api وارد کنید یعنی مثلا https://domain.com/api/api. چرا ؟ چون یکیش مال اون پوشه‌ای index.php توشه هست و اون یکی هم برای اینه که کلا آدرس‌های api یک پرفیکس /api دارند.

حالا راه حلش چیه ؟

چون برنامه‌ بک‌اند فقط API هست کاری که می‌کنیم اینه که اون prefix که مال روت‌های api.php هست رو برمی‌داریم طبق مراحل زیر:

  • وارد فایل app\Providers\RouteServiceProvider بشید و از اونجا تابع mapApiRoutes رو پیدا کنید و اون تابع prefix داخلش رو کلا حذف کنید.
  • حالا یه مشکل پیش میاد اینه که روت‌های web.php و api.php هیچکدوم پرفیکس ندارن پس قاطی میشه.
  • کاری که من کردم اینه که به تابع mapWebRoutes یک prefix اضافه کردم یعنی وقتی می‌خواستم به اون روت‌های دسترسی داشته باشم باید از پرفیکس /web استفاده می‌کردم.

حالا پروژه بک‌اندتون باید سر جاش درست باشه توی آدرس https://domain.com/api. یه سری تنظیمات و تغییرات هم باید برای فایل‌سیستم و آپلود فایل و اینا بدید که با سرچ می‌تونید درش بیارید ولی اگر نتونستید یا مشکلی داشتید توی همین گفت‌و‌گو اشاره کنید تا کمکتون کنم.

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


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 4 سال پیش مطرح شد
0

درود...
برای استفاده هر دو این پروژه اصلی رو هاست اصلی و زیر مجموعه پروژه روی ساب دامین هاست قرار بده...


Morteza Khodarahmi
تخصص : Backend Developer
@mrkhodarahmii 4 سال پیش مطرح شد
0

@endworld ممنون از پاسختون.
یعنی پروژه react رو روی هاست قرار بدم؟ بعد برای API گرفتن از Laravel به مشکل نمیخورم؟ در کل اگر راه بهتری هست ممنون میشم معرفی کنید.


saman
@saman1111 4 سال پیش مطرح شد
0

@mrkhodarahmii
سلام

نه به مشکل نمیخورید
پروژه react رو آپلود کنید و لاراول رو روی ساب دامین آپلود کنید.


مهدی عقیقی
تخصص : برنامه نویس وب
@MehdiAghighi 4 سال پیش آپدیت شد
0

@mrkhodarahmii سلام وقتتون بخیر.

این که پروژه لاراول رو بزارید روی ساب‌دومین یک راه‌حله ولی من خودم راه زیر رو ترجیح می‌دم.
کاری که می‌خوایم انجام بدیم اینه که پروژه لاراول روی آدرس https://domain.com/api بیاد بالا و پروژه ریکت هم روی آدرس اصلی

  • اول تمام فایل‌های پروژه لاراول رو توی روت‌ هاست آپلود کنید. یعنی پوشه قبل از publichtml.
  • بعدش برید داخل پوشه publichtml و یه پوشه جدید داخلش بسازید مثلا به اسم api.
    حالا تمام محتویات پوشه‌ی public ( اونی که با پروژه لاراول آپلود کردید ) رو بریزید توی اون پوشه api که داخل publichtml درست کردید.

حالا فایل index.php رو باز کنید و یک سری تغییرات باید داخل این فایل بدید:

  • دو یا سه تا فایل ( bootstrap و autoload ) توی index.php فراخونی شده که خب آدرس اونارو باید درست کنید. یعنی باید ../ قبل از آدرس‌ها اضافه کنید که یه پوشه دیگه بره عقب و از اونجا دنبال فایل‌ها برگرده ( چون الان خود پروژه لاراول دو تا پوشه بالاتر از index.php هست باید این کار رو بکنید )
  • بعدش با کمک این لینک مسیر پوشه public رو تغییر بدید به اون پوشه api که ساختید.

حالا اتفاقی که می‌افته اینه که برای دسترسی به api باید توی آدرس دو تا /api وارد کنید یعنی مثلا https://domain.com/api/api. چرا ؟ چون یکیش مال اون پوشه‌ای index.php توشه هست و اون یکی هم برای اینه که کلا آدرس‌های api یک پرفیکس /api دارند.

حالا راه حلش چیه ؟

چون برنامه‌ بک‌اند فقط API هست کاری که می‌کنیم اینه که اون prefix که مال روت‌های api.php هست رو برمی‌داریم طبق مراحل زیر:

  • وارد فایل app\Providers\RouteServiceProvider بشید و از اونجا تابع mapApiRoutes رو پیدا کنید و اون تابع prefix داخلش رو کلا حذف کنید.
  • حالا یه مشکل پیش میاد اینه که روت‌های web.php و api.php هیچکدوم پرفیکس ندارن پس قاطی میشه.
  • کاری که من کردم اینه که به تابع mapWebRoutes یک prefix اضافه کردم یعنی وقتی می‌خواستم به اون روت‌های دسترسی داشته باشم باید از پرفیکس /web استفاده می‌کردم.

حالا پروژه بک‌اندتون باید سر جاش درست باشه توی آدرس https://domain.com/api. یه سری تنظیمات و تغییرات هم باید برای فایل‌سیستم و آپلود فایل و اینا بدید که با سرچ می‌تونید درش بیارید ولی اگر نتونستید یا مشکلی داشتید توی همین گفت‌و‌گو اشاره کنید تا کمکتون کنم.

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


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 4 سال پیش مطرح شد
0

@mrkhodarahmii
آره... مشکلی پیش نمیاد و این روش متداول هستش...
روش @MehdiAghighi عالیه...
برای دریافت خروجی اطلاعات در ری اکت کافیه API مورد نظر رو در لاراول تعریف کنید و آن را صدا بزنید...


sajjad
تخصص : برنامه نویس
@sajjad123 3 سال پیش آپدیت شد
0

سلام @MehdiAghighi
وقت بخیر
ممنونم از توضیحات خوبتون 👌
من تمام کارهارو انجام دادم و مطالبتون کامل بود api هم تست کردم درست جواب می ده البته روی متد get اما روی متد post خطا CORS دارم

Access to XMLHttpRequest at 'https://example.ir/api/payment' from origin 'https://www.example.ir' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.

post رو با axios نوشتم

const config={'headers':{"Content-Type":"application/json",
"Access-Control-Allow-Origin":"*",
"Access-Control-Allow-Methods" : "POST",
'Access-Control-Allow-Headers':"*",
}}
axios.defaults.withCredentials=true;
  axios.post('https://nedamoattarian.ir/api/payment',data,config)

در فایل cors.php هم credential رو true کردم.

'supports_credentials' => true,

تو قسمت Network در Developer Tools گوگل کروم هر دو Request رو خطا دارم هم متد Options و هم Post
لوکال مشکلی نداشتم. خطا رو روی هاست دارم.
ممنون میشم راهنمایی کنید.


HRH
تخصص : back-end developer , switching...
@h.r.hassani 3 سال پیش مطرح شد
0

@sajjad.haghani
جواب آقای @MehdiAghighi اصلا حرفه ای نیست . بهتره ری اکت و لاراول رو در پوشه های متفاوت نگه دارید و توی تنظیمات وب سرور تنظیم کنید که اگر هر درخواستی برای api/ اومد درخواست رو هدایت کنه به پوشه public لاراول . برای مثال این کار توی nginx خیلی راحته
‍‍‍`

location /api/ {
    root /var/www/html/laravelfolder
    try_files $uri $uri/ /index.php?$args;
}

location ~ /api/\.php$ {
    root /var/www/html/laravelfolder
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
}

`


مهدی عقیقی
تخصص : برنامه نویس وب
@MehdiAghighi 3 سال پیش مطرح شد
0

@h.r.hassani
دقت کنید به سوال گفتن سی‌پنل.
داخل سی‌پنل شما دسترسی به کانفیگ وب‌سرور نداری و معمولا از لایت اسپید و اپاچی استفاده میکنن اصلا انجینکسی در کار نیست و اگر هم باشه در نقش پراکسی سرور عمل میکنه


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام