[Update] การตั้งค่าที่จำเป็นเพื่อ Deploy Laravel ใน Elastic Beanstalk

[Update] การตั้งค่าที่จำเป็นเพื่อ Deploy Laravel ใน Elastic Beanstalk

การตั้งค่าโปรเจกต์ Laravel ก่อน Deploy จะช่วยให้ไม่เกิด Error ขณะที่เราใช้งานโปรเจกต์ Laravel โดยรันบน Elastic Beanstalk ดังนั้นแนะนำให้ตั้งค่าตามเนื้อหาในบทความนี้ก่อนที่จะทำการ Deploy ครับ
Clock Icon2024.04.08 08:30

สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ

การ Deploy Laravel ใน Elastic Beanstalk อาจเกิน Error ในขณะที่เราใช้งานโปรเจกต์ Laravel ที่รันบน Elastic Beanstalk ดังนั้นแนะนำให้ตั้งค่าดังต่อไปนี้

เตรียมสภาพแวดล้อมสำหรับสร้างไฟล์ ZIP

  • ติดตั้ง Extention Remote – SSH ใน VSCode และทดลองใช้งาน EC2 โดยตรงใน VSCode แล้ว

  • ติดตั้ง Laravel บน EC2 (Amazon Linux 2023) แล้ว

เพิ่มการตั้งค่าของ NGINX

เปิดโปรเจกต์ Laravel ใน Visual Studio Code ตาม Path นี้

/var/www/html/

สร้างโฟลเดอร์และไฟล์ตาม Path ".platform/nginx/conf.d/elasticbeanstalk/laravel.conf" แล้ว NGINX จะเริ่มต้นระบบหลังจากมีไฟล์สำหรับการตั้งค่า NGINX ในขณะที่ Deploy ซึ่งในส่วนนี้เป็นการตั้งค่าสำหรับ Laravel โดยเฉพาะ ดังนั้นให้ดำเนินการตั้งค่าดังต่อไปนี้

สร้าง: ".platform/nginx/conf.d/elasticbeanstalk/laravel.conf" และคัดลอก Code ด้านล่างนี้วางในไฟล์ laravel.conf

location / {
        try_files $uri $uri/ /index.php?$query_string;
}
set_laravel_conf_deploy_to_eb-1

เกี่ยวกับ laravel.log

ถ้าไม่มี storage/logs/ ในไฟล์ zip ที่จะทำการ Deploy ตอนที่สร้าง log ก็จะเกิด Error และถ้าไม่ได้รับการอนุญาตให้เขียนข้อมูลก็จะเกิด Error เช่นกัน ในทางกลับกันถ้า laravel.log มีข้อมูลเหลืออยู่ก่อนที่จะทำการ Deploy ก็จะเป็นสาเหตุทำให้ Error ได้เหมือนกัน ดังนั้นควรเคลียร์ข้อมูลออกให้หมดก่อน ซึ่งหมายความว่าก่อนที่จะสร้างไฟล์ zip ให้ทำการรันคำสั่งดังต่อไปนี้ก่อนครับ

เมื่อรันคำสั่งนี้แล้ว laravel.log จะมีขนาดไฟล์เป็น 0 พูดง่ายๆคือเป็นการเคลียร์ข้อมูลใน laravel.log นั่นเอง นอกจากนี้ไม่ว่าจะเป็น User แบบไหนก็สามารถดำเนินการคำสั่งนี้ได้ครับ

\cp -f /dev/null storage/logs/laravel.log
chmod 666 storage/logs/laravel.log
set_laravel_conf_deploy_to_eb-2_v4

ล้างแคชต่างๆ ของ laravel

รันคำสั่งล้างแคชต่างๆ เตรียมไว้

php artisan optimize:clear
set_laravel_conf_deploy_to_eb-3_v3

ไฟล์ที่รวมอยู่ในไฟล์ ZIP และไม่รวมอยู่ในไฟล์ ZIP

โดยปกติแล้วไฟล์ในโปรเจกต์ laravel ควรจะรวมไว้ในไฟล์ ZIP ทั้งหมด แล้วก็จะมี [Folder] และ [File] ที่จะไม่ทำการรวมอยู่ในไฟล์ ZIP ด้วย

