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

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

ครั้งนี้ผมจะมาทำ การตั้งค่าที่จำเป็นเพื่อ Deploy Laravel ด้วย Elastic Beanstalk ครับ

กรณีที่ทำการ Deploy Laravel ด้วย Elastic Beanstalk จำเป็นต้องตั้งค่าดังต่อไปนี้ครับ

1. เพิ่มการตั้งค่าของ nginx

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

สร้าง: [.platform/nginx/conf.d/elasticbeanstalk/laravel.conf] และ Copy Code นี้วางที่ไฟล์laravel.conf

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

2. เกี่ยวกับ 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

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

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

php artisan optimize:clear

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

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

โฟลเดอร์ ที่ยกเว้นมีดังนี้

.git
vendor
node_modules
public/build
public/hot
public/storage

ไฟล์ ที่ยกเว้นมีดังนี้

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

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

รันคำสั่งด้านล่างนี้เพื่อสร้างไฟล์ zip ตามสิ่งที่เขียนไว้ข้างต้นนี้ครับ (เปลี่ยน [deploy_file_name.zip] ให้เป็นชื่อไฟล์ของคุณ เช่น 20220719_1250.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 Homestead.json Homestead.yaml npm-debug.log yarn-error.log .idea .vscode

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

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

เนื่องจากว่ามีวิธีการตั้งค่าตามลิงก์เหล่านี้ ให้ดูที่นี่ได้เลยครับ (จะทำหรือไม่ทำก็ได้ แต่ถ้าเป็นไปได้แนะนำให้ทำดีกว่าครับ)

6. การตั้งค่า Elastic Beanstalk

ทำการตั้งค่าจาก Configuration ในขณะที่สร้าง Environment ซึ่งจะต้องตั้งค่า/publicที่หัวข้อ Document Root ในหน้า Software นอกจากนี้ต้องตั้งค่าตัวแปรสภาพแวดล้อมทั้งหมดที่ใช้ใน Laravel ในหัวข้อ Environment properties ครับ

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

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

สรุป

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

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

ดูรายละเอียดเพิ่มเติมได้ที่นี่ สอบถามเพิ่มเติมเกี่ยวกับ AWS คลิกที่นี่