Zarządzanie danymi stref czasowych serwerów aplikacji Java/PHP

Serwery aplikacji Java/PHP  w ramach UniCloud dostarczane są ze specjalnymi pakietami związanymi ze strefami czasowymi, które zawierają informacje o historii czasu lokalnego w innych lokalizacjach oraz o zasadach dotyczących aktualnej strefy czasowej. Te informacje są wymagane w przypadku oprogramowania uruchamianego w kontenerach i jest regularnie aktualizowana dla odpowiednich serwerów w kolejnych aktualizacjach platformy. Jeśli zachodzi taka konieczność, w UniCloud istnieje możliwość ręcznej aktualizacji reguł strefy czasowej (TZ = TimeZone) zarówno dla Java, jak i PHP.

Reguły TimeZone dla Javy

Zasady strefy czasowej dla węzłów Java są dostarczane w dedykowanej paczce TZdata, w każdym z kontenerów osobno. Poniższe instrukcje pozwolą na ich aktualizacje lub zmianę strefy czasowej twojego serwera.

Zasady aktualizacji TimeZone

Pomimo tego, że najnowsze wersje pakietu TZdata są integrowane z węzłami podczas ich tworzenia, po pewnym czasie mogą stać się nieaktualne ze względu na pojawiające się zmiany. Od czasu do czasu zawartość kontenerów może wymagać odświeżenia. W tym celu można użyć TZUpdater, specjalnego, wbudowanego narzędzia przeznaczonego do zapewnienia dokładnych i aktualnych danych strefy czasowej. Jest to łatwe i może być uruchomione za pomocą jednej linii poleceń.

W tym celu należy:

  1. Połączyć się ze środowiskiem Java poprzez SSH i wybrać odpowiedni kontener:
  2. Wewnątrz kontenera można dokonać weryfikacji aktualnie używanej wersji TZdata, poprzez wykonanie ciągu:
    java -jar /usr/java/utils/tzupdater.jar -V
  3. Jeśli pakiet jest nieaktualny, można zaktualizować strefę czasową za pomocą wbudowanego narzędzia TZUpdater:
    java -jar /usr/java/utils/tzupdater.jar -u

sprawdzamy:Jak widać, aktualizacja wersji pakietu timezone jest w UniCloud zupełnie prosta.

Zmiana strefy czasowej

W tym kroku, na przykładzie serwera Tomcat 7, sprawdzimy i zmienimy czas lokalny serwera aplikacji.

  1. Ustawmy aktualny stempel czasu na stronie startowej serwera, aby móc obserwować zmiany zachodzące w konfiguracji. W tym celu wystarczy wpisać poniższy kod zamiast domyślnej zawartości pliku webapps/ROOT/index.jsp (użyj w tym celu wbudowanego w UniCloud Menedżera konfiguracji).
    <%@page import="java.util.*"%>
     <html>
        <head>
            <title>TZ Page</title>
        </head>
        <body>
            <%=new Date(System.currentTimeMillis()).toString()%>
        </body>
     </html>
  2. Zapisz zmiany i Otwórz swoje środowisko w przeglądarce, aby zobaczyć aktualny czas serwera:
  3. W celu zmiany strefy czasowej, należy wykonać następujące czynności:
  • dla Tomcat, TomEE i Jetty

W pliku variables.conf  należy dodać zmienną -Duser.timezone o wartości odpowiadającej odpowiedniej strefie (korzystając np. z listy stref), przykładowo dla Polski:
     -Duser.timezone = Europe/Warsaw

W zależności od wybranego serwera aplikacji, położenie pliku może być różne:

  • Tomcat, Tomee – /opt/tomcat/conf/variables.conf
  • Tomcat8 – /opt/shared/conf/variables.conf
  • Jetty 6 – /opt/jetty/etc/variables.conf
  • Jetty 8/9 – /opt/shared/conf/etc/variables.conf

  • dla GlassFish
    Uruchom panel administracyjny GF, przejdź do sekcji Configurations > gf-cluster-config (albo server-config dla GF4) > JVM Settings > JVM Options , kliknij  Add JVM Option, wprowadź i zapisz odpowiednią zmienną:

  • dla JBoss
    przejdź do pliku /opt/shared/bin/standalone.conf i dodaj odpowiednią zmienną w sekcji Java VM, tuż przed cudzysłowem:
  • dla Wildfly
    przejdź do pliku /opt/shared/bin/standalone.conf  i dodaj odpowiednią zmienną, w formacie:

<export JAVA_OPTS=”-Duser.timezone=Europe/Warsaw”>

4. Po zapisaniu zmian i restarcie serwera aplikacji, możemy przetestować efekt naszych zmian. Odświeżenie strony serwera w przeglądarce pokaże nam zaktualizowany czas lokalny:W naszym przykładzie wyświetlany jest środkowoeuropejski czas letni, odpowiedni dla wybranej przez nas strefy Europe/Warsaw.

Reguły TimeZone dla PHP

Zarządzanie ustawieniami strefy czasowej serwerów aplikacyjnych PHP odbywa się w ramach sekcji {date} w głównym pliku konfiguracyjnym – php.ini. Aby je zmienić, należy wybrać przycisk Konfiguruj dla odpowiedniego węzła, zlokalizować plik na rozwijanej liście i przewinąć go do sekcji {date}, około 260. linii:

Jak zaznaczono powyżej, sekcja zawiera dwie opcje, które mogą być używane do powiązania zewnętrznej bazy TZ, aby uzyskać najnowsze dane dotyczące stref czasowych lub do ustawienia na serwerze odpowiedniej strefy czasowej. W przeglądarce w sekcji date na stronie phpinfo() zobaczymy informacje o aktualnej bazie stref czasowych:

Zasady aktualizacji stref czasowych

Pierwsze ustawienie umożliwia użycie alternatywnej zewnętrznej bazy stref czasowych (np. dostarczanej w formacie Olson przez IANA) w przypadku, gdy baza wewnętrzna jest nieaktualna.

W tym celu wystarczy odkomentować wpis przez proste usunięcie średnika na początku linii. Po zapisaniu konfiguracji i restarcie serwera aplikacji, w oknie przeglądarki na stronie phpinfo() możemy zaobserwować zmianę dokonaną w sekcji date:

Zmiana strefy czasowej

Druga opcja w sekcji {date} przeznaczona jest do określania aktualnej lokalizacji strefy czasowej (wartością domyślną jest strefa UTC) danego węzła. Pokażemy na przykładzie zmodyfikowanej strony startowej (plik webroot/ROOT/index.php ), jak zmienia się czas serwera.  Użyjemy do tego kodu:

<?php
echo date("h:i:sa");
?>

Po zapisaniu pliku, w przeglądarce możemy odczytać aktualny, domyślny czas serwera:

Zmieniając parametr date.timezone w pliku etc > php.ini, z domyślnej wartości  UTC na wybraną przez nas z dostępnej listy (w naszym przykładzie jest to Europe/Warsaw),

Po zapisaniu zmienionej konfiguracji, restarcie węzła PHP i odświeżeniu strony, ujrzymy aktualny czas serwera w naszej strefie czasowej:

Jak widać strefa czasowa została zmieniona i serwer pokazuje czas z wybranej przez nas strefy.