# My First Website

## Prerequisite

* มียอดคงเหลือใน Project มากกว่า 0 บาท ([ขั้นตอนการเติมเงินเข้าสู่ Project](https://docs-epc.gitbook.io/ncs-documents/nipa-cloud-space-overview/billing-and-wallet/topup-a-project-wallet))

## Instructions

### 1. เข้าสู่ Project

log in และ กดเลือก project ที่ต้องการใช้งาน ที่มียอดเงินคงเหลือมากกว่า 0 บาท

{% hint style="info" %}
ถ้าใน project มี VPC network และ security group สำหรับ SSH และ HTTP แล้ว ให้ข้ามไปที่ข้อ 4.
{% endhint %}

### 2. สร้าง VPC network

ไปที่หน้า VPC networks ภายใต้กลุ่ม network & security เพื่อสร้าง VPC network สำหรับ web server\
โดยกดที่ปุ่ม Create และเลือก Network

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FBfIxpepRUjtjvMq12nFT%2Fimage.png?alt=media&#x26;token=d0e50136-6678-4fd9-8f98-dc0f28ebd88e" alt=""><figcaption><p>Create VPC Network Button</p></figcaption></figure>

เมื่อหน้าต่าง Create Network แสดงแล้ว ให้ทำการตั้งชื่อ และกำหนด CIDR เช่น 192.168.0.0/24 และกด confirm เพื่อสร้าง VPC network

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2F7o9gzcqXWBsRJxoAdWIg%2Fimage.png?alt=media&#x26;token=ae2f3116-a278-40df-93ce-3958ddd48bd2" alt=""><figcaption><p>Create Network Windows</p></figcaption></figure>

VPC network ที่สร้างเสร็จแล้ว จะแสดงในหน้า network list

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FutPQ3e3o3vNc1dzL7XVL%2Fimage.png?alt=media&#x26;token=fbf857ef-7a48-4a82-b4bf-bea55ce75397" alt=""><figcaption><p>Created Network Detail</p></figcaption></figure>

### 3. สร้าง default security group

ไปที่หน้า security groups ภายใต้กลุ่ม network & security เพื่อสร้าง security group พื้นฐาน ที่จำเป็นในการ SSH และเปิดใช้งาน HTTP บน port ของ web server\
หากมีอยู่แล้วให้ข้ามไปที่[ขั้นตอนที่ 4.](#id-4.-instance-web-server)<br>

ในหน้า security group list ให้กดที่ปุ่ม create และเลือก default เพื่อสร้าง default security group ที่เป็นที่นิยม ดังนี้ เช่น SSH, Ping, HTTP หรือ HTTPS

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2F3tTdoxKMi32x6lYYpXZh%2Fimage.png?alt=media&#x26;token=324c9414-a835-4ac7-8e45-e9bc36529e18" alt=""><figcaption><p>Create Default Security Groups Button</p></figcaption></figure>

เลือก confirm เพื่อสร้าง default security group ทั้งหมด

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2Fv5JOfyrwiVd1GzYd6rPg%2Fimage.png?alt=media&#x26;token=28ad7d00-bb48-49bd-a75a-f824e11151cd" alt=""><figcaption><p>Create Security Group Modal</p></figcaption></figure>

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FweUVnPJckhOqu2VdQC8w%2Fimage.png?alt=media&#x26;token=2d1c60bd-2ad9-49bb-952c-e02d0a4f7802" alt=""><figcaption><p>Security Group List</p></figcaption></figure>

### 4. เริ่มสร้าง instance ที่จะมาเป็น web server

เข้าหน้า instances ภายใต้กลุ่ม instance เพื่อสร้าง instance ที่จะมาเป็น web server

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FwsJb8wKZmJcqG94uQbJi%2Fimage.png?alt=media&#x26;token=94745ab2-b084-48cb-876a-422addbf299f" alt=""><figcaption><p>Launch Instance Button</p></figcaption></figure>

ใน step แรก ให้เลือก Availability Zone ที่ต้องการ โดยในตัวอย่างจะเลือกที่ NCP-NON \
กำหนด quantity เป็น เพื่อ launch 1 instance \
และกำหนดชื่อของ instance

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FIpDwHclpfscvol9fufTx%2Fimage.png?alt=media&#x26;token=fd890aba-f1f0-4e7b-9ffe-1339727f140a" alt=""><figcaption></figcaption></figure>

ใน step source ให้เลือก Public Image ที่เป็น image pure OS ที่ Nipa Cloud Space มีให้

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FeSf22mK1Ehnq28t41mmK%2Fimage.png?alt=media&#x26;token=2c6e83fe-936a-4ca0-853a-5d44e986fc02" alt=""><figcaption></figcaption></figure>

โดยใน workshop นี้ เราจะเลือก OS Linux ยอดนิยมอย่าง Ubuntu 22.04

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FzdfPIKSTTJLKcYhep3Dg%2Fimage.png?alt=media&#x26;token=6af64feb-3dcc-4d9b-9549-6a965b1fa12b" alt=""><figcaption></figcaption></figure>

เราจะข้าม step Deployment Script ไป เพื่อเป็น step สำหรับแก้ไข script ในกรณีที่เลือก source เป็น Deployment Script

ใน step machine type เลือก machine type ชื่อ csa.large.v1 ซึ่งเป็น machine type ขนาดเล็ก โดยหลักแล้ว เมื่อเราจะ deploy service ต่างๆ เรามักจะเริ่มจากขนาดเล็ก เพื่อให้ประหยัดงบประมาณในการทดสอบ และเมื่อมั่นใจว่าใช้ได้แล้ว จึง[ทำการ resize](https://docs-epc.gitbook.io/ncs-documents/compute/compute-instance/managing-instance/resize-change-machine-type) ให้มีทรัพยากรเพียงกับกับการใช้งาน

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2F8HfmUkPyxDClRTWaCUQq%2Fimage.png?alt=media&#x26;token=56a950fd-ec38-4ad5-ab6b-d999ebd1287b" alt=""><figcaption></figcaption></figure>

ใน step storages เราสามารถกำหนดได้ ว่าต้องการ storage ช้าหรือเร็ว จำนวน และขนาดเท่าไหร่ โดยใน workshop นี้ เราจะใช้ค่า volume size 9 และ performance type Standard\_SSD ที่เป็นค่า default ของ image Ubuntu 22.04 โดย หาก volume size ไม่เพียงพอ ก็สามารถ extend เพิ่ม storage size ได้ภายหลังเช่นกัน

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FnpqP5sU6jLnNGrhkV9vR%2Fimage.png?alt=media&#x26;token=c3f906ae-7d9e-42fa-959b-840cff689e62" alt=""><figcaption></figcaption></figure>

ใน step networks เราสามารถกำหนด VPC network ที่ instance จะใช้งาน โดยระบบจะทำการเลือก VPC network ที่มีอยู่ หรือที่[สร้างไว้ใน ขั้นตอนที่ 2. ](#2.-vpc-network)ให้

นอกจากนี้เรายังจะต้องเปิดใช้งาน attach external IP บน port ของ instance อีกด้วย เพื่อให้ web server ของเรา สามารถเข้าใช้งานได้ผ่าน internet

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FFiohhOzOKtiEt9s4OAQQ%2Fimage.png?alt=media&#x26;token=bd7fddd3-f253-44fd-8fa5-8d783038e835" alt=""><figcaption></figcaption></figure>

ใน step security จะเป็นการกำหนด security group โดยให้เลือก default security group ที่ชื่อว่า SSH เพื่อใช้ในการ access เข้าไปยัง server เพื่อติดตั้ง web server และ HTTP เพื่อให้ web server สามารถเข้าถึงได้ผ่าน protocol HTTP ของ browser

รวมถึงกำหนด password ในการ SSH access เข้าไปจัดการ server ด้วย

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FuebVsw4wjDlKNaafTrf9%2Fimage.png?alt=media&#x26;token=d7e451c9-8b2e-4004-a0da-7a095426a8f2" alt=""><figcaption></figcaption></figure>

และใน step สุดท้าย launch summary จะเป็นการ review setting ต่างๆที่เรากำหนดไว้ ก่อนที่สั่ง launch โดยตรวจสอบว่า จะต้องเลือก image Ubuntu 22.04, มี external IP และมี security group อย่างน้อยคือ SSH และ HTTP&#x20;

ถ้าทุกอย่างเป็นไปตามที่ต้องการ ให้กดที่ปุ่ม launch เพื่อเริ่มการ launch instance

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FMa5rLxZcu4eKz1CyMyKT%2Fimage.png?alt=media&#x26;token=cbef2403-354b-46bc-926e-b8f66bbb8e1a" alt=""><figcaption></figcaption></figure>

หลังกดปุ่ม launch ระบบจะทำการสร้าง instance ให้รอจนกว่า[^1] instance status กลายเป็น active และ OS status กลายเป็น Healthty[^2] ก่อนทำขั้นตอนถัดไป

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FV6BV5dCiFco5xnAhnBoe%2Fimage.png?alt=media&#x26;token=99c1bbaf-cc9e-4217-8b59-e9fbe17b0bb9" alt=""><figcaption></figcaption></figure>

### 5. SSH เข้าสู่ instance

เปิด program ที่จะใช้ในการ SSH เข้าสู่ instance โดยใน workshop นี้ จะใช้งาน Ternimal ที่มีอยู่แล้วบน MacOS&#x20;

{% hint style="info" %}
สำหรับ Windows ให้ติดตั้ง program PuTTY เพื่อใช้งานในการ SSH
{% endhint %}

บน Terminal ให้ใส่ command ด้านล่างนี้ เพื่อทำการ SSH โดยตัวเลขหลังเครื่องหมาย "@" ให้เป็น external IP ของ instance ที่พึ่งสร้าง

```
# ssh nc-user@[your external IP]
```

{% hint style="info" %}
nc-user คือ user default ที่ระบบ NCS สร้างให้พร้อมกับการ authentication ที่กำหนดไว้ในขั้นตอนการ launch instance
{% endhint %}

{% hint style="warning" %}
หากใน PC ที่ใช้ มี public key อยู่ ระบบจะมีการถามว่า การ connect นี้ ไม่สามารถใช้งาน public key ที่ลงทะเบียนไว้ได้ ซึ่งใน workshop นี้ เราจะใช้งาน password กัน ดังนั้นให้ พิม "yes" และกดปุ่ม enter เพื่อดำเนินการต่อ

<img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FbVMJTzkfYU5oJ1DKrhC8%2FScreen%20Shot%202565-08-19%20at%2009.29.25.png?alt=media&#x26;token=d524dccd-7ed2-45bf-8ca1-ca693352a411" alt="" data-size="original">
{% endhint %}

พิมรหัสผ่านและกด enter เพื่อดำเนินการต่อ

{% hint style="info" %}
บน Linux การพิม password จะไม่แสดงเครื่องหมายแสดงหลักที่พิมไปแล้ว เช่น \*\*\*\
ให้กด enter ที่ keyboard ได้ทันทีที่พิม password เสร็จ\
![](https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FXOzDSZIpuLNXBDt2hicM%2Fimage.png?alt=media\&token=594cf1fa-a867-4847-8294-098540836fe8)
{% endhint %}

เมื่อ login สำเร็จ ระบบจะแสดงดังรูป<br>

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2F9ghXLAcB5tzLQ6JxAqfm%2Fimage.png?alt=media&#x26;token=2ba4949d-32fc-4cfe-b39f-5071267371ef" alt=""><figcaption></figcaption></figure>

### 6. ติดตั้ง Nginx web server

ติดตั้ง service Nginx โดยทำตามขั้นตอนดังนี้

เปลี่ยนสิทธิเข้าใช้งานให้เป็น root เพื่อให้สามารถติดตั้ง service ต่างๆ ได้ โดยใช้ command ด้านล่าง

```
# sudo -i
```

จะเห็นว่าชื่อของ user เปลี่ยนไป

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FwPa12bm5vG1PCqkM2pfp%2Fimage.png?alt=media&#x26;token=7cc9fbe6-d465-4ff9-ad76-10ad6b1701ef" alt=""><figcaption></figcaption></figure>

เมื่อได้สิทธิ root แล้ว ให้ทำการ update รายการของ service ที่มีให้ ติดตั้ง โดยใช้ command ด้านล่าง

```
# apt update
```

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FzAmDqS2kT7J4odG7wSHC%2Fimage.png?alt=media&#x26;token=d6360602-989e-45cf-a4eb-5f75562d2021" alt=""><figcaption></figcaption></figure>

จากนั้นเราจะทำการทดสอบก่อนที่จะติดตั้ง web server โดยการเข้าถึง external IP ของ instance นี้ ผ่าน browser

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2F5U7I71U3bn1f8FyEzjBD%2Fimage.png?alt=media&#x26;token=11a9eb0b-74b2-4013-91f2-08006a0dd137" alt=""><figcaption></figcaption></figure>

จะเห็นว่าเราไม่สามารถเข้าใช้งาน website จาก IP ดังกล่าวได้ ดังนั้นเราจะมาติดตั้ง web server เพื่อให้ใช้งานได้ โดยเราจะใช้ Nginx ที่เป็น web server ที่เบา และได้รับความนิยมอย่างมาก โดยใช้ command ด้านล่าง

```
# apt install nginx
```

ระบบจะแสดงรายการของ package ที่เป็น dependency ของ Nginx ที่จะต้องติดตั้งไปด้วย ให้พิม Y และกดปุ่ม enter เพื่อดำเนินการต่อ

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2Fhnv2tM7k1Np2AhLFx0z9%2Fimage.png?alt=media&#x26;token=c805f35e-07b9-4cc6-9906-492603ca3403" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2Fs92pbGp2bH0b8mvbSBMs%2Fimage.png?alt=media&#x26;token=e0705aa3-25d6-4c51-9e67-e482b10617e8" alt=""><figcaption></figcaption></figure>

เมื่อติดตั้งเสร็จแล้ว ให้เราตรวจสอบว่า service Nginx ของเรา run หรือยังโดยใช้ command systemctl เพื่อ list รายการ service ทั้งหมด และต่อด้วย | grep nginx เพื่อค้นหา service nginx เท่านั้น&#x20;

```
# systemctl | grep nginx
```

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FXtiBOJjCe3LjKa7MuJes%2Fimage.png?alt=media&#x26;token=d23243b6-a29e-4b58-bcf8-663ce0211c5f" alt=""><figcaption></figcaption></figure>

จะเห็นว่า service Nginx ของเรา active และ running อยู่ ทีนี้ให้กลับไปที่ browser และกรอก external IP ลงไปอีกครั้ง เพื่อตรวจสอบว่า web server ของเราทำงานหรือยัง

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FL1Tk30jSKxAP99oFCWr1%2Fimage.png?alt=media&#x26;token=acc28bc1-52db-4427-93a9-535709ad4fbc" alt=""><figcaption></figcaption></figure>

เมื่อ browser แสดงดังรูป ก็แสดงว่า web server ของเราทำงานได้แล้ว

### 7. แก้ไข webpage&#x20;

เมื่อ website ของเรา ใช้งานได้แล้ว แต่ยังเป็นแค่หน้า default ของ Nginx อยู่ เราจะแก้ไขไฟล์นี้ได้โดยการไปที่ directory ของ file โดยใช้ command

```
# cd /var/www/html
```

และแสดงรายการของ file ใน directory นี้โดยใช้ command

```
# ls
```

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FmKNV0JVmBeuzkdAHk8RL%2Fimage.png?alt=media&#x26;token=625acfad-7f1d-4ed2-8a5c-468d9b5cf74d" alt=""><figcaption></figcaption></figure>

เริ่มแก้ไข file โดยใช้ nano ด้วย command

```
# nano index.nginx-debian.html
```

ระบบจะแสดง nano text editer ขึ้นมา พร้อมเนื้อหาใน file ดังกล่าว ซึ่งเราจะสามารถแก้ไข file ให้เป็นอย่างไรก้ได้ตามต้องการ

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2F8F1zswiSshP0LCD3u9Rr%2Fimage.png?alt=media&#x26;token=1386373b-da52-4ed7-83c3-b8597ad72388" alt=""><figcaption></figcaption></figure>

จากนั้นให้กดปุ่ม control + x เพื่อออกจาก nano และกด Y เพื่อ save การเปลี่ยนแปลง และกด enter อีกครั้งเพื่อใช้ชื่อ file เดิม

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FTtvUQ3tELeAXV6hwJioM%2Fimage.png?alt=media&#x26;token=a248d5c9-d9bf-4b8c-ad29-9a769a7f53b0" alt=""><figcaption></figcaption></figure>

จากนั้นให้กลับไปที่ browser ที่เปิด external IP ของ instance เอาไว้ แล้ว refresh เพื่อดูการเปลี่ยนแปลง

<figure><img src="https://1352697161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq2BYmWTMiaonrEL8QBP2%2Fuploads%2FkaCNtsPjRAIV1hViWA9v%2Fimage.png?alt=media&#x26;token=ab28179e-0be9-497a-8687-791c206e3d17" alt=""><figcaption></figcaption></figure>

เมื่อเห็นการเปลี่ยนแปลงของ webpage ก็ถือเป็นอันเสร็จสิ้น website แรกบน Nipa Cloud Space ของคุณ

[^1]: refresh หน้า instance list เพื่อ update

[^2]: หลัง instance status เป็น active แล้ว OS status อาจยังเป็น Unhealthy อยู่ จนกว่า OS จะ boot เสร็จพร้อมใช้งาน
