From fd3768dbffc3c5c8a07b82709d01b34e9b793ac0 Mon Sep 17 00:00:00 2001 From: Dziad Borowy Date: Tue, 17 Jan 2023 23:26:25 +0000 Subject: [PATCH] cleaup --- apps/other/traccar.md | 194 ++++++++++++++++++------------------------ 1 file changed, 85 insertions(+), 109 deletions(-) diff --git a/apps/other/traccar.md b/apps/other/traccar.md index 58f8dd4..d3cddf5 100644 --- a/apps/other/traccar.md +++ b/apps/other/traccar.md @@ -1,23 +1,22 @@ # Traccar -![traccar_hu4f4d748acb69c0f52e2340aac180cda5_35275_1600x0_resize_box_3](https://user-images.githubusercontent.com/52239579/212997283-e3279b61-189f-452c-86e5-d1e2fe216da2.png) - -**Traccar is a gps tracking system. You can use it to monitor your smartphone location history** +Traccar is a gps tracking system. You can use it to monitor your smartphone location history
-[website](https://www.traccar.org/) +- [website](https://www.traccar.org/) +- [documentation](https://www.traccar.org/documentation/) -[documentation](https://www.traccar.org/documentation/) - -## get the default traccar conf - -`docker run --rm --entrypoint cat debian-traccar-nginx:latest /opt/traccar/conf/traccar.xml > /run/media/ippo/TOSHIBA/traccar/conf/traccar.xml` - -## Configuration parameters for MySQL -(replace [DATABASE], [USER], [PASSWORD] with appropriate values from docker-compose replace [HOST "IPv4Address" from db_name section in docker network inspect) +## get the default traccar conf +```sh +docker run --rm --entrypoint cat debian-traccar-nginx:latest /opt/traccar/conf/traccar.xml > /run/media/ippo/TOSHIBA/traccar/conf/traccar.xml ``` + +## Configuration parameters for MySQL +Replace [DATABASE], [USER], [PASSWORD] with appropriate values from `docker-compose.yml` replace `[HOST]` with IPv4 address from `db_name` section in `docker network inspect`: + +```xml com.mysql.cj.jdbc.Driver jdbc:mysql://[HOST]:3306/[DATABASE]?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false&allowMultiQueries=true&autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8&sessionVariables=sql_mode='' [USER] @@ -26,147 +25,122 @@ ## docker-compose -``` -version: "3" - +```yaml +--- services: traccar-db: -#yobasystems was used for its compact size. also it survives recomposing and does not throws innodb error when volumes are not empty as the official mariadb image does image: yobasystems/alpine-mariadb container_name: traccar-db -#auth plugin for old drivers + restart: unless-stopped command: --default-authentication-plugin=mysql_native_password - restart: always - volumes: -# mount /var/lib/mysql and /etc/mysql/conf.d on host - - /run/media/ippo/TOSHIBA/traccar/mysql-data:/var/lib/mysql - - /run/media/ippo/TOSHIBA/traccar/mysql:/etc/mysql/conf.d - ports: - - "3306:3306" + networks: + - trc2 environment: -#use those in the traccar config file in /opt/traccar/conf/traccar.xml as mounted in host - MYSQL_ROOT_PASSWORD=rootpassword - MYSQL_DATABASE=traccar-db - MYSQL_USER=username - MYSQL_PASSWORD=userpassword - networks: - - trc2 - + volumes: + - ./mysql-data:/var/lib/mysql + - ./mysql:/etc/mysql/conf.d + ports: + - "3306:3306" traccar: image: traccar/traccar:debian -#create an account to a dynamic dns provider e.g. duckdns then reverse proxy it to localhost:traccar_port e.g. with caddy. Caddyfile is dead simple - hostname: a_ddns_domain_name + hostname: container_name: traccar + restart: unless-stopped depends_on: - traccar-db - restart: always - volumes: -#get the default traccar conf -#then replace the embeded h2 db conf with "mysql" conf -#https://www.traccar.org/mysql/ -#get the network subnet and ip -#docker network inspect network_name in the database section -#use the ip in the [hostname] section of the database url database.url'>jdbc:mysql://[HOST]/[DATABASE]? - - /run/media/ippo/TOSHIBA/traccar/conf/traccar.xml:/opt/traccar/conf/traccar.xml:ro - - /run/media/ippo/TOSHIBA/traccar/logs:/opt/traccar/logs:rw - ports: -#android client needs tcp 5055 port so if you dont plan to use any of the supported hardware gps trackers -#you can skip listening to 5002,5093 tcp/udp ports and only keep 5055 for events and 8082 for the webui - - "5055:5055" - - "82:8082" networks: - trc2 + ports: + - "5055:5055" + - "82:8082" + volumes: + - ./traccar.xml:/opt/traccar/conf/traccar.xml:ro + - ./logs:/opt/traccar/logs:rw + networks: trc2: driver: bridge enable_ipv6: false ipam: config: -#get the network subnet -#docker network inspect network_name + # get the network subnet: `docker network inspect network_name` - subnet: 192.168.112.0/20 ``` ## open root mysql shell create database, charset and priviledget user -`docker exec -it traccar-db mysql -u root -p` +```sh +docker exec -it traccar-db mysql -u root -p +``` -`CREATE DATABASE IF NOT EXISTS traccar-db` +```sql +CREATE DATABASE IF NOT EXISTS traccar-db +grant all privileges on traccar-db.* TO user'@'% identified by pass +flush privileges +ALTER DATABASE traccar CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ciALTER DATABASE traccar CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci +\q +``` -`grant all privileges on traccar-db.* TO user'@'% identified by pass` -`flush privileges` +## Tips & tricks -`ALTER DATABASE traccar CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ciALTER DATABASE traccar CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci` +### Backup traccar mysql -`\q` +```sh +docker compose -f compose-file.yml exec dbname mysqldump -uroot -pYOUR_MARIADB_ROOT_PASSWORD --all-databases > dump-$(date +%F_%H-%M-%S).sql +``` -## reverse proxy +### Restore traccar mysql -i recoment to use caddy for reverse proxy and automatic ssl manager +``` +docker compose -f compose-file.yml exec -T dbname mysql -uroot -pYOUR_MARIADB_ROOT_PASSWORD < mariadb-dump.sql +``` -`nano /etc/caddy/Caddyfile` - -`a.random.ddns.name.duckdns.org { - reverse_proxy localhost:82 -}` - -## backup and restore traccar mysql - -backup - -`docker-compose -f compose-file.yml exec dbname mysqldump -uroot -pYOUR_MARIADB_ROOT_PASSWORD --all-databases > dump-$(date +%F_%H-%M-%S).sql` - -restore - -`docker-compose -f compose-file.yml exec -T dbname mysql -uroot -pYOUR_MARIADB_ROOT_PASSWORD < mariadb-dump.sql` - -## android apps - -[Android client app](https://www.traccar.org/client/) +### Android apps +- [Android client app](https://www.traccar.org/client/) On client app While service is deactivated Copy the identifier, Insert the server URL (your dens,domain), Select location accuracy (high), Select frequency report ~120 sec, disable wakelock and enable the service On status verify that the location is updating -[Android manager app](https://www.traccar.org/manager/) - +- [Android manager app](https://www.traccar.org/manager/) On server Top left menu Select the plus icon to add a device Select a random name And the identifier from the client app And save The you can select the device on the top left menu -![Screenshot_20230117-214656_Traccar Manager](https://user-images.githubusercontent.com/52239579/212997717-452c1e22-b244-4f50-8806-a61daa2a9485.png) - -## Migrate google location history takeout to traccar +### Migrate google location history takeout to traccar [download your google maps location history takeout](https://takeout.google.com/takeout/custom/local_actions,location_history,maps,mymaps?) -select location history only -and json as format -extract the Records.json +- select location history only +- and json as format +- extract the Records.json you'll use a python script to limit the resaults to just time , latitude and longitude converted to proper coordinates -`git clone https://github.com/Scarygami/location-history-json-converter` - -`cd location-history-json-converter` - -`pip install -r requirements.txt` - -`python location_history_json_converter.py Records.json output.csv -f csv` +```sh +git clone https://github.com/Scarygami/location-history-json-converter +cd location-history-json-converter +pip install -r requirements.txt +python location_history_json_converter.py Records.json output.csv -f csv +``` csv output will generate Comma-separated text file with a timestamp field and a location field we'll add a deviceid , protocol and valid fileds to it -`sed 's/^/osmand,1,/; s/$/,1/' export.csv > curated.csv` - -delete the "1" from the first line an replace osmand with protocol in the first line - -so now the file looks like - +```sh +sed 's/^/osmand,1,/; s/$/,1/' export.csv > curated.csv ``` + +delete the "1" from the first line an replace osmand with protocol in the first line, so now the file looks like + +```csv protocol,Time,Latitude,Longitude osmand,1,2012-08-25 21:26:20,37.95954620,23.72793730,1 ``` @@ -180,20 +154,22 @@ lon We are going to parse those values to as sql `LOAD DATA LOCAL INFILE` statement to the appropriate tc_position table fields -copy the csv to the container +- copy the csv to the container + ```sh + docker cp curated.csv traccar-db:/ + ``` -`docker cp curated.csv traccar-db:/` +- open a root mysql shell to the db container + ```sh + docker exec -it traccar-db mysql -uroot -pROOTPASSWORD + ``` -open a root mysql shel to the db container +- connect to database + ```sh + use traccar-db + ``` -`docker exec -it traccar-db mysql -uroot -pROOTPASSWORD` - -connect to database - -`use traccar-db` - -load the data - -``` -LOAD DATA LOCAL INFILE 'inn.csv' INTO TABLE tc_positions FIELDS TERMINATED BY ',' (@osmand,@deviceid,@Time,@Latitude,@Longitude,@valid) set protocol=@osmand,deviceid=@deviceid,devicetime=@Time,fixtime=@Time,servertime=@Time,latitude=@Latitude,longitude=@Longitude,valid=@valid; -``` +- load the data: + ```sql + LOAD DATA LOCAL INFILE 'inn.csv' INTO TABLE tc_positions FIELDS TERMINATED BY ',' (@osmand, @deviceid,@Time,@Latitude,@Longitude,@valid) set protocol=@osmand,deviceid=@deviceid, devicetime=@Time,fixtime=@Time,servertime=@Time,latitude=@Latitude,longitude=@Longitude, valid=@valid; + ```