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

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

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ครั้งนี้ผมจะมาทำ การตั้งค่าที่จำเป็นเพื่อ 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 แล้วครับ

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