diff --git a/.github/DISCUSSION_TEMPLATE/requests.yml b/.github/DISCUSSION_TEMPLATE/requests.yml new file mode 100644 index 00000000..a0b79277 --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/requests.yml @@ -0,0 +1,102 @@ +title: ✨ MyNewApp +body: + - type: textarea + id: description + attributes: + label: Description + description: A clear and concise description of the application wanted. + placeholder: >- + Unofficial Bitwarden compatible server written in Rust, formerly known + as bitwarden_rs + validations: + required: true + - type: input + id: website + attributes: + label: Official Website + description: Please give us the official website link + - type: input + id: docs-link + attributes: + label: Documentation link + description: Please indicate the link of the application documentation (wiki, etc) + placeholder: https://github.com/dani-garcia/vaultwarden/wiki + validations: + required: true + - type: input + id: last-release-date + attributes: + label: Last application release & date + description: Please tell us which & when the last stable version was released + placeholder: 1.30.1 (19/10/2023) + validations: + required: true + - type: input + id: license + attributes: + label: Application license + description: Please indicate license of application + placeholder: AGPL-3.0 license + validations: + required: true + - type: input + id: github-repository + attributes: + label: Source code repository link + description: >- + Link to official Github repository link (or Gitlab, etc.) to see source + code + placeholder: https://github.com/dani-garcia/vaultwarden + validations: + required: true + - type: input + id: docker-image-link + attributes: + label: Docker image link + description: Link to docker image respository of app (Github prefered over Dockerhub) + placeholder: https://github.com/dani-garcia/vaultwarden/pkgs/container/vaultwarden + validations: + required: true + - type: textarea + id: other + attributes: + label: Other's + description: Add any other context or information about the application request here. + placeholder: >- + Forums: https://vaultwarden.discourse.group; Proxy Examples: + https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples + - type: checkboxes + id: confirmation + attributes: + label: Please confirm the following + options: + - label: I confirm that I've put the app name in the title of the discussion + required: true + - label: I confirm that the application is actively maintained. + required: true + - label: >- + I confirm that the docker image of the application is actively + maintained. + required: true + - label: >- + I confirm that I have indeed checked that no similar request for + this application already exists + required: true + - type: textarea + id: support + attributes: + label: Gathering crowds + description: >- + Write a message of encouragement to gather votes and make your request + one of the most popular! + value: |- + Hey folks! + + Please upvote 👍 this discussion to show your interest in this request! + + Thanks ⛺ + - type: markdown + attributes: + value: >- + This template was generated with [Issue Forms + Creator](https://issue-forms-creator.netlify.app) \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index cdd22c81..95a2d0c4 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -1,6 +1,6 @@ -name: 🚨 Bug Report +name: 🐛 Bug Report description: Something is not working -title: '🚨 [MyApp] Concise description of the issue' +title: '🐛 [MyApp] Concise description of the issue' labels: - bug - triage diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 45b3c9ac..017c73c5 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -7,7 +7,7 @@ contact_links: url: https://discord.gg/d8afGXHAhc about: Want to discuss RunTipi with others? Check out our Discord. - name: 📦 Store Application Requests - url: https://github.com/runtipi/runtipi-appstore/discussions/categories/applications-requests + url: https://github.com/runtipi/runtipi-appstore/discussions/categories/requests about: Remember to search for existing application requests and "up-vote" any you like - name: 🎪 Store Improvement Ideas url: https://github.com/runtipi/runtipi-appstore/discussions/categories/ideas diff --git a/README.md b/README.md index daa61d83..a1530e80 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Crafty Controller](https://gitlab.com/crafty-controller/crafty-4) - Crafty 4 is the next iteration of our Minecraft Server Wrapper / Controller / Launcher. - [Conduit](https://gitlab.com/famedly/conduit) - Conduit is a simple, fast and reliable chat server written in Rust - [Cross-seed](https://github.com/cross-seed/cross-seed) - Fully-automatic, no false positives. +- [CTFd](https://github.com/CTFd/CTFd) - CTFd is a Capture The Flag framework focusing on ease of use and customizability. - [DailyTXT](https://github.com/PhiTux/DailyTxT) - Encrypted Diary Web-App - [Dash.](https://github.com/MauriceNino/dashdot) - A simple, modern server dashboard, primarily used by smaller private server - [Dashy](https://github.com/lissy93/dashy) - A self-hostable personal dashboard built for you. diff --git a/apps/2fauth/config.json b/apps/2fauth/config.json index 6e044b1c..6976b28d 100644 --- a/apps/2fauth/config.json +++ b/apps/2fauth/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "2fauth", - "tipi_version": 10, - "version": "5.0.2", + "tipi_version": 11, + "version": "5.0.3", "categories": [ "security" ], diff --git a/apps/2fauth/docker-compose.yml b/apps/2fauth/docker-compose.yml index 27978eed..8b3389a3 100644 --- a/apps/2fauth/docker-compose.yml +++ b/apps/2fauth/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: 2fauth: - image: 2fauth/2fauth:5.0.2 + image: 2fauth/2fauth:5.0.3 container_name: 2fauth volumes: - ${APP_DATA_DIR}/data:/2fauth diff --git a/apps/activepieces/config.json b/apps/activepieces/config.json index 670a1db2..0e95333c 100644 --- a/apps/activepieces/config.json +++ b/apps/activepieces/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "activepieces", "description": "Your friendliest open source all-in-one automation tool.", - "tipi_version": 12, - "version": "0.18.1", + "tipi_version": 13, + "version": "0.18.2", "categories": [ "automation" ], diff --git a/apps/activepieces/docker-compose.yml b/apps/activepieces/docker-compose.yml index ddc86efc..e054b5d6 100644 --- a/apps/activepieces/docker-compose.yml +++ b/apps/activepieces/docker-compose.yml @@ -1,7 +1,7 @@ version: '3.7' services: activepieces: - image: activepieces/activepieces:0.18.1 + image: activepieces/activepieces:0.18.2 container_name: activepieces restart: unless-stopped ports: diff --git a/apps/autobrr/config.json b/apps/autobrr/config.json index 6f8ddbcc..486d7593 100644 --- a/apps/autobrr/config.json +++ b/apps/autobrr/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "autobrr", - "tipi_version": 15, - "version": "1.34.1", + "tipi_version": 16, + "version": "1.35.0", "categories": [ "media" ], diff --git a/apps/autobrr/docker-compose.yml b/apps/autobrr/docker-compose.yml index 36b4d4c5..9572c636 100644 --- a/apps/autobrr/docker-compose.yml +++ b/apps/autobrr/docker-compose.yml @@ -3,7 +3,7 @@ version: "3" services: autobrr: container_name: autobrr - image: ghcr.io/autobrr/autobrr:v1.34.1 + image: ghcr.io/autobrr/autobrr:v1.35.0 restart: unless-stopped ports: - ${APP_PORT}:7474 diff --git a/apps/budibase/config.json b/apps/budibase/config.json index 328c5a4a..d6482b9d 100644 --- a/apps/budibase/config.json +++ b/apps/budibase/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "budibase", - "tipi_version": 68, - "version": "2.15.0", + "tipi_version": 70, + "version": "2.15.2", "categories": [ "development" ], diff --git a/apps/budibase/docker-compose.yml b/apps/budibase/docker-compose.yml index ad1dd9f3..6fe7bee1 100644 --- a/apps/budibase/docker-compose.yml +++ b/apps/budibase/docker-compose.yml @@ -1,7 +1,7 @@ version: '3.7' services: budibase: - image: budibase/budibase:2.15.0 + image: budibase/budibase:2.15.2 restart: unless-stopped container_name: budibase ports: diff --git a/apps/changedetection/config.json b/apps/changedetection/config.json index 00e880c3..9b7728ea 100644 --- a/apps/changedetection/config.json +++ b/apps/changedetection/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "changedetection", "description": "The best and simplest free open source website change detection, restock monitor and notification service.", - "tipi_version": 10, - "version": "0.45.12", + "tipi_version": 11, + "version": "0.45.13", "categories": [ "utilities" ], diff --git a/apps/changedetection/docker-compose.yml b/apps/changedetection/docker-compose.yml index b7a9d6e2..e751ea5f 100644 --- a/apps/changedetection/docker-compose.yml +++ b/apps/changedetection/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: changedetection: - image: ghcr.io/dgtlmoon/changedetection.io:0.45.12 + image: ghcr.io/dgtlmoon/changedetection.io:0.45.13 container_name: changedetection hostname: changedetection volumes: diff --git a/apps/cloudflared/config.json b/apps/cloudflared/config.json index a5ce807c..777f2f9f 100644 --- a/apps/cloudflared/config.json +++ b/apps/cloudflared/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": false, "id": "cloudflared", - "tipi_version": 3, - "version": "2024.1.2", + "tipi_version": 4, + "version": "2024.1.4", "categories": [ "utilities" ], diff --git a/apps/cloudflared/docker-compose.yml b/apps/cloudflared/docker-compose.yml index 5a0a6f49..2efe2375 100644 --- a/apps/cloudflared/docker-compose.yml +++ b/apps/cloudflared/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.9" services: cloudflared: - image: wisdomsky/cloudflared-web:2024.1.2 + image: wisdomsky/cloudflared-web:2024.1.4 container_name: cloudflared restart: unless-stopped network_mode: host diff --git a/apps/ctfd/config.json b/apps/ctfd/config.json new file mode 100644 index 00000000..d59ca33e --- /dev/null +++ b/apps/ctfd/config.json @@ -0,0 +1,43 @@ +{ + "$schema": "../schema.json", + "name": "CTFd", + "port": 8546, + "available": true, + "exposable": true, + "id": "ctfd", + "tipi_version": 1, + "version": "3.6.1", + "categories": [ + "utilities" + ], + "description": "CTFd is a Capture The Flag framework focusing on ease of use and customizability.", + "short_desc": "Cyber Security Training made simple.", + "author": "CTFd", + "source": "https://github.com/CTFd/CTFd", + "website": "https://ctfd.io/", + "form_fields": [ + { + "type": "random", + "label": "CTFD_MYSQL_DB_PASSWORD", + "min": 32, + "env_variable": "CTFD_MYSQL_DB_PASSWORD" + }, + { + "type": "random", + "label": "CTFD_SECRET_KEY", + "min": 32, + "env_variable": "CTFD_SECRET_KEY" + }, + { + "type": "random", + "label": "CTFD_MYSQL_ROOT_PASSWORD", + "min": 32, + "env_variable": "CTFD_MYSQL_ROOT_PASSWORD" + } + ], + "supported_architectures": [ + "arm64", + "amd64" + ] + } + \ No newline at end of file diff --git a/apps/ctfd/docker-compose.yml b/apps/ctfd/docker-compose.yml new file mode 100644 index 00000000..a695dde3 --- /dev/null +++ b/apps/ctfd/docker-compose.yml @@ -0,0 +1,75 @@ +version: "3.7" +services: + ctfd: + image: ctfd/ctfd:3.6.1 + container_name: ctfd + restart: unless-stopped + ports: + - ${APP_PORT}:8000 + environment: + - UPLOAD_FOLDER=/var/uploads + - DATABASE_URL=mysql+pymysql://tipi:${CTFD_MYSQL_DB_PASSWORD}@ctfd-db/ctfd + - REDIS_URL=redis://ctfd-redis:6379 + - WORKERS=1 + - LOG_FOLDER=/var/log/CTFd + - ACCESS_LOG=- + - ERROR_LOG=- + - REVERSE_PROXY=true + - SECRET_KEY=${CTFD_SECRET_KEY} + volumes: + - ${APP_DATA_DIR}/data/uploads:/var/log/CTFd + - ${APP_DATA_DIR}/data/uploads:/var/uploads + depends_on: + - ctfd-db + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.ctfd-web-redirect.redirectscheme.scheme: https + traefik.http.services.ctfd.loadbalancer.server.port: 8000 + # Web + traefik.http.routers.ctfd-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ctfd-insecure.entrypoints: web + traefik.http.routers.ctfd-insecure.service: ctfd + traefik.http.routers.ctfd-insecure.middlewares: ctfd-web-redirect + # Websecure + traefik.http.routers.ctfd.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ctfd.entrypoints: websecure + traefik.http.routers.ctfd.service: ctfd + traefik.http.routers.ctfd.tls.certresolver: myresolver + # Local domain + traefik.http.routers.ctfd-local-insecure.rule: Host(`ctfd.${LOCAL_DOMAIN}`) + traefik.http.routers.ctfd-local-insecure.entrypoints: web + traefik.http.routers.ctfd-local-insecure.service: ctfd + traefik.http.routers.ctfd-local-insecure.middlewares: ctfd-web-redirect + # Local domain secure + traefik.http.routers.ctfd-local.rule: Host(`ctfd.${LOCAL_DOMAIN}`) + traefik.http.routers.ctfd-local.entrypoints: websecure + traefik.http.routers.ctfd-local.service: ctfd + traefik.http.routers.ctfd-local.tls: true + + ctfd-db: + image: mariadb:10.4.12 + restart: unless-stopped + container_name: ctfd-db + environment: + - MYSQL_ROOT_PASSWORD=${CTFD_MYSQL_ROOT_PASSWORD} + - MYSQL_USER=tipi + - MYSQL_PASSWORD=${CTFD_MYSQL_DB_PASSWORD} + - MYSQL_DATABASE=ctfd + volumes: + - ${APP_DATA_DIR}/data/db:/var/lib/mysql + networks: + - tipi_main_network + # This command is required to set important mariadb defaults + command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --wait_timeout=28800, --log-warnings=0] + + ctfd-redis: + image: redis:4 + container_name: ctfd-redis + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/redis:/data + networks: + - tipi_main_network \ No newline at end of file diff --git a/apps/ctfd/metadata/description.md b/apps/ctfd/metadata/description.md new file mode 100644 index 00000000..21f3df69 --- /dev/null +++ b/apps/ctfd/metadata/description.md @@ -0,0 +1,35 @@ +# ![](https://github.com/CTFd/CTFd/blob/master/CTFd/themes/core/static/img/logo.png?raw=true) + +## What is CTFd? + +CTFd is a Capture The Flag framework focusing on ease of use and customizability. It comes with everything you need to run a CTF and it's easy to customize with plugins and themes. + +![CTFd is a CTF in a can.](https://github.com/CTFd/CTFd/blob/master/CTFd/themes/core/static/img/scoreboard.png?raw=true) + +## Features + +- Create your own challenges, categories, hints, and flags from the Admin Interface + - Dynamic Scoring Challenges + - Unlockable challenge support + - Challenge plugin architecture to create your own custom challenges + - Static & Regex based flags + - Custom flag plugins + - Unlockable hints + - File uploads to the server or an Amazon S3-compatible backend + - Limit challenge attempts & hide challenges + - Automatic bruteforce protection +- Individual and Team based competitions + - Have users play on their own or form teams to play together +- Scoreboard with automatic tie resolution + - Hide Scores from the public + - Freeze Scores at a specific time +- Scoregraphs comparing the top 10 teams and team progress graphs +- Markdown content management system +- SMTP + Mailgun email support + - Email confirmation support + - Forgot password support +- Automatic competition starting and ending +- Team management, hiding, and banning +- Customize everything using the [plugin](https://docs.ctfd.io/docs/plugins/overview) and [theme](https://docs.ctfd.io/docs/themes/overview) interfaces +- Importing and Exporting of CTF data for archival +- And a lot more... \ No newline at end of file diff --git a/apps/ctfd/metadata/logo.jpg b/apps/ctfd/metadata/logo.jpg new file mode 100644 index 00000000..2637dbff Binary files /dev/null and b/apps/ctfd/metadata/logo.jpg differ diff --git a/apps/dashdot/config.json b/apps/dashdot/config.json index 2f1bb00b..184e032a 100644 --- a/apps/dashdot/config.json +++ b/apps/dashdot/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "dashdot", - "tipi_version": 11, - "version": "5.5.2", + "tipi_version": 12, + "version": "5.7.0", "categories": [ "utilities" ], diff --git a/apps/dashdot/docker-compose.yml b/apps/dashdot/docker-compose.yml index d72c5847..f76cbc8f 100644 --- a/apps/dashdot/docker-compose.yml +++ b/apps/dashdot/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.5" services: dashdot: - image: mauricenino/dashdot:5.5.2 + image: mauricenino/dashdot:5.7.0 restart: unless-stopped container_name: dashdot privileged: true diff --git a/apps/immich/config.json b/apps/immich/config.json index ae5a58de..71a88815 100644 --- a/apps/immich/config.json +++ b/apps/immich/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8128, "id": "immich", - "tipi_version": 68, - "version": "1.92.1", + "tipi_version": 71, + "version": "1.93.2", "categories": [ "data", "photography" diff --git a/apps/immich/docker-compose.yml b/apps/immich/docker-compose.yml index c18bdcdd..a8490e08 100644 --- a/apps/immich/docker-compose.yml +++ b/apps/immich/docker-compose.yml @@ -4,7 +4,7 @@ services: immich: container_name: immich - image: altran1502/immich-server:v1.92.1 + image: altran1502/immich-server:v1.93.2 command: ["start-server.sh"] volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload @@ -53,7 +53,7 @@ services: immich-microservices: container_name: immich-microservices - image: altran1502/immich-server:v1.92.1 + image: altran1502/immich-server:v1.93.2 command: ["start-microservices.sh"] volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload @@ -75,7 +75,7 @@ services: immich-machine-learning: container_name: immich-machine-learning - image: altran1502/immich-machine-learning:v1.92.1 + image: altran1502/immich-machine-learning:v1.93.2 volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload - ${APP_DATA_DIR}/data/immich-ml-cache:/cache diff --git a/apps/lobe-chat/config.json b/apps/lobe-chat/config.json index 4cb62472..65eb5ee2 100644 --- a/apps/lobe-chat/config.json +++ b/apps/lobe-chat/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "lobe-chat", "description": "LobeChat is an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible (Function Call) plugin system.", - "tipi_version": 11, - "version": "0.120.2", + "tipi_version": 12, + "version": "0.120.3", "categories": [ "ai" ], diff --git a/apps/lobe-chat/docker-compose.yml b/apps/lobe-chat/docker-compose.yml index 2409d8d4..f957f20e 100644 --- a/apps/lobe-chat/docker-compose.yml +++ b/apps/lobe-chat/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.9' services: lobe-chat: container_name: lobe-chat - image: lobehub/lobe-chat:v0.120.2 + image: lobehub/lobe-chat:v0.120.3 environment: - OPENAI_API_KEY=${OPENAI_API_KEY} - OPENAI_PROXY_URL=${OPEANAI_PROXY_URL} diff --git a/apps/paperless-ngx/config.json b/apps/paperless-ngx/config.json index c41bf152..3c53a321 100644 --- a/apps/paperless-ngx/config.json +++ b/apps/paperless-ngx/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8012, "id": "paperless-ngx", - "tipi_version": 14, - "version": "2.3.3", + "tipi_version": 15, + "version": "2.4.0", "categories": [ "utilities" ], diff --git a/apps/paperless-ngx/docker-compose.yml b/apps/paperless-ngx/docker-compose.yml index 75d22f52..ecc0f4ff 100644 --- a/apps/paperless-ngx/docker-compose.yml +++ b/apps/paperless-ngx/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.7' services: paperless-ngx: container_name: paperless-ngx - image: ghcr.io/paperless-ngx/paperless-ngx:2.3.3 + image: ghcr.io/paperless-ngx/paperless-ngx:2.4.0 restart: unless-stopped depends_on: - db diff --git a/apps/qbittorrent/metadata/description.md b/apps/qbittorrent/metadata/description.md index 810d27fd..9315fe4d 100644 --- a/apps/qbittorrent/metadata/description.md +++ b/apps/qbittorrent/metadata/description.md @@ -4,8 +4,12 @@ The [Qbittorrent](https://www.qbittorrent.org/) project aims to provide an open- ## Credentials -Username: admin -Password: adminadmin +Please note that starting from version 4.6.1, qBittorrent no longer provides a default password. Instead, a randomly generated password is used and can be found in the container logs. Please check the logs for the password. Alternatively, you can manually modify the config file to set it to the hash of `adminadmin`. Example: + +``` + [Preferences] +WebUI\Password_PBKDF2="@ByteArray(ARQ77eY1NUZaQsuDHbIMCA==:0WMRkYTUWVT9wVvdDtHAjU9b3b7uB8NR1Gur2hmQCvCDpm39Q+PsJRJPaCU51dEiz+dTzh8qbPsL8WkFljQYFQ==)" +``` ## Folder Info diff --git a/apps/sonarr/config.json b/apps/sonarr/config.json index 520936d7..71db845e 100644 --- a/apps/sonarr/config.json +++ b/apps/sonarr/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8098, "id": "sonarr", - "tipi_version": 6, - "version": "4.0.0", + "tipi_version": 7, + "version": "4.0.1", "categories": [ "media", "utilities" diff --git a/apps/sonarr/docker-compose.yml b/apps/sonarr/docker-compose.yml index 485c7f27..896faa8d 100644 --- a/apps/sonarr/docker-compose.yml +++ b/apps/sonarr/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: sonarr: - image: lscr.io/linuxserver/sonarr:4.0.0 + image: lscr.io/linuxserver/sonarr:4.0.1 container_name: sonarr environment: - PUID=1000 diff --git a/apps/tandoor/config.json b/apps/tandoor/config.json index ee2ecc0e..f094bc00 100644 --- a/apps/tandoor/config.json +++ b/apps/tandoor/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "tandoor", - "tipi_version": 6, - "version": "1.5.10", + "tipi_version": 7, + "version": "1.5.11", "categories": [ "data" ], diff --git a/apps/tandoor/docker-compose.yml b/apps/tandoor/docker-compose.yml index d4dce3c7..60fece2d 100644 --- a/apps/tandoor/docker-compose.yml +++ b/apps/tandoor/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: tandoor: container_name: tandoor - image: ghcr.io/tandoorrecipes/recipes:1.5.10 + image: ghcr.io/tandoorrecipes/recipes:1.5.11 volumes: - ${APP_DATA_DIR}/data/staticfiles:/opt/recipes/staticfiles - ${APP_DATA_DIR}/data/mediafiles:/opt/recipes/mediafiles