Managing Timezone Data

คอนเทนเนอร์ทั้งหมดที่สร้างภายใน 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)

คลิก Install เพื่อใช้การเปลี่ยนแปลง

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 ที่เปลี่ยนแปลงสำเร็จแล้วและตอนนี้สอดคล้องกับตำแหน่งที่ต้องการแล้ว