# My First Website

## Prerequisite

* มียอดคงเหลือใน Project มากกว่า 0 บาท ([ขั้นตอนการเติมเงินเข้าสู่ Project](/ncs-documents/~/changes/U2SVceQUXXCaek3t7CoE/starting-nipa-cloud-space/topup-a-project-wallet.md))

## 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

![VPC Network List](/files/TlfndH8ssP2Cu0V2rhoQ)

ตั้งชื่อ และกำหนด CIDR เช่น 192.168.1.0/24 และกด confirm เพื่อสร้าง VPC network

![Create VPC Network](/files/L1pp7dOa3jhAEfEXfWv8) ![Network Created](/files/9F7izPoDwtzFIOhFatBF)

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

ไปที่หน้า security groups ภายใต้กลุ่ม network & security เพื่อสร้าง security group พื้นฐาน ที่จำเป็นในการ SSH และเปิดใช้งาน HTTP บน port ของ web server

![Create Default Security Groups](/files/VeNuPuMC3JXfEmFJnWbK)

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

![Create Default Security Groups](/files/OzXhjZYRODTQVJgNOwvw) ![Security Groups Created](/files/3g1sOybOxGx3sLD2A5mB)

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

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

![Create Instance Button](/files/bz6eMUyDaSEK6XBpnuku)

ใน step แรก ให้เลือก image Ubuntu 20.04 จาก distribution image

![Image Selection](/files/ybYvcz4m4HYxUoRaVDAc)

ใน step machine type เลือก machine type ชื่อ coa.large.v1 ซึ่งเป็น machine type ขนาดเล็ก โดยหลักแล้ว เมื่อเราจะ deploy service ต่างๆ เรามักจะเริ่มจากขนาดเล็ก เพื่อให้ประหยัดงบประมาณในการทดสอบ และเมื่อมั่นใจว่าใช้ได้แล้ว จึง[ทำการ resize](/ncs-documents/~/changes/U2SVceQUXXCaek3t7CoE/instance/managing-instance-s/resizing.md) ให้มีทรัพยากรเพียงกับกับการใช้งาน

![Machine Type Selection](/files/Wt0onhplhAQrt0qBxytU)

ใน step instance detail เราสามารถเลือกจำนวนของ instance ที่ต้องการจะ launch และ ตั้งชื่อให้ instance แต่ละตัวได้ โดยใน workshop นี้ เราจะ launch instance แค่ตัวเดียว โดยจะตั้งชื่อว่า my-fisrt-web

![Naming Instance](/files/egD97mqJt8psSZVfV6w0)

ใน step storages เราสามารถกำหนดได้ ว่าต้องการ storage ช้าหรือเร็ว จำนวน และขนาดเท่าไหร่ โดยใน workshop นี้ เราจะใช้ค่า default ของ image Ubuntu 20.04 โดยไม่ต้องแก้ไขอะไร

![Storage Selection](/files/dhSKBiP0AbYXU0oV4yh8)

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

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

![Instance Network Selection](/files/MZ7ZXHdILPw2ETVdkXgP)

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

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

![Security Selection](/files/1kMWnVlD0NRgTv9TyixF)

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

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

![Launch Summary](/files/ISc82Juvii2yxxcygOyu)

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

![Instance Launching](/files/rPJmv2T1k3nf4lZRJZLo) ![Instance Active](/files/9Ko4QBtx5uY4SwfIJjCz)

### 5. ตรวจสอบความพร้อมของ instance

ตรวจสอบว่า instance พร้อมใช้งานหรือยังด้วยการเข้าไปดู log ของ instance&#x20;

โดยเข้าสู่หน้า instance overview ผ่านการกดที่ชื่อของ instance และเลือก tab log

![Instance Overview Link](/files/rvdGp4aErgnISbxLPtLt) ![Instance Log](/files/Yq2v9sQxKBvWzLNthfaN)

รอจนกว่าจะขึ้น log ว่า `Finished: Execute cloud user/final scripts`

![Cloud User Scrip Execution](/files/Fy04fy4usKVpMSUKTq5d)

### 6. 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@103.212.36.66
```

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

<img src="/files/P6loFxOOTBccyQXPBUF2" alt="" data-size="original">
{% endhint %}

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

![Connection Established](/files/FK7ALn1bK47DE3Vkf31z)

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

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

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

```
# sudo -i
```

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

![Root Permission](/files/VqxS3QFS5CGK2kRyQSfA)

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

```
# apt update
```

![Update Service](/files/duebKNwhFCbiwX7F3UW6)

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

![Before Installing Web Server](/files/3LEoD1XFVAjBtmwrnTSK)

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

```
# apt install nginx
```

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

![Installing Nginx](/files/9MHiJzdehvTGCSJVz9Uf)

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

```
# systemctl | grep nginx
```

![Nginx Active and Running](/files/dXQXjskajikWvynPZh40)

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

![Website Running](/files/bbP1JsHGz6arfM6U0Dhd)

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

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

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

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

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

```
# ls
```

![Nginx Index File Directory](/files/eD3r4cAcjGtKpCJ4ZwUU)

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

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

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

![Nano Text Editor](/files/xEpuRLqDY5QbvN7qe310)

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

![Save Change](/files/peKrnumpxumGpauwJ3zA)

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

![Hello World](/files/OKwOfFTh0WeGlTzsTTi6)

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-epc.gitbook.io/ncs-documents/~/changes/U2SVceQUXXCaek3t7CoE/tutorial/my-first-website.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
