From 703ce11309a2aa3252ba7765c882eb1601c84e0c Mon Sep 17 00:00:00 2001 From: Alexandre Date: Wed, 12 Jan 2022 17:08:37 +0100 Subject: [PATCH] initial build --- tandoor_recipes/CHANGELOG.md | 1 + tandoor_recipes/Dockerfile | 76 ++++++++++++++++++ tandoor_recipes/README.md | 55 +++++++++++++ tandoor_recipes/build.json | 8 ++ tandoor_recipes/config.json | 35 ++++++++ tandoor_recipes/icon.png | Bin 0 -> 11441 bytes tandoor_recipes/logo.png | Bin 0 -> 11441 bytes tandoor_recipes/rootfs/entrypoint.sh | 15 ++++ .../scripts/00-aaa_dockerfile_backup.sh | 18 +++++ tandoor_recipes/rootfs/scripts/20-folders.sh | 6 ++ tandoor_recipes/rootfs/scripts/99-run.sh | 62 ++++++++++++++ 11 files changed, 276 insertions(+) create mode 100644 tandoor_recipes/CHANGELOG.md create mode 100644 tandoor_recipes/Dockerfile create mode 100644 tandoor_recipes/README.md create mode 100644 tandoor_recipes/build.json create mode 100644 tandoor_recipes/config.json create mode 100644 tandoor_recipes/icon.png create mode 100644 tandoor_recipes/logo.png create mode 100644 tandoor_recipes/rootfs/entrypoint.sh create mode 100644 tandoor_recipes/rootfs/scripts/00-aaa_dockerfile_backup.sh create mode 100644 tandoor_recipes/rootfs/scripts/20-folders.sh create mode 100644 tandoor_recipes/rootfs/scripts/99-run.sh diff --git a/tandoor_recipes/CHANGELOG.md b/tandoor_recipes/CHANGELOG.md new file mode 100644 index 000000000..68dde260e --- /dev/null +++ b/tandoor_recipes/CHANGELOG.md @@ -0,0 +1 @@ +- Initial build diff --git a/tandoor_recipes/Dockerfile b/tandoor_recipes/Dockerfile new file mode 100644 index 000000000..848b2b87a --- /dev/null +++ b/tandoor_recipes/Dockerfile @@ -0,0 +1,76 @@ +#==========================# +# ALEXBELGIUM'S DOCKERFILE # +#==========================# +#           _.------. +#       _.-`    ('>.-`"""-. +# '.--'`       _'`   _ .--.) +#    -'         '-.-';`   ` +#    ' -      _.'  ``'--.  +#        '---`    .-'""` +#               /` + +################# +# 1 Build Image # +################# + +ARG BUILD_VERSION +FROM ${BUILD_FROM} + +################## +# 2 Modify Image # +################## + + +################## +# 3 Install apps # +################## + +# Modules +ARG MODULES="00-banner.sh" + +# Automatic modules download +RUN mkdir -p /tmpscripts /etc/cont-init.d && \ + for scripts in $MODULES; do curl -L -f -s "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/zzz_templates/$scripts" -o /tmpscripts/"$scripts"; done && \ + if [ -d /etc/cont-init.d ]; then /bin/cp -rf /tmpscripts/* /etc/cont-init.d/ && chmod -R 755 /etc/cont-init.d; fi && \ + if [ -d /scripts ]; then /bin/cp -rf /tmpscripts/* /scripts/ && chmod -R 755 /scripts; fi && \ + rm -rf /tmpscripts || printf '%s\n' "${MODULES:-}" > /MODULESFILE + +################ +# 4 Entrypoint # +################ + +#WORKDIR / +RUN chmod 777 /entrypoint.sh +ENTRYPOINT [ "/usr/bin/env" ] +CMD [ "/entrypoint.sh" ] +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +############ +# 5 Labels # +############ + +ARG BUILD_ARCH +ARG BUILD_DATE +ARG BUILD_DESCRIPTION +ARG BUILD_NAME +ARG BUILD_REF +ARG BUILD_REPOSITORY +ARG BUILD_VERSION +LABEL \ + io.hass.name="${BUILD_NAME}" \ + io.hass.description="${BUILD_DESCRIPTION}" \ + io.hass.arch="${BUILD_ARCH}" \ + io.hass.type="addon" \ + io.hass.version=${BUILD_VERSION} \ + maintainer="alexbelgium (https://github.com/alexbelgium)" \ + org.opencontainers.image.title="${BUILD_NAME}" \ + org.opencontainers.image.description="${BUILD_DESCRIPTION}" \ + org.opencontainers.image.vendor="Home Assistant Add-ons" \ + org.opencontainers.image.authors="alexbelgium (https://github.com/alexbelgium)" \ + org.opencontainers.image.licenses="MIT" \ + org.opencontainers.image.url="https://github.com/alexbelgium" \ + org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \ + org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \ + org.opencontainers.image.created=${BUILD_DATE} \ + org.opencontainers.image.revision=${BUILD_REF} \ + org.opencontainers.image.version=${BUILD_VERSION} diff --git a/tandoor_recipes/README.md b/tandoor_recipes/README.md new file mode 100644 index 000000000..5b4093746 --- /dev/null +++ b/tandoor_recipes/README.md @@ -0,0 +1,55 @@ +# Hass.io Add-ons: Tandoor recipes + +[![Donate][donation-badge]](https://www.buymeacoffee.com/alexbelgium) + +[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=flat&logoColor=white + +![Supports + Architecture][aarch64-shield] ![Supports amd64 Architecture][amd64-shield] ![Supports armhf Architecture][armhf-shield] ![Supports armv7 Architecture][armv7-shield] +![Supports smb mounts][smb-shield] + +_Thanks to everyone having starred my repo! To star it click on the image below, then it will be on top right. Thanks!_ + +[![Stargazers repo roster for @alexbelgium/hassio-addons](https://reporoster.com/stars/alexbelgium/hassio-addons)](https://github.com/alexbelgium/hassio-addons/stargazers) + +## About + +[Tandoor recipes](https://github.com/TandoorRecipes/recipes) is meant for people with a collection of recipes they want to share with family and friends or simply store them in a nicely organized way. A basic permission system exists but this application is not meant to be run as a public page. + +## Installation + +The installation of this add-on is pretty straightforward and not different in +comparison to installing any other Hass.io add-on. + +1. [Add my Hass.io add-ons repository][repository] to your Hass.io instance. +1. Install this add-on. +1. Click the `Save` button to store your configuration. +1. Start the add-on. +1. Check the logs of the add-on to see if everything went well. +1. Carefully configure the add-on to your preferences, see the official documentation for for that. + +## Configuration + +- Start the addon. Wait a while and check the log for any errors. +- Open yourdomain.com:8000 (where ":8000" is the port configured in the addon). +- Default + - Username: `admin` + - Password: `adminadmin` + +```yaml + +``` + +## Support + +If you have in issue with your installation, please be sure to checkout github. + +[repository]: https://github.com/alexbelgium/hassio-addons +[smb-shield]: https://img.shields.io/badge/smb-yes-green.svg +[openvpn-shield]: https://img.shields.io/badge/openvpn-yes-green.svg +[ingress-shield]: https://img.shields.io/badge/ingress-yes-green.svg +[ssl-shield]: https://img.shields.io/badge/ssl-yes-green.svg +[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg +[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg +[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg +[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg diff --git a/tandoor_recipes/build.json b/tandoor_recipes/build.json new file mode 100644 index 000000000..de4c455fa --- /dev/null +++ b/tandoor_recipes/build.json @@ -0,0 +1,8 @@ +{ + "build_from": { + "armhf": "vabene1111/recipes:arm32v7-latest", + "armv7": "vabene1111/recipes:arm32v7-latest", + "aarch64": "vabene1111/recipes:arm64v8-latest", + "amd64": "vabene1111/recipes:amd64-latest" + } +} diff --git a/tandoor_recipes/config.json b/tandoor_recipes/config.json new file mode 100644 index 000000000..6419d72f8 --- /dev/null +++ b/tandoor_recipes/config.json @@ -0,0 +1,35 @@ +{ + "arch": ["aarch64", "amd64", "armv7", "armhf"], + "boot": "auto", + "description": "recipe manager", + "environment": {}, + "map": ["share:rw", "ssl:ro"], + "name": "Tandoor recipes", + "options": { + "SECRET_KEY": "YOUR_SECRET_KEY", + "DB_TYPE": "sqlite", + "ALLOWED_HOSTS": "" + }, + "ports": { + "8080/tcp": "9928" + }, + "ports_description": { + "8080/tcp": "Web interface" + }, + "services": ["mysql:want"], + "schema": { + "SECRET_KEY": "str", + "DB_TYPE": "list(sqlite|postgresql_external|mariadb_addon)", + "ALLOWED_HOSTS": "str?", + "POSTGRES_HOST": "str?", + "POSTGRES_PORT": "str?", + "POSTGRES_USER": "str?", + "POSTGRES_PASSWORD": "str?", + "POSTGRES_DB": "str?" + }, + "slug": "tandoor_recipes", + "upstream": "1.9", + "url": "https://github.com/alexbelgium/hassio-addons", + "version": "1.9", + "webui": "[PROTO:ssl]://[HOST]:[PORT:8080]" +} diff --git a/tandoor_recipes/icon.png b/tandoor_recipes/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..acdae38115488f397ddc874133609e6b82240489 GIT binary patch literal 11441 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/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends bash || apk add --no-cache bash); fi && + if ! command -v curl >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends curl || apk add --no-cache curl); fi && + curl -L -f -s "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/zzz_templates/automatic_packages.sh" --output /automatic_packages.sh && + chmod 777 /automatic_packages.sh && + eval /./automatic_packages.sh "$PACKAGES" && + rm /automatic_packages.sh + ) >/dev/null + +fi diff --git a/tandoor_recipes/rootfs/scripts/20-folders.sh b/tandoor_recipes/rootfs/scripts/20-folders.sh new file mode 100644 index 000000000..c485a253b --- /dev/null +++ b/tandoor_recipes/rootfs/scripts/20-folders.sh @@ -0,0 +1,6 @@ +#!/usr/bin/with-contenv bashio + +cp -r /opt/recipes /data/recipes +chmod -R 755 /data/recipes +mkdir -p /data/recipes/media +mkdir -p /data/recipes/static diff --git a/tandoor_recipes/rootfs/scripts/99-run.sh b/tandoor_recipes/rootfs/scripts/99-run.sh new file mode 100644 index 000000000..4deca1192 --- /dev/null +++ b/tandoor_recipes/rootfs/scripts/99-run.sh @@ -0,0 +1,62 @@ +#!/usr/bin/with-contenv bashio + +##################### +# Export env values # +##################### + +export ALLOWED_HOSTS=$(bashio::config 'ALLOWED_HOSTS') && bashio::log.blue "ALLOWED_HOSTS=$ALLOWED_HOSTS" + +################### +# Define database # +################### + +bashio::log.info "Defining database" +export DB_TYPE=$(bashio::config 'DB_TYPE') +case $(bashio::config 'DB_TYPE') in + +# Use sqlite +sqlite) + bashio::log.info "Using a local sqlite database" + export DB_ENGINE="django.db.backends.sqlite3" + export POSTGRES_DB="/data/recipes.db" + ;; + +mariadb_addon) + bashio::log.info "Using MariaDB addon. Requirements : running MariaDB addon. Discovering values..." + if ! bashio::services.available 'mysql'; then + bashio::log.fatal \ + "Local database access should be provided by the MariaDB addon" + bashio::exit.nok \ + "Please ensure it is installed and started" + fi + + # Use values + export DB_ENGINE=django.db.backends.postgresql + export POSTGRES_HOST=$(bashio::services "mysql" "host") && bashio::log.blue "POSTGRES_HOST=$POSTGRES_HOST" + export POSTGRES_PORT=$(bashio::services "mysql" "port") && bashio::log.blue "POSTGRES_PORT=$POSTGRES_PORT" + export POSTGRES_DB=/data/recipes.db && bashio::log.blue "POSTGRES_DB=$POSTGRES_DB" + export POSTGRES_USER=$(bashio::services "mysql" "username") && bashio::log.blue "POSTGRES_USER=$POSTGRES_USER" + export POSTGRES_PASSWORD=$(bashio::services "mysql" "password") && bashio::log.blue "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" + + bashio::log.warning "Webtrees is using the Maria DB addon" + bashio::log.warning "Please ensure this is included in your backups" + bashio::log.warning "Uninstalling the MariaDB addon will remove any data" + ;; + +postgresql_external) + bashio::log.info "Using an external database, please populate all required fields in the addons config" + export DB_ENGINE=django.db.backends.postgresql + export POSTGRES_HOST=$(bashio::config "POSTGRES_HOST") && bashio::log.blue "POSTGRES_HOST=$POSTGRES_HOST" + export POSTGRES_PORT=$(bashio::config "POSTGRES_PORT") && bashio::log.blue "POSTGRES_PORT=$POSTGRES_PORT" + export POSTGRES_DB=$(bashio::config "POSTGRES_DB") && bashio::log.blue "POSTGRES_DB=$POSTGRES_DB" + export POSTGRES_USER=$(bashio::config "POSTGRES_USER") && bashio::log.blue "POSTGRES_USER=$POSTGRES_USER" + export POSTGRES_PASSWORD=$(bashio::config "POSTGRES_PASSWORD") && bashio::log.blue "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" + ;; + +esac + +############## +# Launch app # +############## + +/./opt/recipes/boot.sh