ข้ามไปที่เนื้อหาหลัก

วิธีใช้งาน Laravel Vite บน docker ที่เตรียมมาเอง


เรื่องของเรื่องมีอยู่ว่า ถ้าหากว่าเราอยากจะลองใช้ Vite ที่ทาง Laravel เริ่มยัดเยียดมาให้ในเวอร์ชันหลังๆ น่าจะประมาณ Laravel 8+ ถ้าไม่ได้ใช้ Laravel Sail ในการรัน Local development ก็น่าที่จะติดปัญหาในเรื่องของการที่ application ที่เราเขียนมองหา Frontend server ของ Vite ไม่เจอ

GET http://127.0.0.1:5173/@vite/client net::ERR_CONNECTION_REFUSED
GET http://0.0.0.0:5173/@vite/client net::ERR_ADDRESS_INVALID

ปัญหาที่เกิดขึ้น เนื่องจากโดยค่าเริ่มต้น Vite จะผูกกับที่อยู่ localhost 127.0.0.1 ซึ่งหมายความว่าสามารถเข้าถึงได้จากภายในคอนเทนเนอร์ Docker เท่านั้น หากต้องการอนุญาตการเข้าถึงจากภายนอกคอนเทนเนอร์ คุณจะต้องผูกเข้ากับที่อยู่ IP ที่เป็น 0.0.0.0 หรือ Localhostโดยใช้เซิร์ฟเวอร์ ตัวแปรการกำหนดค่าโฮสต์ อย่างไรก็ตาม สิ่งนี้ทำให้เว็บไซต์พยายามเชื่อมต่อกับ 0.0.0.0 ซึ่งไม่ถูกต้อง หากต้องการบอกให้ส่วนหน้าใช้ localhost คุณต้องตั้งค่าเซิร์ฟเวอร์ ตัวแปร hmr.host

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import vue from '@vitejs/plugin-vue';

export default defineConfig({
server: {
host: '0.0.0.0',
port: 5173,
hmr: {
host: '127.0.0.1',
},
},
plugins: [
vue(),
laravel({
input: ['resources/css/app.css', 'resources/js/app.js'],
refresh: true,
}),
],
});

นอกจากนี้ ต้องไม่ลืมที่จะเปิด Port 5173 ให้กับ container ที่รัน PHP ด้วยนะครับ

version: "3.8"
name: my-laravel-project
services:
web-server:
ports:
- "80:80"
- "5173:5173" <===== เพิ่มตรงนี้

ใครที่กำลังมองหาทางออก ก็หวังว่าจะได้เจอ บทความนี้นะครับ ทุกคนจะได้ลองใช้ Vite กันจร้า

ข้อมูลที่ลอกมา https://mrzebra.co.uk/code/2023/01/16/how-to-use-laravel-vite-from-docker/

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การเพิ่ม Font ภาษาไทยอื่นๆ เข้าไปใช้งานใน MPDF

เนื่องมาจากผมได้มีโอกาสจับงานที่ต้องแปลงหน้าเว็บให้เป็น PDF ลองๆ หาข้อมูลก็ไปเจอเจ้าตัวนี้ MPDF  ซึ่งจริงๆ แล้วก็มีให้ใช้งานอีกหลายๆ ตัว สาเหตุที่เลือกใช้งานตัวนี้เพราะมัน ค่อนข้างจะติดตั้ง และใช้งานง่าย และยังสามารถอ้างอิง CSS เข้ามาช่วยจัดหน้าตาใน PDF ได้อีกด้วย ซึ่งผลที่ได้เพี้ยนไปจากตัวจริงไม่มากครับ แต่ที่ทำให้เลือกใช้งานเพราะการเพิ่มฟ้อนท์ภาษาไทย เข้าไปนั้นค่อนข้างง่ายครับ เลยจะขอมาแนะนำดังนี้

การใช้งาน คำสั่ง file_exists() อย่างเข้าใจ

นี่อาจจะไม่เรื่องใหม่อะไรสำหรับ Professional ทั้งหลาย แต่ว่าสำหรับผมที่เข้าใจ และใช้งานอย่างผิดๆ มาตลอด จนบางทีก็เข้าใจว่า เราเขียนผิด หรือ คำสั่งมันใช้งานไม่ได้ วันนี้จะขอมาพูดถึงเรื่องของคำสั่ง PHP ที่ชื่อ file_exists เป็นคำสั่งที่ใช้สำหรับตรวจสอบไฟล์ว่ามีอยู่จริงหรือไม่? ตัวอย่างการใช้งานแบบผิดๆ ที่ผมใช้ก็คือ file_exists('/images/news/helloworld.jpg'); ผลลัพธ์ที่ได้คือ FALSE ถึงแม้ว้าจะมีไฟล์นั้นอยู่จริงก็ตาม ซึ่งในความเป็นจริงแล้ว การใช้งานที่ถูกต้องคือ file_exists($_SERVER['DOCUMENT_ROOT'] . '/images/news/helloworld.jpg'); จากตัวอย่างที่ถูกต้อง ทำให้เข้าใจแบบง่ายๆ ว่าคำสั่ง file_exists นั้นใช้สำหรับเช็ค path ในโฟลเดอร์จริงๆ เท่านั้น ไม่สามารถเช็คจาก URL ได้ อันนี้เป็นเรื่องง่ายๆ ที่ผมเข้าใจผิดมาอยู่นานเลยทีเดียวเลยต้องขอลงบันทึกเตือนตัวเองไว้อีกที :3

มาเข้าใจ และใช้ Datatable ดึงข้อมูลแบบ Server-side ด้วย PHP, MySQL กันเถอะ

มีช่วงหนึงผมเคยนำ datatable มาพัฒนาในงานแต่เกิดปัญหาเนื่องจากมีข้อมูลขนาดใหญ่ ทำให้เกิดการโหลดในครั้งแรกที่โหลดหน้าเพจนั้นๆ เนื่องจากผมใช้ Ajax ในการโหลดข้อมูลทั้งหมดมาในครั้งเดียวด้วยจำนวนข้อมูล 1000 ขึ้น ซึ่งตอนนั้นผมคิดว่าการทำ preload น่าจะช่วยได้ แต่ว่าถ้า user เกิดเผลอไปกด refesh หรือแก้ไขข้อมูลเวลากลับมาที่หน้าข้อมูลก็ต้องโหลดใหม่อีก ทำให้ผมเลิกใช้ datatable ไปเลย เพราะคิดว่ามันคงไม่เหมาะ แต่ในความจริงแล้ว datatable ก็ได้มีสิ่งที่มาแก้ในจุดนั้นได้ ซึ่งเรียกว่า server-side โดยการที่อนุญาตให้เรา query ข้อมูลออกมาก่อนแล้วส่งมาให้ datatable อ่านข้อมูลในจำนวนที่น้อยลง หลักการก็เหมือนๆ กับบทความการทำสร้าง XML จากข้อมูลขนาดใหญ่นั่นแหละครับ แต่มีเงื่อนไขเพียงแต่ว่า ต้อง Filter และส่งข้อมูลออกมาในรูปแบบที่ตรงตามหลักของ datatable เท่านั้น ( บางครั้งเวลาเข้าไปอ่าน Document หรือดู Example จะงงๆ ว่าอะไรเยอะแยะ ) โดยวันนี้จะมาแนะนำการใช้งานแบบง่ายๆ กันเลย :D