27.07.2022
Obsługa serwera Traccar
Bazy danychLinux | UnixOprogramowanie
traccar

Ostatnia aktualizacja: 14.12.2023 r.

Traccar to otwarcoźródłowe oprogramowanie będące nowoczesnym systemem śledzenia GPS, które jest nieprzerwanie rozwijane od 2009 roku. Oprogramowanie można zainstalować na systemie Windows oraz Linux. Wspiera bardzo dużą liczbę urządzeń GPS, choć osobiście korzystałem do tej pory wyłącznie ze sprzętu firmy Teltonika.

Parametry sprzętowe

  • 1 rdzeń CPU
  • 4 GiB RAM
  • 30 GiB HDD

Pierwotnie system konfigurowałem na Ubuntu Server 17.10, a później podnosiłem go do aktualnych wersji LTS i tak aż do 22.04 LTS, i nie powodowało to żadnych problemów z działaniem Traccar`a. 🙃 Całość działa nieprzerwanie od ponad 6 lat na systemie Proxmox.

Instalacja

Domyślnie po instalacji system Traccar zapisuje dane w bazie H2. Nie jest to zalecana konfiguracja, jednak mój produkcyjny system działał tak 5 lat. 😆 Polecam od razu ustawić system na bazę MySQL, aby później oszczędzić sobie czasu z ewentualną migracją danych.

Poniższa instrukcja dotyczy instalacji Traccar`a na czystym systemie Ubuntu Server 22.04 LTS. Przed przystąpieniem do konfiguracji w pierwszej kolejności aktualizuję system i pakiety do najnowszych dostępnych wersji.

sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get autoremove -y

Dodatkowe pakiety

sudo apt-get install unzip -y

MySQL

  1. Instaluję serwer bazodanowy.
    sudo apt-get install mysql-server -y
  2. Uruchamiam konfigurator serwera MySQL.
    sudo mysql_secure_installation
  3. Loguję się do serwera MySQL.
    sudo mysql -u root -p
  4. Tworzę bazę danych dla systemu Traccar.
    CREATE DATABASE traccar;
  5. Tworzę użytkownika do bazy danych dla systemu Traccar.
    CREATE USER 'traccar_dba'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Sk0mp1ikow4N3_Ha$LO';
  6. Nadaję odpowiednie uprawnienia utworzonemu użytkownikowi.
    GRANT ALL ON traccar.* TO 'traccar_dba'@'localhost';
  7. Wprowadzam zmiany w życie.
    FLUSH PRIVILEGES;
  8. Wychodzę z serwera bazy danych.
    exit
  9. Loguję się danymi użytkownika utworzonymi wyżej.
    sudo mysql -u traccar_dba -p
  10. Sprawdzam, czy konto ma dostęp tylko do wyżej utworzonej bazy danych.
    SHOW DATABASES;
  11. Wychodzę z serwera bazy danych.
    exit

