Deploy เว็บไซต์ ไปที่ DigitalOcean เมื่อเราเขียนเว็บไซต์ แล้ว ก็คงอยากที่จะ deploy เว็บไซต์ ขึ้นไปยัง web hosting เพื่อให้คนอื่นสามารถเข้าถึงเว็บไซต์ได้

บทความนี้จะมาแนะนำวิธีการ Deploy เว็บไซต์หรือการอัพโหลดเว็บไซต์เราไปที่เครื่อง Hosting นั่นเอง โดยใช้  ซึ่ง DigitalOcean คือ Cloud Hosting ซึ่งให้บริการคลาวด์เซิร์ฟเวอร์ (Cloud server) โดยให้เรามีสิทธิจัดการกับเครื่องได้ทุกอย่าง (Root Access) เปรียบเสมือนผู้ใช้งานมีเครื่องคอมพิวเตอร์อีกเครื่องไว้ใช้งานได้ สามารถสร้างเครื่องเพิ่มได้ตามความต้องการ (Droplet) ถูกออกแบบมาเพื่อให้ผู้ใช้งานคลาวด์ใช้งานได้อย่างสะดวกและง่าย

Droplet คือ Server แต่ละเครื่องที่ถูกสร้างขึ้นมา และทันทีที่สร้าง Droplet ขึ้นมา ก็จะได้ IP Assign ให้ทันที ต่างกับ AWS ที่ต้องผูก IP เอง เมื่อสร้างเครื่องขึ้นมาเราก็จะได้ IP มา 1 ไอพี พร้อมสำหรับใช้งาน และ ได้ account สำหรับ SSH เพื่อเข้าไปจัดการเครื่องของเราได้เลย

ข้อกำหนดเบื้องต้น


ข้อกำหนดสำหรับบทความนี้คือ คุณต้องติดตั้ง Go บนคอมพิวเตอร์ของคุณตามบทความ ติดตั้ง Go บน Mac และ คุณคุ้นเคยกับรูปแบบและโครงสร้างของมัน มาก่อน


สร้างโปรเจค go-website


สร้างโปรเจคใหม่ ในตัวอย่างชื่อ go-website สร้างไฟล์ main.go เปิดเทอร์มินัลแล้วใช้คำสั่ง

go mod init go-website

ไฟล์ main.go เขียนโค้ดดังนี้

package main

import (
	"fmt"
	"net/http"
)

type page struct {

}

func (p page) ServeHTTP(w http.ResponseWriter, r *http.Request){
	fmt.Fprint(w, "<h1>Hello World")	
}

func main() {

	var p page

	err := http.ListenAndServe("localhost:3000", p)
	checkError(err)
}

func checkError(err error) {

	if err != nil {
		panic(err)
	}

}


ทดสอบการทำงาน go run main.go

ที่เว็บบราวเซอร์ป้อน http://localhost:3000/ จะได้ผลลัพธ์การทำงาน ตามรูปด้านล่าง

แก้ไขโค้ด ก่อน Deploy เว็บไซต์


ลบ localhost ออก

สมัครใช้งาน DigitalOcean


ไปที่ https://www.digitalocean.com/ สมัครใช้งานโดยระบบจะมีการทดสอบ การชำระเงินผ่านบัตรเครดิตหรือ บัตรเดบิตก่อน


เปิดใช้งาน คลาวด์เซิร์ฟเวอร์


ไปที่ https://cloud.digitalocean.com/ ที่เมนู Create เลือกไปที่ Droplets


ในตัวอย่างเลือก Ubuntu -> Basic -> 6/mo


เลือก Singapore -> SSH keys


สร้าง SSH Key ที่คอมของเรา


OpenSSH คือชุดเครื่องมือมาตรฐานสำหรับ การจัดการ SSH ในการเริ่มต้น ให้เปิดหน้าต่างเทอร์มินัลใหม่ ในหน้าต่างเทอร์มินัลใหม่ พิมพ์ cd .ssh แล้วเลือกคีย์ Enter

cd .ssh

ให้พิมพ์ ssh-keygen แล้วเลือกคีย์ Enter

ssh-keygen


ต่อไปคุณจะต้องกำหนดตำแหน่งที่คุณต้องการบันทึก คีย์ SSH ใหม่ ชื่อไฟล์เริ่มต้นและตำแหน่งจะแสดงในวงเล็บกลมในหน้าต่างเทอร์มินัล หากคุณต้องการบันทึกคีย์ของคุณไว้ที่อื่นและด้วยชื่อไฟล์อื่น ให้พิมพ์ตำแหน่งใหม่และชื่อไฟล์ที่นี่ ในตัวอย่างใช้ชื่อ mainkey จากนั้นเลือกคีย์ Enter


