Looking for support, wanting to talk about new features, or just hang out? Come chat with us on Discord!
The group at jekhokie/raspberry-noaa-v2 implemented a fantastic NOAA and METEOR weather image capturing package. Unfortunately, it had a few issues that made it ever harder to deploy this in the modern world:
- The build was for
armhf
and (with some efforts)arm64
only - It was hard to install and configure, unless you'd put a full image on a further unused Raspberry Pi
- non-image installations would only work if used with username '
pi
' - It was limited to Raspberry Pi hardware
- The builds relied on ever older versions of the Raspberry Pi OS
To remedy this, I created a fork of the repository, and made it work as a Docker Container. Here are a few "features" and "to-dos" for this containerized version:
- All configuration is done using Docker Environment Variables that can be easily configured in a
docker-compose.yml
file - Runs in Docker with multi-architecture builds available for
armhf
(Raspberry OS - 32 bits),arm64
(Raspberry Pi OS - 64 bits and Ubuntu on Raspberry Pi), andamd64
(Linux PC) - Can easily coexist with other software packages on the same machine -- of course, it still needs its own dedicated SDR
- Can now fully work behind a Reverse Web Proxy -- check out this containerized (Docker) reverse proxy that you can easily configure
- Included a number of fixes
- Technically, moved much of the software installation from
ansible
to theDockerfile
so it is installed at build-time rather than at runtime
To-dos include:
- more extensive testing on armhf and arm64
- Some of the add-on features have not been tested at all, including
Discord(Discord tested & works 9/22/2022), Twitter and other notification - The package is LARGE -- about 600-700 MB total. This is mainly caused by large package installs like
ansible
. It will be hard to reduce download size, but we'll continue optimizing where we can.
The original documentation for Raspberry NOAA V2 is available here. All other available documentation can be found in this directory.
- Basic needs:
- a Raspberry Pi 3B+, Raspberry Pi 4, or a Linux PC (laptop) with Ubuntu installed. If you use a Raspberry Pi, you can use Raspberry Pi OS (32 or 64 bits version) or Ubuntu. Personally, I've found Raspberry Pi OS (Bullseye) or Ubuntu 22.04 LTS to be excellent choices, but other relatively new OS versions will work as well
- a SDR that can be dedicated to the project with a suitable antenna for weather satellite reception.
- you should know some basic Linux commands -- logging in via
ssh
, creating and entering directories, using thenano
editor, etc. It is beyond the scope of this README to teach you that.
- A prerequisite for running this package is to have
Docker
(including theDocker Compose
plugin) installed. If you haven't done this, feel free to use the handy install script from this repository.
- Create a directory to use as your base and go to this directory. It doesn't really matter what you name it or where you put it. We'll use
~/noaa
as an example. NOTE -- If you have otherdocker-compose
stacks running on the same system, I recommend to use a separate directory anddocker-compose.yml
file and not adding RN2 to the existing stack. The Raspberry NOAA 2 container is independent of all other packages, and we want to avoid including it in yourwatchtower
auto-update routines.
mkdir -p ~/noaa
cd ~/noaa
- Download the example
docker-compose.yml
file to this directory:
curl https://raw.githubusercontent.com/kx1t/docker-raspberry-noaa-v2/main/docker-compose.yml -o docker-compose.yml
- Edit this file. The easiest way is to use
nano
for this:
nano docker-compose.yml
Update the parameters the same way as you would edit the settings.yml
file in the original project. Here are some of the parameters and their explanation -- note, when using Docker you ONLY need to update docker-compose.yml
-- the program will take care of the rest for you.
BE CAREFUL -- using the correct indentation is VERY IMPORTANT. Don't replace spaces with (less/more) spaces or tabs, etc. You will break things.
Also -- the format of the data in docker-compose.yml
is - parameter=value
.
A few new parameters that are specific to this Docker implementation:
Parameter | Default | Description |
---|---|---|
VERBOSELOGS |
(not present) | If this parameter has any value, the Docker Logs will contain verbose information about the execution of the container. This is great for debugging! |
web_baseurl |
(not present) | If you use a reverse web proxy, please set this to the base URL where your website can be reached. For example: web_baseurl=http:https://kx1t.com/noaa . If you don't use a reverse web proxy, then you can leave this empty. |
Other parameters in docker-compose.yml
include:
- setting your web port. The default is
89
. You can change this in theports:
section by changing89:80
intoxxx:80
wherexxx
is your desired HTTP port - take note of the
volumes:
section.- In the first 2 lines, we pass the time and timezone of the host machine to the Docker Container. Whatever you set your timezone to on the machine, that will also be used by Docker.
- The next 2 lines "mount" volumes that contain you images/audio/videos and your database. Mounting these will ensure that the data will be retained between restarts of the container
- take note of the
devices:
section. This is needed to expose access to the USB ports from the container. container_name
contains the name you give to the container. Name it whatever you want; I'd advise to keep thehostname
parameter set to the same value for consistency
You can optionally customize the annotations. In the containerized version, we mapped the annotation
directory in docker-compose.yml
to /opt/noaa/annotation
. Follow this sequence:
- start your container (see below in "Running the program") and wait until you can reach the website
- do this once (only needed the first time):
sudo chmod -R a+w /opt/noaa/annotation
- Now, you can edit the annotation file as per the original description:
nano /opt/noaa/annotation/annotation.html.j2
- If you have any image files you want to add, you can copy them to the
/opt/noaa/annotation
directory - Once done, simply restart the container with this command and the new annotations should be applied:
docker restart noaa
Most people wouldn't want to change a working RaspiNOAA V2 setup to use Docker Containers: if you are dedicating an entire machine to this, there is not real advantage. However, for those that would want to do this, I've written a small script. The script assumes that you already have Docker and Docker Compose installed. If you haven't done so, I'd strongly recommend taking a look at the install script at this repository. It will take care for you of everything you need to install and set up to get Docker running.
Once you have Docker installed, log in to your machine and type (or copy/paste) the following to run the conversion script:
wget -q https://raw.githubusercontent.com/kx1t/docker-raspberry-noaa-v2/main/convert_to_docker.sh && bash convert_to_docker.sh -c
Once the script has run its course, you can run the program.
The location of your docker-compose.yml
file will be /opt/raspinoaa2
If you want to convert your existing, non-containerized setup to a Docker-based setup on a different machine, we have a script that allows you to generate a docker-compose,.yml
file from your existing setup. You can then copy this file to your Docker host machine and use it there.
wget -q https://raw.githubusercontent.com/kx1t/docker-raspberry-noaa-v2/main/convert_to_docker.sh && bash convert_to_docker.sh -d
After running this script, you should see a docker-compose.yml
file in the directory from where you issued the command.
From the directory where your docker-compose.yml
is located, give this command:
docker compose up -d
RaspiNOAA2 will be downloaded (this may take a while -- about 700 MB!) and will start.
You can reach the web page about 30 seconds after you docker compose up -d
is done.
The container logs will show a message like php-fpm7.4 is ready
once everything is up and running.
- You can see the Container Logs with this command. Note - if you have set
VERBOSELOGS=true
, these logs can be very verbose! If you include the-f
flag, it will continuously show more logs as they are generated until you press CTRL-c. If you changed your container name, replacenoaa
accordingly:
docker logs -f noaa
- Downloading and starting a new version of the container
cd ~/noaa
docker-compose pull
docker-compose up -d
- Stopping (and optionally removing) the container. Note - if you remove the container, it will need to be downloaded again next time you try to run it. Your database and audio/image/video files will stay intact.
docker stop noaa
docker rm noaa
- Making configuration changes after startup
cd ~/noaa
nano docker-compose.yml # make your changes and save the file
docker-compose up -d # restart the RN2 container with the new parameters
If you run into trouble, please join us at the Discord server (link at the top). It would be very useful if you had some logs -- for example do this:
docker restart noaa && sleep 30 && docker logs -n 500 noaa | nc termbin.com 9999
Then send us the link that is returns after about 30 seconds. If it complaints that it cannot find nc
, then do sudo apt update && sudo apt install -y netcat
and try that line again.
As written above, the container is LARGE. Here are some timing measurements for a system to become available. In this case, we started FROM SCRATCH. This means, that all layers needed to be downloaded. Normally, when you do a "quick update", no (or minimal) downloads need to happen. The measurements were taken on 22 September 2022, using a wired 100 Mbps connection to a 1 GB fiber internet connection. The measurements were conducted in series to avoid filling up the network bandwidth.
Device/Architecture | Time to download and expand | Time to create and start container | Time for container to be fully up and running | TOTAL TIME | Time to process a NOAA image1 |
---|---|---|---|---|---|
RPi 3B+ / armhf | 1238 secs | 9.6 secs | 145 secs | 1392.6 secs (23m12.6s) | 692 secs |
RPi 4B (4Gb) / arm64 | 627 secs | 16 secs | 90 secs | 733 secs (12m13s) | 386 secs |
Dell XPS 132 / amd64 (x86) | 129 secs | 2.5 secs | 40 secs | 171.5 secs (2m51.5s) | 125 secs |
Any subsequent restarts should not cause any "download and expand" time, unless you specifically request the container to be pulled.
The software packages and OS layers included in this project are used with permission under license terms that are distributed with these packages. Specifically, the GPL 3.0 license terms for the original, non-containerized version of "Raspberry NOAA 2" can be found here.
The combination of these packages and any additional software written to containerize, expand, and configure "Raspberry NOAA 2" are Copyright (C) 2022 by kx1t, and licensed under the GNU General Public License, version 3 or later.
Summary of License Terms This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.