คอนเทนเนอร์ทั้งหมดที่สร้างภายใน Ruk-Com Cloud PaaS โดยเริ่มต้นใช้เขตเวลา UTC อย่างไรก็ตามคุณสามารถเปลี่ยนเขตเวลาที่คุณต้องการได้อย่างง่ายดายโดยเพิ่ม add-on TimeZone Change คุณสามารถทำตามขั้นตอนที่ระบุไว้เพื่อสลับเขตเวลาในอินสแตนซ์ของคุณ
อีกวิธีหนึ่งคุณสามารถเปลี่ยนแปลงได้ด้วยตนเอง ตัวอย่างเช่น Java และ PHP application servers ที่มาพร้อมกับแพ็คเกจเขตเวลาพิเศษซึ่งรวบรวมข้อมูลเกี่ยวกับประวัติของเวลาท้องถิ่นในสถานที่ต่างๆทั่วโลกและกฎเขตเวลาปัจจุบัน ข้อมูลนี้จำเป็นสำหรับซอร์ฟแวร์ที่ทำงานภายในคอนเทนเนอร์และได้รับการอัปเดตอย่างสม่ำเสมอภายในเซิร์ฟเวอร์ที่เกี่ยวข้อง
นอกจากนั้นคุณสามารถอัปเดต timezone ด้วยตนเองได้ทันทีหากจำเป็นหรือเปลี่ยน TZ ที่ใช้อยู่ในปัจจุบันตามตำแหน่งที่ต้องการ ดังนั้นด้านล่างนี้เราจะอธิบายเกี่ยวกับการจัดการข้อมูล timezone สำหรับแอปพลิเคชันเซิร์ฟเวอร์ของโปรแกรมภาษาที่กล่าวถึงข้างต้น:
TimeZone Add-On
โปรแกรมเสริม TimeZone Change สามารถติดตั้งบน environment ของคุณโดยจะเปลี่ยนเขตเวลาสำหรับคอนเทนเนอร์ทั้งหมดในเวลาไม่กี่นาที
1. ก่อนดำเนินการติดตั้ง ให้ตรวจสอบเขตเวลาบนคอนเทนเนอร์ของคุณโดยใช้คำสั่ง date
อย่างที่คุณเห็นค่าเริ่มต้นคอนเทนเนอร์จะใช้ UTC zone
2. ไปที่ TimeZone Change add-on repository ภายใน Ruk-Com Cloud JPS Collection ที่ GitHub คัดลอกลิงก์ไปยังไฟล์ manifest.jps และนำเข้าผ่านแดชบอร์ด: https://github.com/jelastic-jps/time-zone-change/blob/master/manifest.jps
เคล็ดลับ: ขึ้นอยู่กับการตั้งค่าของผู้ให้บริการโฮสติ้งโดยเฉพาะ add-on สามารถใช้งานได้ผ่าน Marketplace
3. ภายในเฟรมที่เปิดขึ้น เลือก Environment ที่คุณต้องการเปลี่ยนเขตเวลาและพิมพ์ชื่อเขตเวลาที่ต้องการ (รายการ time zones)
4. หลังจากติดตั้ง add-on แล้ว คุณสามารถตรวจสอบการเปลี่ยนแปลงเขตเวลาโดยพิมพ์คำสั่ง date
กฏของ Timezone สำหรับ Java
กฏของเขตเวลาภายใน Java การประมวลผลโหนดจะส่งโดย TZdata package โดยเฉพาะซึ่งประกอบด้วยคอนเทนเนอร์ที่เหมาะสมแต่ละรายการ คุณสามารถทำตามคำแนำนำด้านล่าง:
- การอัปเดตข้อมูล Timezone
- การเปลี่ยน Timezone ปัจจุบัน
การอัปเดตข้อมูล Timezone
ถึงแม้ว่าความจริงแล้ว TZdata package edition ใหม่ล่าสุดจะรวมเข้ากับโหนดในระหว่างการสร้างแต่บางครั้งก็ล้าสมัยเนื่องจากการเปลี่ยนแปลงข้อมูลภายในเป็นระยะ ดังนั้น คอนเทนเนอร์เก่าอาจต้องมีการอัปเดตที่สอดคล้องกันเป็นครั้งคราว (โดยเฉพาะเพื่อที่จะไม่ต้องสร้างใหม่ทุกครั้งที่ต้องการ) ด้วยเหตุนี้จึงใช้เครื่องมือ TZUpdater แบบฝังพิเศษที่มีวัตถุประสงค์เพื่อให้ข้อมูลเขตเวลาของคุณถูกต้องและเป็นปัจจุบันซึ่งค่อนข้างใช้งานง่ายและสามารถรันได้เพียงใช้คำสั่งบรรทัดเดียว:
1. เชื่อมต่อ Java environment ผ่าน SSH เช่นการใช้ Web SSH ที่หน้าแดชบอร์ด
2. คุณสามารถตรวจสอบเวอร์ชัน TZdata ที่ใช้อยู่ในปัจจุบันได้โดยรันคำสั่งต่อไปนี้:
java -jar /usr/java/utils/tzupdater.jar -V
3. นอกจากนี้คุณสามารถอัปเดตข้อมูล timezone โดยใช้เครื่องมือ TZUpdater
java -jar /usr/java/utils/tzupdater.jar -u
การเปลี่ยน Timezone
ในหัวข้อนี้มาดูการเปลี่ยนแปลงเขตเวลากัน ซึ่งในตัวอย่างนี้เราจะใช้ Tomcat 10.0.12 server
1. ตั้งค่า timestamp เวลาปัจจุบันให้แสดงที่หน้าเริ่มต้นของเซิร์ฟเวอร์ – เพื่อให้แน่ใจว่าการตั้งค่า timezone ใหม่ได้ถูกปรับใช้สำเร็จ
โดยการวางโค้ดด้านล่างนี้แทนค่าเริ่มต้นที่ไฟล์ /opt/tomcat/webapps/ROOT/index.jsp ((วิธีที่ง่ายที่สุดคือการใช้ File Manager ภายในแพลตฟอร์ม)
<%@page import="java.util.*"%>
<html>
<head>
<title>TZ Page</title>
</head>
<body>
<%=new Date(System.currentTimeMillis()).toString()%>
</body>
</html>
2. บันทึกการเปลี่ยนแปลงและเปิดเบราว์เซอร์ใน environment ของคุณโดยคลิกที่ปุ่ม Open in Browser
3. การเปลี่ยนเขตเวลาจริงสำหรับเซิร์ฟเวอร์ใดโดยเฉพาะ คุณสามารถทำได้ตามขั้นตอนนี้
- สำหรับ Tomcat, TomEE, Payara, Spring Boot และ Jetty
สลับไปที่หน้าการกำหนดค่าไฟล์ variables.conf และเพิ่มตัวแปร -Duser.timezone พร้อมกับค่า zone ที่ต้องการ เช่น -Duser.timezone=Asia/Bangkok
เพิ่มเติม: ตำแหน่งที่อยู่ของไฟล์อาจแตกต่างกันขึ้นอยู่กับแอปพลิเคชันเซิร์ฟเวอร์ที่ใช้:
– Tomcat 7, 8, 9, TomEE – /opt/tomcat/conf/variables.conf
– Jetty 9 – /opt/jetty/etc/variables.conf
– Payara 4, 5 – /opt/payara/glassfish/domains/domain1/config/variables.conf
– Spring Boot 1, 2 – /opt/shared/conf/variables.conf
- สำหรับ GrassFish เข้าถึงผ่าน GF admin panel ไปที่ส่วน Configurations > gfcluster-config (or server-config for GF 4) > JVM Settings > JVM Options และคลิกปุ่ม Add JVM Option วางสตริงที่เกี่ยวข้อง (เช่น -Duser.timezone=Asia/Bangkok) ในช่องป้อนข้อมูลที่ปรากฏ
- สำหรับ Wildfly ให้สลับไปที่ไฟล์ /opt/wildfly/bin/standalone.conf หรือถ้าหากเซิร์ฟเวอร์ปรับขนาดแบบ horizontal ให้ไปที่ /opt/wildfly/bin/domain.conf และประกาศตัวแปรที่เกี่ยวข้องโดยใช้รูปแบบต่อไปนี้: export JAVA_OPTS=”-Duser.timezone=Asia/Bangkok”
4. บันทึกการเปลี่ยนแปลงและ Restart เพื่อใช้การตั้งค่าใหม่ จากนั้น Refresh หน้า timezone หรือคลิก Open in Browser อีกครั้งเพื่อดูเวลาท้องถิ่นที่อัปเดต
ด้วยวิธีนี้ คุณสามารถตั้งค่าตำแหน่งเวลาที่ต้องการสำหรับเซิร์ฟเวอร์ของคุณโดยไม่มีปัญหาภายในเวลาไม่กี่นาที
กฏของ Timezone สำหรับ PHP
การจัดการตั้งค่า timezone สำหรับ PHP แอปพลิเคชันเซิร์ฟเวอร์ (Apache และ NGINX) จะดำเนินการในส่วน [date] ของไฟล์การกำหนดค่าหลัก php.ini.
การเข้าถึงไฟล์คลิกที่ปุ่ม Config ถัดจากโหนดที่ต้องการและเข้าไปที่ไฟล์ /etc/php.ini
ในส่วนนี้จะสามารถทำได้สองส่วนคือ:
- รับข้อมูลเขตเวลาล่าสุด
- ตั้งค่าเขตเวลาด้วยตนเอง
การตรวจสอบ Timezone Data
การตั้งค่าแบบแรกอนุญาตให้คุณใช้ Timezone Database อื่นๆภายนอกได้ (กล่าวคือ – Olson) ในกรณีที่ฐานข้อมูลภายในล้าสมัย
โดยการ uncomment ลบสัญลักษณ์อัฒภาค (;) บรรทัดที่ 266 และกดปุ่ม Save เพื่อบันทึกการเปลี่ยนแปลง จากนั้น Restart แอปเซิร์ฟเวอร์ของคุณ
ตอนนี้คุณสามารถคลิก Open in browser และเลื่อนไปที่ส่วน date ในหน้า php.info ที่เปิดขึ้น คุณจะเห็น timezone package เวอร์ชันล่าสุดพร้อมระบุการใช้ DB ภายนอก:
การเปลี่ยน Timezone
ตัวเลือกที่สองในส่วนของ [date] มีไว้สำหรับการกำหนดตำแหน่งเขตเวลาปัจจุบันของโหนดนั้นๆ (โดยค่าเริ่มต้นจะชี้ไปที่ UTC zone) ตัวอย่างด้านล่างเราจะแก้ไขค่าเริ่มต้นหน้าแรกของเซิร์ฟเวอร์ที่ไฟล์ /var/www/webroot/ROOT/index.php ด้วยโค้ดต่อไปนี้:
<?php
echo date("h:i:sa");
?>
จากนั้นกดปุ่ม Save อัปเดตไฟล์แล้ว Open in Browser คุณจะเห็นผลลัพธ์เวลา
กลับไปที่ Ruk-Com Cloud Dashboard และระบุเขตเวลาที่ต้องการเป็นค่าสำหรับพารามิเตอร์ date.timezone ภายในไฟล์ php.ini เช่น (Asia/Bangkok)
บันทึกการกำหนดค่าใหม่อีกครั้งและ Restart PHP compute node และ refresh หน้าแสดงเวลาปัจจุบันอีกครั้ง
เพียงเท่านี้คุณจะเห็น timezone ที่เปลี่ยนแปลงสำเร็จแล้วและตอนนี้สอดคล้องกับตำแหน่งที่ต้องการแล้ว