-
Notifications
You must be signed in to change notification settings - Fork 16
/
sample-docker-compose.yml
783 lines (745 loc) · 28.8 KB
/
sample-docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
######################################################################################################################################
# This sample docker-compose.yml file contains example service definitions for many of the SDR-Enthusiasts containers
# It works in combination with a ".env" file, which contains some of the variables referred to in this file.
# The general assumption is that both this "docker-compose.yml" file and the accompanying ".env" file will be
# stored in /opt/adsb. If you use a different directory, you may need to adjust some of the volume definitions.
#
# Copyright 2021-2023 Ramon F. Kolb (kx1t) - licensed under the terms and conditions
# of the MIT license. The terms and conditions of this license are included with the Github
# distribution of this package.
#
######################################################################################################################################
services:
######################################################################################################################################
# ADS-B/UAT Data Processing Services. These containers read data from dongles and/or other containers and decode or process this data.
# Containers include:
# ultrafeeder
# dump978
#
# In order to temporarily suspend a container and prevent it from starting, uncomment this from each container definition:
# # profiles:
# # - donotstart
ultrafeeder:
# ultrafeeder combines a number of functions:
# - it retrieves and decodes 1090MHz Mode A/C/S data from the SDR(s) using Wiedehopf's branch of readsb
# - it implements a `tar1090` based map on port 80 (mapped to port 8080 on the host)
# - it includes graph1090 (system statistics website) on http://xxxxx/graphs1090
# - it sends ADSB data directly (without the need of additional containers) to the
# "new" aggregators, and, if desired, also to AdsbExchange
# - it includes mlat-client to send MLAT data to these aggregators
# - it includes an MLAT Hub to consolidate MLAT results and make them available to the built-in map and other services
# Note - remove "adsb,dump978,37981,raw_in;" from the ULTRAFEEDER_CONFIG parameter if your station doesn't support UAT.
image: ghcr.io/sdr-enthusiasts/docker-adsb-ultrafeeder
tty: true
container_name: ultrafeeder
hostname: ultrafeeder
restart: unless-stopped
device_cgroup_rules:
- 'c 189:* rwm'
ports:
- 8080:80 # to expose the web interface
- 9273-9274:9273-9274 # to expose the statistics interface to Prometheus
environment:
# --------------------------------------------------
# general parameters:
- LOGLEVEL=error
- TZ=${FEEDER_TZ}
# --------------------------------------------------
# SDR related parameters:
- READSB_DEVICE_TYPE=rtlsdr
- READSB_RTLSDR_DEVICE=${ADSB_SDR_SERIAL}
- READSB_RTLSDR_PPM=${ADSB_SDR_PPM}
#
# --------------------------------------------------
# readsb/decoder parameters:
- READSB_LAT=${FEEDER_LAT}
- READSB_LON=${FEEDER_LONG}
- READSB_ALT=${FEEDER_ALT_M}m
- READSB_RX_LOCATION_ACCURACY=2
- READSB_STATS_RANGE=true
#
# --------------------------------------------------
# Sources and Aggregator connections:
# Notes - remove the entries you are not using / feeding
# - !!! make sure that each line ends with a semicolon ";" !!!
- ULTRAFEEDER_CONFIG=
adsb,dump978,30978,uat_in;
adsb,feed.adsb.fi,30004,beast_reduce_plus_out;
adsb,in.adsb.lol,30004,beast_reduce_plus_out;
adsb,feed.airplanes.live,30004,beast_reduce_plus_out;
adsb,feed.planespotters.net,30004,beast_reduce_plus_out;
adsb,feed.theairtraffic.com,30004,beast_reduce_plus_out;
adsb,data.avdelphi.com,24999,beast_reduce_plus_out;
adsb,skyfeed.hpradar.com,30004,beast_reduce_plus_out;
adsb,feed.radarplane.com,30001,beast_reduce_plus_out;
adsb,dati.flyitalyadsb.com,4905,beast_reduce_plus_out;
mlat,feed.adsb.fi,31090,39000;
mlat,in.adsb.lol,31090,39001;
mlat,feed.airplanes.live,31090,39002;
mlat,mlat.planespotters.net,31090,39003;
mlat,feed.theairtraffic.com,31090,39004;
mlat,skyfeed.hpradar.com,31090,39005;
mlat,feed.radarplane.com,31090,39006;
mlat,dati.flyitalyadsb.com,30100,39007;
mlathub,piaware,30104,beast_in;
mlathub,rbfeeder,30105,beast_in;
mlathub,radarvirtuel,30105,beast_in;
mlathub,planewatch,30105,beast_in;
# If you are in the Netherlands or close to its borders, please add the following aggregator:
# adsb,feed.hetluchtruim.nl,9000,beast_reduce_plus_out;
#
# If you really want to feed ADSBExchange, you can do so by adding this above:
# adsb,feed1.adsbexchange.com,30004,beast_reduce_plus_out,uuid=${ADSBX_UUID};
# mlat,feed.adsbexchange.com,31090,39005,uuid=${ADSBX_UUID};
# (the ",uuid=${ADSBX_UUID}" part is optional)
#
# --------------------------------------------------
- UUID=${ULTRAFEEDER_UUID}
- MLAT_USER=${FEEDER_NAME}
#
# --------------------------------------------------
# TAR1090 (Map Web Page) parameters:
- UPDATE_TAR1090=true
- TAR1090_DEFAULTCENTERLAT=${FEEDER_LAT}
- TAR1090_DEFAULTCENTERLON=${FEEDER_LONG}
- TAR1090_MESSAGERATEINTITLE=true
- TAR1090_PAGETITLE=${FEEDER_NAME}
- TAR1090_PLANECOUNTINTITLE=true
- TAR1090_ENABLE_AC_DB=true
- TAR1090_FLIGHTAWARELINKS=true
- HEYWHATSTHAT_PANORAMA_ID=${FEEDER_HEYWHATSTHAT_ID}
- HEYWHATSTHAT_ALTS=${FEEDER_HEYWHATSTHAT_ALTS}
- TAR1090_SITESHOW=true
- TAR1090_RANGE_OUTLINE_COLORED_BY_ALTITUDE=true
- TAR1090_RANGE_OUTLINE_WIDTH=2.0
- TAR1090_RANGERINGSDISTANCES=50,100,150,200
- TAR1090_RANGERINGSCOLORS='#1A237E','#0D47A1','#42A5F5','#64B5F6'
- TAR1090_USEROUTEAPI=true
#
# --------------------------------------------------
# GRAPHS1090 (Decoder and System Status Web Page) parameters:
# The two 978 related parameters should only be included if you are running dump978 for UAT reception (USA only)
- GRAPHS1090_DARKMODE=true
# - ENABLE_978=yes
# - URL_978=http://dump978/skyaware978
#
# --------------------------------------------------
# Prometheus and InfluxDB connection parameters:
- INFLUXDBV2_URL=${INFLUX_URL}
- INFLUXDBV2_TOKEN=${INFLUX_TOKEN}
- INFLUXDBV2_BUCKET=${INFLUX_BUCKET}
- PROMETHEUS_ENABLE=true
volumes:
- /opt/adsb/ultrafeeder/globe_history:/var/globe_history
- /opt/adsb/ultrafeeder/graphs1090:/var/lib/collectd
- /proc/diskstats:/proc/diskstats:ro
- /dev:/dev:ro
tmpfs:
- /run:exec,size=256M
- /tmp:size=128M
- /var/log:size=32M
dump978:
# dump978 gets UAT data from the SDR
image: ghcr.io/sdr-enthusiasts/docker-dump978
# profiles:
# - donotstart
tty: true
container_name: dump978
hostname: dump978
restart: always
labels:
- "autoheal=true"
device_cgroup_rules:
- 'c 189:* rwm'
environment:
- TZ=${FEEDER_TZ}
- DUMP978_RTLSDR_DEVICE=${UAT_SDR_SERIAL}
- DUMP978_SDR_GAIN=${UAT_SDR_GAIN}
- DUMP978_SDR_PPM=${UAT_SDR_PPM}
- LAT=${FEEDER_LAT}
- LON=${FEEDER_LONG}
- ENABLE_PROMETHEUS=true # set to true if you are configuring Prometheus/Grafana dashboards
ports:
- 30979:30979
- 30978:30978
- 30980:80
- 9275:9273
volumes:
- /opt/adsb/dump978/autogain:/run/autogain
- /dev:/dev:ro
tmpfs:
- /run/readsb
######################################################################################################################################
# ADS-B Feeder Services. These containers feed ADS-B/UAT data to aggregator services.
# Containers include:
# piaware (FlightAware)
# fr24 (FlightRadar24)
# pfclient (Planefinder)
# rbfeeder (RadarBox)
# radarvirtuel (RadarVirtuel)
# planewatch (Plane.Watch)
# ADSBHub (ADSB Hub)
piaware:
# piaware feeds ADS-B and UAT data (from ultrafeeder) to FlightAware. It also includes a GUI Radar website and a status website
# If you're not capturing UAT data with the dump978 container, remove or comment out the UAT_RECEIVER_TYPE and UAT_RECEIVER_HOST lines in the environment section below.
image: ghcr.io/sdr-enthusiasts/docker-piaware
# profiles:
# - donotstart
tty: true
container_name: piaware
hostname: piaware
restart: always
labels:
- "autoheal=true"
ports:
- 8081:8080
- 8088:80
environment:
- BEASTHOST=ultrafeeder
- LAT=${FEEDER_LAT}
- LONG=${FEEDER_LONG}
- TZ=${FEEDER_TZ}
- FEEDER_ID=${PIAWARE_FEEDER_ID}
- UAT_RECEIVER_TYPE=relay
- UAT_RECEIVER_HOST=dump978
tmpfs:
- /run:exec,size=64M
- /var/log
fr24:
# fr24 feeds ADS-B and UAT data (from ultrafeeder) to FlightRadar24. It also includes a status website. Please be careful
# not to expose the status website to the internet as users may be able to start/stop/change the service from there.
# Also note that FR24 has requested NOT to enable MLAT for those station that feed to multiple services; as such, it's commented out.
image: ghcr.io/sdr-enthusiasts/docker-flightradar24
# profiles:
# - donotstart
tty: true
container_name: fr24
hostname: fr24
restart: always
labels:
- "autoheal=true"
ports:
- 8754:8754
environment:
- BEASTHOST=ultrafeeder
- TZ=${FEEDER_TZ}
- FR24KEY=${FR24_SHARING_KEY}
# - MLAT=yes
tmpfs:
- /var/log
pfclient:
# pfclient feeds ADS-B and UAT data (from ultrafeeder) to Plane Finder. It also includes a GUI Radar website and a status website
image: ghcr.io/sdr-enthusiasts/docker-planefinder:latest
# profiles:
# - donotstart
tty: true
container_name: pfclient
restart: always
ports:
- 8084:30053
environment:
- BEASTHOST=ultrafeeder
- LAT=${FEEDER_LAT}
- LONG=${FEEDER_LONG}
- TZ=${FEEDER_TZ}
- SHARECODE=${PLANEFINDER_SHARECODE}
rbfeeder:
# rbfeeder feeds ADS-B and UAT data (from ultrafeeder) to RadarBox.
# If you're not capturing UAT data with the dump978 container, remove or comment out the UAT_RECEIVER_HOST line in the environment section below.
image: ghcr.io/sdr-enthusiasts/docker-radarbox
# profiles:
# - donotstart
tty: true
container_name: rbfeeder
hostname: rbfeeder
restart: always
labels:
- "autoheal=true"
environment:
- BEASTHOST=ultrafeeder
- UAT_RECEIVER_HOST=dump978
- LAT=${FEEDER_LAT}
- LONG=${FEEDER_LONG}
- ALT=${FEEDER_ALT_M}
- TZ=${FEEDER_TZ}
- SHARING_KEY=${RADARBOX_SHARING_KEY}
tmpfs:
- /run:exec,size=64M
- /var/log
radarvirtuel:
# radarvirtuel feeds ADS-B and UAT data (from ultrafeeder) to RadarVirtuel.
image: ghcr.io/sdr-enthusiasts/docker-radarvirtuel
# profiles:
# - donotstart
tty: true
container_name: radarvirtuel
hostname: radarvirtuel
restart: always
environment:
- FEEDER_KEY=${RV_KEY}
- SOURCE_HOST=ultrafeeder:30002
- RV_SERVER=mg22.adsbnetwork.com:50050
- LAT=${FEEDER_LAT}
- LON=${FEEDER_LONG}
- ALT=${FEEDER_ALT_M}m
- MLAT_SERVER=mlat.adsbnetwork.com:50000
- MLAT_HOST=ultrafeeder:30005
- MLAT_INPUT_TYPE=auto
- VERBOSE=ON
tmpfs:
- /tmp:rw,nosuid,nodev,noexec,relatime,size=128M
volumes:
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
planewatch:
# planewatch feeds ADS-B and UAT data (from ultrafeeder) to Plane.Watch.
image: ghcr.io/plane-watch/docker-plane-watch
# profiles:
# - donotstart
tty: true
container_name: planewatch
hostname: planewatch
restart: always
environment:
- BEASTHOST=ultrafeeder
- TZ=${FEEDER_TZ}
- API_KEY=${PLANEWATCH_KEY}
- ACARS_HOST=acars_router
- VDLM2_HOST=acars_router
- DEBUG_LOGGING=true
- LAT=${FEEDER_LAT}
- LONG=${FEEDER_LONG}
- ALT=${FEEDER_ALT_FT}ft
tmpfs:
- /run:exec,size=64M
- /var/log
adsbhub:
# adsbhub feeds ADS-B and UAT data (from ultrafeeder) to ADSB Hub.
image: ghcr.io/sdr-enthusiasts/docker-adsbhub
# profiles:
# - donotstart
tty: true
container_name: adsbhub
restart: always
environment:
- TZ=${FEEDER_TZ}
- SBSHOST=ultrafeeder
- CLIENTKEY=${ADSBHUB_STATION_KEY}
######################################################################################################################################
# ADS-B Visualization Services. These containers create pretty web pages from ADSB/UAT data that your station receives.
# Containers include:
# planefence (monitor planes nearby your station and planes from a "special" watchlist)
# screenshot (auxilary container used with planefence -- only runs well on Pi4)
# vrs: Virtual Radar Server
planefence:
# Note - after initial startup, please edit /opt/adsb/planefence/config/planefence.config. Then restart this container.
image: ghcr.io/sdr-enthusiasts/docker-planefence
# profiles:
# - donotstart
tty: true
container_name: planefence
hostname: planefence
restart: always
ports:
- 8083:80
environment:
- TZ=${FEEDER_TZ}
volumes:
- /opt/adsb/planefence/config:/usr/share/planefence/persist
- /opt/adsb/planefence/html:/usr/share/planefence/html
tmpfs:
- /run:rw,nosuid,nodev,exec,relatime,size=256M
- /tmp:rw,nosuid,nodev,noexec,relatime,size=128M
screenshot:
image: ghcr.io/kx1t/screenshot
# profiles:
# - donotstart
tty: true
container_name: screenshot
hostname: screenshot
restart: always
shm_size: 1gb
environment:
- MAP_ARGS=zoom=11.5&hideSidebar&hideButtons&mapDim=0.2&monochromeMarkers=ff0000&outlineColor=505050&iconScale=1.5&enableLabels&extendedLabels=2&trackLabels
- LOAD_SLEEP_TIME=25
- BASE_URL=http://tar1090
- DISABLE_SHM=true
- MAXTIME=60
vrs:
image: ghcr.io/sdr-enthusiasts/vrs:dev
# profiles:
# - do_not_start
tty: true
container_name: vrs
hostname: vrs
restart: always
ports:
- 8091:8080
- 49000-49099:49000-49099
environment:
- VRS_ADMIN_USERNAME=${VRS_ADMIN_USERNAME}
- VRS_ADMIN_PASSWORD=${VRS_ADMIN_PASSWORD}
- VRS_DB_UPDATE_POLICY_FULLAUTO=on
- VRS_CULTURE=en-US #see http://msdn.microsoft.com/en-us/goglobal/bb896001.aspx for a list of supported culture names. Not all translations may be available
- VRS_DB_UPDATE_POLICY_FULLAUTO=yes #default unset / no
- VRS_DB_UPDATE_WITH_VACUUM=yes #default unset / no
- VRS_DB_UPDATE_BACKUP_UNCOMPRESSED=yes #default unset / compressed
- VRS_ENHANCED_MARKERS=hfdl #default unset
- VRS_ENHANCED_LAYERS_COUNTRY=USA1 #Currently available: UK,DE,USA1,SE
tmpfs:
- /tmp:rw,nosuid,nodev,noexec,relatime,size=128M
volumes:
- /opt/adsb/vrs:/root/.local/share/VirtualRadar
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
######################################################################################################################################
# Additional aircraft related containers: airband
# This container allows listening to Airband radio and feeding this data to RadarBox. It also creates a local Icecast station you can
# listen to.
airband:
image: ghcr.io/sdr-enthusiasts/docker-rtlsdrairband:latest_nohealthcheck
# profiles:
# - donotstart
tty: true
container_name: airband
restart: always
device_cgroup_rules:
- 'c 189:* rwm'
ports:
- 8000:8000
environment:
- RTLSDRAIRBAND_CUSTOMCONFIG=true
# - ICECAST_CUSTOMCONFIG=true
volumes:
- /opt/adsb/rtlsdr-airband:/run/rtlsdr-airband
- /dev:/dev:ro
######################################################################################################################################
# Additional aircraft related containers: ACARS/VDLM
# With these containers, you can receive and look at ACARS and VDL-M2 messages and feed those to ariframes.io.
# Note that the plane.watch container is also set up to forward these messages.
# The set consists of the following containers:
# acarsdec: receives and decodes ACARS data from a dedicated RTL-SDR dongle
# dumpvdl2: receives and decodes VDL-M2 data from a dedicated RTL-SDR dongle
# acars_router: functions as an aggregator/distributor of the received ACARS and VDL-M2 data
# acarshub: visualization tool for ACARS and VDL-M2 data
acarsdec:
image: ghcr.io/sdr-enthusiasts/docker-acarsdec:latest
# profiles:
# - donotstart
tty: true
container_name: acarsdec
restart: always
device_cgroup_rules:
- 'c 189:* rwm'
environment:
- TZ=${FEEDER_TZ}
- SOAPYSDR=driver=rtlsdr,serial=${ACARS_SDR_SERIAL}
- FREQUENCIES=${ACARS_FREQUENCIES}
- GAIN=${ACARS_SDR_GAIN}
- OUTPUT_SERVER=acars_router
- OUTPUT_SERVER_PORT=5550
- FEED_ID=${ACARS_FEEDER_ID}
volumes:
- /dev:/dev:rw
tmpfs:
- /run:exec,size=64M
- /var/log
dumpvdl2:
image: ghcr.io/sdr-enthusiasts/docker-dumpvdl2:latest
# profiles:
# - donotstart
tty: true
container_name: dumpvdl2
restart: always
device_cgroup_rules:
- 'c 189:* rwm'
environment:
- TZ=${FEEDER_TZ}
- SOAPYSDR=driver=rtlsdr,serial=${VDLM_SDR_SERIAL}
- FREQUENCIES=${VDLM_FREQUENCIES}
- GAIN=${VDLM_SDR_GAIN}
- ZMQ_MODE=server
- ZMQ_ENDPOINT=tcp://0.0.0.0:45555
- FEED_ID=${VDLM_FEEDER_ID}
- VDLM_FILTER_ENABLE=
- QUIET_LOGS=FALSE
- SERVER=
volumes:
- /dev:/dev:ro
tmpfs:
- /run:exec,size=64M
- /var/log
acars_router:
image: ghcr.io/sdr-enthusiasts/acars_router:latest
# profiles:
# - donotstart
tty: true
container_name: acars_router
restart: always
environment:
- TZ=${FEEDER_TZ}
- AR_SEND_UDP_ACARS=acarshub:5550;feed.acars.io:5550
- AR_SEND_UDP_VDLM2=acarshub:5555
- AR_SEND_TCP_VDLM2=feed.acars.io:5553
- AR_RECV_ZMQ_VDLM2=dumpvdl2:45555
# - AR_VERBOSITY=1
ports:
- 15550:15550
- 15555:15555
tmpfs:
- /run:exec,size=64M
- /var/log
acarshub:
image: ghcr.io/sdr-enthusiasts/docker-acarshub:latest
# profiles:
# - donotstart
tty: true
container_name: acarshub
hostname: acarshub
restart: always
ports:
- 8091:80
environment:
- TZ=${FEEDER_TZ}
- ADSB_LAT=${FEEDER_LAT}
- ADSB_LON=${FEEDER_LONG}
- ENABLE_ADSB=true
- ADSB_URL=http://tar1090/data/aircraft.json
- ENABLE_ACARS=external
- ENABLE_VDLM=external
volumes:
- /opt/adsb/acars_data:/run/acars
tmpfs:
- /run:exec,size=64M
- /var/log
######################################################################################################################################
# WebProxy translates unfriendly URLs like http://x.x.x.x:8091 into friendly URLs like http://x.x.x.x/acarshub
# It also provides GeoIP filtering and Bot Filtering
# Although it's possible (and easy) to add SSL connectivity for websites that are exposed to the Internet,
# the setup below doesn't include this.
# Additionally, you can host your own web pages in this directory: /opt/adsb/webproxy/html
webproxy:
image: ghcr.io/sdr-enthusiasts/docker-reversewebproxy
# profiles:
# - donotstart
tty: true
container_name: webproxy
hostname: webproxy
restart: always
ports:
- 80:80
- 443:443
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
- AUTOGENERATE=ON
- VERBOSELOG=ON
- GEOIP_DEFAULT=ALLOW
- GEOIP_COUNTRIES=RU,CN,BY
- GEOIP_RESPONSECODE=418
- REVPROXY=
readsb|http://host.docker.internal:8080,
graphs|http://host.docker.internal:8080/graphs1090,
stats|http://host.docker.internal:8080/graphs1090,
radar|http://host.docker.internal:8080,
tar1090|http://host.docker.internal:8080,
map|http://host.docker.internal:8080,
ultrafeeder|http://host.docker.internal:8080,
piaware|http://host.docker.internal:8081,
piaware-stats|http://host.docker.internal:8088,
planefence|http://host.docker.internal:8083,
plane-alert|http://host.docker.internal:8083/plane-alert,
vnstat|http://host.docker.internal:8685,
planefinder|http://host.docker.internal:8084,ajax|http://host.docker.internal:8084/ajax,assets|http://host.docker.internal:8084/assets,
vrs|http://host.docker.internal/VirtualRadar,
fam|http://host.docker.internal:8090,
acarshub|http://host.docker.internal:8091
- REDIRECT=
/skyaware|/piaware,
/fr24|http://$$host:8754,
/planefinder/logs.html|http://$$host:8084/logs.html,
/airband|http://$$host:8000
- SSL=DISABLED
- BLOCKBOT=
bot,LieBaoFast,UCBrowser,MQQBrowser,Mb2345Browser,https://gdnplus.com,facebookexternalhit,http.rb,
google,bing,yandex,msnbot,wp-login.php,zgrab,zgrab2,aws/config.php,wp-includes,Guzzle,Friendica,
AltaVista,Googlebot,Slurp,BlackWidow,Bot,ChinaClaw,Custo,DISCo,Download,Demon,eCatch,EirGrabber,EmailSiphon,EmailWolf,SuperHTTP,Surfbot,WebWhacker,
Express,WebPictures,ExtractorPro,EyeNetIE,FlashGet,GetRight,GetWeb!,Go!Zilla,Go-Ahead-Got-It,GrabNet,Grafula,HMView,Go!Zilla,Go-Ahead-Got-It,
rafula,HMView,HTTrack,Stripper,Sucker,Indy,InterGET,Ninja,JetCar,Spider,larbin,LeechFTP,Downloader,tool,Navroad,NearSite,NetAnts,tAkeOut,WWWOFFLE,
GrabNet,NetSpider,Vampire,NetZIP,Octopus,Offline,PageGrabber,Foto,pavuk,pcBrowser,RealDownload,ReGet,SiteSnagger,SmartDownload,SuperBot,WebSpider,
Teleport,VoidEYE,Collector,WebAuto,WebCopier,WebFetch,WebGo,WebLeacher,WebReaper,WebSauger,eXtractor,Quester,WebStripper,WebZIP,Widow,Zeus,
Twengabot,htmlparser,libwww,Python,perl,urllib,scan,email,PycURL,Pyth,PyQ,WebCollector,WebCopy,webcraw,PetalBot,ubermetrics,Firefox/45,
Vert.x-WebClient,jsonlite,rv:45.0,Nexgate Ruby Client,scoop.it,NetSystemsResearch,Barkrowler,Python-Requests,Expanse,Go-http-client,scpitspi-rs,zgrab - BLOCKBOT_RESPONSECODE=402
tmpfs:
- /tmp:rw,nosuid,nodev,noexec,relatime,size=128M
volumes:
- /opt/adsb/webproxy:/run/nginx
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
######################################################################################################################################
# AIS (Ship and Vessel related reporting)
# shipfeeder : decode AIS signals at 162 MHz and send them to aggregators including
# ShipXplorer, airframes.io, HPRadar, VesselTracker, VesselFinder, MarineTraffic, aprs.fi, etc.
# VesselAlert: send Mastodon and Discord notification about ships heard
# screenshot-ais: add-on to VesselAlert to include screenshots in the notification
# ais2adsb: add-on to ShipXplorer and VirtualRadarServer to show ships on the VRS map.
shipfeeder:
image: ghcr.io/sdr-enthusiasts/docker-shipfeeder
container_name: shipfeeder
hostname: shipfeeder
restart: always
environment:
# general parameters:
- VERBOSE_LOGGING=
# ais-catcher general and website related parameters
- AISCATCHER_EXTRA_OPTIONS=${SX_EXTRA_OPTIONS}
- STATION_NAME=${STATION_NAME}
- STATION_HISTORY=3600
- BACKUP_INTERVAL=5
- FEEDER_LONG=${FEEDER_LONG}
- FEEDER_LAT=${FEEDER_LAT}
- SITESHOW=on
- PROMETHEUS_ENABLE=on
- REALTIME=on
# ais-catcher receiver related parameters
- RTLSDR_DEVICE_SERIAL=${RTLSDR_DEVICE_SERIAL}
- RTLSDR_DEVICE_GAIN=${RTLSDR_DEVICE_GAIN}
- RTLSDR_DEVICE_PPM=${RTLSDR_DEVICE_PPM}
- RTLSDR_DEVICE_BANDWIDTH=${RTLSDR_DEVICE_BANDWIDTH}
- AISCATCHER_DECODER_AFC_WIDE=${AISCATCHER_DECODER_AFC_WIDE}
# aggregrators related parameters
- AIRFRAMES_STATION_ID=${AIRFRAMES_STATION_ID}
- AISCATCHER_FEEDER_KEY=${AISCATCHER_FEEDER_KEY}
- AISHUB_UDP_PORT=${AISHUB_UDP_PORT}
- APRSFI_FEEDER_KEY=${APRSFI_FEEDER_KEY}
- BOATBEACON_SHAREDATA=${BOATBEACON_SHAREDATA}
- HPRADAR_UDP_PORT=${HPRADAR_UDP_PORT}
- MARINETRAFFIC_UDP_PORT=${MARINETRAFFIC_UDP_PORT}
- MYSHIPTRACKING_UDP_PORT=${MYSHIPTRACKING_UDP_PORT}
- RADARVIRTUEL_FEEDER_KEY=${RADARVIRTUEL_FEEDER_KEY}
- RADARVIRTUEL_STATION_ID=${RADARVIRTUEL_STATION_ID}
- SHIPFINDER_SHAREDATA=${SHIPFINDER_SHAREDATA}
- SHIPPINGEXPLORER_UDP_PORT=${SHIPPINGEXPLORER_UDP_PORT}
- SHIPXPLORER_SHARING_KEY=${SHIPXPLORER_SHARING_KEY}
- SHIPXPLORER_SERIAL_NUMBER=${SHIPXPLORER_SERIAL_NUMBER}
- VESSELFINDER_UDP_PORT=${VESSELFINDER_UDP_PORT}
- VESSELTRACKER_UDP_PORT=${VESSELTRACKER_UDP_PORT}
- UDP_FEEDS=${SX_UDP_FEEDS}
# incoming UDP data related parameters:
- AISCATCHER_UDP_INPUTS=${AISCATCHER_UDP_INPUTS}
ports:
- 90:80
- 9988:9988/udp
device_cgroup_rules:
- 'c 189:* rwm'
tmpfs:
- /tmp
volumes:
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
- "/opt/ais/shipxplorer/data:/data"
- /dev:/dev:rw
# - /opt/shipxplorer/cpuinfo/cpuinfo:/proc/cpuinfo # only for x86 systems - see README.md
vesselalert:
image: ghcr.io/sdr-enthusiasts/docker-vesselalert
container_name: vesselalert
hostname: vesselalert
restart: always
environment:
- AIS_URL=http://shipfeeder
- CHECK_INTERVAL=30
- MASTODON_SERVER=airwaves.social
- MASTODON_ACCESS_TOKEN=${VESSELALERT_MASTODON_TOKEN}
- MASTODON_SKIP_FILTER=^[9]{2}[0-9]{7}$|^[0-9]{7}$
- MASTODON_MIN_DIST=10
- NOTIFICATION_MIN_DIST=10
- MASTODON_CUSTOM_FIELD=${VESSELALERT_MASTODON_CUSTOM_FIELD}
- MASTODON_LINK_SHIPXPLORER=on
- MASTODON_LINK_MARINETRAFFIC=on
- MASTODON_LINK_VESSELFINDER=on
- MASTODON_ONLY_NEW_ON_STARTUP=on
- MASTODON_THROTTLE=on
- NOTIFICATION_MAPURL=on
- DISCORD_NAME=${VESSELALERT_DISCORD_NAME}
- DISCORD_AVATAR_URL=${VESSELALERT_AVATAR_URL}
- DISCORD_WEBHOOKS=${VESSELALERT_DISCORD_WEBHOOKS}
- SCREENSHOT_URL=http://ais-screenshot:5042
tmpfs:
- /tmp
volumes:
- /opt/ais/data:/data
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
ais-screenshot:
image: ghcr.io/sdr-enthusiasts/screenshot:aiscatcher
tty: true
container_name: ais-screenshot
hostname: ais-screenshot
restart: always
shm_size: 1gb
environment:
- LOAD_SLEEP_TIME=15
- BASE_URL=http://shipfeeder/?tab=map
- MAXTIME=60
- MAP_ARGS=map=OpenStreetMap
ports:
- 5043:5042
ais2adsb:
image: ghcr.io/jvde-github/ais2adsb:edge
# profiles:
# - donotstart
container_name: ais2adsb
hostname: ais2adsb
restart: unless-stopped
environment:
- SBS_TARGET_HOST=vrs
- SBS_TARGET_PORT=49001 # adapt this to the VRS port you set up
- INCLUDE_SHIPS=true # leave empty to forward only SAR aircraft
######################################################################################################################################
# Finally, a few "maintenance" containers that keep the rest of the stack healthy and up to date:
# vnstat: shows network usage on a per interface (global and per container) basis
# autoheal: restarts containers when they are deemed "unhealthy"
# watchtower: checks every 24 hours for new versions of the containers, and downloads/installs/starts them
vnstat:
image: vergoh/vnstat
container_name: vnstat
restart: unless-stopped
network_mode: "host"
ports:
- 8685:8685
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /opt/adsb/vnstat:/var/lib/vnstat
environment:
- HTTP_PORT=8685
- HTTP_BIND=*
- HTTP_LOG=/dev/stdout
- LARGE_FONTS=1
- CACHE_TIME=1
- RATE_UNIT=0
- PAGE_REFRESH=0
- SERVER_NAME="ADSB Station IO Stats"
autoheal:
image: willfarrell/autoheal
tty: true
container_name: autoheal
hostname: autoheal
restart: always
environment:
- AUTOHEAL_CONTAINER_LABEL=all
volumes:
- /var/run/docker.sock:/var/run/docker.sock
watchtower:
image: containrrr/watchtower
tty: true
container_name: watchtower
hostname: watchtower
restart: always
environment:
- TZ=${FEEDER_TZ}
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_POLL_INTERVAL=86400
- WATCHTOWER_ROLLING_RESTART=true
volumes:
- /var/run/docker.sock:/var/run/docker.sock