วิธีการติดตั้ง Laravel บน EC2 (Amazon Linux 2)
สวัสดีครับ ครั้งนี้ผมจะมาอธิบายเกี่ยวกับ วิธีการติดตั้ง Laravel บน EC2 (Amazon Linux 2)
สิ่งที่ต้องมี
หมายเหตุ: ผมจะเรียงบทความที่ต้องทำตามลำดับขั้นตอนไว้ที่ด้านล่างนี้ ซึ่งจะมีบทความที่แปะลิงก์ซ้ำกันอยู่ในแต่ละบทความ เช่น บทความ 「【Update】วิธีติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY」 เป็นต้น ถ้าผู้อ่านเห็นบทความที่ซ้ำกันก็ให้ข้ามขั้นตอนนั้นๆไปได้เลยครับ ! ถ้าอ่าน หมายเหตุ จบแล้วเรามาเริ่มกันเลยครับ
สิ่งที่จะทำในบทความนี้
・ติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
・ตั้งค่า Time Zone ใน Amazon Linux 2 ของ EC2
・Restart EC2 Instance (Amazon Linux 2)
・เรียกใช้ PHP โดยใช้ Nginx บน EC2 (Amazon Linux 2)
・ติดตั้ง MySQL 8 และสร้าง Database ใน Amazon Linux 2
・ติดตั้ง Composer ใน EC2 (Amazon Linux 2)
ติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
การติดตั้ง EC2 Instance (Amazon Linux 2) ในครั้งนี้ ต้องใช้ Instance type: t3a.micro หรือ Instance type ที่มี Memory 1 GiB ขึ้นไป เพื่อรองรับการติดตั้ง MySQL8 สามารถอ่านรายละเอียดเพิ่มเติมได้โดยคลิกที่ ข้อควรระวัง นี้ครับ
ทำการติดตั้ง EC2 Instance (Amazon Linux 2) เพื่อใช้ในการติดตั้ง Laravel และแอปพลิเคชันต่างๆ โดยดูตามลิงก์ด้านล่างนี้เป็นตัวอย่างได้เลยครับ
ตัวอย่างการตั้งค่าการติดตั้ง EC2 Instance (Amazon Linux 2) ในบทความนี้
Create Key pairs
» Name:tinnakorn-test
» Private key file format:.ppk
Launch instances
※Name and tags
» Name:tinnakorn-test
※Application and OS Images (Amazon Machine Image)
» Amazon Machine Image (AMI):Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type
(Default)※Instance type
» Instance type:t3a.micro
※Key pair (login)
» Key pair name - required:tinnakorn-test
※Network settings
Firewall (security groups)
» Security group name - required:tinnakorn-test
» Description - required:tinnakorn-test
Inbound security groups rules
Security group rule 1 (TCP, 22, 0.0.0.0/0)
» Type:ssh ▼
| Source type:My IP ▼
| Source:xxx.xxx.x.xxx/32 ✕
※Configure storage
» 1x:8
GiBgp2 ▼
Root volume (Default)
ตั้งค่า Time Zone ใน Amazon Linux 2 ของ EC2
รันคำสั่งนี้เพื่อเปลี่ยน Time Zone จาก UTC ให้เป็น +07 ครับ
ln -sf /usr/share/zoneinfo/Asia/Bangkok /etc/localtime
รันคำสั่งนี้เพื่อตรวจสอบวันที่และเวลาปัจจุบันครับ
date
อ่านรายละเอียดเพิ่มเติมได้ที่ลิงก์ด้านล่างนี้ครับ ↓
Restart EC2 Instance (Amazon Linux 2)
เมื่อเปลี่ยน Time Zone เสร็จแล้ว ให้รันคำสั่งด้านล่างนี้เพื่อ Restart EC2 Instance (Amazon Linux 2) ครับ
shutdown -r now
ในส่วนของ PuTTY จะถูกตัดการเชื่อมต่อ ทีนี้ให้คลิกขวาที่แถบด้านบนของ PuTTY แล้วเลือกRestart Session
รันคำสั่งนี้เพื่อเข้าใช้งานในฐานะผู้ใช้ที่มีสิทธิ์ root อีกครั้ง
sudo su -
เรียกใช้ PHP โดยใช้ Nginx บน EC2 (Amazon Linux 2)
ทำการเรียกใช้ PHP โดยใช้ Nginx บน EC2 ตามขั้นตอนของลิงก์ด้านล่างนี้ครับ ↓
ติดตั้ง MySQL 8 และสร้าง Database ใน Amazon Linux 2
เมื่อทำการเรียกใช้ PHP โดยใช้ Nginx บน EC2 เสร็จเรียบร้อยแล้ว ให้รันคำสั่งด้านล่างนี้เพื่อกลับมาที่ root
cd ~/
Output (example)
root@ip-172-31-27-236:~
[root@ip-172-31-27-236 html]# cd ~/
[root@ip-172-31-27-236 ~]#
จากนั้นทำการติดตั้ง MySQL 8 ตามขั้นตอนของลิงก์ด้านล่างนี้ครับ ↓ (ถ้าเราใช้งานในฐานะผู้ใช้งานสิทธิ์ root อยู่แล้ว ให้ข้ามขั้นตอนรันคำสั่ง sudo su - ไปได้เลยครับ)
เมื่อทำตามขั้นตอนทุกอย่างของการติดตั้ง MySQL 8 และสร้าง Database ใน Amazon Linux 2 เสร็จแล้ว ก็ถือว่าเราสามารถใช้งาน MySQL 8 ได้ครับ
ขั้นตอนถัดไปผมจะสร้าง Database:laravel
สำหรับใช้ในการเชื่อมต่อกับ DB เช่น phpMyAdmin โดยมีรายละเอียดข้อมูลการตั้งค่า MySQL 8 เบื้องต้นดังนี้ครับ
hostname: localhost (127.0.0.1) User: root Password: P@ssW0ld
การสร้าง Database Laravel สำหรับใช้ในการเชื่อมต่อกับ DB
รันคำสั่งนี้เพื่อเข้าไปยัง Prompt ของ MySQL (เปลี่ยน P@ssW0ld ให้เป็น Password ของคุณ)
mysql -u root -pP@ssW0ld mysql -h localhost
รันคำสั่งนี้เพื่อสร้าง Database:laravel
สำหรับใช้ในการเชื่อมต่อกับ DB (รันโดยไม่ต้องทำการเปลี่ยนแปลงอะไรครับ)
CREATE DATABASE IF NOT EXISTS laravel DEFAULT CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
รันคำสั่งนี้เพื่อแสดงชื่อ Database ใน MySQL
show databases;
Output (example)
จะเห็นว่ามีชื่อ Database:laravel
แสดงขึ้นมา ซึ่งเราสามารถใช้ Database laralvel นี้ไปเชื่อมต่อกับ DB อื่นๆได้ เช่น phpMyAdmin เป็นต้น
root@ip-172-31-27-236:~
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| laravel |
| mysql |
| performance_schema |
| sys |
| tinnakorn-mysql8 |
+--------------------+
6 rows in set (0.01 sec)
รันคำสั่งนี้เพื่อออกจาก Prompt ของ MySQL จากนั้นให้ทำขั้นตอนถัดไปได้เลยครับ
quit
Output (example)
root@ip-172-31-27-236:~
mysql> quit
Bye
[root@ip-172-31-27-236 ~]#
ติดตั้ง Composer ใน EC2 (Amazon Linux 2)
ทำการติดตั้ง Composer ใน EC2 ตามขั้นตอนของลิงก์ด้านล่างนี้ครับ ↓
ติดตั้ง Laravel ใน EC2 (Amazon Linux 2)
ในบทความนี้เราจะมาเน้นที่การติดตั้ง Laravel ใน EC2 กันครับ
ถ้าเราทำตามขั้นตอนในหัวข้อ สิ่งที่ต้องมี ทั้งหมดโดยที่ไม่ติดปัญหาเลย ก็ให้เริ่มทำขั้นตอนในหัวข้อการติดตั้ง Laravel ใน EC2 ได้เลยครับ
รันคำสั่งนี้เพื่อติดตั้งฟังก์ชัน XML Documents และ mbstring
yum install php-dom -y yum install php-mbstring -y
รันคำสั่งนี้เพื่อลบโฟลเดอร์html
ออก
rm -rf /var/www/html
รันคำสั่งนี้เพื่อเข้ามาที่/var/www
cd /var/www
Output (example)
root@ip-172-31-27-236:~
[root@ip-172-31-27-236 ~]# cd /var/www
[root@ip-172-31-27-236 www]#
เมื่อเข้ามาที่/var/www
แล้ว รันคำสั่งนี้เพื่อติดตั้ง Laravel ลงในโฟลเดอร์ html (html นี้คือชื่อโฟลเดอร์ที่จะถูกสร้างหลังจากรันคำสั่งนี้ไปและโปรเจกต์ Laravel ก็จะถูกบันทึกลงในนี้อัตโนมัติ)
composer create-project laravel/laravel html
เมื่อติดตั้ง Laravel เสร็จแล้ว รันคำสั่งนี้เพื่อเปิดการใช้งานขั้นสูงให้กับโฟลเดอร์ html
chmod -R 777 /var/www/html
ต่อไปรันคำสั่งนี้เพื่อเข้ามาที่/var/www/html
cd html
Output (example)
root@ip-172-31-27-236:~
[root@ip-172-31-27-236 www]# cd html
[root@ip-172-31-27-236 html]#
แก้ไขไฟล์ nginx.conf เพื่อใช้งานสำหรับ Laravel
รันคำสั่งนี้เพื่อแก้ไขไฟล์ nginx.conf
vi /etc/nginx/nginx.conf
เมื่อเข้ามาที่ไฟล์ nginx.conf แล้วทำการแก้ไขดังนี้:
» กดปุ่มi
ให้คำว่า"/etc/nginx/nginx.conf"
ที่อยู่ด้านล่างซ้ายเปลี่ยนเป็น-- INSERT --
» เลื่อนลงมาด้านล่างจนเจอคำว่าserver
» ค้นหาroot
ใน server และเพิ่ม/public
ต่อท้าย/var/www/html
ก็จะเป็น/var/www/html/public;
เหมือนกับตัวอย่างด้านล่างครับ
» ทำการ Comment error_page 404 และ error_page 500 โดยการใส่#
ข้างหน้าโค้ดตามที่มาร์คไว้ในบรรทัดที่15,16,17 | 19,20,21
ของด้านล่างนี้เลยครับ
Output (example)
root@ip-172-31-27-236:~
"...ตัด Code ส่วนบนออก..."
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name _;
root /var/www/html/public; # เพิ่ม /public ที่นี่
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
# error_page 404 /404.html;
# location = /404.html {
# }
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
}
"...ตัด Code ส่วนล่างออก..."
-- INSERT -- 48,31 40% # กดปุ่ม i ที่แป้นพิมพ์
เมื่อเปลี่ยนที่อยู่ root และ comment error_page เสร็จแล้วทำการ Save ตามนี้:
» กดปุ่มEsc
ให้คำว่า-- INSERT --
ที่อยู่ด้านล่างซ้ายหายไป
» พิมพ์:x
หรือ:wq
+ Enter เพื่อบันทึก
Output (example)
root@ip-172-31-27-236:~
"...ตัด Code ส่วนบนออก..."
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name _;
root /var/www/html/public;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
# error_page 404 /404.html;
# location = /404.html {
# }
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
}
"...ตัด Code ส่วนล่างออก..."
:x
แก้ไขไฟล์ php.conf เพื่อใช้งานสำหรับ Laravel
รันคำสั่งด้านล่างนี้เพื่อแก้ไขไฟล์ php.conf
vi /etc/nginx/default.d/php.conf
เมื่อเข้ามาที่ไฟล์ php.conf แล้วทำการลบสิ่งที่เขียนไว้ในไฟล์นี้ทั้งหมดโดยการกดปุ่ม d ที่แป้นพิมพ์ 2 ครั้งไปเรื่อยๆจนหมด จากนั้นกดปุ่มi
เพื่อที่จะทำการแก้ไข แล้ว Copy Code ด้านล่างนี้ทั้งหมดวางลงไปได้เลยครับ
index index.php index.html index.htm; location ~ \.(php|phar)(/.*)?$ { fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$; fastcgi_intercept_errors on; fastcgi_index index.php; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REQUEST_SCHEME $scheme; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass php-fpm; }
เมื่อแก้ไขไฟล์ php.conf เสร็จแล้วให้บันทึกโดยการพิมพ์:x
หรือ:wq
+ Enter เหมือนขั้นตอนที่แล้วได้เลยครับ
สร้างไฟล์ laravel.conf เพื่อใช้งานสำหรับ Laravel
รันคำสั่งนี้เพื่อสร้างไฟล์ laravel.conf
vi /etc/nginx/default.d/laravel.conf
เมื่อเข้ามาที่ไฟล์ laravel.conf แล้ว Copy Code นี้ลงในไฟล์โดยกดปุ่มi
เพื่อแก้ไขและวางเหมือนกับขั้นตอนที่แล้วได้เลยครับ
location / { try_files $uri $uri/ /index.php?$query_string; }
เมื่อวาง Code ลงในไฟล์ laravel.conf เสร็จแล้วให้บันทึกโดยการพิมพ์:x
หรือ:wq
+ Enter เหมือนขั้นตอนที่แล้วได้เลยครับ
รันคำสั่งนี้เพื่อ Restart Nginx
systemctl restart nginx
รันคำสั่งนี้เพื่อแก้ไข Password ในไฟล์ .env
vi .env
เมื่อเข้ามาที่ไฟล์ .env แล้ว กดปุ่มi
เพื่อแก้ไข
ตามด้วยให้ค้นหาDB_PASSWORD
แล้วใส่ Password ของเราลงไป (Password ของผมคือP@ssW0ld
)
DB_PASSWORD=P@ssW0ld
เมื่อแก้ไข Password เสร็จแล้วให้บันทึกโดยการพิมพ์:x
หรือ:wq
+ Enter เหมือนขั้นตอนที่แล้วได้เลยครับ
จากนั้นให้รันคำสั่งนี้เพื่อทำการเชื่อมโยงข้อมูลกับ DB เพื่อนำไปใช้กับฐานข้อมูลที่เราต้องการครับ
php artisan migrate:fresh
Output (example)
root@ip-172-31-27-236:~
[root@ip-172-31-27-236 html]# php artisan migrate:fresh
Dropped all tables successfully.
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (31.78ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (30.32ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (30.78ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated: 2019_12_14_000001_create_personal_access_tokens_table (51.01ms)
[root@ip-172-31-27-236 html]#
ตรวจสอบหน้าเว็บไซต์ Laravel
เมื่อทำตามขั้นตอนทุกอย่างเสร็จเรียบร้อยแล้ว Copy Public IPv4 address จากหน้า Console EC2 Instance ของเรา แล้วนำไปเปิดที่เว็บเบราว์เซอร์ที่เราใช้งาน
เพียงเท่านี้เราก็สามารถสร้างโปรเจกต์ Laravel ใน EC2 ได้แล้วครับ
สรุป
การสาธิตการติดตั้งโปรเจกต์ Laravel ลงใน EC2 ก็เสร็จแล้วครับ ซึ่งการสาธิตนี้ผมจะเน้นที่การติดตั้งโปรเจกต์ Laravel ลงใน EC2 และมีการติดตั้งแอปพลิเคชันต่างๆเสริมเข้ามาเพื่อใช้งานกับ Laravel และการใช้งาน Laravel ใน EC2 นั้น บอกได้เลยว่าประสิทธิภาพการประมวลผลของ EC2 จะทำให้โปรเจกต์ Laravel ของเรามีความรวดเร็วและมีประสิทธิภาพมากครับ
บทความที่เกี่ยวข้อง
- 【Update】วิธีติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
- วิธีตั้งค่า Time Zone ใน Amazon Linux 2 ของ EC2
- เรียกใช้ PHP โดยใช้ Nginx บน EC2 (Amazon Linux 2)
- การติดตั้ง MySQL 8 และสร้าง Database ใน Amazon Linux 2
- การติดตั้ง Composer ใน EC2 (Amazon Linux 2)
- มาทำความรู้จัก Laravel กัน