From 7351a428bcd7909008b70a8b5da5bcab7e628b20 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Sat, 27 May 2023 20:03:00 +0200 Subject: [PATCH] First build --- postgres/CHANGELOG.md | 1 + postgres/Dockerfile | 114 +++ postgres/README.md | 56 ++ postgres/apparmor.txt | 70 ++ postgres/build.json | 10 + postgres/config.json | 39 ++ postgres/icon.png | Bin 0 -> 16938 bytes postgres/logo.png | Bin 0 -> 16938 bytes postgres/rootfs/entrypoint.sh | 16 + postgres/rootfs/etc/cont-init.d/20-folders.sh | 3 + postgres/rootfs/etc/cont-init.d/99-run.sh | 46 ++ postgres/stats.png | Bin 0 -> 1574 bytes postgres/translations/en.yaml | 662 ++++++++++++++++++ postgres/updater.json | 11 + 14 files changed, 1028 insertions(+) create mode 100644 postgres/CHANGELOG.md create mode 100644 postgres/Dockerfile create mode 100644 postgres/README.md create mode 100644 postgres/apparmor.txt create mode 100644 postgres/build.json create mode 100644 postgres/config.json create mode 100644 postgres/icon.png create mode 100644 postgres/logo.png create mode 100644 postgres/rootfs/entrypoint.sh create mode 100644 postgres/rootfs/etc/cont-init.d/20-folders.sh create mode 100644 postgres/rootfs/etc/cont-init.d/99-run.sh create mode 100644 postgres/stats.png create mode 100644 postgres/translations/en.yaml create mode 100644 postgres/updater.json diff --git a/postgres/CHANGELOG.md b/postgres/CHANGELOG.md new file mode 100644 index 000000000..66f7e8b76 --- /dev/null +++ b/postgres/CHANGELOG.md @@ -0,0 +1 @@ +- Initial release diff --git a/postgres/Dockerfile b/postgres/Dockerfile new file mode 100644 index 000000000..54569f5c6 --- /dev/null +++ b/postgres/Dockerfile @@ -0,0 +1,114 @@ +#============================# +# ALEXBELGIUM'S DOCKERFILE # +#============================# +# _.------. +# _.-` ('>.-`"""-. +# '.--'` _'` _ .--.) +# -' '-.-';` ` +# ' - _.' ``'--. +# '---` .-'""` +# /` +#=== Home Assistant Addon ===# + +################# +# 1 Build Image # +################# + +ARG BUILD_FROM +ARG BUILD_VERSION +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 + +RUN \ + # Correct for access + sed "s/.*listen_addresses(.*)/listen_addresses = '*'(1)/g" /usr/local/share/postgresql/postgresql.conf.sample && \ + sed "s/.*data_directory(.*)/data_directory = '/data'(1)/g" /usr/local/share/postgresql/postgresql.conf.sample + +################## +# 3 Install apps # +################## + +# Add rootfs +COPY rootfs/ / + +# Corrects permissions for s6 v3 +RUN if [ -d /etc/cont-init.d ]; then chmod -R 755 /etc/cont-init.d; fi && \ + if [ -d /etc/services.d ]; then chmod -R 755 /etc/services.d; fi && \ + if [ -f /entrypoint.sh ]; then chmod 755 /entrypoint.sh; fi + +# Modules +ARG MODULES="00-banner.sh 01-custom_script.sh 00-global_var.sh" + +# Automatic modules download +RUN if ! command -v bash >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends bash || apk add --no-cache bash) >/dev/null; 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) >/dev/null; fi \ + && apt-get update && apt-get install -yqq --no-install-recommends ca-certificates || apk add --no-cache ca-certificates >/dev/null || true \ + && mkdir -p /etc/cont-init.d \ + && for scripts in $MODULES; do echo "$scripts" && curl -f -L -s -S "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/$scripts" -o /etc/cont-init.d/"$scripts" && [ "$(sed -n '/\/bin/p;q' /etc/cont-init.d/"$scripts")" != "" ] || (echo "script failed to install $scripts" && exit 1); done \ + && chmod -R 755 /etc/cont-init.d + +# Manual apps +ENV PACKAGES="" + +# Automatic apps & bashio +# hadolint ignore=SC2015 +RUN if ! command -v bash >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends bash || apk add --no-cache bash) >/dev/null; 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) >/dev/null; fi \ + && curl -f -L -s -S "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/automatic_packages.sh" --output /automatic_packages.sh \ + && chmod 777 /automatic_packages.sh \ + && eval /./automatic_packages.sh "${PACKAGES:-}" \ + && rm /automatic_packages.sh + +################ +# 4 Entrypoint # +################ + +RUN chmod 777 /entrypoint.sh +WORKDIR /data +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} + +#################### +# 6 HealthcheckNOT # +#################### + +# Can't be implemented as container is optimized for memory usage, so the webserver and Node are spun down during idle diff --git a/postgres/README.md b/postgres/README.md new file mode 100644 index 000000000..07ca28b48 --- /dev/null +++ b/postgres/README.md @@ -0,0 +1,56 @@ +# Home assistant add-on: Postgres + +[![Donate][donation-badge]](https://www.buymeacoffee.com/alexbelgium) + +![Version](https://img.shields.io/badge/dynamic/json?label=Version&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Fpostgres%2Fconfig.json) +![Ingress](https://img.shields.io/badge/dynamic/json?label=Ingress&query=%24.ingress&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Fpostgres%2Fconfig.json) +![Arch](https://img.shields.io/badge/dynamic/json?color=success&label=Arch&query=%24.arch&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Fpostgres%2Fconfig.json) + +[![Codacy Badge](https://app.codacy.com/project/badge/Grade/9c6cf10bdbba45ecb202d7f579b5be0e)](https://www.codacy.com/gh/alexbelgium/hassio-addons/dashboard?utm_source=github.com&utm_medium=referral&utm_content=alexbelgium/hassio-addons&utm_campaign=Badge_Grade) +[![GitHub Super-Linter](https://github.com/alexbelgium/hassio-addons/workflows/Lint%20Code%20Base/badge.svg)](https://github.com/marketplace/actions/super-linter) +[![Builder](https://github.com/alexbelgium/hassio-addons/workflows/Builder/badge.svg)](https://github.com/alexbelgium/hassio-addons/actions/workflows/builder.yaml) + +[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=flat&logoColor=white + +_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://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.github/stars2.svg)](https://github.com/alexbelgium/hassio-addons/stargazers) + +![downloads evolution](https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/postgres/stats.png) + +## About + +PostgreSQL, often simply "Postgres", is an object-relational database management system (ORDBMS) with an emphasis on extensibility and standards-compliance. As a database server, its primary function is to store data, securely and supporting best practices, and retrieve it later, as requested by other software applications, be it those on the same computer or those running on another computer across a network (including the Internet). It can handle workloads ranging from small single-machine applications to large Internet-facing applications with many concurrent users. Recent versions also provide replication of the database itself for security and scalability. + +This addon is based on the official image : https://hub.docker.com/_/postgres + +## Configuration + +Webui can be found at . + +```yaml +POSTGRES_PASSWORD: +POSTGRES_USER: +POSTGRES_DB: +POSTGRES_INITDB_ARGS: +POSTGRES_HOST_AUTH_METHOD: +``` + +## Installation + +The installation of this add-on is pretty straightforward and not different in comparison to installing any other add-on. + +1. Add my add-ons repository to your home assistant instance (in supervisor addons store at top right, or click button below if you have configured my HA) + [![Open your Home Assistant instance and show the add add-on repository dialog with a specific repository URL pre-filled.](https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg)](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons) +1. Install this add-on. +1. Click the `Save` button to store your configuration. +1. Set the add-on options to your preferences +1. Start the add-on. +1. Check the logs of the add-on to see if everything went well. +1. Open the webUI and adapt the software options + +## Support + +Create an issue on github + +[repository]: https://github.com/alexbelgium/hassio-addons diff --git a/postgres/apparmor.txt b/postgres/apparmor.txt new file mode 100644 index 000000000..70262be68 --- /dev/null +++ b/postgres/apparmor.txt @@ -0,0 +1,70 @@ +#include + +profile postgres_addon flags=(attach_disconnected,mediate_deleted) { + #include + + capability, + file, + signal, + mount, + umount, + remount, + network udp, + network tcp, + network dgram, + network stream, + network inet, + network inet6, + network netlink raw, + network unix dgram, + + capability setgid, + capability setuid, + capability sys_admin, + capability dac_read_search, + capability dac_override, + # capability sys_rawio, + +# S6-Overlay + /init ix, + /run/{s6,s6-rc*,service}/** ix, + /package/** ix, + /command/** ix, + /run/{,**} rwk, + /dev/tty rw, + /bin/** ix, + /usr/bin/** ix, + /usr/lib/bashio/** ix, + /etc/s6/** rix, + /run/s6/** rix, + /etc/services.d/** rwix, + /etc/cont-init.d/** rwix, + /etc/cont-finish.d/** rwix, + /init rix, + /var/run/** mrwkl, + /var/run/ mrwkl, + /dev/i2c-1 mrwkl, + # Files required + /dev/fuse mrwkl, + /dev/sda1 mrwkl, + /dev/sdb1 mrwkl, + /dev/nvme0 mrwkl, + /dev/nvme1 mrwkl, + /dev/mmcblk0p1 mrwkl, + /dev/* mrwkl, + /udev/* mrwkl, + /tmp/** mrkwl, + /dev/fuse/** mrkwl, + /dev/** mrkwl, + /sys/firmware/** mrkwl, + + # Data access + /data/** rw, + + # suppress ptrace denials when using 'docker ps' or using 'ps' inside a container + ptrace (trace,read) peer=docker-default, + + # docker daemon confinement requires explict allow rule for signal + signal (receive) set=(kill,term) peer=/usr/bin/docker, + +} diff --git a/postgres/build.json b/postgres/build.json new file mode 100644 index 000000000..f6ce32060 --- /dev/null +++ b/postgres/build.json @@ -0,0 +1,10 @@ +{ + "build_from": { + "aarch64": "postgres:15-alpine", + "amd64": "postgres:15-alpine", + "armv7": "postgres:15-alpine" + }, + "codenotary": { + "signer": "alexandrep.github@gmail.com" + } +} \ No newline at end of file diff --git a/postgres/config.json b/postgres/config.json new file mode 100644 index 000000000..888af07f7 --- /dev/null +++ b/postgres/config.json @@ -0,0 +1,39 @@ +{ + "arch": [ + "aarch64", + "amd64", + "armv7" + ], + "codenotary": "alexandrep.github@gmail.com", + "description": "Postgres 15", + "environment": { + "PGDATA": "/data" + }, + "image": "ghcr.io/alexbelgium/postgres-{arch}", + "map": [ + "config:rw" + ], + "name": "Postgres", + "options": { + "CONFIG_LOCATION": "/config/addons_config/postgres/postgresql.conf", + "POSTGRES_PASSWORD": "homeassistant" + }, + "ports": { + "5432/tcp": 5432 + }, + "ports_description": { + "5900/tcp": "Postgres port" + }, + "schema": { + "CONFIG_LOCATION": "str", + "POSTGRES_PASSWORD": "str", + "POSTGRES_USER": "str?", + "POSTGRES_DB": "str?", + "POSTGRES_INITDB_ARGS": "str?", + "POSTGRES_HOST_AUTH_METHOD": "str?" + }, + "slug": "postgres", + "url": "https://github.com/alexbelgium/hassio-addons", + "version": "1.4", + "webui": "[PROTO:ssl]://[HOST]:[PORT:5432]" +} \ No newline at end of file diff --git a/postgres/icon.png b/postgres/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fac36197076cbcbc2fcd47c639ed27368391dbbc GIT binary patch literal 16938 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 literal 0 HcmV?d00001 diff --git a/postgres/logo.png b/postgres/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fac36197076cbcbc2fcd47c639ed27368391dbbc GIT binary patch literal 16938 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 literal 0 HcmV?d00001 diff --git a/postgres/rootfs/entrypoint.sh b/postgres/rootfs/entrypoint.sh new file mode 100644 index 000000000..68c3fec4d --- /dev/null +++ b/postgres/rootfs/entrypoint.sh @@ -0,0 +1,16 @@ +#!/bin/bash +echo "Starting..." + +#################### +# Starting scripts # +#################### + +for SCRIPTS in /etc/cont-init.d/*; do + [ -e "$SCRIPTS" ] || continue + echo "$SCRIPTS: executing" + chown "$(id -u)":"$(id -g)" "$SCRIPTS" + chmod a+x "$SCRIPTS" + # Change shebang if no s6 supervision + sed -i 's|/usr/bin/with-contenv bashio|/usr/bin/env bashio|g' "$SCRIPTS" + /."$SCRIPTS" || echo "$SCRIPTS: exiting $?" +done diff --git a/postgres/rootfs/etc/cont-init.d/20-folders.sh b/postgres/rootfs/etc/cont-init.d/20-folders.sh new file mode 100644 index 000000000..167d015ee --- /dev/null +++ b/postgres/rootfs/etc/cont-init.d/20-folders.sh @@ -0,0 +1,3 @@ +#!/usr/bin/with-contenv bashio +# shellcheck shell=bash + diff --git a/postgres/rootfs/etc/cont-init.d/99-run.sh b/postgres/rootfs/etc/cont-init.d/99-run.sh new file mode 100644 index 000000000..7624ac511 --- /dev/null +++ b/postgres/rootfs/etc/cont-init.d/99-run.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bashio +# shellcheck shell=bash + +# Use new config file +CONFIG_HOME="$(bashio::config "CONFIG_LOCATION")" +CONFIG_HOME="$(dirname "$CONFIG_HOME")" +if [ ! -f "$CONFIG_HOME"/postgresql.conf.sample ]; then + # Copy default config.env + if [ -f /usr/local/share/postgresql/postgresql.conf.sample ]; then + cp /usr/local/share/postgresql/postgresql.conf.sample "$CONFIG_HOME"/postgresql.conf + elif [ -f /usr/share/postgresql/postgresql.conf.sample ] + cp /usr/share/postgresql/postgresql.conf.sample "$CONFIG_HOME"/postgresql.conf + else + bashio::exit.nok "Config file not found, please ask maintainer" + fi + bashio::log.warning "A default config.env file was copied in $CONFIG_HOME. Please customize according to https://hub.docker.com/_/postgres and restart the add-on" +else + bashio::log.warning "The config.env file found in $CONFIG_HOME will be used. Please customize according to https://hub.docker.com/_/postgres and restart the add-on" +fi + +# Define home +# Creating config location +mkdir -p "$PGDATA" +chown -R postgres:postgres "$PGDATA" +chmod 1777 "$PGDATA" + +# Permissions +chmod -R 777 "$CONFIG_HOME" + +# Copy new file +cp "$CONFIG_HOME"/postgresql.conf /data/ + +############## +# Launch App # +############## + +# Go to folder +cd /data || true + +echo " " +bashio::log.info "Starting the app" +echo " " + +# Add docker-entrypoint command +# shellcheck disable=SC2086 +docker-entrypoint.sh postgres diff --git a/postgres/stats.png b/postgres/stats.png new file mode 100644 index 0000000000000000000000000000000000000000..879549fe07625a0908be3f06c99ee999b019483f GIT binary patch literal 1574 zcmXw33pkW%6#mN=*$hIV&9#`Nq)0Kvh+$~lDy)W{NzGKU?iwNfCYv#%j9dm`XGOL! zEZb;C^h;BdTcp@>uiUbY5mT);-~Q9ne$V;Nd%p8L=RNOtzUTQee7)V(RP|LM2vYMP zx*mj}6^m$`ucCx{Ll;&EnlSYx9VP$(&xLl1L!u)8ha!f?zxX z18WM*h9Eo)0T`r$XB8F}XeoZI2d&fB*SE2;@$&Mb(P*iusfC4w4Gj$lf^>FvPE1Uo zEo3`)a-^J^zb0k=vM~Up!wev3t(8i_0EBjfPM|*3gl%HQ4*Ys%>*+3g|+hzA>i3P{S3=0bhLykU+n-v7*Y zSQ~=1wP8GJFib&U3V;>*@qmXK1@NK(f&lbB0O@Khl>r$~(A5fByO6qMfad|DmX;Q% zG&UlbsTj_hC}L171YsU1_KG}9%ti?M?xu&U^WlWzcO~TfYNNFTY7BkZMO4*vUPjXM zV{@9F!t&HsyfkI5$?aH)QhZxH^SA;7!KMmiHqGk!+!^J&#GmZO+m`3KvIY5+>Az;R zH;uhR?q^44ypInd%Jv-Np7E#W#P>;ws`EOU)FZXmYz=Q^b@m@yxUxL(IBV8;>w(5}$AZ_z#2T)qn+E0A={)ojl1qk-U3b(x*Fe>wb z!5l|s97ZBd!yxx5*b_`A4(AryqWZa;T^$K*Y;psFIZfbMs@3QMdfLrETS)PI;M ztb586wN?*vE%1vTy||MmO&d#WWG10LkxfHarZQs*twg4l@RfRKu3B%6(P&@8>%Hyy zXX9NP8GDkpKbqUq9x&ABH@rH;&+Zcax>u@uW3 zw|G@}PIXL_QLGCj_T}d7ZipDGUr~=GJFYVl>9|(xPtmQfWk#&)+P9BgKc3X+ne^eP z_s9a4T$=gTj+17Q^Ax*rKCWskJC;e)6wAvf*f(7my3Q(>3+~;DCih*xf(h=V#(B@Q z1W~SN%9CMDx#(CSlN6Q*#wCiJm&{@w&#gzhp+N?q@v(#Vo&;4tUC+uGx;s`Jt%3^f zx#gl#+qjz) zyiK(wwpGRh9 z4wWtWF**pXzLJlNiqTOfGF{O5q=i&rH2a&m+oi_scFIKwiF#BVS$i$PJ@+zqK4{|A z@fXYQ=Vl451HSUOvhYJua%wW^&DOS9k&DK#F;mJB91K&_99CtxU%?JmtL!U5y@n56 zMaw?@)Q8F`KfB~Pw;5*rcy5W|f`?q?@%HEnDO{%3b<8#p}^`|=2;|aS} zv%)dXap^{1nLmwey3hAd@9FyrSo)nh?$4{=jDP7niZYsMrqk`)^U0H^>wRBJkkEE*lYdzTj3kaJ&|;1!AOK#q$d|#$e$MC ztddUDR+oz&-J!j-nrVnm_IEm!oYa(O-c&;VV{#k)5w%M-Z_7L*x`@1!Unn@>aB`@3 zx?$JoP=x$(#1vou*Ym=}6zx}SqG-#H%C9kftZ0>5ThS4DbWFVetj}5B+hpC^{;YWB z0d=R_rr|m_gimw_NF7&4b~=7B9H?#+-;$eu-u-&!>~8az8S#y~p9EpELc(j->8A3^ z%Q@X2g9K%Kwu0!1icVf!u*2Z|RZQOFW8yo-&x?0N6bL*MhY~#02kHH|s+OpFF3n%( zxWS8H#-xFBe5AEVsZ+g$&gBW6I75bO=lGx0InOjkc9q&rD}DeEg10MwKZWrhgy9Ud literal 0 HcmV?d00001 diff --git a/postgres/translations/en.yaml b/postgres/translations/en.yaml new file mode 100644 index 000000000..f5df557fd --- /dev/null +++ b/postgres/translations/en.yaml @@ -0,0 +1,662 @@ +--- +configuration: + additional_apps: + name: additional_apps + description: Additional apps to install at boot + allow_ipv6: + name: allow_ipv6 + description: Enables ipv6 in the addon + ALLOW_SIGNUP: + name: ALLOW_SIGNUP + description: See upstream app documentation + ALLOWED_HOSTS: + name: ALLOWED_HOSTS + description: See upstream app documentation + APP_BASE_URL: + name: APP_BASE_URL + description: See upstream app documentation + APP_KEY: + name: APP_KEY + description: See upstream app documentation + APP_NAME: + name: APP_NAME + description: See upstream app documentation + append_myip: + name: append_myip + description: See upstream app documentation + auto_restart: + name: auto_restart + description: See upstream app documentation + BACKUP_PATH: + name: BACKUP_PATH + description: See upstream app documentation + base_folder: + name: base_folder + description: See upstream app documentation + BASE_URL: + name: BASE_URL + description: See upstream app documentation + base_url_portless: + name: base_url_portless + description: See upstream app documentation + certfile: + name: certfile + description: "fullchain.pem #ssl certificate, must be located in /ssl" + checkip_command: + name: checkip_command + description: See upstream app documentation + checkip_path: + name: checkip_path + description: See upstream app documentation + checkip_server: + name: checkip_server + description: See upstream app documentation + checkip_ssl: + name: checkip_ssl + description: See upstream app documentation + cifsdomain: + name: cifsdomain + description: Allow setting the domain for the smb share + cifspassword: + name: cifspassword + description: Your password to access your SMB share, same for all smb shares + cifsusername: + name: cifsusername + description: Your username to access your SMB share, same for all smb shares + claim: + name: claim + description: See upstream app documentation + CLI_ARGS: + name: CLI_ARGS + description: See upstream app documentation + COLLECTOR_API_ENDPOINT: + name: COLLECTOR_API_ENDPOINT + description: See upstream app documentation + COLLECTOR_HOST_ID: + name: COLLECTOR_HOST_ID + description: See upstream app documentation + CONFIG_LOCATION: + name: CONFIG_LOCATION + description: See upstream app documentation + CUSTOM_OPTIONS: + name: CUSTOM_OPTIONS + description: See upstream app documentation + custom_provider: + name: custom_provider + description: See upstream app documentation + customUI: + name: customUI + description: selection from list # alternative webUI can be set here + data_directory: + name: data_directory + description: See upstream app documentation + data_location: + name: data_location + description: Where do you want your data stored + database: + name: database + description: Type of database to use + disable_updates: + name: disable_updates + description: App updates won't be done automatically but must be done with the webui + DB_CLIENT: + name: DB_CLIENT + description: See upstream app documentation + DB_CONNECTION: + name: DB_CONNECTION + description: See upstream app documentation + DB_DATABASE: + name: DB_DATABASE + description: See upstream app documentation + DB_DATABASE_NAME: + name: DB_DATABASE_NAME + description: If using external postgresql + DB_HOST: + name: DB_HOST + description: See upstream app documentation + DB_HOSTNAME: + name: DB_HOSTNAME + description: If using external database + DB_PASSWORD: + name: DB_PASSWORD + description: If using external database + DB_PORT: + name: DB_PORT + description: If using external database + DB_TYPE: + name: DB_TYPE + description: See upstream app documentation + DB_USERNAME: + name: DB_USERNAME + description: If using external database + ddns_path: + name: ddns_path + description: See upstream app documentation + ddns_server: + name: ddns_server + description: See upstream app documentation + DEBUG: + name: DEBUG + description: See upstream app documentation + DISABLE_MACHINE_LEARNING: + name: DISABLE_MACHINE_LEARNING + description: See upstream app documentation + DNS_server: + name: DNS_server + description: See upstream app documentation + DOCKER_MODS: + name: DOCKER_MODS + description: See upstream app documentation + DOMAIN: + name: DOMAIN + description: See upstream app documentation + download_dir: + name: download_dir + description: See upstream app documentation + downloads_location: + name: downloads_location + description: See upstream app documentation + DROPBOX_TOKEN: + name: DROPBOX_TOKEN + description: See upstream app documentation + edge_repositories: + name: edge_repositories + description: See upstream app documentation + elasticsearch_server: + name: elasticsearch_server + description: See upstream app documentation + expose_collector: + name: expose_collector + description: See upstream app documentation + EXTENSIONS: + name: EXTENSIONS + description: See upstream app documentation + extraction_path: + name: extraction_path + description: See upstream app documentation + fake_address: + name: fake_address + description: See upstream app documentation + FG_LOG_LEVEL: + name: FG_LOG_LEVEL + description: See upstream app documentation + FG_PLUGINS: + name: FG_PLUGINS + description: See upstream app documentation + FIREFLY_III_ACCESS_TOKEN: + name: FIREFLY_III_ACCESS_TOKEN + description: See upstream app documentation + FIREFLY_III_CLIENT_ID: + name: FIREFLY_III_CLIENT_ID + description: See upstream app documentation + FIREFLY_III_URL: + name: FIREFLY_III_URL + description: See upstream app documentation + forced_update: + name: forced_update + description: See upstream app documentation + Full_Text_Search: + name: Full_Text_Search + description: See upstream app documentation + gitapi: + name: gitapi + description: See upstream app documentation + gitmail: + name: gitmail + description: See upstream app documentation + gitpass: + name: gitpass + description: See upstream app documentation + gituser: + name: gituser + description: See upstream app documentation + graphic_drivers: + name: graphic_drivers + description: See upstream app documentation + hostname: + name: hostname + description: See upstream app documentation + HTTPS_ONLY: + name: HTTPS_ONLY + description: See upstream app documentation + iface: + name: iface + description: See upstream app documentation + Images_location: + name: Images_location + description: See upstream app documentation + imaphost: + name: imaphost + description: See upstream app documentation + imappassword: + name: imappassword + description: See upstream app documentation + imapusername: + name: imapusername + description: See upstream app documentation + import_dir: + name: import_dir + description: See upstream app documentation + IMPORT_PATH: + name: IMPORT_PATH + description: See upstream app documentation + incomplete_dir: + name: incomplete_dir + description: See upstream app documentation + ingress_disabled: + name: ingress_disabled + description: See upstream app documentation + ingress_user: + name: ingress_user + description: See upstream app documentation + INTERFACE_NAME: + name: INTERFACE_NAME + description: See upstream app documentation + iterations: + name: iterations + description: See upstream app documentation + JWT_SECRET: + name: JWT_SECRET + description: Used to sign the authentication keys for user login + KEYBOARD: + name: KEYBOARD + description: See upstream app documentation + keyfile: + name: keyfile + description: privkey.pem #sslkeyfile, must be located in /ssl + LOCAL_NETWORK: + name: LOCAL_NETWORK + description: See upstream app documentation + localdisks: + name: localdisks + description: Physical name of the partition (ex. sda1) or the share (ex. SharedFiles) to mount separated by commas (ex. sda1,sdb1,MYNAS) + log_level: + name: log_level + description: See upstream app documentation + MAILER_AUTH_PASSWORD: + name: MAILER_AUTH_PASSWORD + description: See upstream app documentation + MAILER_AUTH_USER: + name: MAILER_AUTH_USER + description: See upstream app documentation + MAILER_ENABLED: + name: MAILER_ENABLED + description: See upstream app documentation + OPENVPN_PROVIDER: + name: OPENVPN_PROVIDER + description: See upstream app documentation + OPENVPN_USERNAME: + name: OPENVPN_USERNAME + description: See upstream app documentation + ORIGINALS_PATH: + name: ORIGINALS_PATH + description: See upstream app documentation + PAPERLESS_OCR_MODE: + name: PAPERLESS_OCR_MODE + description: See upstream app documentation + PAPERLESS_URL: + name: PAPERLESS_URL + description: See upstream app documentation + pass: + name: pass + description: See upstream app documentation + password: + name: password + description: See upstream app documentation + period: + name: period + description: See upstream app documentation + PGID: + name: PGID + description: The user group ID, as described in https://docs.linuxserver.io/general/understanding-puid-and-pgid + PMM_CONFIG: + name: PMM_CONFIG + description: See upstream app documentation + PMM_NO_MISSING: + name: PMM_NO_MISSING + description: See upstream app documentation + PMM_RUN: + name: PMM_RUN + description: See upstream app documentation + PMM_TEST: + name: PMM_TEST + description: See upstream app documentation + PMM_TIME: + name: PMM_TIME + description: See upstream app documentation + POSTGRES_DATABASE: + name: POSTGRES_DATABASE + description: See upstream app documentation + POSTGRES_DB: + name: POSTGRES_DB + description: See upstream app documentation + POSTGRES_HOST: + name: POSTGRES_HOST + description: See upstream app documentation + POSTGRES_PASSWORD: + name: POSTGRES_PASSWORD + description: See upstream app documentation + POSTGRES_PORT: + name: POSTGRES_PORT + description: See upstream app documentation + POSTGRES_USER: + name: POSTGRES_USER + description: See upstream app documentation + provider: + name: provider + description: See upstream app documentation + providers: + name: providers + description: See upstream app documentation + proxied: + name: proxied + description: See upstream app documentation + PUID: + name: PUID + description: The user group ID, as described in https://docs.linuxserver.io/general/understanding-puid-and-pgid + remote_mysql_database: + name: remote_mysql_database + description: See upstream app documentation + remote_mysql_host: + name: remote_mysql_host + description: See upstream app documentation + remote_mysql_password: + name: remote_mysql_password + description: See upstream app documentation + remote_mysql_port: + name: remote_mysql_port + description: See upstream app documentation + remote_mysql_username: + name: remote_mysql_username + description: See upstream app documentation + repository: + name: repository + description: See upstream app documentation + request_size_limit: + name: request_size_limit + description: See upstream app documentation + ROOT_URL: + name: ROOT_URL + description: See upstream app documentation + ROUTER_IP: + name: ROUTER_IP + description: See upstream app documentation + rpi_video_drivers: + name: rpi_video_drivers + description: See upstream app documentation + run_duration: + name: run_duration + description: 12h #for how long should the addon run. Must be formatted as number + time unit (ex : 5s, or 2m, or 12h, or 5d...) + SavePath: + name: SavePath + description: See upstream app documentation + SEAFILE_ADMIN_EMAIL: + name: SEAFILE_ADMIN_EMAIL + description: See upstream app documentation + SEAFILE_ADMIN_PASSWORD: + name: SEAFILE_ADMIN_PASSWORD + description: See upstream app documentation + SECRET_KEY: + name: SECRET_KEY + description: See upstream app documentation + secret_token: + name: secret_token + description: See upstream app documentation + secure_ssl: + name: secure_ssl + description: See upstream app documentation + silent: + name: silent + description: "true #suppresses debug messages" + SMARTCTL_COMMAND_DEVICE_TYPE: + name: SMARTCTL_COMMAND_DEVICE_TYPE + description: See upstream app documentation + SMARTCTL_MEGARAID_DISK_NUM: + name: SMARTCTL_MEGARAID_DISK_NUM + description: See upstream app documentation + smbv1: + name: smbv1 + description: See upstream app documentation + SPECTRE_APP_ID: + name: SPECTRE_APP_ID + description: See upstream app documentation + SPECTRE_SECRET: + name: SPECTRE_SECRET + description: See upstream app documentation + ssl: + name: ssl + description: true/false. enables ssl. Need certfile and keyfile filled' + storage_dir: + name: storage_dir + description: See upstream app documentation + STORAGE_PATH: + name: STORAGE_PATH + description: See upstream app documentation + theme: + name: theme + description: See upstream app documentation + TRANSMISSION_DOWNLOAD_DIR: + name: TRANSMISSION_DOWNLOAD_DIR + description: See upstream app documentation + TRANSMISSION_HOME: + name: TRANSMISSION_HOME + description: See upstream app documentation + TRANSMISSION_INCOMPLETE_DIR: + name: TRANSMISSION_INCOMPLETE_DIR + description: See upstream app documentation + TRANSMISSION_V3_UPDATE: + name: TRANSMISSION_V3_UPDATE + description: See upstream app documentation + TRANSMISSION_WATCH_DIR: + name: TRANSMISSION_WATCH_DIR + description: See upstream app documentation + TRANSMISSION_WEB_UI: + name: TRANSMISSION_WEB_UI + description: See upstream app documentation + trusted_domains: + name: trusted_domains + description: See upstream app documentation + trusted_headers: + name: trusted_headers + description: See upstream app documentation + ttl: + name: ttl + description: See upstream app documentation + TZ: + name: TZ + description: The timezone, as described in https://en.wikipedia.org/wiki/List_of_tz_database_time_zones + ui_path: + name: ui_path + description: See upstream app documentation + Updates: + name: Updates + description: See upstream app documentation + UPLOAD_NSFW: + name: UPLOAD_NSFW + description: See upstream app documentation + URL: + name: URL + description: See upstream app documentation + use_own_certs: + name: use_own_certs + description: See upstream app documentation + user: + name: user + description: See upstream app documentation + user_agent: + name: user_agent + description: See upstream app documentation + username: + name: username + description: See upstream app documentation + verbose: + name: verbose + description: See upstream app documentation + verify_address: + name: verify_address + description: See upstream app documentation + watch_dir: + name: watch_dir + description: See upstream app documentation + watch_path: + name: watch_path + description: See upstream app documentation + WebuiPass: + name: WebuiPass + description: See upstream app documentation + whitelist: + name: whitelist + description: '"localhost,192.168.0.0/16" # list ip subnets that that can access the webui' + WHOOGLE_ALT_IG: + name: WHOOGLE_ALT_IG + description: See upstream app documentation + WHOOGLE_ALT_MD: + name: WHOOGLE_ALT_MD + description: See upstream app documentation + WHOOGLE_ALT_RD: + name: WHOOGLE_ALT_RD + description: See upstream app documentation + WHOOGLE_ALT_TL: + name: WHOOGLE_ALT_TL + description: See upstream app documentation + WHOOGLE_ALT_TW: + name: WHOOGLE_ALT_TW + description: See upstream app documentation + WHOOGLE_ALT_YT: + name: WHOOGLE_ALT_YT + description: See upstream app documentation + WHOOGLE_AUTOCOMPLETE: + name: WHOOGLE_AUTOCOMPLETE + description: See upstream app documentation + WHOOGLE_CONFIG_ALTS: + name: WHOOGLE_CONFIG_ALTS + description: See upstream app documentation + WHOOGLE_CONFIG_BLOCK: + name: WHOOGLE_CONFIG_BLOCK + description: See upstream app documentation + WHOOGLE_CONFIG_COUNTRY: + name: WHOOGLE_CONFIG_COUNTRY + description: See upstream app documentation + WHOOGLE_CONFIG_DISABLE: + name: WHOOGLE_CONFIG_DISABLE + description: See upstream app documentation + WHOOGLE_CONFIG_GET_ONLY: + name: WHOOGLE_CONFIG_GET_ONLY + description: See upstream app documentation + WHOOGLE_CONFIG_LANGUAGE: + name: WHOOGLE_CONFIG_LANGUAGE + description: See upstream app documentation + WHOOGLE_CONFIG_NEAR: + name: WHOOGLE_CONFIG_NEAR + description: See upstream app documentation + WHOOGLE_CONFIG_NEW_TAB: + name: WHOOGLE_CONFIG_NEW_TAB + description: See upstream app documentation + WHOOGLE_CONFIG_SAFE: + name: WHOOGLE_CONFIG_SAFE + description: See upstream app documentation + WHOOGLE_CONFIG_SEARCH_LANGUAGE: + name: WHOOGLE_CONFIG_SEARCH_LANGUAGE + description: See upstream app documentation + WHOOGLE_CONFIG_THEME: + name: WHOOGLE_CONFIG_THEME + description: See upstream app documentation + WHOOGLE_CONFIG_URL: + name: WHOOGLE_CONFIG_URL + description: See upstream app documentation + WHOOGLE_CONFIG_VIEW_IMAGE: + name: WHOOGLE_CONFIG_VIEW_IMAGE + description: See upstream app documentation + WHOOGLE_CSP: + name: WHOOGLE_CSP + description: See upstream app documentation + WHOOGLE_MINIMAL: + name: WHOOGLE_MINIMAL + description: See upstream app documentation + WHOOGLE_PASS: + name: WHOOGLE_PASS + description: See upstream app documentation + WHOOGLE_PROXY_LOC: + name: WHOOGLE_PROXY_LOC + description: See upstream app documentation + WHOOGLE_PROXY_PASS: + name: WHOOGLE_PROXY_PASS + description: See upstream app documentation + WHOOGLE_PROXY_TYPE: + name: WHOOGLE_PROXY_TYPE + description: See upstream app documentation + WHOOGLE_PROXY_USER: + name: WHOOGLE_PROXY_USER + description: See upstream app documentation + WHOOGLE_RESULTS_PER_PAGE: + name: WHOOGLE_RESULTS_PER_PAGE + description: See upstream app documentation + WHOOGLE_USER: + name: WHOOGLE_USER + description: See upstream app documentation + wildcard: + name: wildcard + description: See upstream app documentation" + MAILER_HOST: + name: MAILER_HOST + description: See upstream app documentation + MAILER_NOREPLY_EMAIL: + name: MAILER_NOREPLY_EMAIL + description: See upstream app documentation + MAILER_NOREPLY_NAME: + name: MAILER_NOREPLY_NAME + description: See upstream app documentation + MAILER_PORT: + name: MAILER_PORT + description: See upstream app documentation + MAILER_SECURITY: + name: MAILER_SECURITY + description: See upstream app documentation + maxmem: + name: maxmem + description: See upstream app documentation + Mode: + name: Mode + description: See upstream app documentation + mqtt_autodiscover: + name: mqtt_autodiscover + description: See upstream app documentation + networkdisks: + name: networkdisks + description: list of smb servers to mount, separated by commas (//xxx.xx.xx.xx/share) + NoAuth: + name: NoAuth + description: See upstream app documentation + NORDIGEN_ID: + name: NORDIGEN_ID + description: See upstream app documentation + NORDIGEN_KEY: + name: NORDIGEN_KEY + description: See upstream app documentation + OAUTHLIB_RELAX_TOKEN_SCOPE: + name: OAUTHLIB_RELAX_TOKEN_SCOPE + description: See upstream app documentation + OCR: + name: OCR + description: See upstream app documentation + ocrlang: + name: ocrlang + description: See upstream app documentation + openvpn_alt_mode: + name: openvpn_alt_mode + description: bind at container level and not app level + openvpn_config: + name: openvpn_config + description: for example ""config.ovpn"" # name of the file located in /config/openvpn + OPENVPN_CUSTOM_PROVIDER: + name: OPENVPN_CUSTOM_PROVIDER + description: See upstream app documentation + OPENVPN_CUSTOM_PROVIDER_OVPN_LOCATION: + name: OPENVPN_CUSTOM_PROVIDER_OVPN_LOCATION + description: See upstream app documentation + openvpn_enabled: + name: openvpn_enabled + description: See upstream app documentation + OPENVPN_PASSWORD: + name: OPENVPN_PASSWORD + description: See upstream app documentation diff --git a/postgres/updater.json b/postgres/updater.json new file mode 100644 index 000000000..90da9b0e3 --- /dev/null +++ b/postgres/updater.json @@ -0,0 +1,11 @@ +{ + "dockerhub_by_date": true, + "dockerhub_list_size": 2, + "last_update": "27-05-2023", + "paused": true, + "repository": "alexbelgium/hassio-addons", + "slug": "postgres", + "source": "github", + "upstream_repo": "postgres", + "upstream_version": "15.3" +} \ No newline at end of file