first commit

This commit is contained in:
franv 2020-08-13 13:55:10 -07:00
commit 86a3f773dc
20 changed files with 509 additions and 0 deletions

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2019 RafaelMiquelino
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

102
README.md Normal file
View File

@ -0,0 +1,102 @@
# Traccar server
This is the repository to create the traccar-server with a standalone MySQL database and Traefik reverse proxy via docker-compose file.
## Minimum VPS configuration
- OS: Ubuntu 16.04 x64
- RAM: 512 MB
- CPU: 1
- Disk space: 10 GB
- 1GB swap: see https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-16-04
## Setup Instructions
### Install Docker
1. First, in order to ensure the downloads are valid, add the GPG key for the official Docker repository to your system:
`curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -`
2. Add the Docker repository to APT sources:
`sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"`
3. Next, update the package database with the Docker packages from the newly added repo:
`sudo apt-get update`
4. Make sure you are about to install from the Docker repo instead of the default Ubuntu 16.04 repo:
`apt-cache policy docker-ce`
You should see output similar to the follow:
```
docker-ce:
Candidate: 18.06.1~ce~3-0~ubuntu
Version table:
18.06.1~ce~3-0~ubuntu 500
500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
```
5. Finally, install Docker:
`sudo apt-get install -y docker-ce`
6. Docker should now be installed, the daemon started, and the process enabled to start on boot. Check that it's running:
`sudo systemctl status docker`
7. If you want to avoid typing sudo whenever you run the docker command, add your username to the docker group:
`sudo usermod -aG docker ${USER}`
8. To apply the new group membership, log out of the server and back in.
9. Afterwards, you can confirm that your user is now added to the docker group by typing:
`id -nG`
- For more info, visit: https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04
### Install Docker Compose
1. We'll check the current release and if necessary, update it in the command below:
`ssudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose`
2. Next we'll set the permissions:
`sudo chmod +x /usr/local/bin/docker-compose`
3. Then we'll verify that the installation was successful by checking the version:
`docker-compose -v`
- For more info, visit: https://www.digitalocean.com/community/tutorials/how-to-install-docker-compose-on-ubuntu-16-04
### Install the repository into the VPS
1. Clone the repository.
1. Step into the just created folder
### Configure environment variables
1. Set your mysql username and password parameters as environment variables:
`export MYSQL_USER=YOUR_USERNAME` `export MYSQL_ROOT_PASSWORD=YOUR_ROOT_PASSWORD` `export MYSQL_PASSWORD=YOUR_USER_PASSWORD` `export MYSQL_DATABASE=YOUR_DATABASE_NAME`
2. Set your domain:
`export DOMAIN=YOUR_DOMAIN.com`
2. Alternatively you can set all these variables in `.env` file and export all at once on the system startup by adding the following command to your .bashrc:
`export $(<PATH_TO_THE_REPOSITORY/.env)`
### Create the traccar configuration file
1. Create a `traccar.xml` file with your configuration inside the folder `traccar/conf/`
1. A sample configuration file is provided on `traccar/conf/sample_traccar.xml`
1. Replace `[DATABASE]` with your MySQL database name
1. Replace `[USER]` with your MySQL username
1. Replace `[PASSWORD]` with your MySQL passoword
1. For more details on the available options fro traccar configuration file, pelase check: https://www.traccar.org/configuration-file/
### Create the traefik configuration file
1. Create a `traefik.toml` file with your configuration inside the folder `traefik/`
1. A sample configuration file is provided on `traefik/traefik_sample.toml`. The standard login\username for the Web UI is admin\admin
1. For configuration examples, including Let's Encrypt support please check https://docs.traefik.io/v1.7/user-guide/examples/
### Restore the database
#### IF YOU HAVE A DATABASE BACKUP, ENSURE YOU DO THIS BEFORE STARTING TRACCAR-SERVER
1. In the machine and the respective folder where the backup is located, transfer the backup file to the VPS:
`rsync -avzhe ssh ./backup.sql user@VPS_ip:~/backup.sql`
2. Connect to the VPS via SSH:
`ssh user@VPS_ip`
2. Step into the clonned repository:
`cd traccar-server`
2. Run the MySQL database:
`docker-compose up -d db`
2. Check if everything is working via the commands:
`docker-compose ps` or `docker ps`
`docker-compose logs`
3. Transfer the last backup to the database:
`docker exec -i db sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" "$MYSQL_DATABASE"' < ~/backup.sql`
### Execute all the services
`docker-compose up -d` or `docker-compose up -d --build --force-recreate` to force recreation of image and container
Check if everything is working via the commands:
`docker-compose ps` or `docker ps`
Check the logs of each container via the command:
`docker-compose logs container_name`
### Other useful repositories
- **[mysql-autobackup](https://github.com/RafaelMiquelino/mysql-autobackup):** Perform periodic backup of your traccar MySQL database.
- **[rclone-autobackup](https://github.com/RafaelMiquelino/rclone-autobackup):** Sync your database backups to the cloud.
- **[flask-text-reader](https://github.com/RafaelMiquelino/flask-text-reader):** Make your Traccar log file reachable from the browser
To run all the services together, clone all the repositories to your machine, define the same compose project name for all of them at the `.env` file located on each repository and run each service through the `docker-compose up -d` command on each repository.

BIN
data/ca.pem Normal file

Binary file not shown.

BIN
data/client-cert.pem Normal file

Binary file not shown.

BIN
data/public_key.pem Normal file

Binary file not shown.

BIN
data/server-cert.pem Normal file

Binary file not shown.

49
docker-compose.yml Normal file
View File

@ -0,0 +1,49 @@
version: "3"
services:
db:
image: mysql:8.0.13
container_name: db
command: --default-authentication-plugin=mysql_native_password
restart: always
env_file: .env
volumes:
- /etc/localtime:/etc/localtime:ro
- db-datavolume:/var/lib/mysql
# - ./data:/var/lib/mysql
- ./mysql:/etc/mysql/conf.d
# ports:
# - "3306:3306"
traccar:
image: traccar/traccar:4.8-alpine
container_name: traccar
depends_on:
- db
restart: always
volumes:
- ./traccar/conf/traccar.xml:/opt/traccar/conf/traccar.xml:ro
- ./var/log/traccar:/opt/traccar/logs:rw
- ./traccar/web/favicon.ico:/opt/traccar/web/favicon.ico:ro
- ./traccar/web/icon.png:/opt/traccar/web/icon.png:ro
- ./traccar/web/logo.svg:/opt/traccar/web/logo.svg:ro
- ./traccar/web/release.html:/opt/traccar/web/release.html:ro
- ./traccar/web/app.css:/opt/traccar/web/app.css:ro
environment:
- VIRTUAL_HOST=track.franv.site
- LETSENCRYPT_HOST=track.franv.site
- LETSENCRYPT_EMAIL=ouch@thetrauma.org
- VIRTUAL_PORT=8082
- TRUSTED_PROXY=nginx-proxy
ports:
- "5055:5055"
- "8082:8082"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
volumes:
db-datavolume:
networks:
default:
external:
name: franvproxy_proxy-tier

57
docker-compose.yml.bak Normal file
View File

@ -0,0 +1,57 @@
version: "3"
services:
db:
image: mysql:8.0.13
container_name: db
command: --default-authentication-plugin=mysql_native_password
restart: always
env_file: .env
volumes:
- /etc/localtime:/etc/localtime:ro
- db-datavolume:/var/lib/mysql
- ./mysql:/etc/mysql/conf.d
ports:
- "3306:3306"
labels:
- traefik.enable=false
traccar:
image: traccar/traccar:4.8-alpine
container_name: traccar
depends_on:
- db
restart: always
volumes:
- ./traccar/conf/traccar.xml:/opt/traccar/conf/traccar.xml:ro
- /var/log/traccar:/opt/traccar/logs:rw
- ./traccar/web/favicon.ico:/opt/traccar/web/favicon.ico:ro
- ./traccar/web/icon.png:/opt/traccar/web/icon.png:ro
- ./traccar/web/logo.svg:/opt/traccar/web/logo.svg:ro
- ./traccar/web/release.html:/opt/traccar/web/release.html:ro
- ./traccar/web/app.css:/opt/traccar/web/app.css:ro
ports:
- "5000-5150:5000-5150"
- "8082:8082"
labels:
- traefik.http.routers.traccar.rule=Host(`web.${DOMAIN}`)
- traefik.http.services.traccar_web.loadbalancer.server.port=8082
rev_proxy:
image: traefik:v2.2
container_name: rev_proxy
restart: always
env_file: .env
ports:
- "80:80"
- "443:443"
- "8080:8080"
labels:
- traefik.http.routers.api.rule=Host(`proxy.${DOMAIN}`)
- traefik.http.routers.api.service=api@internal
- traefik.http.routers.api.middlewares=auth
- traefik.http.middlewares.auth.basicauth.users=${AUTH_USER_PASSWORD}
volumes:
- ./traefik/traefik.toml:/traefik.toml
- ./traefik/acme.json:/acme.json
- /var/log/traefik:/logs
- /var/run/docker.sock:/var/run/docker.sock
volumes:
db-datavolume:

38
docker-compose.yml.good Normal file
View File

@ -0,0 +1,38 @@
version: "3"
services:
db:
image: mysql:8.0.13
container_name: db
command: --default-authentication-plugin=mysql_native_password
restart: always
env_file: .env
volumes:
- /etc/localtime:/etc/localtime:ro
# - db-datavolume:/var/lib/mysql
- ./data:/var/lib/mysql
- ./mysql:/etc/mysql/conf.d
ports:
- "3306:3306"
traccar:
image: traccar/traccar:4.8-alpine
container_name: traccar
depends_on:
- db
restart: always
volumes:
- ./traccar/conf/traccar.xml:/opt/traccar/conf/traccar.xml:ro
- /var/log/traccar:/opt/traccar/logs:rw
- ./traccar/web/favicon.ico:/opt/traccar/web/favicon.ico:ro
- ./traccar/web/icon.png:/opt/traccar/web/icon.png:ro
- ./traccar/web/logo.svg:/opt/traccar/web/logo.svg:ro
- ./traccar/web/release.html:/opt/traccar/web/release.html:ro
- ./traccar/web/app.css:/opt/traccar/web/app.css:ro
ports:
- "5055:5055"
- "8083:8082"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
#volumes:
# db-datavolume:

16
index.html Normal file
View File

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>Traccar</title>
<link rel="icon" sizes="192x192" href="/icon.png">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="stylesheet" href="app.css">
</head>
<body>
<div id="spinner"></div>
<div id="attribution">Powered by <a href="https://www.traccar.org/">Traccar GPS Tracking System</a></div>
<script id="loadScript" src="load.js"></script>
</body>
</html>

32
mysql/my.cnf Normal file
View File

@ -0,0 +1,32 @@
[mysqld]
local_infile=ON
performance_schema=OFF
# innodb
#innodb_buffer_pool_size=5M
#innodb_log_buffer_size=256K
#innodb_ft_cache_size=1600000
#innodb_ft_total_cache_size=32000000
# caches
#thread_cache_size=0
#host_cache_size=0
#query_cache_size=0
#max_connections=10
#key_buffer_size=8
# per thread or per operation settings
#thread_stack=131072
#sort_buffer_size=32K
#read_buffer_size=8200
#read_rnd_buffer_size=8200
#max_heap_table_size=16K
#tmp_table_size=1K
#bulk_insert_buffer_size=0
#join_buffer_size=128
#net_buffer_length=1K
#innodb_sort_buffer_size=64K
#settings that relate to the binary log (if enabled)
#binlog_cache_size=4K
#binlog_stmt_cache_size=4K

View File

@ -0,0 +1,26 @@
<?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.jdbc.Driver</entry>
<entry key='database.url'>jdbc:mysql://db:3306/[DATABASE]?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'>[USER]</entry>
<entry key='database.password'>[PASSWORD]</entry>
<entry key='database.saveOriginal'>true</entry>
</properties>

33
traccar/conf/traccar.xml Normal file
View File

@ -0,0 +1,33 @@
<?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.jdbc.Driver</entry>
<entry key='database.url'>jdbc:mysql://db:3306/traccar_db?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'>airdog</entry>
<entry key='database.password'>chengli197</entry>
<entry key='database.saveOriginal'>true</entry>
<entry key='mail.smtp.host'>mail.desart.ca</entry>
<entry key='mail.smtp.port'>465</entry>
<entry key='mail.smtp.ssl.enable'>true</entry>
<entry key='mail.smtp.from'>xx@desart.ca</entry>
<entry key='mail.smtp.auth'>true</entry>
<entry key='mail.smtp.username'>xx@desart.ca</entry>
<entry key='mail.smtp.password'>chengli47</entry>
</properties>

View File

@ -0,0 +1,26 @@
<?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.jdbc.Driver</entry>
<entry key='database.url'>jdbc:mysql://db:3306/traccar_db?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'>airdog</entry>
<entry key='database.password'>chengli197</entry>
<entry key='database.saveOriginal'>true</entry>
</properties>

View File

@ -0,0 +1,55 @@
.view-color-green {
background-color: rgba(77, 250, 144, 0.3);
}
.view-color-yellow {
background-color: rgba(250, 190, 77, 0.3);
}
.view-color-red {
background-color: rgba(255, 84, 104, 0.3);
}
.view-item-disabled {
opacity: 0.5;
}
.toolbar-header-style {
background-color: #5fa2dd !important;
}
body.x-border-layout-ct, div.x-border-layout-ct {
background-color: #bbbbbb !important;
}
.x-fieldset {
overflow: visible !important; /* workaround for Safari issue */
}
#attribution {
position: absolute;
bottom: 10px;
right: 15px;
font-size: x-small;
}
#spinner:before {
content: '';
box-sizing: border-box;
position: absolute;
top: 50%;
left: 50%;
width: 60px;
height: 60px;
margin-top: -30px;
margin-left: -30px;
border-radius: 50%;
border-top: 6px solid #5fa2dd;
border-right: 6px solid transparent;
animation: spinner .6s linear infinite;
}
@keyframes spinner {
to {
transform: rotate(360deg);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
traccar/web/icon_sample.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg id="svg2985" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="64" viewBox="0 0 240 64" width="240" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata id="metadata2990">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<g id="layer1">
<rect id="rect3778" height="64" width="236.1" y="0" x="0" fill="none"/>
<ellipse id="path3038" rx="28.995" ry="28.995" transform="rotate(-30)" cy="43.713" cx="11.713" stroke-width="10.699" fill="#fff"/>
<g fill="#336">
<circle id="path2993" stroke-width="1.3262" transform="rotate(-30)" cy="43.713" cx="9.4364" r="2.2765"/>
<path id="path3004" d="m37.012 24.177-2.8428 3.6128c0.66345 0.52205 1.3255 1.1576 1.7734 1.9333 0.4479 0.77578 0.66726 1.6669 0.78764 2.5025l4.5502-0.65558c-0.193-1.42-0.633-2.804-1.394-4.123s-1.74-2.391-2.874-3.27z" stroke-width="1.0095"/>
<path id="path3014" d="m42.504 16.9-2.8428 3.6128c1.607 1.2355 3.0914 2.7935 4.1679 4.6581s1.6835 3.9291 1.95 5.9386l4.5502-0.65558c-0.33967-2.5954-1.1669-5.1513-2.5573-7.5594-1.3903-2.4081-3.1901-4.4025-5.268-5.9944z" stroke-width="1.0095"/>
<path id="path3036" d="m2.607 52.819a9.1058 9.1058 0 0 1 -7.8859 -4.5529 9.1058 9.1058 0 0 1 0 -9.1058 9.1058 9.1058 0 0 1 7.8859 -4.5529l-2e-7 9.1058z" transform="rotate(-30)" stroke-width="3.6204"/>
<path id="path3038-8" d="m17.502 6.8895c-13.868 8.0065-18.619 25.74-10.612 39.608 8.006 13.868 25.739 18.619 39.608 10.613 13.868-8.007 18.619-25.74 10.613-39.609-8.007-13.868-25.74-18.619-39.609-10.612zm1.706 2.9541c12.237-7.0648 27.884-2.8722 34.948 9.3644 7.065 12.237 2.873 27.884-9.364 34.948-12.237 7.065-27.884 2.873-34.948-9.364-7.0652-12.237-2.8726-27.884 9.364-34.948z" stroke-width="1.0095"/>
<g id="text3003" aria-label="Traccar">
<path id="path4172" d="m89.719 48.671h-3.915v-30.192h-10.663v-3.4775h25.241v3.4775h-10.663v30.192z"/>
<path id="path4174" d="m116.36 22.969q1.6812 0 3.0169 0.27636l-0.52968 3.5466q-1.566-0.34544-2.7636-0.34544-3.063 0-5.2508 2.4872-2.1648 2.4872-2.1648 6.195v13.541h-3.8229v-25.241h3.1551l0.43756 4.675h0.18424q1.4048-2.4642 3.3854-3.7999t4.3526-1.3357z"/>
<path id="path4176" d="m139.62 48.671-0.75998-3.5926h-0.18424q-1.8884 2.3721-3.7769 3.2242-1.8654 0.82907-4.675 0.82907-3.7538 0-5.8956-1.9345-2.1187-1.9345-2.1187-5.5041 0-7.6459 12.229-8.0143l4.2835-0.13818v-1.566q0-2.9708-1.2897-4.3756-1.2666-1.4278-4.0763-1.4278-3.1551 0-7.1392 1.9345l-1.1745-2.9248q1.8654-1.0133 4.0762-1.589 2.2339-0.57574 4.4678-0.57574 4.5138 0 6.6786 2.0036 2.1878 2.0036 2.1878 6.4253v17.226h-2.8326zm-8.6361-2.6945q3.5696 0 5.5962-1.9575 2.0496-1.9575 2.0496-5.4811v-2.2799l-3.8229 0.16121q-4.5599 0.16121-6.5865 1.4278-2.0036 1.2436-2.0036 3.892 0 2.0727 1.2436 3.1551 1.2666 1.0824 3.5236 1.0824z"/>
<path id="path4178" d="m160.44 49.131q-5.4811 0-8.498-3.3623-2.9939-3.3854-2.9939-9.5573 0-6.3332 3.0399-9.7876 3.063-3.4545 8.7052-3.4545 1.8194 0 3.6387 0.3915t2.8557 0.92119l-1.1745 3.2472q-1.2666-0.50665-2.7636-0.82907-1.4969-0.34544-2.6484-0.34544-7.6919 0-7.6919 9.8106 0 4.652 1.8654 7.1392 1.8884 2.4872 5.5732 2.4872 3.1551 0 6.4713-1.3588v3.3854q-2.5333 1.3127-6.3792 1.3127z"/>
<path id="path4180" d="m182.92 49.131q-5.4811 0-8.498-3.3623-2.9939-3.3854-2.9939-9.5573 0-6.3332 3.0399-9.7876 3.063-3.4545 8.7052-3.4545 1.8193 0 3.6387 0.3915t2.8557 0.92119l-1.1745 3.2472q-1.2666-0.50665-2.7636-0.82907-1.4969-0.34544-2.6484-0.34544-7.6919 0-7.6919 9.8106 0 4.652 1.8654 7.1392 1.8884 2.4872 5.5732 2.4872 3.1551 0 6.4714-1.3588v3.3854q-2.5333 1.3127-6.3792 1.3127z"/>
<path id="path4182" d="m210.83 48.671-0.75998-3.5926h-0.18424q-1.8884 2.3721-3.7769 3.2242-1.8654 0.82907-4.675 0.82907-3.7538 0-5.8956-1.9345-2.1187-1.9345-2.1187-5.5041 0-7.6459 12.229-8.0143l4.2835-0.13818v-1.566q0-2.9708-1.2897-4.3756-1.2666-1.4278-4.0762-1.4278-3.1551 0-7.1392 1.9345l-1.1745-2.9248q1.8654-1.0133 4.0762-1.589 2.2339-0.57574 4.4678-0.57574 4.5138 0 6.6786 2.0036 2.1878 2.0036 2.1878 6.4253v17.226h-2.8326zm-8.6361-2.6945q3.5696 0 5.5962-1.9575 2.0496-1.9575 2.0496-5.4811v-2.2799l-3.8229 0.16121q-4.5599 0.16121-6.5865 1.4278-2.0036 1.2436-2.0036 3.892 0 2.0727 1.2436 3.1551 1.2666 1.0824 3.5235 1.0824z"/>
<path id="path4184" d="m233.08 22.969q1.6812 0 3.0169 0.27636l-0.52968 3.5466q-1.566-0.34544-2.7636-0.34544-3.0629 0-5.2508 2.4872-2.1648 2.4872-2.1648 6.195v13.541h-3.8229v-25.241h3.1551l0.43757 4.675h0.18423q1.4048-2.4642 3.3854-3.7999t4.3526-1.3357z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>Traccar</title>
<link rel="icon" sizes="192x192" href="/icon.png">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="stylesheet" href="app.css">
</head>
<body>
<div id="spinner"></div>
<div id="attribution">Powered by <a href="https://www.traccar.org/">Traccar GPS Tracking System</a></div>
<script id="loadScript" src="load.js"></script>
</body>
</html>

View File

@ -0,0 +1,5 @@
[api]
dashboard = true
[providers.docker]