Initial import
This commit is contained in:
commit
ff2775fcb6
5 changed files with 199 additions and 0 deletions
41
.github/workflows/build-image.yml
vendored
Normal file
41
.github/workflows/build-image.yml
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
name: Build Image
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ['master']
|
||||
|
||||
env:
|
||||
REGISTRY: ghcr.io
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
|
||||
jobs:
|
||||
build-and-push-image:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Log in to the Container registry
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Extract metadata (tags, labels) for Docker
|
||||
id: meta
|
||||
uses: docker/metadata-action@v3
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
55
Dockerfile
Normal file
55
Dockerfile
Normal file
|
@ -0,0 +1,55 @@
|
|||
FROM python:3 as stage-1
|
||||
|
||||
ENV WEEWX_HOME="/home/weewx"
|
||||
ENV ARCHIVE="weewx-4.5.1.tar.gz"
|
||||
|
||||
RUN addgroup --system --gid 421 weewx &&\
|
||||
adduser --system --uid 421 --ingroup weewx weewx
|
||||
|
||||
WORKDIR /tmp
|
||||
COPY requirements.txt ./
|
||||
|
||||
# WeeWX setup
|
||||
RUN wget -O "${ARCHIVE}" "http://www.weewx.com/downloads/released_versions/${ARCHIVE}" &&\
|
||||
wget -O weewx-interceptor.zip https://github.com/matthewwall/weewx-interceptor/archive/master.zip &&\
|
||||
wget -O neowx-material-latest.zip https://neoground.com/projects/neowx-material/download/latest &&\
|
||||
tar --extract --gunzip --directory ${WEEWX_HOME} --strip-components=1 --file "${ARCHIVE}" &&\
|
||||
chown -R weewx:weewx ${WEEWX_HOME}
|
||||
|
||||
# Python setup
|
||||
RUN python -m venv /opt/venv
|
||||
ENV PATH="/opt/venv/bin:$PATH"
|
||||
RUN pip install --no-cache-dir --requirement requirements.txt
|
||||
|
||||
WORKDIR ${WEEWX_HOME}
|
||||
|
||||
RUN bin/wee_extension --install /tmp/weewx-interceptor.zip &&\
|
||||
bin/wee_extension --install /tmp/neowx-material-latest.zip &&\
|
||||
mkdir user
|
||||
COPY entrypoint.sh ./
|
||||
COPY user/ ./bin/user/
|
||||
|
||||
FROM python:3 as stage-2
|
||||
|
||||
ENV WEEWX_HOME="/home/weewx"
|
||||
|
||||
RUN addgroup --system --gid 421 weewx &&\
|
||||
adduser --system --uid 421 --ingroup weewx weewx
|
||||
|
||||
RUN apt-get update -qq -y &&\
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y libusb-1.0-0 gosu busybox-syslogd tzdata nginx-light -qq -y --no-install-recommends &&\
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
WORKDIR ${WEEWX_HOME}
|
||||
|
||||
COPY --from=stage-1 /opt/venv /opt/venv
|
||||
COPY --from=stage-1 ${WEEWX_HOME} ${WEEWX_HOME}
|
||||
|
||||
RUN mkdir /data && \
|
||||
cp weewx.conf /data
|
||||
|
||||
VOLUME ["/data"]
|
||||
|
||||
ENV PATH="/opt/venv/bin:$PATH"
|
||||
ENTRYPOINT ["./entrypoint.sh"]
|
||||
CMD ["/data/weewx.conf"]
|
73
entrypoint.sh
Executable file
73
entrypoint.sh
Executable file
|
@ -0,0 +1,73 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
|
||||
CONF_FILE="/data/weewx.conf"
|
||||
|
||||
# echo version before starting syslog so we don't confound our tests
|
||||
if [ "$1" = "--version" ]; then
|
||||
gosu weewx:weewx ./bin/weewxd --version
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$(id -u)" = 0 ]; then
|
||||
# set timezone using environment
|
||||
ln -snf /usr/share/zoneinfo/"${TIMEZONE:-UTC}" /etc/localtime
|
||||
|
||||
# start the syslog daemon as root
|
||||
/sbin/syslogd -n -S -O - &
|
||||
|
||||
# start nginx
|
||||
nginx -c /data/nginx.conf
|
||||
|
||||
# skin config
|
||||
if [ -e /data/neowx-material-skin.conf ]; then
|
||||
rm -f ./skins/neowx-material/skin.conf
|
||||
ln -s /data/neowx-material-skin.conf ./skins/neowx-material/skin.conf
|
||||
fi
|
||||
|
||||
if [ "${WEEWX_UID:-weewx}" != 0 ]; then
|
||||
# drop privileges and restart this script
|
||||
echo "Switching uid:gid to ${WEEWX_UID:-weewx}:${WEEWX_GID:-weewx}"
|
||||
gosu "${WEEWX_UID:-weewx}:${WEEWX_GID:-weewx}" "$(readlink -f "$0")" "$@"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
copy_default_config() {
|
||||
# create a default configuration on the data volume
|
||||
echo "Creating a configration file on the container data volume."
|
||||
cp weewx.conf "${CONF_FILE}"
|
||||
echo "The default configuration has been copied."
|
||||
# Change the default location of the SQLITE database to the volume
|
||||
echo "Setting SQLITE_ROOT to the container volume."
|
||||
sed -i "s/SQLITE_ROOT =.*/SQLITE_ROOT = \/data/g" "${CONF_FILE}"
|
||||
}
|
||||
|
||||
if [ "$1" = "--gen-test-config" ]; then
|
||||
copy_default_config
|
||||
echo "Generating a test configuration."
|
||||
./bin/wee_config --reconfigure --no-prompt "${CONF_FILE}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$1" = "--shell" ]; then
|
||||
/bin/sh
|
||||
exit $?
|
||||
fi
|
||||
|
||||
if [ "$1" = "--upgrade" ]; then
|
||||
./bin/wee_config --upgrade --no-prompt --dist-config weewx.conf "${CONF_FILE}"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
if [ ! -f "${CONF_FILE}" ]; then
|
||||
copy_default_config
|
||||
echo "Running configuration tool."
|
||||
./bin/wee_config --reconfigure "${CONF_FILE}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
./bin/weewxd "$@"
|
9
requirements.txt
Normal file
9
requirements.txt
Normal file
|
@ -0,0 +1,9 @@
|
|||
Cheetah3
|
||||
configobj
|
||||
paho-mqtt
|
||||
Pillow
|
||||
pyephem
|
||||
pyserial
|
||||
pyusb
|
||||
setuptools
|
||||
wheel
|
21
user/extensions.py
Normal file
21
user/extensions.py
Normal file
|
@ -0,0 +1,21 @@
|
|||
#
|
||||
# Copyright (c) 2009-2015 Tom Keffer <tkeffer@gmail.com>
|
||||
#
|
||||
# See the file LICENSE.txt for your full rights.
|
||||
#
|
||||
|
||||
"""User extensions module
|
||||
|
||||
This module is imported from the main executable, so anything put here will be
|
||||
executed before anything else happens. This makes it a good place to put user
|
||||
extensions.
|
||||
"""
|
||||
|
||||
import locale
|
||||
# This will use the locale specified by the environment variable 'LANG'
|
||||
# Other options are possible. See:
|
||||
# http://docs.python.org/2/library/locale.html#locale.setlocale
|
||||
locale.setlocale(locale.LC_ALL, '')
|
||||
|
||||
import weewx.units
|
||||
weewx.units.obs_group_dict['soilMoist1'] = 'group_percent'
|
Reference in a new issue