<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: reerii code</title>
    <description>The latest articles on DEV Community by reerii code (@reeriicode).</description>
    <link>https://dev.to/reeriicode</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4147428%2F524b6ead-f058-4241-acbe-b1c27dc059f2.png</url>
      <title>DEV Community: reerii code</title>
      <link>https://dev.to/reeriicode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/reeriicode"/>
    <language>en</language>
    <item>
      <title>Deploy คืออะไร ?</title>
      <dc:creator>reerii code</dc:creator>
      <pubDate>Thu, 15 Oct 2026 07:44:25 +0000</pubDate>
      <link>https://dev.to/reeriicode/deploy-khuueaair--2a9p</link>
      <guid>https://dev.to/reeriicode/deploy-khuueaair--2a9p</guid>
      <description>&lt;p&gt;Deploy คือ ง่ายๆเลยคือการเอาเว็บของเราไปวางใว้บน server ให้คนอื่นเข้ามาใช้งานได้&lt;/p&gt;

&lt;h2&gt;
  
  
  เเล้วทำไม่ต้อง Deploy ล่ะ?
&lt;/h2&gt;

&lt;p&gt;ก็เพราะถ้าไม่ deploy คนอื่นเข้ามาใช้เว็บเราไม่ได้ไงล่ะ hahaha &lt;br&gt;
อ่าวกวนตีนนี้วาาา &lt;br&gt;
โอเครๆ เดียวอธิบายดีๆ ตอนเรา dev เว็บอยู่เนี่ย เว็บมันรันอยู่บน local หรือก็คือในเครื่องเราเอง เราเปิด localhost ได้ แต่เพื่อนเราเปิดไม่ได้ เพราะมันอยู่ในเครื่องเรา ไม่ได้อยู่บนอินเทอร์เน็ต&lt;/p&gt;
&lt;h2&gt;
  
  
  อยากให้คนอื่นดูเว็บเดี๋ยวนี้ ทำไงดี?
&lt;/h2&gt;

&lt;p&gt;มีทางลัดอยู่ทางนึง เรียกว่า Tunneling ก็คือเปิดอุโมงค์จากเครื่องเราออกไปอินเทอร์เน็ต แล้วมันจะสร้าง URL สาธารณะชั่วคราวให้ ส่งลิงก์ให้เพื่อนเปิดได้เลย เครื่องมือที่นิยมก็ ngrok หรือ Cloudflare Tunnel วิธีนี้เหมาะกับตอนทำ prototype ให้ลูกค้าดูระบบคร่าว ๆ&lt;/p&gt;
&lt;h2&gt;
  
  
  แต่!
&lt;/h2&gt;

&lt;p&gt;ครื่องเราต้องเปิดไว้ตลอดนะจ๊ะ ปิดฝาโน้ตบุ๊กไปกินข้าวเมื่อไหร่ เว็บดับเมื่อนั้น &lt;br&gt;
ถ้าอยากให้คนใช้ได้ยาว ๆ ทั้งวันทั้งคืน ยังไงก็ต้อง deploy&lt;/p&gt;
&lt;h2&gt;
  
  
  Deploy ยากไหม?
&lt;/h2&gt;

&lt;p&gt;บอกเลย ง่ายกว่าที่คิด  ปกติบน local เราทำยังไง บน server ก็ทำแบบนั้นแหละ&lt;br&gt;
&lt;em&gt;เอ้ย จริงดิ?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;จริง…สัก 90% อีก 10% ต้องแก้นิดหน่อย เพราะเครื่องเราอาจเป็น Windows หรือ Mac แต่ server ส่วนใหญ่เป็น Linux &lt;/p&gt;
&lt;h2&gt;
  
  
  แล้วทำไมไม่ใช้ Docker ล่ะ มันแก้ปัญหา OS ไม่ตรงกันได้นี่?
&lt;/h2&gt;

&lt;p&gt;ใช่ ใช้ได้ แต่ก่อนจะไป Docker ต้องเข้าใจ deploy แบบพื้นฐานก่อน ว่าเบื้องหลังมันทำอะไรบ้าง ไม่งั้นวันไหน Docker พัง จะงงว่าพังตรงไหน&lt;/p&gt;
&lt;h2&gt;
  
  
  Deploy มีกี่แบบ?
