การจัดการข้อมูลเขตเวลา
คู่มือนี้เรียบเรียงและปรับรูปแบบสำหรับ Ruk-Com Cloud PaaS ภาพหน้าจออาจแตกต่างเล็กน้อยตามเวอร์ชันของระบบ
คลิกหรือแตะภาพหน้าจอเพื่อดูรายละเอียดขนาดจริง
วัตถุประสงค์
บทความนี้อธิบายการใช้งาน การจัดการข้อมูลเขตเวลา บน Ruk-Com Cloud PaaS โดยจัดลำดับขั้นตอนและจุดตรวจสอบสำหรับการนำไปใช้งานจริง
ก่อนเริ่มดำเนินการ
- เข้าสู่ระบบด้วยบัญชีที่มีสิทธิ์จัดการ Environment ที่เกี่ยวข้อง
- ตรวจสอบชื่อ Environment, Region และทรัพยากรเป้าหมายก่อนบันทึกการเปลี่ยนแปลง
- สำรองข้อมูลหรือกำหนดแผนย้อนกลับก่อนแก้ไขระบบ Production
คอนเทนเนอร์ทั้งหมดที่สร้างภายใน Ruk-Com Cloud PaaS โดยเริ่มต้นใช้เขตเวลา UTC อย่างไรก็ตามคุณสามารถเปลี่ยนเขตเวลาที่คุณต้องการได้อย่างง่ายดายโดยเพิ่ม add-onการเปลี่ยนแปลงเขตเวลา คุณสามารถทำตามขั้นตอนที่ระบุไว้เพื่อสลับเขตเวลาในอินสแตนซ์ของคุณ
อีกวิธีหนึ่งคุณสามารถเปลี่ยนแปลงได้ด้วยตนเอง ตัวอย่างเช่น Java และ PHP application servers ที่มาพร้อมกับแพ็คเกจเขตเวลาพิเศษซึ่งรวบรวมข้อมูลเกี่ยวกับประวัติของเวลาท้องถิ่นในสถานที่ต่างๆทั่วโลกและกฎเขตเวลาปัจจุบัน ข้อมูลนี้จำเป็นสำหรับซอร์ฟแวร์ที่ทำงานภายในคอนเทนเนอร์และได้รับการอัปเดตอย่างสม่ำเสมอภายในเซิร์ฟเวอร์ที่เกี่ยวข้อง
นอกจากนั้นคุณสามารถอัปเดต timezone ด้วยตนเองได้ทันทีหากจำเป็นหรือเปลี่ยน TZ ที่ใช้อยู่ในปัจจุบันตามตำแหน่งที่ต้องการ ดังนั้นด้านล่างนี้เราจะอธิบายเกี่ยวกับการจัดการข้อมูล timezone สำหรับแอปพลิเคชันเซิร์ฟเวอร์ของโปรแกรมภาษาที่กล่าวถึงข้างต้น:
โปรแกรมเสริมโซนเวลา
โปรแกรมเสริมการเปลี่ยนแปลงเขตเวลาสามารถติดตั้งบน environment ของคุณโดยจะเปลี่ยนเขตเวลาสำหรับคอนเทนเนอร์ทั้งหมดในเวลาไม่กี่นาที
1. ก่อนดำเนินการติดตั้ง ให้ตรวจสอบเขตเวลาบนคอนเทนเนอร์ของคุณโดยใช้คำสั่งวันที่

อย่างที่คุณเห็นค่าเริ่มต้นคอนเทนเนอร์จะใช้เวลาสากลเชิงพิกัดโซน
2. ไปที่ TimeZonอีเปลี่ยน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 สามารถใช้งานได้ผ่านตลาด
3. ภายในเฟรมที่เปิดขึ้น เลือกสิ่งแวดล้อมที่คุณต้องการเปลี่ยนเขตเวลาและพิมพ์ชื่อเขตเวลาที่ต้องการ (รายการ time zones)

4. หลังจากติดตั้ง add-on แล้ว คุณสามารถตรวจสอบการเปลี่ยนแปลงเขตเวลาโดยพิมพ์คำสั่งวันที่

