تعديل تخصيص نطاق لتطبيقات Nodejs عن طريقة Laravel valet

هل واجه أحدكم مشكلة أثناء تطوير تطبيق Node.js، حيث يرغب في تخصيص نطاق خاص به بدلاً من استخدام localhost:3000 كعنوان؟ هل قضى الكثير من الوقت في البحث عن حلول معقدة لهذه المشكلة؟ إذاً، دعوني أقدم لكم حلاً بسيطاً عن طريق Laravel Valet.

ماهو Laravel Valet ؟!

Laravel Valet هو بيئة تطوير لنظامي التشغيل macOS و Linux مصممة خصيصاً لمطوري Laravel. يوفر Laravel Valet طريقة سهلة وسلسة لإعداد بيئات تطوير محلية لمشاريع Laravel. يستخدم Valet خادمًا خفيفًا مثل Nginx و dnsmasq لخدمة تطبيقات Laravel الخاصة بك، مما يجعله سريعًا وفعّالاً.

تخصيص نطاق محلي ليعمل علي PORT خاص،

الطريقة الأولي:

قم بالذهاب الي اعدادات valet

cd ~/.config/valet

أنشأ اعدادات لنطاق خاص بك جديد:

valet nano you-own-domain.conf

داخل هذا الملف قم بوضع هذه الاعدادات :

map $sent_http_content_type $expires {
    "text/html"                 epoch;
    "text/html; charset=utf-8"  epoch;
    default                     off;
}

server {
    listen          80;             # the port nginx is listening on
    server_name     you-own-domain.test;    # setup your domain here

    gzip            on;
    gzip_types      text/plain application/xml text/css application/javascript;
    gzip_min_length 1000;

    location / {
        expires $expires;

        proxy_redirect                      off;
        proxy_set_header Host               $host;
        proxy_set_header X-Real-IP          $remote_addr;
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_read_timeout          1m;
        proxy_connect_timeout       1m;
        proxy_pass                          http://127.0.0.1:3000; # set the adress of the Node.js instance here
    }
}

مع مراعات تغير you-own-domain بما باسم النطاق الخاص بك.

بعد ذلك قم بتشغيل تطبيقك علي nodejs وليكن بهذا الأمر علي سبيل المثال:

npm run dev

قم باعادة تشغيل valet

valet restart

الآن سيعمل تطبيقك علي النطاق المحلي الذي اخترته you-own-domain.test

الطريقة الثانية:

وهي أسهل بكثير من الأولي، فقط تحتاج منا الي سطر واحد

يمكنك القيام بذلك بسهولة باستخدام Valet Proxy. فمثلاً، قم بتشغيل الأمر التالي:

valet proxy --secure you-own-domain.test http://localhost:3000

ببساطة، سيقوم Valet بإنشاء بروكسي بين النطاق الخاص بك وتطبيق Node.js الذي يعمل على منفذ رقم 3000.

وبالفعل عوضا عن المجهود الذي بذلته في الخطوه الأولي ، ستقوم valet بانشاء nginx proxy عوضا عنك بالشكل التالي كمثال:

# valet stub: secure.proxy.valet.conf

server {
    listen 127.0.0.1:80;
    #listen 127.0.0.1:80; # valet loopback
    server_name you-own-domain.test www.you-own-domain.test *.you-own-domain.test;
    return 301 https://$host$request_uri;
}

server {
    listen 127.0.0.1:443 ssl http2;
    #listen 127.0.0.1:443 ssl http2; # valet loopback
    server_name you-own-domain.test www.you-own-domain.test *.you-own-domain.test;
    root /;
    charset utf-8;
    client_max_body_size 128M;
    http2_push_preload on;

    location /41c270e4-5535-4daa-b23e-c269744c2f45/ {
        internal;
        alias /;
        try_files $uri $uri/;
    }

    ssl_certificate "/Users/me/.config/valet/Certificates/you-own-domain.test.crt";
    ssl_certificate_key "/Users/maherelgamil/.config/valet/Certificates/you-own-domain.test.key";

    access_log off;
    error_log "/Users/maherelgamil/.config/valet/Log/you-own-domain.test-error.log";

    error_page 404 "/Users/maherelgamil/.composer/vendor/laravel/valet/server.php";

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header   Host              $host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   X-Client-Verify   SUCCESS;
        proxy_set_header   X-Client-DN       $ssl_client_s_dn;
        proxy_set_header   X-SSL-Subject     $ssl_client_s_dn;
        proxy_set_header   X-SSL-Issuer      $ssl_client_i_dn;
        proxy_set_header   X-NginX-Proxy true;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection "upgrade";
        proxy_http_version 1.1;
        proxy_read_timeout 1800;
        proxy_connect_timeout 1800;
        chunked_transfer_encoding on;
        proxy_redirect off;
        proxy_buffering off;
    }

    location ~ /\.ht {
        deny all;
    }
}

وها قد انتهينا! 😎

استمتع بتجربة تطوير سهلة وممتعة!