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