Deploy VueJS Project in Nginx

Surasak Phothiphiphit
The Deft Technology
2 min readJul 17, 2018

หลายท่านอาจยังไม่รู้ว่าการ Deploy VueJS Proejct ใน Nginx นั้นง่ายแสนจะง๊ายยยย เลยทำให้บทความนี้สั้นแสนสั้นน มาลุยกันเลย

https://unsplash.com/photos/l_YNobbDYJk

เตรียมโปรเจค VueJS ให้เรียบร้อย

  • จะสร้างใหม่ หรือ โปรเจคที่มีอยู่แล้วก็ได้

Build VueJS Project

  • yarn build
  • npm run build

หลังจาก Build เรียบร้อย ให้ทำการรันคำสั่ง Docker ข้างล่างนี้

docker run --name tmp-nginx-container -v $(pwd)/dist:/usr/share/nginx/html:ro --rm  -p 80:80  nginx

คำสั่งนี้จะทำการ ก๊อบปี้ไฟล์ที่เราทำการ Build เสร็จเรียบร้อยใน directory dist/ ไปไว้ใน directory nginx/html

*เหตุผล ที่ผมเลือกใช้ Docker เพราะมันง่ายมากกก ผมไม่ต้อง install nginx เลยสักกะนิด มาเริ่มหัดใช้งานมันทีละเล็กละน้อย เดียวก็ชิน…

ลองเข้าดู http://localhost ดูครับ

Hoolay✌ เรียบร้อยแค่นี้ ง๊ายเกิ๊น

แต่เดี๋ยวก่อน……

ถ้าเราใช้ Vue Router ในโหมด History มีสิ่งหนึ่งที่เราต้องไปแก้ไขคือไฟล์ config ของ nginx เพราะถ้าเราไม่ไปแก้ไข ตอนกด refresh จะเจอ 404 error

มาดูสิ่งที่ต้องแก้ไขด้านล่างกัน

Before

server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

After

server {
listen 80;
server_name localhost;
location / {
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

สุดท้ายอย่าลืม reload nginx, กด ctrl + c หรือ cmd + c ให้ออกมาจาก command ของ Docker ที่เรารันค้างไว้อยู่ แล้วรันคำสั่งใหม่

docker run — name tmp-nginx-container -v $(pwd)/dist:/usr/share/nginx/html:ro -v $(pwd)/default.conf:/etc/nginx/conf.d/default.conf:ro — rm -p 80:80 nginx

สิ่งที่ทำการแก้ไขคือ ทำการเขียนทับไฟล์ config default ของ nginx เป็นของเราที่ทำการ rewrite URI

*Config ของ Nginx ผมตัดส่วนที่ไม่ได้ใช้ออก เพื่อให้ง่ายต่อความเข้าใจและโฟกัสในหัวข้อที่ผมต้องการนำเสนอ ตอนใช้งานจริงควรศึกษาตรงนี้เพิ่มเติม

Github

》บทความถัดไปผมจะติดตั้ง Nginx ไว้ใน Services ของ Windows ให้ชมกันครับง่ายเหมือนเดิมแน่นอน

ผิดพลาดประการใด ขอภัยด้วยนะครับ ขอบคุณมากครับ

--

--