diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..0f69a22
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,2 @@
+heatmaps
+db
diff --git a/.gitignore b/.gitignore
index d4b8191..bd34fd2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,7 @@ config/*
!config/trackdirect.ini
ogndevices
+
+heatmaps
+
+db
diff --git a/README.md b/README.md
index 0247f42..9a3083c 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,8 @@ Information shared over the APRS network is for example coordinates, altitude, s
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes (but they are of course also valid for you who want to set up a public website).
+Further down you will find some information how to install trackdirect with Docker and Docker-Compose.
+
### Prerequisites
What things you need to install and how to install them. These instructions are for Ubuntu 20.04
@@ -252,6 +254,35 @@ Crontab example
### Server Requirements
How powerful server you need depends on what type of data source you are going to use. If you, for example, receive data from the APRS-IS network, you will probably need at least a server with 4 CPUs and 8 GB of RAM, but I recommend using a server with 8 CPUs and 16 GB of RAM.
+
+## Getting Started - Docker
+There is everything prepared to run trackdirect inside of some docker containers. As there is a Docker-Compose file the setup is very simple and fast.
+
+### Install Docker and Docker-Compose
+Install [docker](https://docs.docker.com/get-docker/) and [docker-compose](https://docs.docker.com/compose/install/) from the published websites.
+
+### Config file
+Adopt your config in `config/aprsc.conf` and `config/trackdirect.ini`. In `trackdirect.ini` search for 'docker' and change the lines as described in the comments.
+
+
+### Run Docker-Compose for development containers
+To startup trackdirect in an development container run this docker-compose command:
+
+```
+docker-compose up
+```
+
+If you want to run the container in daemon mode add `-d` to the command.
+
+### Run Docker-Compose for the last published docker images
+
+@peterus is creating regular docker images from this repository. With the release Docker-Compose file you do not need to install and compile everything by your own.
+
+```
+docker-compose -f docker-compose-rel.yml up
+```
+
+
## TODO
- Rewrite backend to use Python 3 instead of Python 2.
- Create a REST-API and replace the current website example with a new frontend written in Angular.
diff --git a/aprsc.dockerfile b/aprsc.dockerfile
new file mode 100644
index 0000000..0dc0317
--- /dev/null
+++ b/aprsc.dockerfile
@@ -0,0 +1,23 @@
+FROM ubuntu:20.04
+
+RUN apt-get update && apt-get install -y \
+ gnupg \
+ && rm -rf /var/lib/apt/lists/*
+
+RUN printf "deb http://aprsc-dist.he.fi/aprsc/apt focal main" >> /etc/apt/sources.list
+RUN gpg --keyserver keyserver.ubuntu.com --recv C51AA22389B5B74C3896EF3CA72A581E657A2B8D
+RUN gpg --export C51AA22389B5B74C3896EF3CA72A581E657A2B8D | apt-key add -
+
+RUN apt-get update && apt-get install -y \
+ aprsc \
+ && rm -rf /var/lib/apt/lists/*
+
+RUN rm /opt/aprsc/etc/aprsc.conf
+VOLUME /opt/aprsc/etc/aprsc.conf
+
+EXPOSE 10152
+EXPOSE 14580
+EXPOSE 10155
+EXPOSE 14501
+
+CMD /opt/aprsc/sbin/aprsc -u aprsc -t /opt/aprsc -c /etc/aprsc.conf
diff --git a/config/000-default.conf b/config/000-default.conf
new file mode 100644
index 0000000..575aefe
--- /dev/null
+++ b/config/000-default.conf
@@ -0,0 +1,13 @@
+
+ ServerAdmin webmaster@localhost
+ DocumentRoot /root/trackdirect/htdocs/public
+
+ ErrorLog ${APACHE_LOG_DIR}/error.log
+ CustomLog ${APACHE_LOG_DIR}/access.log combined
+
+
+
+ Options Indexes MultiViews
+ AllowOverride All
+ Require all granted
+
diff --git a/misc/aprsc.conf b/config/aprsc.conf
similarity index 99%
rename from misc/aprsc.conf
rename to config/aprsc.conf
index b8aa71d..48d5927 100755
--- a/misc/aprsc.conf
+++ b/config/aprsc.conf
@@ -28,4 +28,3 @@ HTTPStatusOptions ShowEmail=1
# from the configuration file. It's here only to avoid starting the
# server up accidentally with an invalid configuration.
MagicBadness 42.7
-
diff --git a/config/trackdirect.ini b/config/trackdirect.ini
index c80979e..ac40126 100644
--- a/config/trackdirect.ini
+++ b/config/trackdirect.ini
@@ -11,8 +11,10 @@ owner_email="no@name.com"
[database]
;; Basic database settings
+;; If using docker, set host to "db"
host="127.0.0.1"
database="trackdirect"
+;; If using docker, activate username and set to "root"
;username="username"
password="foobar"
port="5432"
@@ -50,6 +52,7 @@ frequency_limit="0"
;; First APRS IS server for the websocket server to connect to.
;; Important: Please set up your own APRS IS server, do not use a public server.
+;; If using docker, set aprs_host1 to "aprsc"
aprs_host1="127.0.0.1"
aprs_port1="14580"
@@ -88,6 +91,7 @@ max_queued_realtime_packets="30"
[collector0]
+;; If using docker, set host to "aprsc"
host="127.0.0.1"
port_full="10152"
port_filtered="14580"
diff --git a/db.dockerfile b/db.dockerfile
new file mode 100644
index 0000000..4d03786
--- /dev/null
+++ b/db.dockerfile
@@ -0,0 +1,3 @@
+FROM postgres
+COPY misc/database/tables/* /docker-entrypoint-initdb.d/
+VOLUME /var/lib/postgresql/data
diff --git a/docker-compose-rel.yml b/docker-compose-rel.yml
new file mode 100644
index 0000000..d0aa308
--- /dev/null
+++ b/docker-compose-rel.yml
@@ -0,0 +1,65 @@
+version: "3.9"
+services:
+ aprsc:
+ image: peterus/aprsc:latest
+ restart: always
+ ports:
+ - "10152:10152"
+ - "14580:14580"
+ - "10155:10155"
+ - "14501:14501"
+ volumes:
+ - $PWD/config/aprsc.conf:/opt/aprsc/etc/aprsc.conf
+
+ collector:
+ image: peterus/trackdirect-python2:latest
+ restart: always
+ volumes:
+ - $PWD/config/trackdirect.ini:/root/trackdirect/config/trackdirect.ini
+ command: /root/trackdirect/server/scripts/collector.sh trackdirect.ini 0
+ depends_on:
+ - "db"
+ - "aprsc"
+
+ websocket:
+ image: peterus/trackdirect-python2:latest
+ restart: always
+ volumes:
+ - $PWD/config/trackdirect.ini:/root/trackdirect/config/trackdirect.ini
+ command: /root/trackdirect/server/scripts/wsserver.sh trackdirect.ini
+ ports:
+ - "9000:9000"
+ depends_on:
+ - "db"
+ - "aprsc"
+
+ heatmaps:
+ image: peterus/trackdirect-python2:latest
+ restart: always
+ volumes:
+ - $PWD/config/trackdirect.ini:/root/trackdirect/config/trackdirect.ini
+ - $PWD/heatmaps:/root/trackdirect/htdocs/public/heatmaps
+ command: /root/trackdirect/server/scripts/heatmapcreator.sh trackdirect.ini /root/trackdirect/htdocs/public/heatmaps
+ depends_on:
+ - "db"
+
+ web:
+ image: peterus/trackdirect-apache:latest
+ restart: always
+ volumes:
+ - $PWD/config/trackdirect.ini:/root/trackdirect/config/trackdirect.ini
+ - $PWD/heatmaps:/root/trackdirect/htdocs/public/heatmaps
+ ports:
+ - "80:80"
+ depends_on:
+ - "db"
+
+ db:
+ image: peterus/trackdirect-db:latest
+ restart: always
+ environment:
+ POSTGRES_USER: root
+ POSTGRES_PASSWORD: foobar
+ POSTGRES_DB: trackdirect
+ volumes:
+ - $PWD/db:/var/lib/postgresql/data
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..fa3b770
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,77 @@
+version: "3.9"
+services:
+ aprsc:
+ build:
+ context: .
+ dockerfile: aprsc.dockerfile
+ restart: always
+ ports:
+ - "10152:10152"
+ - "14580:14580"
+ - "10155:10155"
+ - "14501:14501"
+ volumes:
+ - $PWD/config/aprsc.conf:/opt/aprsc/etc/aprsc.conf
+
+ collector:
+ build:
+ context: .
+ dockerfile: trackdirect-python2.dockerfile
+ restart: always
+ volumes:
+ - $PWD/config/trackdirect.ini:/root/trackdirect/config/trackdirect.ini
+ command: /root/trackdirect/server/scripts/collector.sh trackdirect.ini 0
+ depends_on:
+ - "db"
+ - "aprsc"
+
+ websocket:
+ build:
+ context: .
+ dockerfile: trackdirect-python2.dockerfile
+ restart: always
+ volumes:
+ - $PWD/config/trackdirect.ini:/root/trackdirect/config/trackdirect.ini
+ command: /root/trackdirect/server/scripts/wsserver.sh trackdirect.ini
+ ports:
+ - "9000:9000"
+ depends_on:
+ - "db"
+ - "aprsc"
+
+ heatmaps:
+ build:
+ context: .
+ dockerfile: trackdirect-python2.dockerfile
+ restart: always
+ volumes:
+ - $PWD/config/trackdirect.ini:/root/trackdirect/config/trackdirect.ini
+ - $PWD/heatmaps:/root/trackdirect/htdocs/public/heatmaps
+ command: /root/trackdirect/server/scripts/heatmapcreator.sh trackdirect.ini /root/trackdirect/htdocs/public/heatmaps
+ depends_on:
+ - "db"
+
+ web:
+ build:
+ context: .
+ dockerfile: trackdirect-apache.dockerfile
+ restart: always
+ volumes:
+ - $PWD/config/trackdirect.ini:/root/trackdirect/config/trackdirect.ini
+ - $PWD/heatmaps:/root/trackdirect/htdocs/public/heatmaps
+ ports:
+ - "80:80"
+ depends_on:
+ - "db"
+
+ db:
+ build:
+ context: .
+ dockerfile: db.dockerfile
+ restart: always
+ environment:
+ POSTGRES_USER: root
+ POSTGRES_PASSWORD: foobar
+ POSTGRES_DB: trackdirect
+ volumes:
+ - $PWD/db:/var/lib/postgresql/data
diff --git a/misc/database/tables/map.sql b/misc/database/tables/01_map.sql
similarity index 100%
rename from misc/database/tables/map.sql
rename to misc/database/tables/01_map.sql
diff --git a/misc/database/tables/marker.sql b/misc/database/tables/02_marker.sql
similarity index 100%
rename from misc/database/tables/marker.sql
rename to misc/database/tables/02_marker.sql
diff --git a/misc/database/tables/ogn_address_type.sql b/misc/database/tables/03_ogn_address_type.sql
similarity index 100%
rename from misc/database/tables/ogn_address_type.sql
rename to misc/database/tables/03_ogn_address_type.sql
diff --git a/misc/database/tables/ogn_aircraft_type.sql b/misc/database/tables/04_ogn_aircraft_type.sql
similarity index 100%
rename from misc/database/tables/ogn_aircraft_type.sql
rename to misc/database/tables/04_ogn_aircraft_type.sql
diff --git a/misc/database/tables/ogn_device.sql b/misc/database/tables/05_ogn_device.sql
similarity index 100%
rename from misc/database/tables/ogn_device.sql
rename to misc/database/tables/05_ogn_device.sql
diff --git a/misc/database/tables/ogn_hidden_station.sql b/misc/database/tables/06_ogn_hidden_station.sql
similarity index 100%
rename from misc/database/tables/ogn_hidden_station.sql
rename to misc/database/tables/06_ogn_hidden_station.sql
diff --git a/misc/database/tables/packet_type.sql b/misc/database/tables/07_packet_type.sql
similarity index 100%
rename from misc/database/tables/packet_type.sql
rename to misc/database/tables/07_packet_type.sql
diff --git a/misc/database/tables/sender.sql b/misc/database/tables/08_sender.sql
similarity index 100%
rename from misc/database/tables/sender.sql
rename to misc/database/tables/08_sender.sql
diff --git a/misc/database/tables/source.sql b/misc/database/tables/09_source.sql
similarity index 100%
rename from misc/database/tables/source.sql
rename to misc/database/tables/09_source.sql
diff --git a/misc/database/tables/station_type.sql b/misc/database/tables/10_station_type.sql
similarity index 100%
rename from misc/database/tables/station_type.sql
rename to misc/database/tables/10_station_type.sql
diff --git a/misc/database/tables/station.sql b/misc/database/tables/11_station.sql
similarity index 100%
rename from misc/database/tables/station.sql
rename to misc/database/tables/11_station.sql
diff --git a/misc/database/tables/station_telemetry_bits.sql b/misc/database/tables/12_station_telemetry_bits.sql
similarity index 100%
rename from misc/database/tables/station_telemetry_bits.sql
rename to misc/database/tables/12_station_telemetry_bits.sql
diff --git a/misc/database/tables/station_telemetry_eqns.sql b/misc/database/tables/13_station_telemetry_eqns.sql
similarity index 100%
rename from misc/database/tables/station_telemetry_eqns.sql
rename to misc/database/tables/13_station_telemetry_eqns.sql
diff --git a/misc/database/tables/station_telemetry_param.sql b/misc/database/tables/14_station_telemetry_param.sql
similarity index 100%
rename from misc/database/tables/station_telemetry_param.sql
rename to misc/database/tables/14_station_telemetry_param.sql
diff --git a/misc/database/tables/station_telemetry_unit.sql b/misc/database/tables/15_station_telemetry_unit.sql
similarity index 100%
rename from misc/database/tables/station_telemetry_unit.sql
rename to misc/database/tables/15_station_telemetry_unit.sql
diff --git a/misc/database/tables/packet.sql b/misc/database/tables/16_packet.sql
similarity index 100%
rename from misc/database/tables/packet.sql
rename to misc/database/tables/16_packet.sql
diff --git a/misc/database/tables/packet_weather.sql b/misc/database/tables/17_packet_weather.sql
similarity index 100%
rename from misc/database/tables/packet_weather.sql
rename to misc/database/tables/17_packet_weather.sql
diff --git a/misc/database/tables/packet_telemetry.sql b/misc/database/tables/18_packet_telemetry.sql
similarity index 100%
rename from misc/database/tables/packet_telemetry.sql
rename to misc/database/tables/18_packet_telemetry.sql
diff --git a/misc/database/tables/packet_path.sql b/misc/database/tables/19_packet_path.sql
similarity index 100%
rename from misc/database/tables/packet_path.sql
rename to misc/database/tables/19_packet_path.sql
diff --git a/misc/database/tables/packet_ogn.sql b/misc/database/tables/20_packet_ogn.sql
similarity index 100%
rename from misc/database/tables/packet_ogn.sql
rename to misc/database/tables/20_packet_ogn.sql
diff --git a/server/scripts/db_setup.sh b/server/scripts/db_setup.sh
index 35404f4..acea663 100755
--- a/server/scripts/db_setup.sh
+++ b/server/scripts/db_setup.sh
@@ -15,26 +15,26 @@ psql -p $PORT $DATABASE << EOF
begin transaction;
-\i $SQLPATH/map.sql
-\i $SQLPATH/marker.sql
-\i $SQLPATH/ogn_address_type.sql
-\i $SQLPATH/ogn_aircraft_type.sql
-\i $SQLPATH/ogn_device.sql
-\i $SQLPATH/ogn_hidden_station.sql
-\i $SQLPATH/packet_type.sql
-\i $SQLPATH/sender.sql
-\i $SQLPATH/source.sql
-\i $SQLPATH/station_type.sql
-\i $SQLPATH/station.sql
-\i $SQLPATH/station_telemetry_bits.sql
-\i $SQLPATH/station_telemetry_eqns.sql
-\i $SQLPATH/station_telemetry_param.sql
-\i $SQLPATH/station_telemetry_unit.sql
-\i $SQLPATH/packet.sql
-\i $SQLPATH/packet_weather.sql
-\i $SQLPATH/packet_telemetry.sql
-\i $SQLPATH/packet_path.sql
-\i $SQLPATH/packet_ogn.sql
+\i $SQLPATH/01_map.sql
+\i $SQLPATH/02_marker.sql
+\i $SQLPATH/03_ogn_address_type.sql
+\i $SQLPATH/04_ogn_aircraft_type.sql
+\i $SQLPATH/05_ogn_device.sql
+\i $SQLPATH/06_ogn_hidden_station.sql
+\i $SQLPATH/07_packet_type.sql
+\i $SQLPATH/08_sender.sql
+\i $SQLPATH/09_source.sql
+\i $SQLPATH/10_station_type.sql
+\i $SQLPATH/11_station.sql
+\i $SQLPATH/12_station_telemetry_bits.sql
+\i $SQLPATH/13_station_telemetry_eqns.sql
+\i $SQLPATH/14_station_telemetry_param.sql
+\i $SQLPATH/15_station_telemetry_unit.sql
+\i $SQLPATH/16_packet.sql
+\i $SQLPATH/17_packet_weather.sql
+\i $SQLPATH/18_packet_telemetry.sql
+\i $SQLPATH/19_packet_path.sql
+\i $SQLPATH/20_packet_ogn.sql
commit;
diff --git a/trackdirect-apache.dockerfile b/trackdirect-apache.dockerfile
new file mode 100644
index 0000000..c8309c8
--- /dev/null
+++ b/trackdirect-apache.dockerfile
@@ -0,0 +1,24 @@
+FROM php:7.2-apache
+
+RUN apt-get update && apt-get install -y \
+ git \
+ libpq-dev \
+ postgresql-client-common \
+ postgresql-client \
+ libevent-dev \
+ libmagickwand-dev \
+ imagemagick \
+ inkscape \
+ && rm -rf /var/lib/apt/lists/*
+
+RUN pecl install imagick && docker-php-ext-enable imagick && docker-php-ext-install pdo pdo_pgsql
+
+COPY . /root/trackdirect
+COPY config/000-default.conf /etc/apache2/sites-enabled/
+
+RUN a2enmod rewrite
+RUN chmod a+rx / && chmod a+rx -R /root
+RUN chmod 777 /root/trackdirect/htdocs/public/symbols
+
+VOLUME /root/trackdirect/config/trackdirect.ini
+VOLUME /root/trackdirect/htdocs/public/heatmaps
diff --git a/trackdirect-python2.dockerfile b/trackdirect-python2.dockerfile
new file mode 100644
index 0000000..b3acf7c
--- /dev/null
+++ b/trackdirect-python2.dockerfile
@@ -0,0 +1,21 @@
+FROM ubuntu:20.04
+
+RUN apt-get update && apt-get install -y \
+ python2 \
+ python2-dev \
+ git \
+ curl \
+ wget \
+ gcc \
+ && rm -rf /var/lib/apt/lists/*
+
+RUN curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py && python2 get-pip.py
+RUN pip2 install psycopg2-binary autobahn[twisted] twisted pympler image_slicer jsmin psutil
+
+RUN git clone https://github.com/rossengeorgiev/aprs-python && cd aprs-python && pip2 install .
+RUN wget http://jjguy.com/heatmap/heatmap-2.2.1.tar.gz && tar xzf heatmap-2.2.1.tar.gz && cd heatmap-2.2.1 && python2 setup.py install
+
+COPY . /root/trackdirect
+
+VOLUME /root/trackdirect/config/trackdirect.ini
+VOLUME /root/trackdirect/htdocs/public/heatmaps