การตั้งค่า Subdomains ใน Digital Ocean และ nginx
บทความนี้ผมเขียนเพื่อแชร์ความรู้เกี่ยวกับการตั้งค่า subdomain ใน digital ocean และ nginx
ก่อนอื่นต้องเริ่มก่อนว่า ผมมีโจทย์คือ ต้องใช้ droplet 1 ซึ่งติดตั้ง ubuntu ไว้ แล้วผมก็มี applications ต่างๆที่พัฒนาจาก NodeJs, Angular 4 ที่ Run อยู่บน Docker Container รวมไปถึง Mail Server และ Service อื่นๆ ที่ใช้เครื่องเดียวกันนี้ แต่ต่าง Port กันไป แน่นอนว่าสำหรับ End-User มันดูค่อนข้างจะยุ่งยากที่ต้องระบุ port เวลากรอก url address บน browser
ผมจึงเลือกจะทำ subdomain ขึ้นมาเพื่อตอบโจทย์ดังกล่าว อีกทั้งในแง่ของการจัดการระบบ มันจะทำให้ผมดึง service อีกตัวมาแทนได้ง่ายๆ ถึง port ของ service จะเปลี่ยนไป
สิ่งที่จะต้องมี
- nginx สามารถติดตั้งด้วยคำสั่ง
sudo apt-get install nginx
2. Domain Name ที่ได้ตั้งค่า DNS ต่างๆเรียบร้อยแล้ว
เรามาเริ่มกัน !!!
- ล๊อคอิน Digital Ocean (ผมเรียก do แล้วกันนะครับ) และเข้าไปที่ control panel ของ do : Networking > Domains แล้วเลือก Droplet ที่ต้องการจะตั้งค่าครับ
2. เลือก Record Type เป็น A แล้วกรอกค่าต่างๆ
- HOSTNAME เป็นชื่อ Subdomain ที่จะใช้
- WILL DIRECT TO เป็นชื่อเครื่องหรือIP ที่ใช้เป็น Host
- ค่า TTL ในหน่วยวินาที
ในตัวอย่างนี้ผมจะสร้าง subdomain เป็น test.demo.com ผมจึงใส่ Host Name เป็น test แล้วเลือกเครื่องเป็น droplet ที่จะใช้ทำ subdomain แล้วกด Create Record
3. DNS Records จะปรากฏรายการให้ขึ้นมาตามที่เราตั้งไว้
4. Login เข้า Droplet ที่เราจะทำการตั้งค่า แล้วคัดลอกไฟล์ตั้งค่าจาก Default file ด้วยคำสั่ง
sudo cp /etc/nginx/sites-available/default /etc/nginx /sites-available/test
โดยเปลี่ยน test เป็น subdomain ที่จะใช้
5. จากนั้นเข้าไปแก้ไขไฟล์ (ในกรณีตัวอย่างนี้ผมใช้ vim)
sudo vim /etc/nginx/sites-available/test
6.แก้ค่าต่างๆ ดังนี้
server {
listen 80;
server_name test.demo.com;
location /site {
proxy_pass http://localhost:3000;
}
}
จากในตัวอย่าง เราจะให้ listen port เป็น default port คือ port 80 และให้ server name เป็น test.demo.com และระบุ location ปลายทาง เป็น http://localhost:3000 ซึ่งหมายถึง pass ไปยังเครื่องเดิมแต่เป็นพอร์ต ที่ test เปิดไว้ครับ
7. ลิงค์ไฟล์ด้วยคำสั่ง
sudo ln -s /etc/nginx/sites-available/test /etc/nginx/sites-enabled/
8. Restart Nginx Service
sudo service nginx restart
เท่านี้ก็เรียบร้อยครับ
ทิ้งท้าย
สำหรับบทความนี้อาจจะเขียนค่อนข้างจำเพาะและอธิบายรายละเอียดน้อยไปนิด ถ้าทำแล้วติดปัญหาตรงไหน หรือตรงไหนมีข้อผิดพลาด ยินดีรับคำชี้แนะแลกเปลี่ยนครับ