Devahoy Logo
PublishedAt

Hosting

มา Deploy Website แบบไม่เสียตังด้วย Now กันเถอะ

มา Deploy Website แบบไม่เสียตังด้วย Now กันเถอะ

สวัสดีครับ วันนี้จะมาแนะนำบทความสำหรับการ Deploy Website กันแบบง่ายๆด้วย Now กันครับ ซึ่งโดยปกติแล้วบางคนทำเว็บไซต์เสร็จ อยากเอาเว็บขึ้น Cloud ก็ต้องมาหา Hosting สำหรับเทสบ้าง หรือรัน Production จริงๆก็แล้วแต่ ก็ต้องมาเปิด VPS แล้ว Setup ค่อนข้างยุ่งยากเลยทีเดียว

วันนี้ผมก็เลยมาพร้อมกับ Now ทำให้การ Deploy Website ง่ายเพียงแค่ปลายนิ้วคลิ๊ก : ในเว็บ Now เค้าบอกว่า เพียงแค่มีไฟล์ package.json หรือ Dockerfile ก็สามารถ Deploy ไปที่ Cloud ด้วยคำสั่ง now ได้เลย

และ ณ ตอนนี้ ตัว Now รองรับการ Deploy เว็บไซต์ทั้งสิ้น 3 แบบ ก็คือ

ซึ่งก็ต้องทำการติดตั้ง Now ลงเครื่องซะงั้น โชคดีที่ว่า Now มี เวอร์ชั่น Now Desktop ให้เราดาวน์โหลดมาลงเครื่องเลย พร้อมทั้งมี Now CLI ให้พร้อม หรือใครไม่ชอบ GUI ก็จะลงผ่าน npm ก็ได้ เช่นกัน

Terminal window
npm install -g now

หลังจากติดตั้ง Now แล้ว จะได้หน้าจอแบบนี้ ก็กรอก Email เพื่อทำการสมัครได้เลย

Now Desktop

รอ Verify email ก็เป็นอันเรียบร้อย ได้ Account Now แล้ว

Now Desktop Verify

เมื่อพร้อมแล้วไปลุยกันเลย

วิธี 1 : Static Website

วิธีแรกเป็นการ Deploy Web ที่เป็น Static Website ทั่วๆไป ก็คือขอแค่เว็บไซต์เรามีแค่ index.html ไฟล์เดียว ก็ deploy ได้เลย หรือจะเป็น Project ที่ build จากพวก SPA ทั้งหลาย Angular, React, Vue ก็ได้หมด

ตัวอย่างวิธีนี้ สมมติผมมี ไฟล์ index.html ในโฟลเดอร์ มีหน้าตาแบบนี้

1
<!doctype html>
2
<html lang="en">
3
<head>
4
<meta charset="UTF-8" />
5
<title>Hello Now!</title>
6
<link href="https://fonts.googleapis.com/css?family=Quicksand:700" rel="stylesheet" />
7
<style>
8
.box {
9
display: flex;
10
flex-direction: column;
11
height: 100vh;
12
justify-content: center;
13
align-items: center;
14
font-family: 'Quicksand', sans-serif;
15
}
16
</style>
17
</head>
18
<body>
19
<div class="box">
20
<h1>Static Website with <a href="https://now.sh">Now</a></h1>
21
<p>
22
See more :
23
<a href="https://devahoy.com/blog/2018/02/deploy-website-with-now/"
24
>มา Deploy Website แบบไม่เสียตังด้วย Now กันเถอะ</a
25
>
26
</p>
27
</div>
28
</body>
29
</html>

ก็แค่ลากโฟลเดอร์ไปวางไว้ที่ไอคอน Now ก็ได้เลย หรือทำการอัพโหลดผ่าน Command Line ด้วย

Terminal window
now

จะได้ผลลัพธ์และ URL สำหรับเว็บของเรา

Terminal window
> Ready! https://static-web-pipixqcpwd.now.sh (copied to clipboard) [4s]
> NOTE: You can use `now --public` to skip this prompt
> Synced 1 file (146B) [4s]
> Success! Deployment complete!