กฏของ Timezone สำหรับ Java
กฏของเขตเวลาภายใน Java การประมวลผลโหนดจะส่งโดย TZdata package โดยเฉพาะซึ่งประกอบด้วยคอนเทนเนอร์ที่เหมาะสมแต่ละรายการ คุณสามารถทำตามคำแนำนำด้านล่าง:
- การอัปเดตข้อมูล Timezone
- การเปลี่ยน Timezone ปัจจุบัน
ถึงแม้ว่าความจริงแล้ว TZdata package edition ใหม่ล่าสุดจะรวมเข้ากับโหนดในระหว่างการสร้างแต่บางครั้งก็ล้าสมัยเนื่องจากการเปลี่ยนแปลงข้อมูลภายในเป็นระยะ ดังนั้น คอนเทนเนอร์เก่าอาจต้องมีการอัปเดตที่สอดคล้องกันเป็นครั้งคราว (โดยเฉพาะเพื่อที่จะไม่ต้องสร้างใหม่ทุกครั้งที่ต้องการ) ด้วยเหตุนี้จึงใช้เครื่องมือTZUpdaterแบบฝังพิเศษที่มีวัตถุประสงค์เพื่อให้ข้อมูลเขตเวลาของคุณถูกต้องและเป็นปัจจุบันซึ่งค่อนข้างใช้งานง่ายและสามารถรันได้เพียงใช้คำสั่งบรรทัดเดียว:
1. เชื่อมต่อ Java environment ผ่าน SSH เช่นการใช้เว็บ 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. ตั้งค่าการประทับเวลาเวลาปัจจุบันให้แสดงที่หน้าเริ่มต้นของเซิร์ฟเวอร์ - เพื่อให้แน่ใจว่าการตั้งค่าเขตเวลาใหม่ได้ถูกปรับใช้สำเร็จ
โดยการวางโค้ดด้านล่างนี้แทนค่าเริ่มต้นที่ไฟล์/opt/tomcat/webapps/ROOT/index.jsp((วิธีที่ง่ายที่สุดคือการใช้ตัวจัดการไฟล์ภายในแพลตฟอร์ม)
<%@page import="java.util.*"%>
<html>
<head>
<title>TZ Page</title>
</head>
<body>
<%=new Date(System.currentTimeMillis()).toString()%>
</body>
</html>

2. บันทึกการเปลี่ยนแปลงและเปิดเบราว์เซอร์ใน environment ของคุณโดยคลิกที่ปุ่มเปิดในเบราว์เซอร์

3. การเปลี่ยนเขตเวลาจริงสำหรับเซิร์ฟเวอร์ใดโดยเฉพาะ คุณสามารถทำได้ตามขั้นตอนนี้
- สำหรับTomcat, TomEE, Payara, Spring Bootและท่าเทียบเรือ
สลับไปที่หน้าการกำหนดค่าไฟล์ตัวแปร.confและเพิ่มตัวแปร -Duser.timezone พร้อมกับค่าโซนที่ต้องการ เช่น -Duser.timezone=Asia/Bangkok
เพิ่มเติม:ตำแหน่งที่อยู่ของไฟล์อาจแตกต่างกันขึ้นอยู่กับแอปพลิเคชันเซิร์ฟเวอร์ที่ใช้:
- Tomcat 7, 8, 9, TomEE - /opt/tomcat/conf/variables.conf
- ท่าเทียบเรือ 9 - /opt/jetty/etc/variables.conf
- Payara 4, 5 - /opt/payara/glassfish/domains/domain1/กำหนดค่า/variables.conf
- Spring Boot 1, 2 - /opt/shared/conf/variables.conf

- สำหรับ GrassFish เข้าถึงผ่าน GF admin panel ไปที่ส่วนการกำหนดค่า > gfcluster-กำหนดค่า (หรือเซิร์ฟเวอร์ กำหนดค่า สำหรับ GF 4) > การตั้งค่า JVM > ตัวเลือก JVMและคลิกปุ่มเพิ่มตัวเลือก JVMวางสตริงที่เกี่ยวข้อง (เช่น -Duser.timezone=Asia/Bangkok) ในช่องป้อนข้อมูลที่ปรากฏ

- สำหรับแมลงวันป่าให้สลับไปที่ไฟล์/opt/wildfly/bin/standalone.confหรือหากเซิร์ฟเวอร์ปรับขนาดแบบ horizontal ให้ไปที่/opt/wildfly/bin/domain.confและประกาศตัวแปรที่เกี่ยวข้องโดยใช้รูปแบบต่อไปนี้: export JAVA_OPTS="-Duser.timezone=Asia/Bangkok"

4. บันทึกการเปลี่ยนแปลงและรีสตาร์ทเพื่อใช้การตั้งค่าใหม่ จากนั้น Refresh หน้า timezone หรือคลิก Open in Browser อีกครั้งเพื่อดูเวลาท้องถิ่นที่อัปเดต

ด้วยวิธีนี้ คุณสามารถตั้งค่าตำแหน่งเวลาที่ต้องการสำหรับเซิร์ฟเวอร์ของคุณโดยไม่มีปัญหาภายในเวลาไม่กี่นาที
กฏของ Timezone สำหรับ PHP
การจัดการตั้งค่า timezone สำหรับ PHP แอปพลิเคชันเซิร์ฟเวอร์ (Apache และ NGINX) จะดำเนินการในส่วน[วันที่]ของไฟล์การกำหนดค่าหลักphp.ini
การเข้าถึงไฟล์คลิกที่ปุ่มการกำหนดค่าถัดจากโหนดที่ต้องการและเข้าไปที่ไฟล์/etc/php.ini

ในส่วนนี้จะสามารถทำได้สองส่วนคือ:
- รับข้อมูลเขตเวลาล่าสุด
- ตั้งค่าเขตเวลาด้วยตนเอง
การตรวจสอบ Timezone Data
การตั้งค่าแบบแรกอนุญาตให้คุณใช้ Timezone Database อื่นๆภายนอกได้ (กล่าวคือ -โอลสัน) ในกรณีที่ฐานข้อมูลภายในล้าสมัย

โดยการ uncomment ลบสัญลักษณ์อัฒภาค (;) บรรทัดที่ 266 และกดปุ่ม Save เพื่อบันทึกการเปลี่ยนแปลง จากนั้นรีสตาร์ทแอปเซิร์ฟเวอร์ของคุณ
ตอนนี้คุณสามารถคลิกเปิดในเบราว์เซอร์และเลื่อนไปที่ส่วนวันที่ในหน้าphp.infoที่เปิดขึ้น คุณจะเห็น timezone package เวอร์ชันล่าสุดพร้อมระบุการใช้ DB ภายนอก:

การเปลี่ยน Timezone
ตัวเลือกที่สองในส่วนของ [date] มีไว้สำหรับการกำหนดตำแหน่งเขตเวลาปัจจุบันของโหนดนั้นๆ (โดยค่าเริ่มต้นจะชี้ไปที่ UTC zone) ตัวอย่างด้านล่างเราจะแก้ไขค่าเริ่มต้นหน้าแรกของเซิร์ฟเวอร์ที่ไฟล์/var/www/webroot/ROOT/index.php ด้วยโค้ดต่อไปนี้:
<?php
echo date("h:i:sa");
?>

จากนั้นกดปุ่มบันทึกอัปเดตไฟล์แล้วเปิดในเบราว์เซอร์คุณจะเห็นผลลัพธ์เวลา

กลับไปที่ Ruk-Com Cloud Dashboard และระบุเขตเวลาที่ต้องการเป็นค่าสำหรับพารามิเตอร์ date.timezone ภายในไฟล์ php.ini เช่น (Asia/Bangkok)

บันทึกการกำหนดค่าใหม่อีกครั้งและรีสตาร์ทPHP compute node และ refresh หน้าแสดงเวลาปัจจุบันอีกครั้ง

เมื่อดำเนินการครบแล้วคุณจะเห็น timezone ที่เปลี่ยนแปลงสำเร็จแล้วและตอนนี้สอดคล้องกับตำแหน่งที่ต้องการแล้ว