Apache Tomcat คืออะไร และวิธีติดตั้งบน Cloud Server
Apache Tomcat คือเซิร์ฟเวอร์ที่รันแอปพลิเคชัน Java ซึ่งระบบองค์กรจำนวนมากในไทยยังใช้เป็นฐาน ทั้งระบบที่พัฒนาเองและซอฟต์แวร์สำเร็จรูปที่ส่งมอบเป็นไฟล์ WAR
- หมวดหมู่
- ภาษาโปรแกรมและ Framework
- ติดตั้งบนเซิร์ฟเวอร์เองได้
- ได้
- สเปกเริ่มต้นที่แนะนำ
- 2 vCPU · RAM 4 GB
- ไลเซนส์
- Apache License 2.0 (โอเพนซอร์ส)
- เว็บทางการ
- เปิดเว็บไซต์
- ISO/IEC 27001
- ISO 22301
- ISO 20000-1
- CSA-STAR
Data Center ในไทย มาตรฐาน TIA-942 Tier 3+ ข้อมูลอยู่ในประเทศไทย
Apache Tomcat คืออะไร
Tomcat ทำหน้าที่รับคำขอ HTTP แล้วส่งต่อให้โค้ด Java ประมวลผลตามมาตรฐาน Servlet ระบบองค์กรที่พัฒนาด้วย Java จึงถูกส่งมอบเป็นไฟล์ WAR ที่นำไปวางใน Tomcat แล้วใช้งานได้ทันที
สิ่งที่มีผลต่อความเสถียรมากที่สุดคือการตั้งค่าหน่วยความจำของ Java แอปที่ตั้งหน่วยความจำสูงสุดไว้น้อยเกินไปจะล่มเมื่อผู้ใช้เยอะ ส่วนการตั้งสูงเกินกว่า RAM ของเครื่องจะทำให้ระบบปฏิบัติการปิดกระบวนการทิ้ง
ในการใช้งานจริง มักวาง Nginx ไว้ด้านหน้าเพื่อจัดการ HTTPS และเสิร์ฟไฟล์ Static แล้วส่งเฉพาะคำขอที่ต้องประมวลผลต่อไปให้ Tomcat ซึ่งช่วยทั้งประสิทธิภาพและความปลอดภัย
ความสามารถเด่นของ Apache Tomcat
รันแอป Java มาตรฐาน
รองรับ Servlet และ JSP ตามมาตรฐานที่ระบบองค์กรจำนวนมากใช้
Deploy ด้วยไฟล์ WAR
วางไฟล์เดียวแล้วระบบพร้อมใช้งาน สะดวกกับซอฟต์แวร์ที่ส่งมอบเป็นแพ็กเกจ
จัดการหลายแอปในเครื่องเดียว
รันหลายแอปแยกเส้นทางกันได้บน Tomcat ตัวเดียว
ปรับจูนได้ละเอียด
ตั้งจำนวนเธรด ขนาดหน่วยความจำ และการจัดการการเชื่อมต่อได้ตามภาระงาน
เสถียรและมีมานาน
มีเอกสารและประสบการณ์การใช้งานในองค์กรจำนวนมาก
จูนหน่วยความจำและจำนวนเธรดของ Tomcat ให้ตรงกับภาระงาน
ค่าที่กระทบความเสถียรของแอป Java มากที่สุดคือขนาดหน่วยความจำสูงสุดที่ให้ Java ใช้ ตั้งน้อยเกินไปแอปจะล่มเมื่อผู้ใช้เยอะ ตั้งมากเกินกว่าที่เครื่องมีระบบปฏิบัติการจะปิดกระบวนการทิ้ง จุดที่เหมาะคือเหลือหน่วยความจำให้ระบบปฏิบัติการอย่างน้อยหนึ่งถึงสองกิกะไบต์
ค่าถัดมาคือจำนวนเธรดที่รับคำขอพร้อมกัน ค่านี้ควรสอดคล้องกับจำนวนการเชื่อมต่อฐานข้อมูลที่มี เพราะถ้ารับคำขอได้มากกว่าที่ฐานข้อมูลรองรับ คำขอส่วนเกินจะไปรอคิวจนผู้ใช้รู้สึกว่าระบบค้างทั้งที่ซีพียูยังว่าง
เมื่อปรับค่าแล้วควรวัดผลจากภาระงานจริงไม่ใช่จากตัวเลขในคู่มือ วิธีที่ตรงที่สุดคือเปิดการเก็บข้อมูลการใช้หน่วยความจำและเวลาตอบสนอง แล้วดูว่าค่าที่ปรับทำให้ดีขึ้นจริงหรือเพียงย้ายคอขวดไปที่อื่น
- ตั้งหน่วยความจำเริ่มต้นและสูงสุดให้เท่ากัน เพื่อลดการขยายหน่วยความจำระหว่างทำงาน
- จำนวนเธรดควรสัมพันธ์กับขนาดของแหล่งเชื่อมต่อฐานข้อมูล
- เปิดการบันทึกเหตุการณ์เก็บกวาดหน่วยความจำไว้ เพื่อใช้หาสาเหตุเมื่อแอปหยุดตอบสนอง
- ตั้งเวลาหมดอายุของการเชื่อมต่อ เพื่อไม่ให้คำขอค้างกินเธรดไว้ตลอด
ปัญหาที่พบบ่อยของแอป Java บนเซิร์ฟเวอร์และวิธีไล่หาต้นเหตุ
อาการที่พบมากที่สุดคือแอปทำงานได้ปกติหลายวันแล้วค่อย ๆ ช้าลงจนหยุดตอบสนอง ซึ่งมักเกิดจากการรั่วของหน่วยความจำในโค้ดหรือไลบรารี วิธียืนยันคือดูแนวโน้มการใช้หน่วยความจำระยะยาว ถ้ากราฟไต่ขึ้นเรื่อย ๆ โดยไม่กลับลงหลังการเก็บกวาด นั่นคือการรั่ว
อาการที่สองคือแอปตอบช้าเป็นช่วง ๆ ตรงกับจังหวะที่ระบบเก็บกวาดหน่วยความจำทำงานหนัก กรณีนี้แก้ด้วยการปรับขนาดหน่วยความจำและเลือกตัวเก็บกวาดที่เหมาะกับลักษณะงาน ไม่ใช่การเพิ่มซีพียู
อาการที่สามคือคำขอค้างเพราะรอทรัพยากรภายนอก เช่น ฐานข้อมูลหรือบริการที่เรียกใช้ไม่ตอบ วิธีป้องกันคือตั้งเวลาหมดอายุของทุกการเรียกออกภายนอกเสมอ เพราะการรอแบบไม่มีกำหนดจะกินเธรดจนระบบตันทั้งเครื่อง
ใช้ Apache Tomcat ทำอะไรได้บ้าง
- ระบบองค์กรที่พัฒนาด้วย Java และส่งมอบเป็นไฟล์ WAR
- ซอฟต์แวร์สำเร็จรูปสายองค์กรที่กำหนดให้รันบน Tomcat
- ระบบเดิมที่ต้องย้ายจากเซิร์ฟเวอร์ในองค์กรขึ้นคลาวด์
- สภาพแวดล้อมทดสอบสำหรับทีมพัฒนา Java
สเปก Cloud Server ที่แนะนำ
| ระดับการใช้งาน | vCPU | RAM | Disk |
|---|---|---|---|
| เริ่มต้นแอปเดียว ผู้ใช้ภายในทีม | 2 vCPU | 4 GB | NVMe 60 GB |
| แนะนำระบบงานองค์กรที่มีผู้ใช้ต่อเนื่อง | 4 vCPU | 8 GB | NVMe 120 GB |
| องค์กรใหญ่หลายแอปหรือผู้ใช้พร้อมกันจำนวนมาก ควรแยกฐานข้อมูล | 8 vCPU ขึ้นไป | 16 GB ขึ้นไป | NVMe 250 GB ขึ้นไป |
ดูราคาตามสเปกได้ที่ ราคา Cloud Compute หรือให้ทีมงานช่วยประเมินสเปกจากปริมาณผู้ใช้จริงของคุณ
วิธีติดตั้ง Apache Tomcat บน Cloud Server ของ THAI DATA CLOUD
ขั้นตอนด้านล่างใช้กับ Cloud Server ที่เพิ่งสร้างใหม่จากหน้าจัดการของ THAI DATA CLOUD ได้ทันที ถ้าไม่สะดวกทำเอง ทีมวิศวกรของเราติดตั้งและตั้งค่าให้ฟรีสำหรับลูกค้า Cloud Server
สิ่งที่ต้องเตรียม
- Java Runtime รุ่นที่ตรงกับ Tomcat และแอปที่จะรัน
- Ubuntu Server 24.04 LTS หรือ Rocky Linux 9
- RAM เผื่อสำหรับหน่วยความจำของ Java และของระบบปฏิบัติการ
- Nginx สำหรับรับ HTTPS ไว้ด้านหน้า
ทดสอบบน Ubuntu Server 24.04 LTS
- 1
ติดตั้ง Java
sudo apt update sudo apt -y install openjdk-21-jdk java -version - 2
สร้างผู้ใช้และติดตั้ง Tomcat
ดาวน์โหลดรุ่นที่ต้องการจากเว็บทางการ แล้วแตกไฟล์ไปที่ /opt/tomcat
sudo adduser --system --home /opt/tomcat --shell /bin/false tomcat sudo mkdir -p /opt/tomcat cd /tmp curl -LO https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.34/bin/apache-tomcat-10.1.34.tar.gz sudo tar xzf apache-tomcat-10.1.34.tar.gz -C /opt/tomcat --strip-components=1 sudo chown -R tomcat:tomcat /opt/tomcat - 3
ตั้งค่าหน่วยความจำของ Java
สร้างไฟล์ /opt/tomcat/bin/setenv.sh และตั้งค่าให้เหลือ RAM สำหรับระบบปฏิบัติการอย่างน้อย 1 ถึง 2 GB
export CATALINA_OPTS="-Xms2G -Xmx4G -XX:+UseG1GC" - 4
ตั้งเป็นบริการของระบบ
[Unit] Description=Apache Tomcat After=network.target [Service] Type=forking User=tomcat Group=tomcat Environment="JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64" ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh Restart=always [Install] WantedBy=multi-user.target - 5
Deploy แอปด้วยไฟล์ WAR
คัดลอกไฟล์ WAR ไปที่โฟลเดอร์ webapps แล้ว Tomcat จะแตกไฟล์และเปิดใช้งานให้เอง
sudo cp myapp.war /opt/tomcat/webapps/ sudo systemctl restart tomcat sudo tail -f /opt/tomcat/logs/catalina.out - 6
วาง Nginx ไว้ด้านหน้าพร้อม HTTPS
server { listen 443 ssl; server_name app.example.com; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
ลบหรือปิดการเข้าถึงแอปตัวอย่างและหน้าจัดการที่มาพร้อม Tomcat ในระบบ Production เพราะเป็นเป้าหมายที่บอตสแกนหาอยู่เสมอ
พอร์ตที่ต้องเปิดบน Firewall
| พอร์ต | โปรโตคอล | ใช้ทำอะไร |
|---|---|---|
| 443 | TCP | HTTPS ผ่าน Nginx |
| 8080 | TCP | พอร์ตของ Tomcat (ควรเปิดเฉพาะภายในเครื่อง) |
| 8005 | TCP | พอร์ตสั่งปิดระบบ (ควรปิดการใช้งาน) |
สิ่งที่ควรทำต่อหลังติดตั้งเสร็จ
- ลบแอปตัวอย่างและหน้าจัดการที่มาพร้อมการติดตั้งออกจากระบบจริง
- ปิดพอร์ตสั่งปิดระบบหรือเปลี่ยนค่าที่ใช้สั่งให้เดาไม่ได้
- รัน Tomcat ด้วยผู้ใช้ที่ไม่ใช่ root และจำกัดสิทธิ์โฟลเดอร์
- ให้ Tomcat ฟังเฉพาะ 127.0.0.1 และเปิดสู่ภายนอกผ่าน Nginx
- อัปเดต Tomcat และ Java ตามรอบแพตช์ความปลอดภัย
ทำไมควรรัน Apache Tomcat บน Cloud Server ของ THAI DATA CLOUD
Data Center ในประเทศไทย มาตรฐาน ISO/IEC 27001 และ ISO 22301 พร้อมทีมวิศวกรคนไทยดูแลตลอด 24 ชั่วโมง
ยกระบบ Java เดิมขึ้น Cloud Server ในไทยได้โดยไม่ต้องแก้โค้ด เพียงย้ายไฟล์ WAR และตั้งค่าเชื่อมฐานข้อมูลใหม่
ปรับ RAM ได้ตรงกับที่แอป Java ต้องใช้ ซึ่งเป็นตัวแปรสำคัญที่สุดของงานลักษณะนี้
ต่อกับฐานข้อมูลองค์กรในวง Private Network โดยไม่ต้องเปิดพอร์ตออกอินเทอร์เน็ต
คำถามที่พบบ่อยเกี่ยวกับ Apache Tomcat
Tomcat ต่างจาก Spring Boot อย่างไร
Spring Boot เป็นเฟรมเวิร์กที่ฝัง Tomcat ไว้ในตัวแอปแล้ว จึงรันเป็นไฟล์เดียวได้โดยไม่ต้องติดตั้ง Tomcat แยก ส่วนการติดตั้ง Tomcat แยกยังจำเป็นเมื่อต้องรันแอปที่ส่งมอบเป็นไฟล์ WAR ตามมาตรฐานเดิม
ตั้งหน่วยความจำเท่าไหร่ดี
ตั้งค่าสูงสุดให้เหลือ RAM สำหรับระบบปฏิบัติการอย่างน้อยหนึ่งถึงสองกิกะไบต์ เช่น เครื่อง RAM 8 GB อาจตั้งสูงสุดไว้ราว 4 ถึง 6 GB แล้วติดตามการใช้งานจริงเพื่อปรับให้เหมาะ
แอปล่มบ่อยเพราะอะไร
สาเหตุที่พบบ่อยคือหน่วยความจำไม่พอและการรั่วของหน่วยความจำในแอป ให้ดู Log ของ Tomcat และเปิดการเก็บข้อมูลการใช้หน่วยความจำเพื่อหาต้นเหตุ พร้อมตั้งให้บริการรีสตาร์ตอัตโนมัติระหว่างที่แก้
ทางเลือกอื่นที่คล้ายกับ Apache Tomcat
แอปอื่นในหมวด ภาษาโปรแกรมและ Framework
บริการของ THAI DATA CLOUD ที่เกี่ยวข้อง
ให้เราติดตั้ง Apache Tomcat ให้ฟรี บน Cloud Server ในไทย
แจ้งความต้องการสั้น ๆ ทีมวิศวกรจะช่วยประเมินสเปก ติดตั้ง และตั้งค่าความปลอดภัยให้พร้อมใช้งาน ปรึกษาฟรี ไม่มีข้อผูกมัด