&lt;/h2&gt;

&lt;p&gt;หลัก ๆ มี 3 แบบ&lt;/p&gt;
&lt;h2&gt;
  
  
  แบบที่ 1 VPS
&lt;/h2&gt;

&lt;p&gt;แบบที่ 1 VPS คือเช่าคอมพิวเตอร์ 1 เครื่องบน cloud แล้วเข้าไปผ่าน SSH ใช้ terminal เป็นหลัก ก็เหมือนทำบน local แค่เปลี่ยนจาก Windows เป็น Linux&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ข้อดีคือคุมได้ทุกอย่าง ข้อเสียคือต้องทำเองทุกอย่าง ตั้งแต่ติดตั้ง Node เปิด firewall ไปจนถึงตั้ง Nginx  เจ้าดัง ๆ ก็ AWS EC2, Google Cloud, Oracle Cloud&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  แบบที่ 2 PaaS (Platform as a Service)
&lt;/h2&gt;

&lt;p&gt;แบบที่ 2 PaaS (Platform as a Service) สำหรับสายขี้เกียจ…เอ้ย สายที่ไม่อยากดูแล server เอง  แค่เชื่อม GitHub พอ push ขึ้น main ปุ๊บ มัน deploy ให้อัตโนมัติปั๊บ เช่น Vercel, Render  ง่ายใช่ไหมล่ะ&lt;/p&gt;
&lt;h2&gt;
  
  
  แบบที่ 3 Docker
&lt;/h2&gt;

&lt;p&gt;แบบที่ 3 Docker แพ็กโปรเจกต์เราเป็น image แล้วเอาไปรันที่ไหนก็ได้ จะเป็น Google Cloud Run หรือเอาไปรันบน VPS ก็ได้&lt;/p&gt;
&lt;h2&gt;
  
  
  ปัญหาคือ API ผมดันเก็บไฟล์รูปไว้ใน folder ของ API เองน่ะสิ แถมยังใช้ WebSocket อีก
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;แล้วมันผิดตรงไหน?&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd71ljdsa3a3lu1d3si9r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd71ljdsa3a3lu1d3si9r.png" alt=" " width="447" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Vercel เป็น serverless คือตื่นมาทำงานก็ต่อเมื่อมี request เข้ามา ทำเสร็จก็ทิ้ง เหมือนห้องที่โดนรีเซ็ตทุกครั้ง รูปที่อัปโหลดไว้ก็หายเกลี้ยง แล้วก็ไม่รองรับ WebSocket ด้วย เพราะมันไม่ได้เปิดค้างไว้ให้เชื่อมต่อตลอด&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ส่วน Render กับ Cloud Run ถึงจะรัน server ค้างไว้ได้ แต่พื้นที่เก็บไฟล์เป็นแบบชั่วคราว restart หรือ deploy ใหม่เมื่อไหร่ รูปก็หายเหมือนกัน&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  ทางแก้มี 2 ทาง
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;ทางที่ 1 แก้โค้ด ย้ายรูปไปเก็บข้างนอก เช่น Supabase Storage หรือ AWS S3 ฐานข้อมูลก็ใช้ของภายนอก ให้ API เป็นแค่ทางผ่านของข้อมูลเฉย ๆ ไม่เก็บอะไรไว้กับตัว แบบนี้ใช้ PaaS ได้สบาย&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ทางที่ 2 ไม่อยากแก้โค้ด ก็ใช้ VPS ไปเลย เพราะมันคือคอมพิวเตอร์จริง ๆ 1 เครื่อง ไฟล์ไม่หาย WebSocket ก็เปิดค้างได้&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;เเต่ในครั้งนี้จะ deploy เริ่มต้นใช้เเบบ VPS เพราะจะได้เข้าใจ การ deploy พื้นฐานก่อน&lt;/p&gt;

&lt;p&gt;Stack ผมคือ หน้าเว็บใช้ React, API ใช้ Express&lt;br&gt;
Web → Vercel ง่ายสุด จบ&lt;br&gt;
API → VPS&lt;/p&gt;
&lt;h2&gt;
  
  
  ก่อน deploy ต้องเข้าใจกระบวนการหลักก่อน
