#============================# # ALEXBELGIUM'S DOCKERFILE # #============================# # _.------. # _.-` ('>.-`"""-. # '.--'` _'` _ .--.) # -' '-.-';` ` # ' - _.' ``'--. # '---` .-'""` # /` #=== Home Assistant Addon ===# ################# # 1 Build Image # ################# ARG BUILD_FROM ARG BUILD_VERSION ARG MEILI_VERSION="v1.13.3" FROM getmeili/meilisearch:${MEILI_VERSION} AS meilisearch FROM ${BUILD_FROM} ################## # 2 Modify Image # ################## # Set S6 wait time ENV S6_CMD_WAIT_FOR_SERVICES=1 \ S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 \ S6_SERVICES_GRACETIME=0 ENV \ DATA_DIR="/data" \ MEILI_DIR="/config/meili" \ DISABLE_NEW_RELEASE_CHECK=true \ BROWSER_WEB_URL="http://127.0.0.1:9222" \ MEILI_ADDR="http://127.0.0.1:7700" \ MEILI_MASTER_KEY="" \ MEILI_NO_ANALYTICS=true \ XDG_CACHE_HOME="/data/cache" ENV \ CHROME_BIN=/usr/bin/chromium-browser \ CHROME_PATH=/usr/lib/chromium/ \ CHROMIUM_FLAGS="--disable-software-rasterizer --disable-dev-shm-usage" \ MEILI_HTTP_ADDR=0.0.0.0:7700 \ MEILI_SERVER_PROVIDER=docker \ MEILI_ENV=production # Image specific modifications RUN \ apk upgrade --no-cache --available \ && apk add --no-cache \ chromium \ chromium-swiftshader \ ttf-freefont \ font-noto-emoji \ font-wqy-zenhei \ unzip \ && mkdir -p /usr/src/chrome \ && adduser -D chrome \ && chown -R chrome:chrome /usr/src/chrome COPY --from=meilisearch /bin/meilisearch /bin/meilitool /bin/ ################## # 3 Install apps # ################## # Add rootfs COPY rootfs/ / RUN chmod +x /etc/s6-overlay/s6-rc.d/*/run # Uses /bin for compatibility purposes # hadolint ignore=DL4005 RUN if [ ! -f /bin/sh ] && [ -f /usr/bin/sh ]; then ln -s /usr/bin/sh /bin/sh; fi && \ if [ ! -f /bin/bash ] && [ -f /usr/bin/bash ]; then ln -s /usr/bin/bash /bin/bash; fi # Modules ARG MODULES="00-banner.sh 01-custom_script.sh 00-global_var.sh" # Automatic modules download ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/ha_automodules.sh" "/ha_automodules.sh" RUN chmod 744 /ha_automodules.sh && /ha_automodules.sh "$MODULES" && rm /ha_automodules.sh # Manual apps ENV PACKAGES="" # Automatic apps & bashio ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/ha_autoapps.sh" "/ha_autoapps.sh" RUN chmod 744 /ha_autoapps.sh && /ha_autoapps.sh "$PACKAGES" && rm /ha_autoapps.sh ################ # 4 Entrypoint # ################ # Add entrypoint ENV S6_STAGE2_HOOK=/ha_entrypoint.sh ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/ha_entrypoint.sh" "/ha_entrypoint.sh" # Entrypoint modifications ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/ha_entrypoint_modif.sh" "/ha_entrypoint_modif.sh" RUN chmod 777 /ha_entrypoint.sh /ha_entrypoint_modif.sh && /ha_entrypoint_modif.sh && rm /ha_entrypoint_modif.sh # Standalone bashio command ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/bashio-standalone.sh" "/.bashio-standalone.sh" RUN chmod 777 /.bashio-standalone.sh RUN set -e; \ extensions_dir="/usr/src/chrome/extensions"; \ mkdir -p "${extensions_dir}"; \ for entry in \ "i-dont-care-about-cookies:fllaojicojecljbmefodhfapmkghcbnh" \ "ublock-origin:cjpalhdlnbpafiamejdnhcphjbkeiagm"; do \ name="${entry%%:*}"; \ ext_id="${entry##*:}"; \ curl -fsSL "https://clients2.google.com/service/update2/crx?response=redirect&prodversion=120.0&acceptformat=crx2,crx3&x=id%3D${ext_id}%26installsource%3Dondemand%26uc" \ -o "/tmp/${name}.crx"; \ rm -rf "${extensions_dir:?}/${name}"; \ mkdir -p "${extensions_dir}/${name}"; \ rc=0; \ unzip -q "/tmp/${name}.crx" -d "${extensions_dir}/${name}" || rc=$$?; \ if [ "$$rc" -ne 0 ] && [ "$$rc" -ne 1 ]; then \ echo "ERROR: unzip failed for ${name} (rc=$$rc)"; \ exit "$$rc"; \ fi; \ rm -f "/tmp/${name}.crx"; \ done; \ chown -R chrome:chrome "${extensions_dir}" ENTRYPOINT [ "/usr/bin/env" ] CMD [ "/ha_entrypoint.sh" ] ############ # 5 Labels # ############ ARG BUILD_ARCH ARG BUILD_DATE ARG BUILD_DESCRIPTION ARG BUILD_NAME ARG BUILD_REF ARG BUILD_REPOSITORY ARG BUILD_VERSION ENV BUILD_VERSION="${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} ################# # 6 Healthcheck # ################# # Avoid spamming logs # hadolint ignore=SC2016 RUN \ # Handle Apache configuration if [ -d /etc/apache2/sites-available ]; then \ for file in /etc/apache2/sites-*/*.conf; do \ sed -i '/ /etc/nginx/nginx.conf.new && \ mv /etc/nginx/nginx.conf.new /etc/nginx/nginx.conf; \ fi ENV HEALTH_PORT="3000" \ HEALTH_URL="/api/health" HEALTHCHECK \ --interval=5s \ --retries=5 \ --start-period=30s \ --timeout=25s \ CMD curl -A "HealthCheck: Docker/1.0" -s -f "http://127.0.0.1:${HEALTH_PORT}${HEALTH_URL}" &>/dev/null || exit 1