diff --git a/README.md b/README.md index ee1b9dd..60e30a6 100644 --- a/README.md +++ b/README.md @@ -10,10 +10,13 @@ Vous trouverez dans ce dépôt l'ensemble des services Open Source que RésiLien - [HedgeDoc](./hedgedoc) : Prise de note en Markdown collaborative en temps réel - [Mobilizon](./mobilizon): Permet l'organisation d'évènements et de gestion de groupes - [Nextcloud](./nextcloud) : Site d'hébergement de fichiers et une plateforme de collaboration +- [Plausible](./plausible) : Plausible est une plateforme d'analyse Web légère et open source. ### Pour les devs / ops +- [ClickHouse](./clickhouse) : Un logiciel libre de base de données orientée colonnes pour le traitement analytique en ligne - [Drone](./drone) : Un service d'intégration continue +- [GeoIP Update](./geoipupdate) : Permet de télécharger la base de données GeoIP2 permettant de localiser les IPs - [Gitea](./gitea) : Un service Git auto-hébergé très simple à installer et à utiliser. Il est similaire à GitHub, Bitbucket ou Gitlab. - [Grafana](./grafana) : Un outil de supervision simple et élégant - [PostgreSQL](./postgres) : PostgreSQL est un système de gestion de base de données relationnelle et objet. diff --git a/clickhouse/.env b/clickhouse/.env new file mode 100644 index 0000000..f3216ca --- /dev/null +++ b/clickhouse/.env @@ -0,0 +1,3 @@ +#CLICKHOUSE_VOLUME_NAME= +#CLICKHOUSE_CONTAINER_NAME= +#CLICKHOUSE_IMAGE= diff --git a/clickhouse/README.md b/clickhouse/README.md new file mode 100644 index 0000000..54182f5 --- /dev/null +++ b/clickhouse/README.md @@ -0,0 +1,16 @@ +# ClickHouse + +> ClickHouse est un logiciel libre de base de données orientée colonnes (DBMS) pour le traitement analytique en ligne (OLAP). +> +> [Wikipédia][wikipedia] + +## Liens + +- [Site Officiel][site] +- [Code source][source] +- [Docker Hub][dockerhub] + +[wikipedia]: https://fr.wikipedia.org/wiki/ClickHouse +[site]: https://clickhouse.com/ +[source]: https://github.com/ClickHouse/ClickHouse +[dockerhub]: https://hub.docker.com/r/clickhouse/clickhouse-server diff --git a/clickhouse/docker-compose.yml b/clickhouse/docker-compose.yml new file mode 100644 index 0000000..f22b192 --- /dev/null +++ b/clickhouse/docker-compose.yml @@ -0,0 +1,19 @@ +version: "3.8" + +volumes: + clickhouse: + name: ${CLICKHOUSE_VOLUME_NAME:-clickhouse} + +services: + clickhouse: + container_name: ${CLICKHOUSE_CONTAINER_NAME:-clickhouse} + image: ${CLICKHOUSE_IMAGE:-clickhouse/clickhouse-server:22.2.2.1-alpine} + restart: always + volumes: + - clickhouse:/var/lib/clickhouse + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ulimits: + nofile: + soft: 262144 + hard: 262144 diff --git a/directus/docker-compose.yml b/directus/docker-compose.yml index e19e469..125f497 100644 --- a/directus/docker-compose.yml +++ b/directus/docker-compose.yml @@ -9,7 +9,7 @@ volumes: services: directus: container_name: ${DIRECTUS_CONTAINER_NAME:-directus} - image: ${DIRECTUS_IMAGE:-directus/directus:9.5.1@sha256:c21099315f8720a12c65eea30b7450a96845ba17e9313e95a3fd23867b96c289} + image: ${DIRECTUS_IMAGE:-directus/directus:9.5.1} restart: always volumes: - directus:/directus/uploads diff --git a/drone/runner/docker-compose.yml b/drone/runner/docker-compose.yml index 6cdb98b..fcfd73b 100644 --- a/drone/runner/docker-compose.yml +++ b/drone/runner/docker-compose.yml @@ -7,7 +7,7 @@ version: "3.8" services: drone-runner: container_name: ${DRONE_RUNNER_CONTAINER_NAME} - image: ${DRONE_RUNNER_IMAGE:-drone/drone-runner-docker:1.8.0@sha256:70da970bb76a62567edbea1ac8002d9484664267f4cbb49fbd7c87a753d02260} + image: ${DRONE_RUNNER_IMAGE:-drone/drone-runner-docker:1.8.0} restart: always volumes: - /var/run/docker.sock:/var/run/docker.sock diff --git a/drone/server/docker-compose.yml b/drone/server/docker-compose.yml index daa903a..3cae11b 100644 --- a/drone/server/docker-compose.yml +++ b/drone/server/docker-compose.yml @@ -9,7 +9,7 @@ volumes: services: drone-server: container_name: ${DRONE_SERVER_CONTAINER_NAME:-drone-server} - image: ${DRONE_SERVER_IMAGE:-drone/drone:2.9.1@sha256:674e62c62cf41e06773c1b5e89687f1d514d49db6d1bb78678a5ef86927bc479} + image: ${DRONE_SERVER_IMAGE:-drone/drone:2.9.1} restart: always environment: # https://docs.drone.io/server/reference/drone-rpc-secret/ diff --git a/geoipupdate/.env b/geoipupdate/.env new file mode 100644 index 0000000..78546bd --- /dev/null +++ b/geoipupdate/.env @@ -0,0 +1,10 @@ +#GEOIPUPDATE_VOLUME_NAME= +#GEOIPUPDATE_IMAGE= +#GEOIPUPDATE_CONTAINER_NAME= + +GEOIPUPDATE_ACCOUNT_ID= +GEOIPUPDATE_LICENSE_KEY= +#GEOIPUPDATE_EDITION_IDS= +#GEOIPUPDATE_FREQUENCY= +#GEOIPUPDATE_VERBOSE= +#GEOIPUPDATE_DB_DIR= diff --git a/geoipupdate/README.md b/geoipupdate/README.md new file mode 100644 index 0000000..7efc7fc --- /dev/null +++ b/geoipupdate/README.md @@ -0,0 +1,14 @@ +# HedgeDoc + +> Permet de télécharger la base de données GeoIP2 permettant de localiser les IPs + +## Liens + +- [Site officiel][website] +- [Github][github] +- [L'image Docker de LinuxServer][docker] + +[website]: https://www.maxmind.com/en/home +[docker]: https://hub.docker.com/r/maxmindinc/geoipupdate +[github]: https://github.com/maxmind/geoipupdate +[documentation]: https://dev.maxmind.com/geoip/updating-databases diff --git a/geoipupdate/docker-compose.yml b/geoipupdate/docker-compose.yml new file mode 100644 index 0000000..215090b --- /dev/null +++ b/geoipupdate/docker-compose.yml @@ -0,0 +1,22 @@ +--- + +version: "3.8" + +volumes: + geoipupdate: + name: ${GEOIPUPDATE_VOLUME_NAME:-geoipupdate} + +services: + geoipupdate: + image: ${GEOIPUPDATE_IMAGE:-maxmindinc/geoipupdate:v4.9.0} + container_name: ${GEOIPUPDATE_CONTAINER_NAME:-geoip-updater} + restart: always + volumes: + - geoip:${GEOIPUPDATE_DB_DIR:-/usr/share/GeoIP} + environment: + GEOIPUPDATE_ACCOUNT_ID: ${GEOIPUPDATE_ACCOUNT_ID:?err} + GEOIPUPDATE_LICENSE_KEY: ${GEOIPUPDATE_LICENSE_KEY:?err} + GEOIPUPDATE_EDITION_IDS: ${GEOIPUPDATE_EDITION_IDS:-GeoLite2-City} + GEOIPUPDATE_FREQUENCY: ${GEOIP_SCHEDULE:-72} + GEOIPUPDATE_VERBOSE: ${GEOIPUPDATE_VERBOSE:-false} + GEOIPUPDATE_DB_DIR: ${GEOIPUPDATE_DB_DIR:-/usr/share/GeoIP} diff --git a/gitea/docker-compose.yml b/gitea/docker-compose.yml index 7014e8c..7c3280e 100644 --- a/gitea/docker-compose.yml +++ b/gitea/docker-compose.yml @@ -7,7 +7,7 @@ volumes: services: gitea: container_name: ${GITEA_CONTAINER_NAME:-gitea} - image: ${GITEA_IMAGE:-gitea/gitea:1.16.1@sha256:bd36095359861e6970705a70d58ae0536f92f0d3f2d25c18ed663e94380c546a} + image: ${GITEA_IMAGE:-gitea/gitea:1.16.1} restart: always environment: # - USER_UID=1000 diff --git a/grafana/docker-compose.yml b/grafana/docker-compose.yml index e0e054a..2d7c4f6 100644 --- a/grafana/docker-compose.yml +++ b/grafana/docker-compose.yml @@ -8,7 +8,7 @@ volumes: services: grafana: container_name: ${GRAFANA_CONTAINER_NAME:-grafana} - image: ${GRAFANA_IMAGE:-grafana/grafana:8.4.1@sha256:c97cdf5f24c6a8a618ec416c7c9d3568f92e2b196f89e8c656e646c06d45975e} + image: ${GRAFANA_IMAGE:-grafana/grafana:8.4.1} restart: always volumes: - grafana:/var/lib/grafana diff --git a/hedgedoc/docker-compose.yml b/hedgedoc/docker-compose.yml index 142e092..07ca998 100644 --- a/hedgedoc/docker-compose.yml +++ b/hedgedoc/docker-compose.yml @@ -7,7 +7,7 @@ volumes: services: hedgedoc: container_name: ${HEDGEDOC_CONTAINER_NAME:-hedgedoc} - image: ${HEDGEDOC_IMAGE:-linuxserver/hedgedoc:1.9.2-ls44@sha256:e3e0ec428e043104ec626a4c89e09baf61bc8939f8a28979bdadf3a4fa6f513f} + image: ${HEDGEDOC_IMAGE:-linuxserver/hedgedoc:1.9.2-ls44} restart: always depends_on: - postgres diff --git a/mobilizon/docker-compose.yml b/mobilizon/docker-compose.yml index 2317e3b..7a29ec5 100644 --- a/mobilizon/docker-compose.yml +++ b/mobilizon/docker-compose.yml @@ -9,7 +9,7 @@ volumes: services: mobilizon: container_name: ${MOBILIZON_CONTAINER_NAME:-mobilizon} - image: ${MOBILIZON_IMAGE:-framasoft/mobilizon:2.0.2@sha256:a703d399c35b3b685be7c154bf2ac74f5acd88d8c28dd42f05f68859d76edfd3} + image: ${MOBILIZON_IMAGE:-framasoft/mobilizon:2.0.2} restart: always depends_on: - postgres diff --git a/nextcloud/docker-compose.yml b/nextcloud/docker-compose.yml index 3050e3e..c6efa21 100644 --- a/nextcloud/docker-compose.yml +++ b/nextcloud/docker-compose.yml @@ -7,7 +7,7 @@ volumes: services: nextcloud-fpm: container_name: ${NEXTCLOUD_CONTAINER_NAME:-nextcloud}-fpm - image: ${NEXTCLOUD_IMAGE:-nextcloud:23.0.2-fpm-alpine@sha256:a9dec35fab6e244a7916afd6b6f738f26590ff8c94356406f34e5a3ea30bb8be} + image: ${NEXTCLOUD_IMAGE:-nextcloud:23.0.2-fpm-alpine} restart: always depends_on: - postgres diff --git a/plausible/.env b/plausible/.env new file mode 100644 index 0000000..755d2c5 --- /dev/null +++ b/plausible/.env @@ -0,0 +1,68 @@ +######## +# DOCKER + +#DOCKER_CONTEXT= +#DOCKER_HOST= +SERVICES_DIR=.. +COMPOSE_FILE=${SERVICES_DIR}/plausible/docker-compose.yml:${SERVICES_DIR}/plausible/docker-compose.clickhouse.yml:${SERVICES_DIR}/plausible/docker-compose.local.yml:${SERVICES_DIR}/postgres/docker-compose.yml:${SERVICES_DIR}/clickhouse/docker-compose.yml +#COMPOSE_PROJECT_NAME= + +## APP + +PLAUSIBLE_DOMAIN=http://localhost:8000 +#PLAUSIBLE_CONTAINER_NAME=plausible +#PLAUSIBLE_VOLUME_NAME=plausible +#PLAUSIBLE_IMAGE=plausible/analytics:v1.4.4 + +ADMIN_USER_NAME=example +ADMIN_USER_EMAIL=email@example.org +ADMIN_USER_PWD=change-me +SECRET_KEY_BASE=AFnMQwN54ovHIqCQQGFZX5gUFpgpxasCEnzQwQsyfZLPRbiwzDYAqYDJQlQM8SbmicVJr97axXaSCfXD9zSEQQ== + +## POSTGRES + +#POSTGRES_VOLUME_NAME= +#POSTGRES_CONTAINER_NAME= +#POSTGRES_IMAGE= +POSTGRES_USER=user-example +POSTGRES_PASSWORD=password-example +POSTGRES_DB=plausible_dev + +## CLICKHOUSE + +#CLICKHOUSE_VOLUME_NAME= +#CLICKHOUSE_CONTAINER_NAME= +#CLICKHOUSE_IMAGE= + +## SMTP + +#MAILER_EMAIL= +#SMTP_HOST_ADDR= +#SMTP_HOST_PORT= +#SMTP_USER_NAME= +#SMTP_USER_PWD= +#SMTP_HOST_SSL_ENABLED= +#SMTP_RETRIES= + +## GOOGLE SEARCH CONSOLE + +#GOOGLE_CLIENT_ID= +#GOOGLE_CLIENT_SECRET= + +## GEOIPUPDATE + +#GEOIPUPDATE_VOLUME_NAME= +#GEOIPUPDATE_IMAGE= +#GEOIPUPDATE_CONTAINER_NAME= +#GEOIPUPDATE_ACCOUNT_ID= +#GEOIPUPDATE_LICENSE_KEY= +#GEOIPUPDATE_EDITION_IDS=GeoLite2-Country +#GEOIPUPDATE_FREQUENCY= +#GEOIPUPDATE_VERBOSE= +#GEOIPUPDATE_DB_DIR= + +## TRAEFIK + +#TRAEFIK_NETWORK_NAME= +#TRAEFIK_ROUTER_NAME= +#TRAEFIK_ENTRYPOINTS= diff --git a/plausible/README.md b/plausible/README.md new file mode 100644 index 0000000..30e97e1 --- /dev/null +++ b/plausible/README.md @@ -0,0 +1,15 @@ +# Plausible + +> Plausible est une plateforme d'analyse Web légère et open source. + +## Liens + +- [Site Officiel][site] +- [Documentation][documentation] +- [Code source][source] +- [Docker Hub][dockerhub] + +[site]: https://plausible.io/ +[source]: https://github.com/plausible/analytics +[documentation]: https://plausible.io/docs +[dockerhub]: https://hub.docker.com/r/plausible/analytics diff --git a/plausible/clickhouse-config.xml b/plausible/clickhouse-config.xml new file mode 100644 index 0000000..ddd5f1c --- /dev/null +++ b/plausible/clickhouse-config.xml @@ -0,0 +1,14 @@ + + + warning + true + + + + + + + + + + diff --git a/plausible/clickhouse-user-config.xml b/plausible/clickhouse-user-config.xml new file mode 100644 index 0000000..f795286 --- /dev/null +++ b/plausible/clickhouse-user-config.xml @@ -0,0 +1,8 @@ + + + + 0 + 0 + + + diff --git a/plausible/docker-compose.clickhouse.yml b/plausible/docker-compose.clickhouse.yml new file mode 100644 index 0000000..443d044 --- /dev/null +++ b/plausible/docker-compose.clickhouse.yml @@ -0,0 +1,7 @@ +version: "3.8" + +services: + clickhouse: + volumes: + - ./clickhouse-config.xml:/etc/clickhouse-server/config.d/logging.xml:ro + - ./clickhouse-user-config.xml:/etc/clickhouse-server/users.d/logging.xml:ro diff --git a/plausible/docker-compose.geoip.yml b/plausible/docker-compose.geoip.yml new file mode 100644 index 0000000..6c9fe71 --- /dev/null +++ b/plausible/docker-compose.geoip.yml @@ -0,0 +1,10 @@ +version: "3.8" + +services: + plausible: + depends_on: + - geoipupdate + environment: + - GEOLITE2_COUNTRY_DB=/geoip/GeoLite2-Country.mmdb + volumes: + - geoipupdate:/geoip:ro diff --git a/plausible/docker-compose.google.yml b/plausible/docker-compose.google.yml new file mode 100644 index 0000000..dfb4c6c --- /dev/null +++ b/plausible/docker-compose.google.yml @@ -0,0 +1,7 @@ +version: "3.8" + +services: + plausible: + environment: + GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:?err} + GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:?err} diff --git a/plausible/docker-compose.local.yml b/plausible/docker-compose.local.yml new file mode 100644 index 0000000..f1ceb7f --- /dev/null +++ b/plausible/docker-compose.local.yml @@ -0,0 +1,6 @@ +version: "3.8" + +services: + plausible: + ports: + - ${LOCAL_PORT:-8000}:8000 diff --git a/plausible/docker-compose.smtp.yml b/plausible/docker-compose.smtp.yml new file mode 100644 index 0000000..fc0dea5 --- /dev/null +++ b/plausible/docker-compose.smtp.yml @@ -0,0 +1,12 @@ +version: "3.8" + +services: + plausible: + environment: + MAILER_EMAIL: ${MAILER_EMAIL:-hello@plausible.local} + SMTP_HOST_ADDR: ${SMTP_HOST_ADDR:-localhost} + SMTP_HOST_PORT: ${SMTP_HOST_PORT:-25} + SMTP_USER_NAME: ${SMTP_USER_NAME} + SMTP_USER_PWD: ${SMTP_USER_PWD} + SMTP_HOST_SSL_ENABLED: ${SMTP_HOST_SSL_ENABLED:-false} + SMTP_RETRIES: ${SMTP_RETRIES:-2} diff --git a/plausible/docker-compose.traefik.yml b/plausible/docker-compose.traefik.yml new file mode 100644 index 0000000..04cd7b6 --- /dev/null +++ b/plausible/docker-compose.traefik.yml @@ -0,0 +1,13 @@ +version: "3.8" + +networks: + default: + name: ${TRAEFIK_NETWORK_NAME:-traefik} + +services: + plausible: + labels: + - traefik.enable=true + - traefik.docker.network=${TRAEFIK_NETWORK_NAME:-traefik} + - traefik.http.routers.${TRAEFIK_ROUTER_NAME:-plausible}.rule=Host(`${PLAUSIBLE_DOMAIN:?err}`) + - traefik.http.routers.${TRAEFIK_ROUTER_NAME:-plausible}.entrypoints=${TRAEFIK_ENTRYPOINTS:-web} diff --git a/plausible/docker-compose.yml b/plausible/docker-compose.yml new file mode 100644 index 0000000..b535e93 --- /dev/null +++ b/plausible/docker-compose.yml @@ -0,0 +1,28 @@ +version: "3.8" + +volumes: + plausible: + name: ${PLAUSIBLE_VOLUME_NAME:-plausible} + +services: + plausible: + container_name: ${PLAUSIBLE_CONTAINER_NAME:-plausible} + image: ${PLAUSIBLE_IMAGE:-plausible/analytics:v1.4.4} + restart: always + command: ${PLAUSIBLE_DOCKER_COMMAND:-sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh db init-admin && /entrypoint.sh run"} + depends_on: + - clickhouse + - postgres + environment: + ADMIN_USER_NAME: ${ADMIN_USER_NAME:?err} + ADMIN_USER_EMAIL: ${ADMIN_USER_EMAIL:?err} + ADMIN_USER_PWD: ${ADMIN_USER_PWD:?err} + BASE_URL: ${PLAUSIBLE_DOMAIN} + SECRET_KEY_BASE: ${SECRET_KEY_BASE:?err} + DISABLE_AUTH: ${DISABLE_AUTH:-false} + DISABLE_REGISTRATION: ${DISABLE_REGISTRATION:-false} + DATABASE_URL: postgres://${POSTGRES_USER:?err}:${POSTGRES_PASSWORD:?err}@${POSTGRES_CONTAINER_NAME:-postgres}:5432/${POSTGRES_DB:?err} + CLICKHOUSE_DATABASE_URL: http://${CLICKHOUSE_CONTAINER_NAME:-clickhouse}:8123/${CLICKHOUSE_CONTAINER_NAME:-clickhouse} + volumes: + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro diff --git a/postgres/.env b/postgres/.env index 74b5f0e..1b5f33e 100644 --- a/postgres/.env +++ b/postgres/.env @@ -1,3 +1,7 @@ +#POSTGRES_VOLUME_NAME= +#POSTGRES_CONTAINER_NAME= +#POSTGRES_IMAGE= + POSTGRES_USER=user-example POSTGRES_PASSWORD=password-example POSTGRES_DB=postgres-database-name-example diff --git a/postgres/docker-compose.yml b/postgres/docker-compose.yml index 70dd15c..44e7d0a 100644 --- a/postgres/docker-compose.yml +++ b/postgres/docker-compose.yml @@ -7,7 +7,7 @@ volumes: services: postgres: container_name: ${POSTGRES_CONTAINER_NAME:-postgres} - image: ${POSTGRES_IMAGE:-postgres:14.2-alpine@sha256:536bc3ad5d53f1b84db958be04013024aae70449c931943ad0a55c56c28f68b3} + image: ${POSTGRES_IMAGE:-postgres:14.2-alpine} restart: always environment: POSTGRES_USER: ${POSTGRES_USER:?err} diff --git a/prometheus/docker-compose.yml b/prometheus/docker-compose.yml index 32e9f77..ddad060 100644 --- a/prometheus/docker-compose.yml +++ b/prometheus/docker-compose.yml @@ -12,7 +12,7 @@ services: build: context: . args: - PROMETHEUS_IMAGE: ${PROMETHEUS_IMAGE:-prom/prometheus:v2.33.3@sha256:20c90b9a99b12b4349150e347811cc44dccdb05c291d385320be63dc12cce73b} + PROMETHEUS_IMAGE: ${PROMETHEUS_IMAGE:-prom/prometheus:v2.33.3} volumes: - prometheus:/prometheus restart: always diff --git a/redis/docker-compose.yml b/redis/docker-compose.yml index cb7632b..cb0bd58 100644 --- a/redis/docker-compose.yml +++ b/redis/docker-compose.yml @@ -6,7 +6,7 @@ volumes: services: redis: - image: ${REDIS_IMAGE:-redis:6.2.6-alpine@sha256:4bed291aa5efb9f0d77b76ff7d4ab71eee410962965d052552db1fb80576431d} + image: ${REDIS_IMAGE:-redis:6.2.6-alpine} container_name: ${REDIS_CONTAINER_NAME:-redis} restart: always environment: diff --git a/registry/docker-compose.yml b/registry/docker-compose.yml index a6457ba..003cce9 100644 --- a/registry/docker-compose.yml +++ b/registry/docker-compose.yml @@ -7,7 +7,7 @@ volumes: services: registry: container_name: ${REGISTRY_CONTAINER_NAME} - image: ${REGISTRY_IMAGE:-registry:2.8.0@sha256:c26590bcf53822a542e78fab5c88e1dfbcdee91c1882f4656b7db7b542d91d97} + image: ${REGISTRY_IMAGE:-registry:2.8.0} restart: always environment: REGISTRY_AUTH: htpasswd diff --git a/traefik/docker-compose.yml b/traefik/docker-compose.yml index de947d3..61e093e 100644 --- a/traefik/docker-compose.yml +++ b/traefik/docker-compose.yml @@ -11,7 +11,7 @@ networks: services: traefik: container_name: ${TRAEFIK_CONTAINER_NAME:-traefik} - image: ${TRAEFIK_IMAGE:-traefik:v2.6.1@sha256:9c248cbc8c7f53de29903b1875a6d188e736916a0ef040e18707279993f39fe9} + image: ${TRAEFIK_IMAGE:-traefik:v2.6.1} restart: always volumes: - /var/run/docker.sock:/var/run/docker.sock diff --git a/watchtower/docker-compose.yml b/watchtower/docker-compose.yml index e0344e1..ed51860 100644 --- a/watchtower/docker-compose.yml +++ b/watchtower/docker-compose.yml @@ -3,7 +3,7 @@ version: '3.8' services: watchtower: container_name: ${WATCHTOWER_CONTAINER_NAME} - image: ${WATCHTOWER_IMAGE:-containrrr/watchtower:1.4.0@sha256:bbf9794a691b59ed2ed3089fec53844f14ada249ee5e372ff0e595b73f4e9ab3} + image: ${WATCHTOWER_IMAGE:-containrrr/watchtower:1.4.0} restart: always command: -i 60 --label-enable --cleanup --debug # --debug