ลองเข้า https://static-web-pipixqcpwd.now.sh/ จะเห็นคำว่า Static Website with Now :)

Now Static

วิธี 2 : Node.js App

วิธีนี้จะใช้การ Deploy ด้วย Node.js ขอแค่เรามีไฟล์ package.json และไฟล์ *.js ซักไฟล์ที่เอาไว้รัน Node.js ซึ่งตัวอย่างจะใช้ Express ในการรัน Server ง่ายๆครับ ไฟล์ index.js โค๊ดก็จะมีดังนี้ (โค๊ดรกๆ ด้านล่างไม่ต้องสนใจนะครับ แค่ผมใส่ inline style เพื่อจัดหน้านิดหน่อยครับ)

1
const express = require('express')
2
const app = express()
3
4
app.get('/', (req, res) => {
5
res.send(`
6
<link href="https://fonts.googleapis.com/css?family=Quicksand:700" rel="stylesheet">
7
<div style="display: flex;flex-direction: column; justify-content: center; align-items: center; height: 100vh; font-family: 'Quicksand', san-serif;">
8
<h1>Node.js with <a href="https://now.sh">Now</a></h1>
9
<p>See more : <a href="https://devahoy.com/blog/2018/02/deploy-website-with-now/">มา Deploy Website แบบไม่เสียตังด้วย Now กันเถอะ</a></p>
10
</div>
11
`)
12
})
13
14
app.get('/hello', (req, res) => res.json({ message: 'Hello Now' }))
15
16
app.listen(3000)

ซึ่งตัว package.json มันจะมีข้อแม้อยู่หน่อยเดียวคือตั้องมี script start หรือว่า now-start ด้วย เพื่อให้รู้ว่าหลังจาก Deploy แล้วให้ทำอะไร ซึ่งด้านล่าง ก็คือ start แล้วสั่งให้มันรัน node index.js

Note: อย่าลืมใส่คำสั่ง "start": "node index.js" ใน package.json นะครับ

1
{
2
"name": "now-node-app",
3
"version": "1.0.0",
4
"scripts": {
5
"start": "node index.js"
6
},
7
"dependencies": {
8
"express": "^4.16.2"
9
}
10
}

จากนั้น Deploy ด้วยคำสั่งเดิม

Terminal window
now

ตัว Now จะดูว่ามี package.json มั้ย? ถ้ามีมันจะรันโค๊ดเราด้วย Node.js environment

Terminal window
> Using Node.js 8.9.4 (default)
> Ready! https://now-node-app-odpshwgsre.now.sh (copied to clipboard) [9s]
> Synced 1 file (624B) [2s]
> Initializing…
> Building
> ✓ Installed 49 modules [767ms]
> ▲ npm start
> > now-node-app@1.0.0 start /home/nowuser/src
> > node index.js
> Deployment complete!

เมื่อ Deploy เสร็จลองเข้าเว็บดู https://now-node-app-odpshwgsre.now.sh/ หรือลองเข้า /hello จะได้{ message: 'Hello Now' } แบบที่เรากำหนดไว้

Now Node.js

วิธี 3 : Docker App

วิธีนี้เป็นการ Deploy ด้วย Dockerfile จะเป็น App ภาษาอะไรก็ได้ อย่างตัวอย่างผม Deploy ด้วย Golang แบบง่ายๆ โดยใช้ไฟล์ hello.go ด้านล่าง

1
package main
2
3
import (
4
"fmt"
5
"net/http"
6
)
7
8
const Message = `
9
<link href="https://fonts.googleapis.com/css?family=Quicksand:700" rel="stylesheet">
10
<div style="display: flex;flex-direction: column; justify-content: center; align-items: center; height: 100vh; font-family: 'Quicksand', san-serif;">
11
<h1>Dockerfile with <a href="https://now.sh">Now</a></h1>
12
<p>See more : <a href="https://devahoy.com/blog/2018/02/deploy-website-with-now/">มา Deploy Website แบบไม่เสียตังด้วย Now กันเถอะ</a></p>
13
</div>
14
`
15
16
func handler(w http.ResponseWriter, r *http.Request) {
17
w.Header().Set("Content-Type", "text/html;charset=UTF-8")
18
fmt.Fprintf(w, Message)
19
}
20
21
func main() {
22
http.HandleFunc("/", handler)
23
http.ListenAndServe(":3000", nil)
24
}