Folder ที่ยกเว้นมีดังนี้

.git
vendor
node_modules
public/build
public/hot
public/storage
storage/framework/sessions
storage/framework/views

File ที่ยกเว้นมีดังนี้

storage/*.key
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
.idea 
.vscode
.env
*.zip

ในกรณีที่สร้างไฟล์ด้วยคำสั่ง ZIP ไฟล์ Dot (. จะเป็นชื่อไฟล์เริ่มต้น) เนื่องจากว่าได้รับการยกเว้น ดังนั้นจำเป็นต้องเพิ่มอย่างระมัดระวัง

รันคำสั่งด้านล่างนี้เพื่อสร้างไฟล์ zip ตามสิ่งที่เขียนไว้ข้างต้นนี้ (*เปลี่ยน "[deploy_file_name.zip]" ให้เป็นชื่อไฟล์ของคุณ เช่น "laravel10-sample.zip" เป็นต้น)

zip -r: คำสั่งสร้างไฟล์ zip
-x: คำสั่งยกเว้นโฟลเดอร์หรือไฟล์เพื่อไม่ให้รวมใน zip

zip -r [deploy_file_name.zip] * .editorconfig .styleci.yml .ebextensions .platform -x \*/.git/\* vendor/\* node_modules/\* public/build/\* public/hot/\* public/storage/\* storage/\*.key storage/framework/sessions/\* storage/framework/views/\* Homestead.json Homestead.yaml npm-debug.log yarn-error.log .idea .vscode .env \*.zip
set_laravel_conf_deploy_to_eb-4_v3

แล้ว Download ไฟล์ ZIP เพื่อเตรียม Deploy แต่ก่อนที่จะ Deploy ให้ตรวจสอบเนื้อหาในโปรเจกต์ก่อน เมื่อเปิดไฟล์มาแล้วจะแสดงหน้าจอแบบนี้

set_laravel_conf_deploy_to_eb-5_v3

การตั้งค่าอื่นๆ ที่แนะนำ

การตั้งค่าอื่นๆ ที่แนะนำตามลิงก์ด้านล่างนี้เป็นวิธีการตั้งค่า Elastic Beanstalk environment ในขณะที่ Deploy โดยจะทำหรือไม่ทำก็ได้ แต่ทางเราขอแนะนำให้ลองทำดูครับ เนื่องจากอำนวยความสะดวกในการตั้งค่าสำหรับการเพิ่มประสิทธิภาพ Memory และการเปรียบเทียบข้อมูลเกี่ยวกับเวลาตาม Timezone ที่เราใช้งานในสภาพแวดล้อมของเรา

Deploy โปรเจกต์ Laravel ใน Elastic Beanstalk

เมื่อเตรียมไฟล์ ZIP เสร็จแล้ว ทำการ Deploy โปรเจกต์ Laravel โดยดูตัวอย่างด้านล่างนี้ได้เลย

ข้อควรระวัง: เราต้องทำการเปลี่ยน "APP_DEBUG" ให้เป็น false เพราะว่าถ้าเผยแพร่เป็น "APP_DEBUG = true" ก็จะทำให้เป็น Security Hole ซึ่งจะทำให้เว็บไซต์เกิดช่องโหว่และไม่ปลอดภัยนั่นเอง ดังนั้นเราควรใส่เป็น [APP_DEBUG = false] ครับ

เพียงเท่านี้การตั้งค่าที่จำเป็นในการ Deploy Laravel ด้วย Elastic Beanstalk ก็เสร็จเรียบร้อยแล้วครับ

สรุป

การตั้งค่านี้มีความจำเป็นอย่างมาก เพราะถ้า Deploy ไปยัง Elastic Beanstalk โดยที่ไม่ได้ทำการตั้งค่าเหล่านี้ อาจทำให้โปรเจกต์มีปัญหาหรือเกิด Error ในขณะรันโปรเจกต์บน Elastic Beanstalk ได้นั่นเอง หากเราป้องกันไม่ให้เกิด Error เกี่ยวกับ Permission ได้ก็จะทำให้งานราบรื่นครับ

ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ

POP (Tinnakorn Maneewong) จากบริษัท Classmethod (Thailand) ครับ !

บทความที่เกี่ยวข้อง

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.