Traccar

  1. Pobieram archiwum systemu Traccar z GitHub`a w najnowszej dostępnej wersji czyli w moim przypadku 5.9.
    sudo wget https://github.com/traccar/traccar/releases/download/v5.9/traccar-linux-64-5.9.zip
  2. Rozpakowuję pobrane archiwum i instaluję system.
    sudo unzip traccar-linux-64-5.9.zip && sudo ./traccar.run
  3. Zmieniam plik konfiguracyjny Traccar`a, aby dane zapisywał w bazie MySQL a nie H2.
    sudo nano /opt/traccar/conf/traccar.xml
    <?xml version='1.0' encoding='UTF-8'?>
    
    <!DOCTYPE properties SYSTEM 'http://java.sun.com/dtd/properties.dtd'>
    
    <properties>
    
        <entry key='config.default'>./conf/default.xml</entry>
    
        <!--
    
        This is the main configuration file. All your configuration parameters should be placed in this file.
    
        Default configuration parameters are located in the "default.xml" file. You should not modify it to avoid issues
        with upgrading to a new version. Parameters in the main config file override values in the default file. Do not
        remove "config.default" parameter from this file unless you know what you are doing.
    
        For list of available parameters see following page: https://www.traccar.org/configuration-file/
    
        -->
    
        <entry key='database.driver'>org.h2.Driver</entry>
        <entry key='database.url'>jdbc:h2:./data/database</entry>
        <entry key='database.user'>sa</entry>
        <entry key='database.password'></entry>
    
    </properties>
    
    

    zamieniam na:

    <?xml version='1.0' encoding='UTF-8'?>
    
    <!DOCTYPE properties SYSTEM 'http://java.sun.com/dtd/properties.dtd'>
    
    <properties>
    
        <entry key='config.default'>./conf/default.xml</entry>
    
        <!--
    
        This is the main configuration file. All your configuration parameters should be placed in this file.
    
        Default configuration parameters are located in the "default.xml" file. You should not modify it to avoid issues
        with upgrading to a new version. Parameters in the main config file override values in the default file. Do not
        remove "config.default" parameter from this file unless you know what you are doing.
    
        For list of available parameters see following page: https://www.traccar.org/configuration-file/
    
        -->
    
        <entry key='database.driver'>com.mysql.cj.jdbc.Driver</entry>
        <entry key='database.url'>jdbc:mysql://localhost/traccar?zeroDateTimeBehavior=round&amp;serverTimezone=UTC&amp;allowPublicKeyRetrieval=true&amp;useSSL=false&amp;allowMultiQueries=true&amp;autoReconnect=true&amp;useUnicode=yes&amp;characterEncoding=UTF-8&amp;sessionVariables=sql_mode=''</entry>
        <entry key='database.user'>traccar_dba</entry>
        <entry key='database.password'>Sk0mp1ikow4N3_Ha$LO</entry>
    
    </properties>
    
    
  4. Uruchamiam usługę Traccar`a (dla wersji <4.1 sudo /opt/traccar/bin/startDaemon.sh).
    sudo systemctl start traccar.service
  5. Konfiguruję zaporę sieciową zazwalającej na ruch TCP po porcie 8082.
    sudo ufw allow 8082/tcp

Konfiguracja

  1. Zmiana domyślnego hasła dla konta administracyjnego.

    admin | admin ➔ Ustawienia ➔ Konto ➔ pole Hasło

  2. Wyłączenie rejestracji nowego użytkownika.

    Ustawienia ➔ Serwer ➔ Zezwolenia ➔ Rejestracja [ ]

  3. SSL za pomocą Let`s Encrypt
    1. Instalacja programu Certbot
      sudo apt install python-certbot-apache -y
    2. Wygenerowanie certyfikatu

      W wersji Certbot 0.21.0 używamy polecenia certbot --apache -d www.domena.pl -d domena.pl.

      LINK | LINK | LINK

      certbot --authenticator standalone --installer apache -d *.domena.pl --pre-hook "service apache2 stop" --post-hook "service apache2 start"
    3. Przekierowanie ruchu z portu 8082 na 80
      1. Włączenie odpowiednich modułów, a następnie restart Apache`a.
        sudo a2enmod ssl proxy_http proxy_wstunnel && sudo service apache2 restart
      2. Modyfikacja zawartości pliku /etc/apache2/sites-available/000-default-le-ssl.conf.
        <IfModule mod_ssl.c>
        <VirtualHost *:443>
        	ServerName www.domena.pl
        	ServerAdmin admin@domena.pl
        	DocumentRoot /var/www/html
        
        	ProxyPass /api/socket ws://localhost:8082/api/socket
        	ProxyPassReverse /api/socket ws://localhost:8082/api/socket
        	ProxyPass / http://localhost:8082/
        	ProxyPassReverse / http://localhost:8082/
        
        	ErrorLog ${APACHE_LOG_DIR}/error.log
        	CustomLog ${APACHE_LOG_DIR}/access.log combined
        
        	SSLCertificateFile /etc/letsencrypt/live/www.domena.pl/fullchain.pem
        	SSLCertificateKeyFile /etc/letsencrypt/live/www.domena.pl/privkey.pem
        	Include /etc/letsencrypt/options-ssl-apache.conf
        </VirtualHost>
        # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
        </IfModule>
      3. Modyfikacja zawartości pliku /etc/apache2/sites-available/domain-le-ssl.conf.
        <IfModule mod_ssl.c>
        <VirtualHost *:443>
        	ServerName domena.pl
        	ServerAdmin admin@domena.pl
        	DocumentRoot /var/www/html
        
        	ProxyPass /api/socket ws://localhost:8082/api/socket
        	ProxyPassReverse /api/socket ws://localhost:8082/api/socket
        	ProxyPass / http://localhost:8082/
        	ProxyPassReverse / http://localhost:8082/
        
        	ErrorLog ${APACHE_LOG_DIR}/error.log
        	CustomLog ${APACHE_LOG_DIR}/access.log combined
        
        	SSLCertificateFile /etc/letsencrypt/live/domena.pl/fullchain.pem
        	SSLCertificateKeyFile /etc/letsencrypt/live/domena.pl/privkey.pem
        	Include /etc/letsencrypt/options-ssl-apache.conf
        </VirtualHost>
    4. Działanie HTTPS sprawdzimy na stronie https://www.ssllabs.com/ssltest.

Aktualizacja

  1. Zatrzymuję usługę (dla wersji <4.1 sudo /opt/traccar/bin/stopDaemon.sh).
    sudo systemctl stop traccar.service
  2. Profilaktycznie wykonuję kopię zapasową bazy danych H2 (domyślna instalacja, w innym przypadku (np. MySQL) wykonuję kopię mechnizmem wbudowanym w silnik), katalogu media (jeśli jest) oraz pliku konfiguracyjnego.
    sudo mv -v /opt/traccar/data /home/traccar/data && sudo mv -v /opt/traccar/media /home/traccar/media && sudo mv -v /opt/traccar/conf/traccar.xml /home/traccar/conf/

    Odinstalowanie programu oraz usunięcie jego folderu było wymagane przy wersjach <3.3. W nowszych wersjach nie trzeba tego robić.

    sudo /opt/traccar/bin/uninstallDaemon.sh && sudo rm -R /opt/traccar
  3. Pobieram archiwum nowej wersji systemu Traccar z GitHub`a - w moim przypadku 5.9.
    wget https://github.com/traccar/traccar/releases/download/v5.9/traccar-linux-64-5.9.zip
  4. Rozpakowuję archiwum i od razu instaluję.
    unzip traccar-linux-64-5.9.zip && sudo ./traccar.run
  5. Odtwarzam kopię zapasową bazy danych H2 oraz pliku konfiguracyjnego (jeśli odinstalowałem system i korzystałem z domyślnej konfiguracji). W innym wypadku sprawdzam czy plik konfiguracyjny został nadpisany i jeśli tak się stało to nadpisuję go wcześniej wykonaną kopią.
    sudo mv -v /home/data/* /opt/traccar/data && sudo mv -v /home/traccar.xml /opt/traccar/conf/traccar.xml
  6. Uruchamiam usługę Traccar`a (dla wersji <4.1 sudo /opt/traccar/bin/startDaemon.sh).
    sudo systemctl start traccar.service

Migracja danych z H2 na MySQL

Poniższe czynności wykonywałem podczas aktualizowania produkcyjnego systemu Traccar 4.12 do wersji 5.9. Na potrzeby migracji przygotowałem testową VM z Ubuntu Server 22.04 LTS (na tej wersji działała mi produkcja), na której zainstalowałem system Traccar 4.12 oraz serwer MySQL, które odpowiednio skonfigurowałem. Dodatkowo wykorzystałem programy WinSCP oraz DBeaver do przerzutu danych. Mój sposób migracji wymaga sporo klikania i zajmuje kilka(naście) godzin pracy w zależności od ilości danych, które przeba przenieść między bazami danych.

  1. Na testowej maszynie wirtualnej uruchamiam usługę Traccar`a na maksymalnie minutę i ją zatrzymuję.
    sudo systemctl stop traccar.service && sleep 60 && sudo systemctl start traccar.service
    To działanie spowoduje utworzenie pustych tabel w bazie MySQL. Przechodzę na drugi system i za pomocą programu WinSCP kopiuję z produkcji bazę danych H2 (/opt/traccar/data/database.mv.db) lokalnie na swój komputer lub inną maszynę wirtualną.

  2. Przechodzę do programu DBeaver, w którym klikam w ikonę nowego połączenia z bazą danych. W oknie Connect to a database wybieram MySQL, a następnie klikam przycisk Next >.

    W zakładce Main wprowadzam dane dostępowe do utworzonej wcześniej bazy danych.

    Przechodzę na zakładkę SSH i ustawiam połączenie SSH, a opcjach zaawansowanych lokalny oraz zdalny port ustawiam na domyslny port MySQL czyli 3306.

    Na koniec klikam przycisk Test Connection ... w celu sprawdzenia poprawności wprowadzonych danych dostępowych i nawiązania próbnego połączenia. Jeśli wszystko jest dobrze, zamykam komunikat przyciskiem OK i zapisuję dane klikając w przycisk Finish.

  3. Ponownie klikam w ikonę nowego połączenia z bazą danych. Tym razem w oknie Connect to a database wybieram H2 Embedded, a następnie klikam przycisk Next >.

    Wskazuję ścieżkę do wcześniej pobranego pliku bazy danych oraz wpisuję dane dostępowe - w moim przypadku były to dane domyślne. 😅

    Na koniec klikam przycisk Test Connection ... w celu sprawdzenia poprawności wprowadzonych danych dostępowych i nawiązania próbnego połączenia. Jeśli wszystko jest dobrze, zamykam komunikat przyciskiem OK i zapisuję dane klikając w przycisk Finish.

    Na liście podłączonych baz danych pojawią się dwie pozycje - lokalna baza H2 oraz zdalna MySQL.

  4. Dane przenoszę tabela po tabeli z wyjątkiem DATABASECHANGELOG oraz DATABASECHANGELOGLOCK. Zawartość tabel zależy od konfiguracji oraz łącznego czasu działania systemu. W moim przypadku nie wszystkie tabele były wypełnione danymi i migracja ograniczyła się do:
    1. TC_ATTRIBUTES
    2. TC_DEVICES
    3. TC_EVENTS
    4. TC_GROUPS
    5. TC_POSITIONS
    6. TC_SERVERS
    7. TC_STATISTICS
    8. TC_USER_ATTRIBUTE
    9. TC_USER_DEVICE
    10. TC_USER_GROUP
    11. TC_USERS

    W obydwu bazach danych tabele nazywają się tak samo - różnią się tylko wielkością liter. Nie da się również kopiować tabel po kolei jedna po drugiej, gdyż niektóre tabele są zależne od siebie (jak np. tc_user_group musi być zaimportowane po tc_group) i wtedy podczas takiej operacji program wyświetli błąd.

    W celu rozpoczęcia importu danych przechodzę na serwer MySQL, zaznaczam tabelę, klikam PPM i z menu wybieram Import Data.

    W oknie Data Transfer w pierwszym kroku wybieram typ źródła danych czyli tabele i klikam przycisk Next >.

    W drugim kroku klikam w pole <none> w celu wskazania źródłowej tabeli.

    Rozwijam pozycję z bazą H2 i wybieram odpowiednią tabelę. Następnie klikam przycisk OK.

    Klikam przycisk Next >, aby przejść dalej.

    W trzecim kroku klikam w Choose ....

    Wskazuję bazę MySQL w celu wykonania mapowania zawartości tabel.

    Po kliknięciu przycisku OK program zapisze ustawienia mapowania.

    Profilaktycznie klikam w przycisk Preview data w celu sprawdzenia czy mapowanie zostało wykonane poprawnie.

    Jeśli nie ma problemów to trzykrotnie klikam przycisk Next > aby przejść do podsumowania.

    Klikam przycisk Proceed aby rozpocząć import danych. Program przełączy się na szczegóły tabeli po zakończeniu procesu importu.

    Przechodząc na kartę Data weryfikuję zawartość tabeli.

  5. Kroki w punkcie 4 powtarzam dla każdej tabeli, która zawiera dane.
  6. Po zaimportowaniu wszystkich danych, wykonuję kopię bazy danych MySQL. Zaznaczam bazę danych, klikam PPM i z menu wybieram Tools - Dump database.

    W oknie MySQL Dump klikam przycisk Next >.

    Wskazuję katalog, do którego ma zostać zapisana kopia bazy danych i na koniec klikam przycisk Start.

    Czekam na wykonanie kopii.

  7. Zgodnie z instrukcją instalacji przygotowuję serwer produkcyjny Traccara pod działanie z serwerem MySQL. Następnie podłączam produkcyjny serwer MySQL do Dbeaver`a. Zaznaczam bazę danych, klikam PPM i z menu wybieram Tools - Restore database.

  8. Wskazuję na dysku plik kopii bazy danych i klikam przycisk Start.

  9. Potwierdzam klawiszem Yes, że chcę rozpocząć odtwarzanie bazy danych.

  10. Czekam na odtworzenie kopii.

  11. Uruchamiam usługę Traccar`a.
    sudo systemctl start traccar.service

Urządzenia GPS

  1. Teltonika FM1100 (bez baterii) | FM1122 (z baterią)
    1. Konfiguracja zapłonu ON/OFF

2 komentarze
RK
2023-11-30 20:51:56

mam problem po zmianie pliku konfiguracyjnego sudo systemctl status traccar.service ● traccar.service - traccar Loaded: loaded (/etc/systemd/system/traccar.service; enabled; vendor preset: enabled) Active: activating (auto-restart) (Result: exit-code) since Thu 2023-11-30 19:49:33 UTC; 2s ago Process: 5479 ExecStart=/opt/traccar/jre/bin/java -jar tracker-server.jar conf/traccar.xml (code=exited, status=1/FAILURE) Main PID: 5479 (code=exited, status=1/FAILURE) CPU: 2.248s lis 30 19:49:33 traccar2 systemd[1]: traccar.service: Failed with result 'exit-code'. lis 30 19:49:33 traccar2 systemd[1]: traccar.service: Consumed 2.248s CPU time. jak zmieniam plik konfiguracyjny na pierwotny wszystko działa (ale nie do mysql) co może być przyczyną ?

Odpowiedź na ten komentarz
Grzegorz Wita
2023-12-14 20:37:51

CMS zamienia mi "&amp;" na "&" i to było przyczyną błędu. Poprawiłem składnie na poprawną.

Odpowiedź na ten komentarz

Szybki kontakt

Masz pytania? Napisz