ในบทความนี้ผมจะพูดถึงการ Deploy Symfony ไปยัง Droplet บน DigitalOcean โดย OS ที่ใช้จะเป็น ubuntu เพราะน่าจะง่ายที่สุดละ (จริงๆ มันมี tutorials เยอะดี 😀) และใช้ nginx เป็น Web Server สาเหตุที่ไม่ใช้ apache เพราะผมไม่ชอบ syntax มันเลย ค่อนข้างชอบ syntax ของ nginx มากกว่า รู้สึกอ่านง่ายดี
มาพูดถึง Symfony กันหน่อยเผื่อใครไม่รู้จัก ตัว Symfony ก็เป็น Framework นึงจากฝั่ง PHP ส่วน ซึ่งผมก็มีบางงานที่ต้อง Deploy ก็เลยถือโอกาสมาเขียนเป็นบทความไว้ เผื่อใครกำลังจะหาวิธีการ Deploy อยู่พอดี อาจจะนำวิธีการที่ผมนำเสนอในบทความนี้ไปใช้ต่อได้ บวกกับผมก็จดไว้กันลืมอะแหละ ก็เลยมาเขียนเป็นบทความซะเลย
วิธีการนี้ก็อาจจะดูเป็นวิธีการที่ tranditional สักหน่อย (ใช้คำซะหรูเชียว) ยุคนี้มันต้อง Deploy ด้วย Container กันแล้ว ก็เอาไว้ก่อนละกัน เอาแบบบ้านๆ ไปก่อนนะ 😅
ผมขอข้ามวิธีการสมัครและสร้าง Droplet ใน DigitalOcean ไปเลยนะครับ เราเข้าสู่ขั้นตอนการ remote เข้าเครื่องเพื่อจัดการ server กันเลย
Setup Server
เริ่มด้วยการ remote เข้าไปที่ server ด้วย ssh
Remote to server
ใช้คำสั่ง ssh
เพื่อเชื่อมต่อกับ server โดยวิธีการก็จะเป็น
เมื่อเข้ามาแล้ว ก็จะได้หน้าตาแบบนี้
Create new user
ผมจะมาสร้าง user ใหม่ไว้ใช้ใน server กันก่อน เพราะไม่อยากจะใช้ root ตลอดเวลาขนาดนั้น
สร้าง user ใหม่ ด้วยคำสั่ง
กรอก password
กรอก password อีกครั้ง
เพิ่ม fullname ให้กับ user
ตอบ y เพื่อยืนยันความถูกต้องของข้องมูล user
Add privileges to user
เพิ่มสิทธิ์ให้ user ใหม่ มีสิทธิ์เทียบเท่ากับ root
Copy ssh key
คัดลอกไฟล์ .ssh จาก user root ไปยัง user ที่เราสร้างใหม่ด้วย เพื่อจะได้ remote เข้าเครื่องโดยใช้ user ที่เราสร้างใหม่
Enable Firewall
allow ssh ด้วยคำสั่ง ufw allow OpenSSH
เปิดใช้งาน firewall ด้วยคำสั่ง ufw enable
ดูสถานะ firewall ด้วยคำสั่ง ufw status
จากนั้นก็พิมพ์คำสั่ง exit
เพื่อตัดการเชื่อมต่อกับ server
ssh by new user
ต่อมาเราจะมาลอง Remote เข้า server ด้วย user ใหม่ ที่เราเพิ่งสร้างไป
Upgrade package
หลังจากสร้าง user ใหม่เรียบร้อยแล้ว ก็ update package ซะหน่อย ด้วยคำสั่งที่คุ้นเคย
Install Nginx and PHP
ต่อมาถึงขั้นตอนการติดตั้ง nginx กับ PHP
Add ondrej/php repository
เราจำเป็นต้อง add ppa:ondrej/php
เพราะ ubuntu ไม่มี php 8.3 แบบ official
โดยเริ่มจากการพิมพ์คำสั่ง sudo add-apt-repository ppa:ondrej/php
เพื่อเพิ่ม ppa:ondrej/php
จากนั้น พิมพ์คำสั่ง sudo apt update
เพื่อ update package
จากนั้นติดตั้ง nginx กับ PHP
ตอบ y เพื่อยืนยันการติดตั้ง
จากนั้นก็รอ
ติดตั้งเรียบร้อย
allow nginx on firewall
หลังจากที่ติดตั้งเสร็จ เราจำเป็นต้องเปิด firewall สำหรับ nginx ด้วย ทำได้ด้วยการพิมพ์คำสั่ง sudo ufw allow 'Nginx HTTP'
ถ้าเราลองเปิด browser แล้วเข้าที่ IP ของ server ก็จะเห็นว่า nginx สามารถใช้งานได้แล้ว
config nginx
มาถึงขั้นตอนการ config site สำหรับ nginx
เริ่มด้วยการ copy ไฟล์ default
ไปเป็นอีกชื่อนึงที่เราอยากได้ ในที่นี้ผมตั้งชื่อว่า demo-symfony.9mza.net
จากนั้นทำการแก้ไขไฟล์ที่เราเพิ่ง copy มา
ผมแก้ไขไฟล์ประมาณนี้ มีแค่เพิ่ม php เข้าไป
ไฟล์เต็มๆ
จากนั้นทำการ unlink sites-available default
ทำการลิงก์ sites-available เป็น sites-enabled
sudo nginx -t
เพื่อตรวจสอบ syntax
sudo systemctl reload nginx
เพื่อทำการ reload nginx
เปลี่ยน permission ของ directory html
ให้เป็น 775
สร้างไฟล์ index.php ขึ้นมาเพื่อทดสอบ
เมื่อสร้าง เมื่อบันทึกเสร็จแล้ว มาลองทดสอบใน browser
ถ้าขึ้นแบบนี้ก็เป็นอันใช้ได้
สำหรับบทความนี้ขอจบไว้ที่ตรงนี้ก่อน เพราะรู้สึกว่าเหมือนจะยาวละ ไว้เรามาต่ออีกทีใน Part 2 โดยจะมาลุยกันต่อในเรื่อง Composer, Database, Symfony ละ แล้วเจอกันครับ