๐ AlarmDecoder Dockerization Guide (Raspberry Pi)
๐ Overview
This guide documents the process of Dockerizing the AlarmDecoder WebApp on a Raspberry Pi. It includes installation, environment setup, persistent database configuration, and troubleshooting steps based on real-world deployment.
๐ Prerequisites
Ensure the following before starting:
โ Raspberry Pi OS (64-bit recommended)
โ Docker installed on your Raspberry Pi
โ AlarmDecoder hardware connected (e.g. AD2Pi "hat")
โ Stable internet connection for package installation
๐งฐ Install Dependencies
sudo apt update && sudo apt install -y
apt-transport-https
ca-certificates
curl
software-properties-common
git
sudo
curl -fsSL https://get.docker.comโ | sh sudo usermod -aG docker $USER newgrp docker
๐ Clone Required Repositories
git clone https://github.com/nutechsoftware/alarmdecoder.gitโ ~/alarmdecoder git clone https://github.com/nutechsoftware/alarmdecoder-webapp.gitโ ~/alarmdecoder-webapp
๐ณ Build Docker Image for alarmdecoder
cd ~/alarmdecoder docker build -t alarmdecoder-python2 .
๐ณ Build Docker Image for alarmdecoder-webapp
cd ~/alarmdecoder-webapp docker build -t alarmdecoder-webapp .
๐งช Run the WebApp (First-Time Manual Test)
docker run --rm -it
-v ~/alarmdecoder-webapp-instance:/opt/alarmdecoder-webapp/instance
-p 5000:5000
--device=/dev/ttyAMA0
alarmdecoder-webapp
Then open in your browser:
http://<raspberry_pi_ip>:5000/
๐ Run with Docker Compose docker-compose.yml (place in ~/)
version: '3.8'
services: alarmdecoder-webapp:
container_name: alarmdecoder-webapp
image: kars85/alarmdecoder-webapp
restart: unless-stopped
ports: - "5000:5000"
devices: - "/dev/ttyAMA0:/dev/ttyAMA0"
environment:
PUID: ${PUID}
PGID: ${PGID}
TZ: ${TZ}
volumes: โ {HOME}/alarmdecoder-webapp-instance:/opt/alarmdecoder-webapp/instance
.env file (also in ~/) PUID=1000 PGID=1000 TZ=America/New_York HOME=/home/pi
๐ Launch the app
docker compose up -d
๐(Optional) Use a Systemd Service to Start Docker Compose
If the above does not work reliably, create a systemd service for docker-compose:
โข sudo nano /etc/systemd/system/alarmdecoder.service
Paste this inside:
[Unit] Description=AlarmDecoder WebApp Container
Requires=docker.service After=docker.service
[Service] WorkingDirectory=/home/YOURUSERNAME
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
Restart=always
User=USERNAME
[Install]
WantedBy=multi-user.target
๐ (Replace /home/USERNAME with your actual home directory path and User= with your pi's username.)
Then enable the service:
sudo systemctl daemon-reload
sudo systemctl enable alarmdecoder
sudo systemctl start alarmdecoder
This ensures docker-compose up -d runs automatically on boot.
๐ ๏ธ Known Issues Solved
Issue Resolution
db.sqlite not created Added ensure_database() and ENV SQLALCHEMY_DATABASE_URI
Flask context errors Wrapped db actions with app.app_context()
sqlite3 not installed Installed in Dockerfile
File permission issues Used chmod -R 777 on /instance
BroadcastMixin errors
Removed outdated socketio dependencies
โ Final Outcome
WebApp successfully Dockerized
Database created and persisted
Runs via Docker Compose on startup
Accessible via http://<raspberry_pi_ip>:5000/
๐ Next Recommendations
Upgrade codebase to Python 3 (Python 2 is EOL)
Replace Flask dev server with Gunicorn or uWSGI
Containerize alarmdecoder separately with Docker Compose for cleaner architecture
Publish to Docker Hub and GitHub for wider reuse
Content type
Image
Digest
sha256:d756ca2ecโฆ
Size
224.3 MB
Last updated
over 1 year ago
docker pull kars85/alarmdecoder-webapp