&lt;/h2&gt;

&lt;p&gt;นึกถึงตอนเริ่มพัฒนาโปรเจกต์ เราทำอะไรก่อน?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &amp;lt;url&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;git clone โค้ดลงมา&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ติดตั้ง dependency&lt;/p&gt;

&lt;h2&gt;
  
  
  อ้าว ทำไมต้อง install อีก โค้ดก็โหลดมาแล้วนี่?
&lt;/h2&gt;

&lt;p&gt;เพราะของที่เราติดตั้งใน Node.js มันไปกองอยู่ใน folder node_modules ซึ่งหนักมาก ไม่มีใครบ้าโยนขึ้น GitHub หรอก ปกติจะใส่ไว้ใน .gitignore&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkcs0fyumhsc2apu3zqgp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkcs0fyumhsc2apu3zqgp.png" alt=" " width="442" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;สิ่งที่เราดึงโค้ดจาก Github มีเเต่โค้ด ไม่มี dependency ซึ่งเราต้องติดตั้ง &lt;/p&gt;

&lt;h2&gt;
  
  
  แล้วเครื่องใหม่จะรู้ได้ไงว่าต้องติดตั้งอะไรบ้าง?
&lt;/h2&gt;

&lt;p&gt;ดูจาก package.json ไง มันคือรายการที่ติดตั้งใว้ จดไว้ว่าโปรเจกต์ใช้อะไร เวอร์ชันไหน สั่ง npm install ทีเดียว คือจบ&lt;/p&gt;

&lt;p&gt;สวนใครที่ใช้ ฝั่ง Python ก็คล้ายกัน ใช้ไฟล์ requirements.txt ในการจด&lt;/p&gt;

&lt;h2&gt;
  
  
  รันโปรเจกต์
&lt;/h2&gt;

&lt;p&gt;ตอน dev เราใช้ npm run dev แต่ตอน deploy จะใช้ npm start หรือคำสั่งสำหรับรันจริง&lt;/p&gt;

&lt;h2&gt;
  
  
  แต่ ๆ ๆ ๆ ช้าก่อน!
&lt;/h2&gt;

&lt;p&gt;ใครเขียน JavaScript, HTML, CSS ล้วน ๆ รันได้เลย  แต่ถ้าใช้ TypeScript หรือ framework อย่าง React…พวกนายต้อง build ก่อนเว้ย!&lt;/p&gt;

&lt;h2&gt;
  
  
  Build คืออะไร?
&lt;/h2&gt;

&lt;p&gt;Build ก็คือการแปลงโค้ดที่เราเขียน ให้กลายเป็นไฟล์ที่พร้อมใช้งานจริง&lt;/p&gt;

&lt;h2&gt;
  
  
  ทำไมต้องแปลง?
&lt;/h2&gt;

&lt;p&gt;เพราะตัวที่รันโค้ดมันไม่รู้จัก TypeScript หรือ JSX&lt;br&gt;
ฝั่งเว็บ บราวเซอร์อ่านได้แค่ HTML, CSS, JavaScript&lt;br&gt;
ฝั่ง API ตัว Node.js ก็อ่านได้แค่ JavaScript&lt;/p&gt;

&lt;p&gt;พอสั่ง&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;มันจะสร้าง folder dist ขึ้นมา ข้างในคือโค้ดที่แปลงเป็น JavaScript หมดแล้ว  จากนั้นก็รัน API ด้วย node dist/server.js (ชื่อไฟล์แล้วแต่คนตั้ง อาจเป็น index.js หรือ main.js)  แค่นี้ API ก็ทำงานแล้ว&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flvbnytyofu4lgb4f00ez.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flvbnytyofu4lgb4f00ez.png" alt=" " width="477" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  แต่ ๆ ๆ ใครใช้ ORM อย่าง Prisma ต้องรันคำสั่งเพิ่มอีกนิด ไม่งั้น API จะคุยกับ database ไม่รู้เรื่อง
&lt;/h2&gt;

&lt;p&gt;พูดมาเยอะ บางคนอาจยังไม่เห็นภาพ  งั้นมาลงมือทำจริงกันเลยดีกว่า!&lt;/p&gt;

</description>
      <category>deploy</category>
      <category>aws</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