ต่อไป คุณจะต้องพิมพ์ข้อความรหัสผ่านเพื่อเข้ารหัสคีย์ส่วนตัวของคุณ (หากคุณต้องการใช้) พิมพ์ข้อความรหัสผ่านของคุณสองครั้ง หรือเลือกป้อน (enter) สองครั้งเพื่อเว้นว่างข้อความรหัสผ่านไว้


ใช้คำสั่ง ls ณ จุดนี้ คีย์ SSH ของคุณ จะถูกสร้างขึ้นในตำแหน่งบันทึกที่คุณระบุ และใช้ ชื่อไฟล์ mainkey เริ่มต้น สำหรับการเข้ารหัส RSA ( mainkey.pub สำหรับคีย์สาธารณะและ mainkey สำหรับคีย์ส่วนตัว)

ls

เปิดไฟล์ mainkey.pub ด้วยคำสั่ง

cat mainkey.pub

ก๊อบปี้ SSH Key ส่วนนี้เก็บไว้

สร้าง SSH Key ที่ DigitalOcean


คลิกที่ New SSH Key

นำ SSH Key ที่สร้างไว้ที่คอมของเรา วางไว้ที่ช่องบน และตั้งชื่อในตัวอย่างชื่อ mainkey2022 แล้วคลิก Add SSH Key

เลือก mainkey2022

คลิก Create Droplet 

ในตัวอย่าง จะได้ IP มา 1 ไอพี  คือ 167.172.85.72


Deploy เว็บไซต์ ไปที่ DigitalOcean


เข้าไปในโฟลเดอร์โปรเจคของเรา ในตัวอย่างชื่อ go-website

Deploy ไฟล์ main.go ไปที่ DigitalOcean

scp -i ~/.ssh/mainkey main.go root@167.172.85.72:

ถ้าไม่พบความผิดพลาดแสดงว่าชื่อมต่อกับ คลาวด์เซิร์ฟเวอร์ได้

เข้าไปที่ คลาวด์เซิร์ฟเวอร์

ssh -i ~/.ssh/mainkey root@167.172.85.72

แสดงการเชื่อมต่อกับ คลาวด์เซิร์ฟเวอร์

ใช้คำสั่ง ls จะพบไฟล์ main.go ที่เรา Deploy ขึ้นไป

ทำการอัพเดท คลาวด์เซิร์ฟเวอร์ ด้วยคำสั่ง

sudo apt update

ติดตั้ง Go


ติดตั้ง Go ด้วยคำสั่ง

sudo apt install golang

การ Build วิธีที่ 1


build บน เซิร์ฟเวอร์

go build -o webpage

ใช้คำสั่ง ls จะพบไฟล์ที่ build แล้วชื่อ webpage

การ Build วิธีที่ 2

build ด้วยเครื่องของเรา

GOOS=linux GOARCH=amd64 go build -o webpage

แล้ว deploy ไปที่ DigitalOcean ด้วยคำสั่ง

scp -i ~/.ssh/mainkey webpage root@167.172.85.72:



สั่งให้ทำงานด้วยคำสั่ง

./webpage

ที่เว็บบราวเซอร์ป้อน http://167.172.85.72:3000/ จะได้ผลลัพธ์การทำงาน ตามรูปด้านล่าง

ทดสอบหยุดการทำงาน ด้วยการ กด ctrl+c หรือ ปิดหน้าต่างเทอร์มินัล ลงไป

ผลลัพธ์การทำงาน เว็บไซต์จะหยุดการทำงาน ตามรูปด้านล่าง

สร้างเซอร์วิส รีสตาร์ทอัตโนมัติ


cd ../../etc/systemd/system

สร้างเซอร์วิส golangweb.service

sudo nano golangweb.service
[Unit]
Description = Go Server

[Service]
ExecStart=/root/webpage
User =root
Group =root
Restart=always

[Install]
WantedBy=multi-user.target


Save

รีสตาร์ทเซิฟเวอร์

sudo reboot

เชื่อมต่อ เซิร์ฟเวอร์

ssh -i ~/.ssh/mainkey root@167.172.85.72

เข้าไปที่ system

cd ../../etc/systemd/system

เปิดใช้งาน เซอร์วิส

sudo systemctl enable golangweb.service

เริ่มการทำงาน เซอร์วิส

sudo systemctl start golangweb.service

แสดง สถานะเซอร์วิส

sudo systemctl status golangweb.service

ถึงตอนนี้ ถ้ารีเฟรช เว็บบราวเซอร์ เว็บไซต์จะกลับมาทำงาน

หยุดการทำงาน ด้วยการ กด ctrl+c หรือ ปิดหน้าต่างเทอร์มินัล ลงไป

เว็บไซต์จะยังทำงานตามปรกติ

และเมื่อมีการรีสตาร์ทเซิฟเวอร์

sudo reboot


เว็บไซต์ก็ยังคงทำงานตามปรกติ

Leave a Reply

Your email address will not be published. Required fields are marked *