และ Dockerfile แบบนี้

1
FROM golang:alpine
2
ADD . /go/src/now-go
3
RUN go install now-go
4
CMD ["/go/bin/now-go"]
5
EXPOSE 3000

จากนั้นก็ทำการ Deploy ด้วย Now

Terminal window
now

Now จะรู้เลยว่าเรา Deploy Docker มันจะทำการ Pull image มาทำการ Deploy

Terminal window
> Ready! https://docker-app-qxobaomjcn.now.sh (copied to clipboard) [4s]
> Synced 1 file (797B) [5s]
> Initializing…
> Building
> ---> 0d375f27b09b
> Successfully built a99df8acff1d
> ▲ Storing image
> ▲ Deploying image
> ▲ Container started

สุดท้าย Deploy เสร็จ ก็เข้า URL ไปดูผลลัพธ์เลย https://docker-app-qxobaomjcn.now.sh/

Now Docker

คำสั่งเพิ่มเติม

สำหรับด้านล่างเป็นคำสั่ง Now CLI เพิ่มเติมครับ เช่น

  • now login

สำหรับ login เข้าสู่ระบบ จะได้ link ในการ login เข้าเมล์ของเรา

  • now ls

เอาไว้ดู list ของ app เราทั้งหมด เช่น ตัวอย่างผลลัพธ์ของผม

1
> 5 deployments found under phonbopit [2s]
2
3
docker-app (3 of 3 total)
4
url inst # state age
5
docker-app-qxobaomjcn.now.sh 1 READY 10m
6
docker-app-nhrohwjyoy.now.sh 0 BUILD_ERROR 17m
7
docker-app-qhsgsytezd.now.sh 0 BUILD_ERROR 18m
8
9
now-node-app (1 of 1 total)
10
url inst # state age
11
now-node-app-odpshwgsre.now.sh 0 FROZEN 1h
12
13
static-web (1 of 1 total)
14
url inst # state age
15
static-web-pipixqcpwd.now.sh ✖ READY 1h
  • now rm <ID>

เอาไว้ลบ app deployments ของเรา เช่น now rm docker-app-qhsgsytezd.now.sh

  • now --help

เอาไว้ดู Help รวมถึงคำสั่งอื่นๆ ทั้งหมดที่ใช้ได้

สรุป

ถือว่า Now ก็เป็นอีกหนึ่ง Service ฟรีๆ ที่สามารถให้เรา Deploy web ได้ง่ายๆ เช่นเดียวกับ Firebase Hosting, Github Pages เลย ก็นับว่าเป็นอีกตัวเลือกนึงที่น่าสนใจดีครับ เหมาะกับการลองอะไรใหม่ๆ ง่ายๆ แล้วอยากให้เพื่อนเทสแบบไวๆ

ซึ่งข้้อสังเกตข้อนึงเลยคือ ทุกๆครั้งที่เราสั่ง Deploy ด้วย now ข้อมูลหรือ instance เก่าๆ ก็จะยังอยู่จนกว่าเราจะสั่ง now remove นะครับ สุดท้ายก็ลองไปดู ราคาของ Now กันดูครับ ว่าจะคุ้มหรือน่าซื้อหรือเปล่า

Now Pricing

ซึ่ง Free plan มันก็มีข้อจำกัดคือ ได้ Bandwidth 1GB หรือ Max file size แค่ 1MB ซึ่งผมลอง Deploy ตัว static website ของ React ปรากฎว่าไฟล์ bundle มันใหญ่ไป ไม่สามารถ Deploy ได้ ทำได้แต่เว็บเล็กๆ นั่นเอง :)

สุดท้าย Source Code ของบทความนี้ครับ

Authors
avatar

Chai Phonbopit

เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust

Related Posts