diff --git a/README.md b/README.md index c7c3775e..6bf6d39e 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Booksonic](https://github.com/popeen/Booksonic-Air) - The selfhosted audiobook server - [Bookstack](https://github.com/BookStackApp/BookStack) - BookStack is a self-hosted platform for organising and storing information. - [Budibase](https://github.com/Budibase/budibase) - Internal tools made easy. +- [Cal.com](https://github.com/calcom/cal.com) - Scheduling infrastructure for absolutely everyone. - [Calibre-Web - EBook Reader](https://github.com/janeczku/calibre-web) - Calibre-web is a web app providing a clean interface for browsing, reading and downloading eBooks using an existing Calibre database. - [ChangeDetection](https://github.com/dgtlmoon/changedetection.io) - Website change detection. - [ChatGPT UI](https://github.com/WongSaang/chatgpt-ui) - A ChatGPT web client that supports multiple users, multiple languages, and multiple database connections for persistent data storage @@ -72,6 +73,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Hammond](https://github.com/alfhou/hammond) - Self hosted vehicle and expense management system. Like Clarkson, but better - [Haven](https://github.com/havenweb/haven) - Self-hostable private blogging - [HedgeDoc](https://github.com/hedgedoc/hedgedoc) - A Collaborative Markdown and Note Taking App +- [Heimdall](https://github.com/linuxserver/Heimdall) - Application Dashboard - [Hello World](https://github.com/crccheck/docker-hello-world) - Hello World web server in under 2 MB - [Homarr](https://github.com/ajnart/homarr) - Homarr is a simple and lightweight homepage for your server, that helps you easily access all of your services in one place. - [Home Assistant](https://github.com/home-assistant/core) - Open source home automation that puts local control and privacy first @@ -128,6 +130,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Netboot.xyz](https://github.com/netbootxyz/netboot.xyz) - Your favorite operating systems in one place. - [Netdata](https://github.com/netdata/netdata) - Open-source, real-time, performance and health monitoring. - [Nextcloud](https://github.com/nextcloud/server) - Productivity platform that keeps you in control +- [NextGBA](https://github.com/meienberger/nextgba) - Gameboy in your browser - [Nginx](https://github.com/nginx/nginx) - Open-source simple and fast web server. - [Nitter](https://github.com/zedeus/nitter) - Twitter without annoyances! - [NocoDB](https://github.com/nocodb/nocodb) - Open Source Airtable Alternative diff --git a/apps/2fauth/config.json b/apps/2fauth/config.json index c0c54e09..14b9390e 100644 --- a/apps/2fauth/config.json +++ b/apps/2fauth/config.json @@ -7,8 +7,8 @@ "available": true, "exposable": true, "id": "2fauth", - "tipi_version": 12, - "version": "5.0.3", + "tipi_version": 13, + "version": "5.0.4", "categories": [ "security" ], diff --git a/apps/2fauth/docker-compose.yml b/apps/2fauth/docker-compose.yml index 2812c1b4..c18e0869 100644 --- a/apps/2fauth/docker-compose.yml +++ b/apps/2fauth/docker-compose.yml @@ -1,6 +1,6 @@ services: 2fauth: - image: 2fauth/2fauth:5.0.3 + image: 2fauth/2fauth:5.0.4 container_name: 2fauth volumes: - ${APP_DATA_DIR}/data:/2fauth diff --git a/apps/activepieces/config.json b/apps/activepieces/config.json index 0e95333c..9fb2b1b7 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": 13, - "version": "0.18.2", + "tipi_version": 17, + "version": "0.20.3", "categories": [ "automation" ], diff --git a/apps/activepieces/docker-compose.yml b/apps/activepieces/docker-compose.yml index e054b5d6..20d15f80 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.2 + image: activepieces/activepieces:0.20.3 container_name: activepieces restart: unless-stopped ports: diff --git a/apps/adguard/config.json b/apps/adguard/config.json index 7e784d06..c9bb51f4 100644 --- a/apps/adguard/config.json +++ b/apps/adguard/config.json @@ -3,8 +3,8 @@ "name": "Adguard", "available": true, "exposable": true, - "tipi_version": 23, - "version": "0.107.43", + "tipi_version": 24, + "version": "0.107.44", "port": 8104, "id": "adguard", "categories": [ diff --git a/apps/adguard/docker-compose.yml b/apps/adguard/docker-compose.yml index 28a4f533..dc636933 100644 --- a/apps/adguard/docker-compose.yml +++ b/apps/adguard/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: adguard: - image: adguard/adguardhome:v0.107.43 + image: adguard/adguardhome:v0.107.44 container_name: adguard volumes: - "${APP_DATA_DIR}/data/work:/opt/adguardhome/work" diff --git a/apps/atuin/config.json b/apps/atuin/config.json index a64fcf4d..e740772c 100755 --- a/apps/atuin/config.json +++ b/apps/atuin/config.json @@ -5,12 +5,9 @@ "exposable": true, "port": 8888, "id": "atuin", - "tipi_version": 1, + "tipi_version": 2, "version": "latest", - "categories": [ - "utilities", - "development" - ], + "categories": ["utilities", "development"], "description": "Making your shell magical", "short_desc": "Magical Shell History", "author": "https://github.com/atuinsh", @@ -33,8 +30,5 @@ "env_variable": "ATUIN_ALLOW_REGISTRATION" } ], - "supported_architectures": [ - "amd64", - "arm64" - ] + "supported_architectures": ["amd64", "arm64"] } diff --git a/apps/atuin/docker-compose.yml b/apps/atuin/docker-compose.yml index 773aa11e..4fc84d2c 100755 --- a/apps/atuin/docker-compose.yml +++ b/apps/atuin/docker-compose.yml @@ -47,7 +47,7 @@ services: image: postgres:14 restart: unless-stopped volumes: # Don't remove permanent storage for index database files! - - "${APP_DATA_DIR}/data:/var/lib/postgresql/data/" + - "${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data/" environment: POSTGRES_USER: atuin POSTGRES_PASSWORD: "${ATUIN_DB_PASSWORD}" diff --git a/apps/audiobookshelf/config.json b/apps/audiobookshelf/config.json index 62ec99b1..14371eba 100644 --- a/apps/audiobookshelf/config.json +++ b/apps/audiobookshelf/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 13378, "id": "audiobookshelf", - "tipi_version": 11, - "version": "2.7.2", + "tipi_version": 12, + "version": "2.8.0", "categories": [ "books", "media" diff --git a/apps/audiobookshelf/docker-compose.yml b/apps/audiobookshelf/docker-compose.yml index 9153f29b..932372b4 100644 --- a/apps/audiobookshelf/docker-compose.yml +++ b/apps/audiobookshelf/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.7' services: audiobookshelf: container_name: audiobookshelf - image: ghcr.io/advplyr/audiobookshelf:2.7.2 + image: ghcr.io/advplyr/audiobookshelf:2.8.0 restart: unless-stopped ports: - ${APP_PORT}:80 diff --git a/apps/authentik/config.json b/apps/authentik/config.json index e9cbdbec..b3ef1733 100644 --- a/apps/authentik/config.json +++ b/apps/authentik/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "authentik", - "tipi_version": 7, - "version": "2023.10.7", + "tipi_version": 9, + "version": "2024.2.1", "https": true, "categories": [ "development" diff --git a/apps/authentik/docker-compose.yml b/apps/authentik/docker-compose.yml index 33af2803..b2067177 100644 --- a/apps/authentik/docker-compose.yml +++ b/apps/authentik/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: authentik: - image: ghcr.io/goauthentik/server:2023.10.7 + image: ghcr.io/goauthentik/server:2024.2.1 restart: unless-stopped command: server container_name: authentik @@ -49,7 +49,7 @@ services: traefik.http.routers.authentik-local.service: authentik traefik.http.routers.authentik-local.tls: true authentik-worker: - image: ghcr.io/goauthentik/server:2023.10.7 + image: ghcr.io/goauthentik/server:2024.2.1 restart: unless-stopped command: worker container_name: authentik-worker diff --git a/apps/autobrr/config.json b/apps/autobrr/config.json index 47dcb178..8e05dfbb 100644 --- a/apps/autobrr/config.json +++ b/apps/autobrr/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "autobrr", - "tipi_version": 18, - "version": "1.36.0", + "tipi_version": 23, + "version": "1.39.1", "categories": [ "media" ], diff --git a/apps/autobrr/docker-compose.yml b/apps/autobrr/docker-compose.yml index bfa1000f..12bbe1cb 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.36.0 + image: ghcr.io/autobrr/autobrr:v1.39.1 restart: unless-stopped ports: - ${APP_PORT}:7474 diff --git a/apps/bazarr/config.json b/apps/bazarr/config.json index 1f7db2e2..cabd6304 100644 --- a/apps/bazarr/config.json +++ b/apps/bazarr/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 6767, "id": "bazarr", - "tipi_version": 12, - "version": "1.4.0", + "tipi_version": 14, + "version": "1.4.2", "categories": [ "media", "utilities" diff --git a/apps/bazarr/docker-compose.yml b/apps/bazarr/docker-compose.yml index ddd30c16..3027bebc 100644 --- a/apps/bazarr/docker-compose.yml +++ b/apps/bazarr/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: bazarr: - image: lscr.io/linuxserver/bazarr:1.4.0 + image: lscr.io/linuxserver/bazarr:1.4.2 container_name: bazarr environment: - PUID=1000 diff --git a/apps/bitmagnet/config.json b/apps/bitmagnet/config.json index 7de10eaf..9fa5606d 100644 --- a/apps/bitmagnet/config.json +++ b/apps/bitmagnet/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "bitmagnet", - "tipi_version": 6, - "version": "0.5.1", + "tipi_version": 12, + "version": "0.7.7", "categories": [ "media" ], diff --git a/apps/bitmagnet/docker-compose.yml b/apps/bitmagnet/docker-compose.yml index 243c4986..cc7250e5 100644 --- a/apps/bitmagnet/docker-compose.yml +++ b/apps/bitmagnet/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: bitmagnet: - image: ghcr.io/bitmagnet-io/bitmagnet:0.5.1 + image: ghcr.io/bitmagnet-io/bitmagnet:0.7.7 restart: unless-stopped command: - worker diff --git a/apps/bookstack/config.json b/apps/bookstack/config.json index 7f611808..9a56f4b0 100644 --- a/apps/bookstack/config.json +++ b/apps/bookstack/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8119, "id": "bookstack", - "tipi_version": 16, - "version": "23.12.20240115", + "tipi_version": 17, + "version": "24.02.20240228", "description": "BookStack is a simple, self-hosted, easy-to-use platform for organising and storing information. Default login: admin@admin.com password: password", "short_desc": "BookStack is a self-hosted platform for organising and storing information.", "author": "Dan Brown", diff --git a/apps/bookstack/docker-compose.yml b/apps/bookstack/docker-compose.yml index 7d2a0799..b878ecbc 100644 --- a/apps/bookstack/docker-compose.yml +++ b/apps/bookstack/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: bookstack: - image: lscr.io/linuxserver/bookstack:23.12.20240115 + image: lscr.io/linuxserver/bookstack:24.02.20240228 container_name: bookstack environment: - APP_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} diff --git a/apps/budibase/config.json b/apps/budibase/config.json index 92824229..8028347a 100644 --- a/apps/budibase/config.json +++ b/apps/budibase/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "budibase", - "tipi_version": 81, - "version": "2.17.3", + "tipi_version": 89, + "version": "2.20.12", "categories": [ "development" ], diff --git a/apps/budibase/docker-compose.yml b/apps/budibase/docker-compose.yml index 96661f36..d865ad5c 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.17.3 + image: budibase/budibase:2.20.12 restart: unless-stopped container_name: budibase ports: diff --git a/apps/calcom/config.json b/apps/calcom/config.json new file mode 100644 index 00000000..65002763 --- /dev/null +++ b/apps/calcom/config.json @@ -0,0 +1,116 @@ +{ + "author": "cal.com", + "available": true, + "categories": [ + "calendar", + "social" + ], + "description": "The open source Calendly successor. You are in charge of your own data, workflow, and appearance.\nCalendly and other scheduling tools are awesome. It made our lives massively easier. We're using it for business meetings, seminars, yoga classes, and even calls with our families. However, most tools are very limited in terms of control and customization.\n That's where Cal.com comes in. Self-hosted or hosted by us. White-label by design. API-driven and ready to be deployed on your own domain. Full control of your events and data.", + "exposable": true, + "form_fields": [ + { + "env_variable": "CALCOM_NEXTAUTH_SECRET", + "label": "Next.js Auth secret. Generate one with `openssl rand -base64 32`", + "max": 1024, + "min": 1, + "required": true, + "type": "password" + }, + { + "env_variable": "CALENDSO_ENCRYPTION_KEY", + "label": "Random string", + "max": 32, + "min": 32, + "type": "random" + }, + { + "env_variable": "MS_GRAPH_CLIENT_ID", + "label": "MS Graph Client ID. Used for the Office 365 / Outlook.com Calendar integration", + "max": 1024, + "min": 1, + "required": false, + "type": "text" + }, + { + "env_variable": "MS_GRAPH_CLIENT_SECRET", + "label": "MS Graph Client Secret. Used for the Office 365 / Outlook.com Calendar integration", + "max": 1024, + "min": 1, + "required": false, + "type": "password" + }, + { + "env_variable": "ZOOM_CLIENT_ID", + "label": "Zoom Client ID. Used for the Zoom integration", + "max": 1024, + "min": 1, + "required": false, + "type": "text" + }, + { + "env_variable": "ZOOM_CLIENT_SECRET", + "label": "Zoom Client Secret. Used for the Zoom integration", + "max": 1024, + "min": 1, + "required": false, + "type": "password" + }, + { + "env_variable": "CALCOM_GOOGLE_API_CREDENTIALS", + "label": "Google API Credentials in JSON form. Used for the Google Calendar integration. See https://github.com/calcom/cal.com?tab=readme-ov-file#obtaining-the-google-api-credentials", + "required": false, + "text": "text" + }, + { + "env_variable": "EMAIL_FROM", + "label": "Configures the global From: header whilst sending emails.", + "max": 1024, + "min": 1, + "required": true, + "type": "email" + }, + { + "type": "email", + "label": "Email server username (SMTP)", + "required": true, + "min": 1, + "max": 1024, + "env_variable": "EMAIL_SERVER_USER" + }, + { + "env_variable": "EMAIL_SERVER_HOST", + "label": "Email server host (SMTP)", + "max": 1024, + "min": 1, + "required": true, + "type": "fqdn" + }, + { + "env_variable": "EMAIL_SERVER_PORT", + "label": "Email server port (SMTP)", + "max": 65535, + "min": 1, + "required": true, + "type": "number" + }, + { + "env_variable": "EMAIL_SERVER_PASSWORD", + "label": "Email server password (SMTP)", + "max": 1024, + "min": 1, + "required": true, + "type": "password" + } + ], + "id": "calcom", + "name": "Cal.com", + "port": 8294, + "short_desc": "Scheduling infrastructure for absolutely everyone.", + "source": "https://github.com/calcom/cal.com", + "supported_architectures": [ + "amd64" + ], + "tipi_version": 6, + "version": "3.7.16", + "website": "https://cal.com/" +} diff --git a/apps/calcom/docker-compose.yml b/apps/calcom/docker-compose.yml new file mode 100644 index 00000000..6f47ce21 --- /dev/null +++ b/apps/calcom/docker-compose.yml @@ -0,0 +1,75 @@ +version: '3.8' + +services: + + calcom: + container_name: calcom + image: calcom/cal.com:v3.7.16 + restart: unless-stopped + ports: + - ${APP_PORT}:3000 + networks: + - tipi_main_network + depends_on: + - db-calcom + environment: + - DATABASE_HOST=db-calcom + - DATABASE_URL=postgresql://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@db-calcom/calcom + - DATABASE_DIRECT_URL=postgresql://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@db-calcom/calcom + - POSTGRES_USER=${POSTGRES_USERNAME} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + - POSTGRES_DB=calcom + - LICENSE=agree + - NEXT_PUBLIC_LICENSE_CONSENT=agree + - NEXT_PUBLIC_WEBAPP_URL=https://${APP_DOMAIN} + - NEXTAUTH_SECRET=${CALCOM_NEXTAUTH_SECRET} + - CALENDSO_ENCRYPTION_KEY=${CALENDSO_ENCRYPTION_KEY} + - MS_GRAPH_CLIENT_ID=${MS_GRAPH_CLIENT_ID} + - MS_GRAPH_CLIENT_SECRET=${MS_GRAPH_CLIENT_SECRET} + - ZOOM_CLIENT_ID=${ZOOM_CLIENT_ID} + - ZOOM_CLIENT_SECRET=${ZOOM_CLIENT_SECRET} + - GOOGLE_API_CREDENTIALS=${CALCOM_GOOGLE_API_CREDENTIALS} + - EMAIL_FROM=${EMAIL_FROM} + - EMAIL_SERVER_HOST=${EMAIL_SERVER_HOST} + - EMAIL_SERVER_PORT=${EMAIL_SERVER_PORT} + - EMAIL_SERVER_PASSWORD=${EMAIL_SERVER_PASSWORD} + - EMAIL_SERVER_USER=${EMAIL_SERVER_USER} + - NODE_ENV=production + labels: + # Main + traefik.enable: true + traefik.http.middlewares.calcom-web-redirect.redirectscheme.scheme: https + traefik.http.services.calcom.loadbalancer.server.port: 3000 + # Web + traefik.http.routers.calcom-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.calcom-insecure.entrypoints: web + traefik.http.routers.calcom-insecure.service: calcom + traefik.http.routers.calcom-insecure.middlewares: calcom-web-redirect + # Websecure + traefik.http.routers.calcom.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.calcom.entrypoints: websecure + traefik.http.routers.calcom.service: calcom + traefik.http.routers.calcom.tls.certresolver: myresolver + # Local domain + traefik.http.routers.calcom-local-insecure.rule: Host(`calcom.${LOCAL_DOMAIN}`) + traefik.http.routers.calcom-local-insecure.entrypoints: web + traefik.http.routers.calcom-local-insecure.service: calcom + traefik.http.routers.calcom-local-insecure.middlewares: calcom-web-redirect + # Local domain secure + traefik.http.routers.calcom-local.rule: Host(`calcom.${LOCAL_DOMAIN}`) + traefik.http.routers.calcom-local.entrypoints: websecure + traefik.http.routers.calcom-local.service: calcom + traefik.http.routers.calcom-local.tls: true + + db-calcom: + container_name: db-calcom + image: postgres:16.1 + restart: on-failure + volumes: + - ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data + environment: + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + - POSTGRES_USER=${POSTGRES_USERNAME} + - POSTGRES_DB=calcom + networks: + - tipi_main_network diff --git a/apps/calcom/metadata/description.md b/apps/calcom/metadata/description.md new file mode 100644 index 00000000..b2809b6d --- /dev/null +++ b/apps/calcom/metadata/description.md @@ -0,0 +1,609 @@ + +

+ + Logo + + +

Cal.com (formerly Calendso)

+ +

+ The open-source Calendly successor. +
+ Learn more » +
+
+ Discord + · + Website + · + Issues + · + Roadmap +

+

+ +

+ Join Cal.com Discord + Product Hunt + Uptime + Github Stars + Hacker News + License + Commits-per-month + Pricing + Jitsu Tracked + Checkly Availability + + + + + + + +

+ + + +## About the Project + +booking-screen + +# Scheduling infrastructure for absolutely everyone + +The open source Calendly successor. You are in charge +of your own data, workflow, and appearance. + +Calendly and other scheduling tools are awesome. It made our lives massively easier. We're using it for business meetings, seminars, yoga classes, and even calls with our families. However, most tools are very limited in terms of control and customization. + +That's where Cal.com comes in. Self-hosted or hosted by us. White-label by design. API-driven and ready to be deployed on your own domain. Full control of your events and data. + +## Recognition + +#### [Hacker News](https://news.ycombinator.com/from?site=cal.com) + + + Featured on Hacker News + + + + Featured on Hacker News + + +#### [Product Hunt](https://producthunt.com/products/cal-com?utm_source=badge-top-post-badge&utm_medium=badge) + +Cal.com - The open source Calendly alternative | Product Hunt Cal.com - The open source Calendly alternative | Product Hunt Cal.com - The open source Calendly alternative | Product Hunt + +### Built With + +- [Next.js](https://nextjs.org/?ref=cal.com) +- [tRPC](https://trpc.io/?ref=cal.com) +- [React.js](https://reactjs.org/?ref=cal.com) +- [Tailwind CSS](https://tailwindcss.com/?ref=cal.com) +- [Prisma.io](https://prisma.io/?ref=cal.com) +- [Daily.co](https://go.cal.com/daily) + +## Contact us + +Meet our sales team for any commercial inquiries. + +Book us with Cal.com + +## Stay Up-to-Date + +Cal.com officially launched as v.1.0 on the 15th of September 2021 and we've come a long way so far. Watch **releases** of this repository to be notified of future updates: + +![cal-star-github](https://user-images.githubusercontent.com/8019099/154853944-a9e3c999-3da3-4048-b149-b4f73893c6fb.gif) + + + +## Getting Started + +To get a local copy up and running, please follow these simple steps. + +### Prerequisites + +Here is what you need to be able to run Cal.com. + +- Node.js (Version: >=18.x) +- PostgreSQL +- Yarn _(recommended)_ + +> If you want to enable any of the available integrations, you may want to obtain additional credentials for each one. More details on this can be found below under the [integrations section](#integrations). + +## Development + +### Setup + +1. Clone the repo into a public GitHub repository (or fork https://github.com/calcom/cal.com/fork). If you plan to distribute the code, keep the source code public to comply with [AGPLv3](https://github.com/calcom/cal.com/blob/main/LICENSE). To clone in a private repository, [acquire a commercial license](https://cal.com/sales) + + ```sh + git clone https://github.com/calcom/cal.com.git + ``` + + > If you are on Windows, run the following command on `gitbash` with admin privileges:
> `git clone -c core.symlinks=true https://github.com/calcom/cal.com.git`
+ > See [docs](https://cal.com/docs/how-to-guides/how-to-troubleshoot-symbolic-link-issues-on-windows#enable-symbolic-links) for more details. + +2. Go to the project folder + + ```sh + cd cal.com + ``` + +3. Install packages with yarn + + ```sh + yarn + ``` + +4. Set up your `.env` file + + - Duplicate `.env.example` to `.env` + - Use `openssl rand -base64 32` to generate a key and add it under `NEXTAUTH_SECRET` in the `.env` file. + - Use `openssl rand -base64 32` to generate a key and add it under `CALENDSO_ENCRYPTION_KEY` in the `.env` file. + +5. Setup Node + If your Node version does not meet the project's requirements as instructed by the docs, "nvm" (Node Version Manager) allows using Node at the version required by the project: + + ```sh + nvm use + ``` + + You first might need to install the specific version and then use it: + + ```sh + nvm install && nvm use + ``` + + You can install nvm from [here](https://github.com/nvm-sh/nvm). + +#### Quick start with `yarn dx` + +> - **Requires Docker and Docker Compose to be installed** +> - Will start a local Postgres instance with a few test users - the credentials will be logged in the console + +```sh +yarn dx +``` + +#### Development tip + +> Add `NEXT_PUBLIC_DEBUG=1` anywhere in your `.env` to get logging information for all the queries and mutations driven by **tRPC**. + +```sh +echo 'NEXT_PUBLIC_DEBUG=1' >> .env +``` + +#### Gitpod Setup + +1. Click the button below to open this project in Gitpod. + +2. This will open a fully configured workspace in your browser with all the necessary dependencies already installed. + +[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/calcom/cal.com) + +#### Manual setup + +1. Configure environment variables in the `.env` file. Replace ``, ``, ``, and `` with their applicable values + + ``` + DATABASE_URL='postgresql://:@:' + ``` + +
+ If you don't know how to configure the DATABASE_URL, then follow the steps here to create a quick local DB + + 1. [Download](https://www.postgresql.org/download/) and install postgres in your local (if you don't have it already). + + 2. Create your own local db by executing `createDB ` + + 3. Now open your psql shell with the DB you created: `psql -h localhost -U postgres -d ` + + 4. Inside the psql shell execute `\conninfo`. And you will get the following info. + ![image](https://user-images.githubusercontent.com/39329182/236612291-51d87f69-6dc1-4a23-bf4d-1ca1754e0a35.png) + + 5. Now extract all the info and add it to your DATABASE_URL. The url would look something like this + `postgresql://postgres:postgres@localhost:5432/Your-DB-Name`. + +
+ + If you don't want to create a local DB. Then you can also consider using services like railway.app or render. + + - [Setup postgres DB with railway.app](https://docs.railway.app/guides/postgresql) + - [Setup postgres DB with render](https://render.com/docs/databases) + +1. Copy and paste your `DATABASE_URL` from `.env` to `.env.appStore`. + +1. Set up the database using the Prisma schema (found in `packages/prisma/schema.prisma`) + + In a development environment, run: + + ```sh + yarn workspace @calcom/prisma db-migrate + ``` + + In a production environment, run: + + ```sh + yarn workspace @calcom/prisma db-deploy + ``` + +1. Run [mailhog](https://github.com/mailhog/MailHog) to view emails sent during development + + > **_NOTE:_** Required when `E2E_TEST_MAILHOG_ENABLED` is "1" + + ```sh + docker pull mailhog/mailhog + docker run -d -p 8025:8025 -p 1025:1025 mailhog/mailhog + ``` + +1. Run (in development mode) + + ```sh + yarn dev + ``` + +#### Setting up your first user + +##### Approach 1 + +1. Open [Prisma Studio](https://prisma.io/studio) to look at or modify the database content: + + ```sh + yarn db-studio + ``` + +1. Click on the `User` model to add a new user record. +1. Fill out the fields `email`, `username`, `password`, and set `metadata` to empty `{}` (remembering to encrypt your password with [BCrypt](https://bcrypt-generator.com/)) and click `Save 1 Record` to create your first user. + > New users are set on a `TRIAL` plan by default. You might want to adjust this behavior to your needs in the `packages/prisma/schema.prisma` file. +1. Open a browser to [http://localhost:3000](http://localhost:3000) and login with your just created, first user. + +##### Approach 2 + +Seed the local db by running + +```sh +cd packages/prisma +yarn db-seed +``` + +The above command will populate the local db with dummy users. + +### E2E-Testing + +Be sure to set the environment variable `NEXTAUTH_URL` to the correct value. If you are running locally, as the documentation within `.env.example` mentions, the value should be `http://localhost:3000`. + +```sh +# In a terminal just run: +yarn test-e2e + +# To open the last HTML report run: +yarn playwright show-report test-results/reports/playwright-html-report +``` + +#### Resolving issues + +##### E2E test browsers not installed + +Run `npx playwright install` to download test browsers and resolve the error below when running `yarn test-e2e`: + +``` +Executable doesn't exist at /Users/alice/Library/Caches/ms-playwright/chromium-1048/chrome-mac/Chromium.app/Contents/MacOS/Chromium +``` + +### Upgrading from earlier versions + +1. Pull the current version: + + ```sh + git pull + ``` + +1. Check if dependencies got added/updated/removed + + ```sh + yarn + ``` + +1. Apply database migrations by running one of the following commands: + + In a development environment, run: + + ```sh + yarn workspace @calcom/prisma db-migrate + ``` + + (This can clear your development database in some cases) + + In a production environment, run: + + ```sh + yarn workspace @calcom/prisma db-deploy + ``` + +1. Check for `.env` variables changes + + ```sh + yarn predev + ``` + +1. Start the server. In a development environment, just do: + + ```sh + yarn dev + ``` + + For a production build, run for example: + + ```sh + yarn build + yarn start + ``` + +1. Enjoy the new version. + + +## Deployment + +### Docker + +The Docker configuration for Cal.com is an effort powered by people within the community. + +If you want to contribute to the Docker repository, [reply here](https://github.com/calcom/docker/discussions/32). + +The Docker configuration can be found [in our docker repository](https://github.com/calcom/docker). + +Issues with Docker? Find your answer or open a new discussion [here](https://github.com/calcom/docker/discussions) to ask the community. + +Cal.com, Inc. does not provide official support for Docker, but we will accept fixes and documentation. Use at your own risk. + +### Railway + +[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/new/template/cal) + +You can deploy Cal.com on [Railway](https://railway.app) using the button above. The team at Railway also have a [detailed blog post](https://blog.railway.app/p/calendso) on deploying Cal.com on their platform. + +### Vercel + +Currently Vercel Pro Plan is required to be able to Deploy this application with Vercel, due to limitations on the number of serverless functions on the free plan. + +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fcalcom%2Fcal.com&env=DATABASE_URL,NEXT_PUBLIC_WEBAPP_URL,NEXTAUTH_URL,NEXTAUTH_SECRET,CRON_API_KEY,CALENDSO_ENCRYPTION_KEY&envDescription=See%20all%20available%20env%20vars&envLink=https%3A%2F%2Fgithub.com%2Fcalcom%2Fcal.com%2Fblob%2Fmain%2F.env.example&project-name=cal&repo-name=cal.com&build-command=cd%20../..%20%26%26%20yarn%20build&root-directory=apps%2Fweb%2F) + +### Render + +[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/calcom/docker) + +### Elestio + +[![Deploy on Elestio](https://pub-da36157c854648669813f3f76c526c2b.r2.dev/deploy-on-elestio-black.png)](https://elest.io/open-source/cal.com) + + + +## Roadmap + +Cal.com Roadmap + +See the [roadmap project](https://cal.com/roadmap) for a list of proposed features (and known issues). You can change the view to see planned tagged releases. + + + +## Repo Activity + + + + + +## Contributing + +Please see our [contributing guide](/CONTRIBUTING.md). + +### Good First Issues + +We have a list of [help wanted](https://github.com/calcom/cal.com/issues?q=is:issue+is:open+label:%22%F0%9F%99%8B%F0%9F%8F%BB%E2%80%8D%E2%99%82%EF%B8%8Fhelp+wanted%22) that contain small features and bugs which have a relatively limited scope. This is a great place to get started, gain experience, and get familiar with our contribution process. + + + +### Bounties + + + + + Bounties of cal + + + + + +### Contributors + + + + + + + +### Translations + +Don't code but still want to contribute? Join our [discord](https://go.cal.com/discord) and join the [#Translate channel](https://discord.com/channels/1125390093386010654/1125398231585661040) and let us know what language you want to translate. + +![ar translation](https://img.shields.io/badge/dynamic/json?color=blue&label=ar&style=flat&logo=crowdin&query=%24.progress.0.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![bg translation](https://img.shields.io/badge/dynamic/json?color=blue&label=bg&style=flat&logo=crowdin&query=%24.progress.1.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![cs translation](https://img.shields.io/badge/dynamic/json?color=blue&label=cs&style=flat&logo=crowdin&query=%24.progress.2.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![de translation](https://img.shields.io/badge/dynamic/json?color=blue&label=de&style=flat&logo=crowdin&query=%24.progress.3.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![el translation](https://img.shields.io/badge/dynamic/json?color=blue&label=el&style=flat&logo=crowdin&query=%24.progress.4.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![en translation](https://img.shields.io/badge/dynamic/json?color=blue&label=en&style=flat&logo=crowdin&query=%24.progress.5.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![es translation](https://img.shields.io/badge/dynamic/json?color=blue&label=es&style=flat&logo=crowdin&query=%24.progress.6.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![es-419 translation](https://img.shields.io/badge/dynamic/json?color=blue&label=es-419&style=flat&logo=crowdin&query=%24.progress.7.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![fr translation](https://img.shields.io/badge/dynamic/json?color=blue&label=fr&style=flat&logo=crowdin&query=%24.progress.8.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![he translation](https://img.shields.io/badge/dynamic/json?color=blue&label=he&style=flat&logo=crowdin&query=%24.progress.9.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![hu translation](https://img.shields.io/badge/dynamic/json?color=blue&label=hu&style=flat&logo=crowdin&query=%24.progress.10.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![it translation](https://img.shields.io/badge/dynamic/json?color=blue&label=it&style=flat&logo=crowdin&query=%24.progress.11.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![ja translation](https://img.shields.io/badge/dynamic/json?color=blue&label=ja&style=flat&logo=crowdin&query=%24.progress.12.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![ko translation](https://img.shields.io/badge/dynamic/json?color=blue&label=ko&style=flat&logo=crowdin&query=%24.progress.13.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![nl translation](https://img.shields.io/badge/dynamic/json?color=blue&label=nl&style=flat&logo=crowdin&query=%24.progress.14.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![no translation](https://img.shields.io/badge/dynamic/json?color=blue&label=no&style=flat&logo=crowdin&query=%24.progress.15.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![pl translation](https://img.shields.io/badge/dynamic/json?color=blue&label=pl&style=flat&logo=crowdin&query=%24.progress.16.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![pt translation](https://img.shields.io/badge/dynamic/json?color=blue&label=pt&style=flat&logo=crowdin&query=%24.progress.17.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![pt-BR translation](https://img.shields.io/badge/dynamic/json?color=blue&label=pt-BR&style=flat&logo=crowdin&query=%24.progress.18.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![ro translation](https://img.shields.io/badge/dynamic/json?color=blue&label=ro&style=flat&logo=crowdin&query=%24.progress.19.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![ru translation](https://img.shields.io/badge/dynamic/json?color=blue&label=ru&style=flat&logo=crowdin&query=%24.progress.20.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![sr translation](https://img.shields.io/badge/dynamic/json?color=blue&label=sr&style=flat&logo=crowdin&query=%24.progress.21.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![sv translation](https://img.shields.io/badge/dynamic/json?color=blue&label=sv&style=flat&logo=crowdin&query=%24.progress.22.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![tr translation](https://img.shields.io/badge/dynamic/json?color=blue&label=tr&style=flat&logo=crowdin&query=%24.progress.23.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![uk translation](https://img.shields.io/badge/dynamic/json?color=blue&label=uk&style=flat&logo=crowdin&query=%24.progress.24.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![vi translation](https://img.shields.io/badge/dynamic/json?color=blue&label=vi&style=flat&logo=crowdin&query=%24.progress.25.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![zh-CN translation](https://img.shields.io/badge/dynamic/json?color=blue&label=zh-CN&style=flat&logo=crowdin&query=%24.progress.26.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![zh-TW translation](https://img.shields.io/badge/dynamic/json?color=blue&label=zh-TW&style=flat&logo=crowdin&query=%24.progress.27.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) + +## Enabling Content Security Policy + +- Set CSP_POLICY="non-strict" env variable, which enables [Strict CSP](https://web.dev/strict-csp/) except for unsafe-inline in style-src . If you have some custom changes in your instance, you might have to make some code change to make your instance CSP compatible. Right now it enables strict CSP only on login page and on other SSR pages it is enabled in Report only mode to detect possible issues. On, SSG pages it is still not supported. + +## Integrations + +### Obtaining the Google API Credentials + +1. Open [Google API Console](https://console.cloud.google.com/apis/dashboard). If you don't have a project in your Google Cloud subscription, you'll need to create one before proceeding further. Under Dashboard pane, select Enable APIS and Services. +2. In the search box, type calendar and select the Google Calendar API search result. +3. Enable the selected API. +4. Next, go to the [OAuth consent screen](https://console.cloud.google.com/apis/credentials/consent) from the side pane. Select the app type (Internal or External) and enter the basic app details on the first page. +5. In the second page on Scopes, select Add or Remove Scopes. Search for Calendar.event and select the scope with scope value `.../auth/calendar.events`, `.../auth/calendar.readonly` and select Update. +6. In the third page (Test Users), add the Google account(s) you'll be using. Make sure the details are correct on the last page of the wizard and your consent screen will be configured. +7. Now select [Credentials](https://console.cloud.google.com/apis/credentials) from the side pane and then select Create Credentials. Select the OAuth Client ID option. +8. Select Web Application as the Application Type. +9. Under Authorized redirect URI's, select Add URI and then add the URI `/api/integrations/googlecalendar/callback` and `/api/auth/callback/google` replacing Cal.com URL with the URI at which your application runs. +10. The key will be created and you will be redirected back to the Credentials page. Select the newly generated client ID under OAuth 2.0 Client IDs. +11. Select Download JSON. Copy the contents of this file and paste the entire JSON string in the `.env` file as the value for `GOOGLE_API_CREDENTIALS` key. + +#### _Adding google calendar to Cal.com App Store_ + +After adding Google credentials, you can now Google Calendar App to the app store. +You can repopulate the App store by running + +``` +cd packages/prisma +yarn seed-app-store +``` + +You will need to complete a few more steps to activate Google Calendar App. +Make sure to complete section "Obtaining the Google API Credentials". After that do the +following + +1. Add extra redirect URL `/api/auth/callback/google` +1. Under 'OAuth consent screen', click "PUBLISH APP" + +### Obtaining Microsoft Graph Client ID and Secret + +1. Open [Azure App Registration](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps) and select New registration +2. Name your application +3. Set **Who can use this application or access this API?** to **Accounts in any organizational directory (Any Azure AD directory - Multitenant)** +4. Set the **Web** redirect URI to `/api/integrations/office365calendar/callback` replacing Cal.com URL with the URI at which your application runs. +5. Use **Application (client) ID** as the **MS_GRAPH_CLIENT_ID** attribute value in .env +6. Click **Certificates & secrets** create a new client secret and use the value as the **MS_GRAPH_CLIENT_SECRET** attribute + +### Obtaining Zoom Client ID and Secret + +1. Open [Zoom Marketplace](https://marketplace.zoom.us/) and sign in with your Zoom account. +2. On the upper right, click "Develop" => "Build App". +3. On "OAuth", select "Create". +4. Name your App. +5. Choose "User-managed app" as the app type. +6. De-select the option to publish the app on the Zoom App Marketplace. +7. Click "Create". +8. Now copy the Client ID and Client Secret to your `.env` file into the `ZOOM_CLIENT_ID` and `ZOOM_CLIENT_SECRET` fields. +9. Set the Redirect URL for OAuth `/api/integrations/zoomvideo/callback` replacing Cal.com URL with the URI at which your application runs. +10. Also add the redirect URL given above as an allow list URL and enable "Subdomain check". Make sure, it says "saved" below the form. +11. You don't need to provide basic information about your app. Instead click on "Scopes" and then on "+ Add Scopes". On the left, click the category "Meeting" and check the scope `meeting:write`. +12. Click "Done". +13. You're good to go. Now you can easily add your Zoom integration in the Cal.com settings. + +### Obtaining Daily API Credentials + +1. Visit our [Daily.co Partnership Form](https://go.cal.com/daily) and enter your information +2. From within your dashboard, go to the [developers](https://dashboard.daily.co/developers) tab. +3. Copy your API key. +4. Now paste the API key to your `.env` file into the `DAILY_API_KEY` field in your `.env` file. +5. If you have the [Daily Scale Plan](https://daily.co/pricing) set the `DAILY_SCALE_PLAN` variable to `true` in order to use features like video recording. + +### Obtaining Basecamp Client ID and Secret + +1. Visit the [37 Signals Integrations Dashboard](launchpad.37signals.com/integrations) and sign in. +2. Register a new application by clicking the Register one now link. +3. Fill in your company details. +4. Select Basecamp 4 as the product to integrate with. +5. Set the Redirect URL for OAuth `/api/integrations/basecamp3/callback` replacing Cal.com URL with the URI at which your application runs. +6. Click on done and copy the Client ID and secret into the `BASECAMP3_CLIENT_ID` and `BASECAMP3_CLIENT_SECRET` fields. +7. Set the `BASECAMP3_CLIENT_SECRET` env variable to `{your_domain} ({support_email})`. + For example, `Cal.com (support@cal.com)`. + +### Obtaining HubSpot Client ID and Secret + +1. Open [HubSpot Developer](https://developer.hubspot.com/) and sign into your account, or create a new one. +2. From within the home of the Developer account page, go to "Manage apps". +3. Click "Create app" button top right. +4. Fill in any information you want in the "App info" tab +5. Go to tab "Auth" +6. Now copy the Client ID and Client Secret to your `.env` file into the `HUBSPOT_CLIENT_ID` and `HUBSPOT_CLIENT_SECRET` fields. +7. Set the Redirect URL for OAuth `/api/integrations/hubspot/callback` replacing Cal.com URL with the URI at which your application runs. +8. In the "Scopes" section at the bottom of the page, make sure you select "Read" and "Write" for scope called `crm.objects.contacts` +9. Click the "Save" button at the bottom footer. +10. You're good to go. Now you can see any booking in Cal.com created as a meeting in HubSpot for your contacts. + +### Obtaining Webex Client ID and Secret + +[See Webex Readme](./packages/app-store/webex/) + +### Obtaining ZohoCRM Client ID and Secret + +1. Open [Zoho API Console](https://api-console.zoho.com/) and sign into your account, or create a new one. +2. From within the API console page, go to "Applications". +3. Click "ADD CLIENT" button top right and select "Server-based Applications". +4. Fill in any information you want in the "Client Details" tab +5. Go to tab "Client Secret" tab. +6. Now copy the Client ID and Client Secret to your `.env` file into the `ZOHOCRM_CLIENT_ID` and `ZOHOCRM_CLIENT_SECRET` fields. +7. Set the Redirect URL for OAuth `/api/integrations/zohocrm/callback` replacing Cal.com URL with the URI at which your application runs. +8. In the "Settings" section check the "Multi-DC" option if you wish to use the same OAuth credentials for all data centers. +9. Click the "Save"/ "UPDATE" button at the bottom footer. +10. You're good to go. Now you can easily add your ZohoCRM integration in the Cal.com settings. + +### Obtaining Zoho Calendar Client ID and Secret + +[Follow these steps](./packages/app-store/zohocalendar/) + +### Obtaining Zoho Bigin Client ID and Secret + +[Follow these steps](./packages/app-store/zoho-bigin/) + +### Obtaining Pipedrive Client ID and Secret + +[Follow these steps](./packages/app-store/pipedrive-crm/) + +## Workflows + +### Setting up SendGrid for Email reminders + +1. Create a SendGrid account (https://signup.sendgrid.com/) +2. Go to Settings -> API keys and create an API key +3. Copy API key to your `.env` file into the `SENDGRID_API_KEY` field +4. Go to Settings -> Sender Authentication and verify a single sender +5. Copy the verified E-Mail to your `.env` file into the `SENDGRID_EMAIL` field +6. Add your custom sender name to the `.env` file into the `NEXT_PUBLIC_SENDGRID_SENDER_NAME` field (fallback is Cal.com) + +### Setting up Twilio for SMS reminders + +1. Create a Twilio account (https://twilio.com/try-twilio) +2. Click ‘Get a Twilio phone number’ +3. Copy Account SID to your `.env` file into the `TWILIO_SID` field +4. Copy Auth Token to your `.env` file into the `TWILIO_TOKEN` field +5. Copy your Twilio phone number to your `.env` file into the `TWILIO_PHONE_NUMBER` field +6. Add your own sender ID to the `.env` file into the `NEXT_PUBLIC_SENDER_ID` field (fallback is Cal.com) +7. Create a messaging service (Develop -> Messaging -> Services) +8. Choose any name for the messaging service +9. Click 'Add Senders' +10. Choose phone number as sender type +11. Add the listed phone number +12. Leave all other fields as they are +13. Complete setup and click ‘View my new Messaging Service’ +14. Copy Messaging Service SID to your `.env` file into the `TWILIO_MESSAGING_SID` field +15. Create a verify service +16. Copy Verify Service SID to your `.env` file into the `TWILIO_VERIFY_SID` field + + + +## License + +Distributed under the [AGPLv3 License](https://github.com/calcom/cal.com/blob/main/LICENSE). See `LICENSE` for more information. + + + +## Acknowledgements + +Special thanks to these amazing projects which help power Cal.com: + +- [Vercel](https://vercel.com/?utm_source=calend-so&utm_campaign=oss) +- [Next.js](https://nextjs.org/) +- [Day.js](https://day.js.org/) +- [Tailwind CSS](https://tailwindcss.com/) +- [Prisma](https://prisma.io/) + +Cal.com is an [open startup](https://cal.com/open) and [Jitsu](https://github.com/jitsucom/jitsu) (an open-source Segment alternative) helps us to track most of the usage metrics. diff --git a/apps/calcom/metadata/logo.jpg b/apps/calcom/metadata/logo.jpg new file mode 100644 index 00000000..e773e1d4 Binary files /dev/null and b/apps/calcom/metadata/logo.jpg differ diff --git a/apps/changedetection/config.json b/apps/changedetection/config.json index 9b7728ea..afa06a3c 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": 11, - "version": "0.45.13", + "tipi_version": 12, + "version": "0.45.14", "categories": [ "utilities" ], diff --git a/apps/changedetection/docker-compose.yml b/apps/changedetection/docker-compose.yml index 45944106..900de1ad 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.13 + image: ghcr.io/dgtlmoon/changedetection.io:0.45.14 container_name: changedetection hostname: changedetection volumes: diff --git a/apps/cloudflared/config.json b/apps/cloudflared/config.json index 92b84bbb..822f28de 100644 --- a/apps/cloudflared/config.json +++ b/apps/cloudflared/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": false, "id": "cloudflared", - "tipi_version": 5, - "version": "2024.1.5", + "tipi_version": 7, + "version": "2024.2.1", "categories": [ "utilities" ], diff --git a/apps/cloudflared/docker-compose.yml b/apps/cloudflared/docker-compose.yml index a2b0c352..445620e8 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.5 + image: wisdomsky/cloudflared-web:2024.2.1 container_name: cloudflared restart: unless-stopped network_mode: host diff --git a/apps/code-server/config.json b/apps/code-server/config.json index 1f60cdc2..9373481a 100644 --- a/apps/code-server/config.json +++ b/apps/code-server/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8138, "id": "code-server", - "tipi_version": 21, - "version": "4.20.1", + "tipi_version": 23, + "version": "4.21.2", "categories": [ "development" ], diff --git a/apps/code-server/docker-compose.yml b/apps/code-server/docker-compose.yml index 1beb47d2..81dfa04c 100644 --- a/apps/code-server/docker-compose.yml +++ b/apps/code-server/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: code-server: - image: lscr.io/linuxserver/code-server:4.20.1 + image: lscr.io/linuxserver/code-server:4.21.2 container_name: code-server environment: - PUID=1000 diff --git a/apps/ctfd/config.json b/apps/ctfd/config.json index d59ca33e..cc8be674 100644 --- a/apps/ctfd/config.json +++ b/apps/ctfd/config.json @@ -1,43 +1,42 @@ { - "$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 + "$schema": "../schema.json", + "name": "CTFd", + "port": 8546, + "available": true, + "exposable": true, + "id": "ctfd", + "tipi_version": 2, + "version": "3.7.0", + "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" + ] +} diff --git a/apps/ctfd/docker-compose.yml b/apps/ctfd/docker-compose.yml index a695dde3..a6521c06 100644 --- a/apps/ctfd/docker-compose.yml +++ b/apps/ctfd/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: ctfd: - image: ctfd/ctfd:3.6.1 + image: ctfd/ctfd:3.7.0 container_name: ctfd restart: unless-stopped ports: diff --git a/apps/dozzle/config.json b/apps/dozzle/config.json index 1cf5ca53..cb7b3c89 100644 --- a/apps/dozzle/config.json +++ b/apps/dozzle/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8013, "id": "dozzle", - "tipi_version": 8, - "version": "6.1.1", + "tipi_version": 10, + "version": "6.2.5", "categories": [ "development" ], diff --git a/apps/dozzle/docker-compose.yml b/apps/dozzle/docker-compose.yml index 40ca4dd9..12e2655e 100644 --- a/apps/dozzle/docker-compose.yml +++ b/apps/dozzle/docker-compose.yml @@ -1,7 +1,7 @@ services: dozzle: container_name: dozzle - image: amir20/dozzle:v6.1.1 + image: amir20/dozzle:v6.2.5 restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock diff --git a/apps/drawio/config.json b/apps/drawio/config.json index b12bf873..4df2fe91 100644 --- a/apps/drawio/config.json +++ b/apps/drawio/config.json @@ -6,8 +6,8 @@ "url_suffix": "?offline=1", "id": "drawio", "description": "draw.io is a JavaScript, client-side editor for general diagramming and whiteboarding.", - "tipi_version": 20, - "version": "22.1.22", + "tipi_version": 22, + "version": "23.1.6", "categories": [ "utilities" ], diff --git a/apps/drawio/docker-compose.yml b/apps/drawio/docker-compose.yml index b28b68d3..ccb10f63 100644 --- a/apps/drawio/docker-compose.yml +++ b/apps/drawio/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: drawio: - image: jgraph/drawio:22.1.22 + image: jgraph/drawio:23.1.6 ports: - ${APP_PORT}:8080 container_name: drawio diff --git a/apps/eclipse-mosquitto/config.json b/apps/eclipse-mosquitto/config.json new file mode 100755 index 00000000..6f4a7934 --- /dev/null +++ b/apps/eclipse-mosquitto/config.json @@ -0,0 +1,34 @@ +{ + "$schema": "../schema.json", + "name": "Eclipse Mosquitto", + "port": 8288, + "available": true, + "exposable": true, + "id": "eclipse-mosquitto", + "tipi_version": 1, + "version": "2.0.18", + "categories": [ + "utilities", + "automation" + ], + "description": "Eclipse Mosquitto is an open source message broker that implements the MQTT protocol.", + "short_desc": "open source message broker", + "author": "Eclipse Foundation", + "source": "https://github.com/eclipse/mosquitto/", + "website": "https://mosquitto.org/", + "form_fields": [ + { + "type": "password", + "label": "MQTT Broker Admin Password", + "max": 50, + "min": 6, + "required": true, + "env_variable": "MQTT_ADMIN_PASSWORD" + } + ], + "supported_architectures": [ + "arm64", + "amd64" + ] +} + diff --git a/apps/eclipse-mosquitto/data/config/mosquitto.conf b/apps/eclipse-mosquitto/data/config/mosquitto.conf new file mode 100755 index 00000000..377870e7 --- /dev/null +++ b/apps/eclipse-mosquitto/data/config/mosquitto.conf @@ -0,0 +1,26 @@ +# Copyright 2022 Shantanoo "Shan" Desai +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Mosquitto v2.0 Configuration File + +# Default Port +listener 1883 + +# Dynamic Security Plugin +plugin /usr/lib/mosquitto_dynamic_security.so + +# Path to the Dynamic Security JSON file, will be generated on first launch +plugin_opt_config_file /mosquitto/config/dynamic-security.json + +# Ever User / Client should follow the given RBAC rules +per_listener_settings false diff --git a/apps/eclipse-mosquitto/data/data/.gitkeep b/apps/eclipse-mosquitto/data/data/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/eclipse-mosquitto/data/scripts/dynsec-setup.sh b/apps/eclipse-mosquitto/data/scripts/dynsec-setup.sh new file mode 100644 index 00000000..1333a6fe --- /dev/null +++ b/apps/eclipse-mosquitto/data/scripts/dynsec-setup.sh @@ -0,0 +1,34 @@ +#!/bin/sh +# Copyright 2022 Shantanoo "Shan" Desai +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Setup Script to be executed in a Docker Init Container + +# Set Default Admin Credentials for Dynamic Security Plugin Configuration +DEFAULT_DYNSEC_ADMIN=admin +DEFAULT_DYNSEC_PASSWORD=securePassword +DYNSEC_FILE_PATH=/mosquitto/config/dynamic-security.json + +# Set values if provided via Environment Variables in the Docker Init Container +MQTT_DYNSEC_ADMIN_USER=${MQTT_DYNSEC_ADMIN_USER:-$DEFAULT_DYNSEC_ADMIN} +MQTT_DYNSEC_ADMIN_PASSWORD=${MQTT_DYNSEC_ADMIN_PASSWORD:-$DEFAULT_DYNSEC_PASSWORD} + +# echo "Admin/Pass: ${MQTT_DYNSEC_ADMIN_USER}/${MQTT_DYNSEC_ADMIN_PASSWORD}" ## DEBUG + +# Set the Admin Credentials for RBAC control via Dyamic Security Plugin +mosquitto_ctrl dynsec init ${DYNSEC_FILE_PATH} ${MQTT_DYNSEC_ADMIN_USER} ${MQTT_DYNSEC_ADMIN_PASSWORD} + +chmod 700 ${DYNSEC_FILE_PATH} +chown 1883:1883 ${DYNSEC_FILE_PATH} + +exec "$@" diff --git a/apps/eclipse-mosquitto/docker-compose.yml b/apps/eclipse-mosquitto/docker-compose.yml new file mode 100755 index 00000000..925014ae --- /dev/null +++ b/apps/eclipse-mosquitto/docker-compose.yml @@ -0,0 +1,69 @@ +version: '3.7' + +services: + eclipse-mosquitto: + image: eclipse-mosquitto:2.0.18 + container_name: eclipse-mosquitto + environment: + - TZ=${TZ} + - MQTT_DYNSEC_ADMIN_USER=admin + - MQTT_DYNSEC_ADMIN_PASSWORD=${MQTT_ADMIN_PASSWORD} + ports: + - 1883:1883 + command: ['/dynsec-setup.sh', '/usr/sbin/mosquitto', '-c', '/mosquitto/config/mosquitto.conf'] + expose: + - 1883 + volumes: + - ${APP_DATA_DIR}/data/data:/mosquitto/data + - ${APP_DATA_DIR}/data/config:/mosquitto/config + - ${APP_DATA_DIR}/data/scripts/dynsec-setup.sh:/dynsec-setup.sh + restart: unless-stopped + networks: + - tipi_main_network + + mosquitto-management-center: + image: cedalo/management-center:dev + container_name: mosquitto-management-center + environment: + - TZ=${TZ} + - CEDALO_MC_BROKER_ID=mosquitto-broker + - CEDALO_MC_BROKER_NAME=mosquitto-broker-2 + - CEDALO_MC_BROKER_URL=mqtt://mosquitto-broker:1883 + - CEDALO_MC_BROKER_USERNAME=admin + - CEDALO_MC_BROKER_PASSWORD=${MQTT_ADMIN_PASSWORD} + - CEDALO_MC_USERNAME=admin + - CEDALO_MC_PASSWORD=admin + ports: + - ${APP_PORT}:8088 + expose: + - 8088 + depends_on: + - eclipse-mosquitto + networks: + - tipi_main_network + restart: unless-stopped + labels: + # Main + traefik.enable: true + traefik.http.middlewares.mosquitto-web-redirect.redirectscheme.scheme: https + traefik.http.services.mosquitto.loadbalancer.server.port: 8088 + # Web + traefik.http.routers.mosquitto-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.mosquitto-insecure.entrypoints: web + traefik.http.routers.mosquitto-insecure.service: mosquitto-web + traefik.http.routers.mosquitto-insecure.middlewares: mosquitto-web-redirect + # Websecure + traefik.http.routers.mosquitto.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.mosquitto.entrypoints: websecure + traefik.http.routers.mosquitto.service: mosquitto-web + traefik.http.routers.mosquitto.tls.certresolver: myresolver + # Local domain + traefik.http.routers.mosquitto-local-insecure.rule: Host(`mosquitto.${LOCAL_DOMAIN}`) + traefik.http.routers.mosquitto-local-insecure.entrypoints: web + traefik.http.routers.mosquitto-local-insecure.service: mosquitto-web + traefik.http.routers.mosquitto-local-insecure.middlewares: mosquitto-web-redirect + # Local domain secure + traefik.http.routers.mosquitto-local.rule: Host(`mosquitto.${LOCAL_DOMAIN}`) + traefik.http.routers.mosquitto-local.entrypoints: websecure + traefik.http.routers.mosquitto-local.service: mosquitto-web + traefik.http.routers.mosquitto-local.tls: true diff --git a/apps/eclipse-mosquitto/metadata/caledo_mgm_center.png b/apps/eclipse-mosquitto/metadata/caledo_mgm_center.png new file mode 100644 index 00000000..46a09021 Binary files /dev/null and b/apps/eclipse-mosquitto/metadata/caledo_mgm_center.png differ diff --git a/apps/eclipse-mosquitto/metadata/description.md b/apps/eclipse-mosquitto/metadata/description.md new file mode 100755 index 00000000..71db6cff --- /dev/null +++ b/apps/eclipse-mosquitto/metadata/description.md @@ -0,0 +1,64 @@ +# Eclipse Mosquitto MQTT Broker with UI + +this app consists of two images providing an mqtt broker and an UI for managing access to the broker. +The configuration is adapted from the github repo: [shantanoo-desai/mqtt-rbac-docker-init](https://github.com/shantanoo-desai/mqtt-rbac-docker-init) + + +## Eclipse Mosquitto + +[Eclipse Mosquitto](https://mosquitto.org/) is an open source (EPL/EDL licensed) message broker that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1. Mosquitto is lightweight and is suitable for use on all devices from low power single board computers to full servers. + +Mosquitto is part of the [Eclipse Foundation](https://eclipse.org/), and is an [iot.eclipse.org project](https://iot.eclipse.org/). The development is driven by Cedalo. + +The broker is configured by default that it listens to the port **1883** for tcp connections. +To also use websocket connection you can enable it by edit the `/runtipi/app-date/eclipse-mosquitto/data/config/moscquitto.conf` with the following content: + +``` +listener 9001 +protocol websockets +``` + +**Note** +WebSockets, while powerful, can introduce vulnerabilities if left unsecured. They should be secured using TLS/encryption. +For more detailed information the [mosquitto documentation](https://mosquitto.org/man/mosquitto-conf-5.html). + + +## Cedalo Management Center + +[Cedalo Management Center](https://github.com/cedalo/management-center) allows to easily manage, monitor and inspect instances of Eclipse Mosquitto. There are some pro features that can only be activated by getting a license from cedalo. + +![caledo_mgm_center.png](caledo_mgm_center.png) + +By default the following features are provided: + +- A system dashboard to view key figures, showing broker traffic, license and client infos. +- Table of clients, which have connected to the broker, for inspection purposes. +- A topic tree, displaying those topics that have been addressed, while the MMC is running. +- Management of broker security allowing to modify clients, group and roles. +- A terminal to execute commands related to the dynamic security API +- Management Center infos and settings + +The access to the broker is handled by the [dynamic-security plugin](https://mosquitto.org/documentation/dynamic-security/) in the mosquitto broker. The configuration is stored in the file `/runtipi/app-date/eclipse-mosquitto/data/config/dynamic-security.json`. This file is generated during the first launch of the the mosquitto image. + + +## Links + +### See the following links for more information on MQTT: + +- Community page: [http://mqtt.org/](http://mqtt.org/) +- MQTT v3.1.1 standard: [https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html](https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html) +- MQTT v5.0 standard: [https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html](https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html) + +### Mosquitto project information is available at the following locations: + +- Main homepage: [https://mosquitto.org/](https://mosquitto.org/) +- Find existing bugs or submit a new bug: [https://github.com/eclipse/mosquitto/issues](https://github.com/eclipse/mosquitto/issues) +- Source code repository: [https://github.com/eclipse/mosquitto](https://github.com/eclipse/mosquitto) + +There is also a public test server available at [https://test.mosquitto.org/](https://test.mosquitto.org/) + +### More information about the management center is available at the following locations: + +- Main homepage: [https://cedalo.com/mqtt-broker-pro-mosquitto/](https://cedalo.com/mqtt-broker-pro-mosquitto/) +- Documentation: [https://docs.cedalo.com/mosquitto/management-center/introduction](https://docs.cedalo.com/mosquitto/management-center/introduction) +- Source code repository: [https://github.com/cedalo/management-center](https://github.com/cedalo/management-center) diff --git a/apps/eclipse-mosquitto/metadata/logo.jpg b/apps/eclipse-mosquitto/metadata/logo.jpg new file mode 100755 index 00000000..9330eeb6 Binary files /dev/null and b/apps/eclipse-mosquitto/metadata/logo.jpg differ diff --git a/apps/email-oauth2-proxy/config.json b/apps/email-oauth2-proxy/config.json index f736620c..ba5644c0 100644 --- a/apps/email-oauth2-proxy/config.json +++ b/apps/email-oauth2-proxy/config.json @@ -6,8 +6,8 @@ "no_gui": true, "port": 1999, "id": "email-oauth2-proxy", - "tipi_version": 3, - "version": "2024.01.24", + "tipi_version": 4, + "version": "2024.02.22", "categories": [ "utilities", "security" diff --git a/apps/email-oauth2-proxy/docker-compose.yml b/apps/email-oauth2-proxy/docker-compose.yml index 8069ca41..441d5f2a 100644 --- a/apps/email-oauth2-proxy/docker-compose.yml +++ b/apps/email-oauth2-proxy/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.9" services: email-oauth2-proxy: container_name: email-oauth2-proxy - image: ghcr.io/blacktirion/email-oauth2-proxy-docker:2024.01.24 + image: ghcr.io/blacktirion/email-oauth2-proxy-docker:2024.02.22 ports: - ${APP_PORT}:80 restart: unless-stopped diff --git a/apps/emulatorjs/config.json b/apps/emulatorjs/config.json index 0e1ed232..1920ae09 100644 --- a/apps/emulatorjs/config.json +++ b/apps/emulatorjs/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "emulatorjs", - "tipi_version": 11, - "version": "1.8.7", + "tipi_version": 12, + "version": "1.8.8", "categories": [ "gaming" ], diff --git a/apps/emulatorjs/docker-compose.yml b/apps/emulatorjs/docker-compose.yml index 5d9b976b..e1b6dc7f 100644 --- a/apps/emulatorjs/docker-compose.yml +++ b/apps/emulatorjs/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.7" services: emulatorjs: container_name: emulatorjs - image: lscr.io/linuxserver/emulatorjs:1.8.7 + image: lscr.io/linuxserver/emulatorjs:1.8.8 ports: - ${APP_PORT}:80 - 8165:3000 diff --git a/apps/flaresolverr/config.json b/apps/flaresolverr/config.json index 7c5db38f..3cdf10c4 100644 --- a/apps/flaresolverr/config.json +++ b/apps/flaresolverr/config.json @@ -6,8 +6,8 @@ "exposable": false, "no_gui": true, "id": "flaresolverr", - "tipi_version": 9, - "version": "3.3.13", + "tipi_version": 12, + "version": "3.3.16", "categories": [ "media", "security", diff --git a/apps/flaresolverr/docker-compose.yml b/apps/flaresolverr/docker-compose.yml index 49a853eb..ec686ce2 100644 --- a/apps/flaresolverr/docker-compose.yml +++ b/apps/flaresolverr/docker-compose.yml @@ -1,7 +1,7 @@ services: flaresolverr: container_name: flaresolverr - image: ghcr.io/flaresolverr/flaresolverr:v3.3.13 + image: ghcr.io/flaresolverr/flaresolverr:v3.3.16 restart: unless-stopped environment: - LOG_LEVEL=${FLARESOLVERR_LOG_LEVEL-info} diff --git a/apps/flatnotes/config.json b/apps/flatnotes/config.json index 62467423..250afe35 100644 --- a/apps/flatnotes/config.json +++ b/apps/flatnotes/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "flatnotes", "port": 8137, - "tipi_version": 18, - "version": "3.6.1", + "tipi_version": 19, + "version": "4.0.2", "categories": [ "utilities" ], diff --git a/apps/flatnotes/docker-compose.yml b/apps/flatnotes/docker-compose.yml index d8814ebc..bf90fc7d 100644 --- a/apps/flatnotes/docker-compose.yml +++ b/apps/flatnotes/docker-compose.yml @@ -3,7 +3,7 @@ version: "3" services: flatnotes: container_name: flatnotes - image: dullage/flatnotes:v3.6.1 + image: dullage/flatnotes:v4.0.2 environment: FLATNOTES_AUTH_TYPE: ${FLATNOTES_AUTH_TYPE} FLATNOTES_USERNAME: ${FLATNOTES_USERNAME} diff --git a/apps/flowise/config.json b/apps/flowise/config.json index f1662af7..1b94ae85 100644 --- a/apps/flowise/config.json +++ b/apps/flowise/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8009, "id": "flowise", - "tipi_version": 3, - "version": "1.4.12", + "tipi_version": 6, + "version": "1.6.0", "categories": [ "ai", "automation" diff --git a/apps/flowise/docker-compose.yml b/apps/flowise/docker-compose.yml index 57f2eaf6..3ec1ae27 100644 --- a/apps/flowise/docker-compose.yml +++ b/apps/flowise/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.7' services: flowise: - image: flowiseai/flowise:1.4.12 + image: flowiseai/flowise:1.6.0 restart: unless-stopped command: /bin/sh -c "sleep 3; flowise start" container_name: flowise diff --git a/apps/forgejo/config.json b/apps/forgejo/config.json index 27a57616..a1b38b0c 100644 --- a/apps/forgejo/config.json +++ b/apps/forgejo/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "forgejo", - "tipi_version": 13, - "version": "1.21.5-0", + "tipi_version": 14, + "version": "1.21.6-0", "categories": [ "development" ], diff --git a/apps/forgejo/docker-compose.yml b/apps/forgejo/docker-compose.yml index d39e3314..bc8d43da 100644 --- a/apps/forgejo/docker-compose.yml +++ b/apps/forgejo/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.7' services: forgejo: - image: codeberg.org/forgejo/forgejo:1.21.5-0 + image: codeberg.org/forgejo/forgejo:1.21.6-0 container_name: forgejo environment: - USER_UID=1000 diff --git a/apps/gandi-livedns/config.json b/apps/gandi-livedns/config.json index 13367975..e581c09b 100644 --- a/apps/gandi-livedns/config.json +++ b/apps/gandi-livedns/config.json @@ -6,7 +6,7 @@ "no_gui": true, "id": "gandi-livedns", "port": 8134, - "tipi_version": 1, + "tipi_version": 2, "version": "latest", "categories": ["network"], "description": "The purpose of this container is to update DNS zone records using Gandi's LiveDNS (http://doc.livedns.gandi.net/) with your WAN IP. This image is extremely lightweight (Alpine Linux based) and has very few dependencies. The actual DNS update program is coded in shell script only.", @@ -16,11 +16,11 @@ "form_fields": [ { "type": "text", - "label": "Gandi API key", - "max": 24, - "min": 24, + "label": "Gandi Personal Access Token", + "max": 40, + "min": 40, "required": true, - "env_variable": "GANDI_LIVEDNS_APIKEY" + "env_variable": "GANDI_LIVEDNS_PAT" }, { "type": "text", diff --git a/apps/gandi-livedns/docker-compose.yml b/apps/gandi-livedns/docker-compose.yml index f23bcc34..7b3c3b25 100644 --- a/apps/gandi-livedns/docker-compose.yml +++ b/apps/gandi-livedns/docker-compose.yml @@ -5,7 +5,7 @@ services: container_name: gandi-livedns restart: unless-stopped environment: - APIKEY: ${GANDI_LIVEDNS_APIKEY} + GANDI_PAT: ${GANDI_LIVEDNS_PAT} RECORD_LIST: ${GANDI_LIVEDNS_RECORD_LIST} DOMAIN: ${GANDI_LIVEDNS_DOMAIN} REFRESH_INTERVAL: ${GANDI_LIVEDNS_REFRESH_INTERVAL} diff --git a/apps/gandi-livedns/metadata/description.md b/apps/gandi-livedns/metadata/description.md index fbb70fca..b458300f 100644 --- a/apps/gandi-livedns/metadata/description.md +++ b/apps/gandi-livedns/metadata/description.md @@ -4,17 +4,20 @@ The purpose of this container is to update DNS zone records using Gandi's LiveDN This image is extremely lightweight (Alpine Linux based) and has very few dependencies. The actual DNS update program is coded in shell script only. +***Warning : update scripts have been updated to use Gandi's Personal Access Tokens (PATs).*** + +You need to create a new Personal Access Token for this application, with at least the "Manage domain name technical configurations" premissions. +See https://api.gandi.net/docs/authentication/ + ### Configuration - Mandatory variables: - -* APIKEY: your Gandi API key +* GANDI_PAT: your Gandi Personal Acces Token (be sure to enable "Manage domain name technical configurations") +* APIKEY: *deprecated* provided for backward compatibility. Value will be used as GANDI_PAT if provided * DOMAIN: your Gandi domain * RECORD_LIST: DNS records to update separated by ";" -Optional variables: - -* REFRESH_INTERVAL: Delay between updates (default: 10mn) +Optional variables : +* REFRESH_INTERVAL: Delay between updates in seconds (default: 10mn) * TTL: Set Time To Live for records (default: 300) * SET_IPV4: Update A record (default: yes) * SET_IPV6: Update AAAA record (default: no) @@ -22,23 +25,18 @@ Optional variables: * FORCE_IPV6: Force the IPv6 address to be used in DNS AAAA records ### Examples - The easiest way to run gandi-livedns is simply to *docker run* it from a computer in your network, leaving it running in the background with all the default settings. - -```shell +```sh docker run -d \ - -e "APIKEY=" \ + -e "GANDI_PAT=" \ -e "RECORD_LIST=blog;www;@" \ -e "DOMAIN=your-gandi-hosted-domain.com" \ jbbodart/gandi-livedns ``` - This will update **blog.your-gandi-hosted-domain.com**, **www.your-gandi-hosted-domain.com**, and **your-gandi-hosted-domain.com** with your internet-facing IP (IPv4) every 10 minutes An equivalent setup using docker-compose could look like this: - **docker-compose.yml** - ```yml version: '3.7' ... @@ -52,9 +50,8 @@ version: '3.7' ``` **dyndns.env** - ```properties -APIKEY= +GANDI_PAT= RECORD_LIST=blog;www;@ DOMAIN=your-gandi-hosted-domain.com ``` diff --git a/apps/ghost/config.json b/apps/ghost/config.json index f2a5ce4a..3a6e9918 100644 --- a/apps/ghost/config.json +++ b/apps/ghost/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "ghost", - "tipi_version": 72, - "version": "5.78.0", + "tipi_version": 77, + "version": "5.79.6", "categories": [ "social", "media" diff --git a/apps/ghost/docker-compose.yml b/apps/ghost/docker-compose.yml index b2091311..523c0c40 100644 --- a/apps/ghost/docker-compose.yml +++ b/apps/ghost/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.9" services: ghost: - image: ghost:5.78.0 + image: ghost:5.79.6 container_name: ghost depends_on: - ghostdb diff --git a/apps/ghostfolio/config.json b/apps/ghostfolio/config.json index b3b69664..6b4a8dc3 100644 --- a/apps/ghostfolio/config.json +++ b/apps/ghostfolio/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "ghostfolio", - "tipi_version": 45, - "version": "2.46.0", + "tipi_version": 56, + "version": "2.58.0", "categories": [ "finance" ], diff --git a/apps/ghostfolio/docker-compose.yml b/apps/ghostfolio/docker-compose.yml index 81b0b76e..6da545a7 100644 --- a/apps/ghostfolio/docker-compose.yml +++ b/apps/ghostfolio/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.9" services: ghostfolio: container_name: ghostfolio - image: ghostfolio/ghostfolio:2.46.0 + image: ghostfolio/ghostfolio:2.58.0 restart: unless-stopped ports: - ${APP_PORT}:3333 diff --git a/apps/gitea/config.json b/apps/gitea/config.json index ef9809a4..b263bda5 100644 --- a/apps/gitea/config.json +++ b/apps/gitea/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "gitea", - "tipi_version": 21, - "version": "1.21.5", + "tipi_version": 23, + "version": "1.21.7", "categories": [ "development" ], diff --git a/apps/gitea/docker-compose.yml b/apps/gitea/docker-compose.yml index b82def3d..4080bf4b 100644 --- a/apps/gitea/docker-compose.yml +++ b/apps/gitea/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: gitea: - image: gitea/gitea:1.21.5 + image: gitea/gitea:1.21.7 container_name: gitea environment: - USER_UID=1000 diff --git a/apps/gladys/config.json b/apps/gladys/config.json index 34edcc04..fec7a762 100644 --- a/apps/gladys/config.json +++ b/apps/gladys/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": false, "id": "gladys", - "tipi_version": 26, - "version": "4.35.0", + "tipi_version": 28, + "version": "4.37.0", "categories": [ "automation" ], diff --git a/apps/gladys/docker-compose.yml b/apps/gladys/docker-compose.yml index 952a1a52..96524618 100644 --- a/apps/gladys/docker-compose.yml +++ b/apps/gladys/docker-compose.yml @@ -3,7 +3,7 @@ version: '3' services: gladys: container_name: gladys - image: gladysassistant/gladys:v4.35.0 + image: gladysassistant/gladys:v4.37.0 privileged: true restart: on-failure stop_grace_period: 1m diff --git a/apps/gotosocial/config.json b/apps/gotosocial/config.json index 8218e102..72aeb7da 100644 --- a/apps/gotosocial/config.json +++ b/apps/gotosocial/config.json @@ -6,10 +6,10 @@ "exposable": true, "force_expose": true, "id": "gotosocial", - "tipi_version": 13, + "tipi_version": 15, "uid": 1000, "gid": 1000, - "version": "0.13.1", + "version": "0.13.3", "categories": [ "social" ], diff --git a/apps/gotosocial/docker-compose.yml b/apps/gotosocial/docker-compose.yml index 485452c9..b4d87a75 100644 --- a/apps/gotosocial/docker-compose.yml +++ b/apps/gotosocial/docker-compose.yml @@ -3,7 +3,7 @@ version: "3" services: gotosocial: container_name: gotosocial - image: superseriousbusiness/gotosocial:0.13.1 + image: superseriousbusiness/gotosocial:0.13.3 user: 1000:1000 ports: - ${APP_PORT}:8080 diff --git a/apps/grafana/config.json b/apps/grafana/config.json index 30bff8ed..a61b48ba 100644 --- a/apps/grafana/config.json +++ b/apps/grafana/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "grafana", - "tipi_version": 22, - "version": "10.3.1", + "tipi_version": 23, + "version": "10.3.3", "categories": [ "data" ], diff --git a/apps/grafana/docker-compose.yml b/apps/grafana/docker-compose.yml index 5a203065..c2b2954c 100644 --- a/apps/grafana/docker-compose.yml +++ b/apps/grafana/docker-compose.yml @@ -3,7 +3,7 @@ version: "3" services: grafana: container_name: grafana - image: grafana/grafana-oss:10.3.1 + image: grafana/grafana-oss:10.3.3 ports: - ${APP_PORT}:3000 volumes: diff --git a/apps/grist/config.json b/apps/grist/config.json index 16bc8af6..7b8b2524 100644 --- a/apps/grist/config.json +++ b/apps/grist/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "grist", "description": "Grist is a modern relational spreadsheet. It combines the flexibility of a spreadsheet with the robustness of a database to organize your data and make you more productive.", - "tipi_version": 9, - "version": "1.1.10", + "tipi_version": 10, + "version": "1.1.11", "categories": [ "utilities" ], diff --git a/apps/grist/docker-compose.yml b/apps/grist/docker-compose.yml index 9e980e8a..335f5d0c 100644 --- a/apps/grist/docker-compose.yml +++ b/apps/grist/docker-compose.yml @@ -6,7 +6,7 @@ services: environment: - APP_HOME_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} - GRIST_SANDBOX_FLAVOR=${GRIST_SANDBOX_FLAVOR} - image: "gristlabs/grist:1.1.10" + image: "gristlabs/grist:1.1.11" ports: - "${APP_PORT}:8484" restart: always diff --git a/apps/halo/config.json b/apps/halo/config.json index 4da763aa..e925d20b 100644 --- a/apps/halo/config.json +++ b/apps/halo/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8092, "id": "halo", - "tipi_version": 18, - "version": "2.12.1", + "tipi_version": 21, + "version": "2.12.4", "description": "Halo is a powerful and easy-to-use open source website building tool.", "short_desc": "Halo - Open source website building tool.", "categories": [ diff --git a/apps/halo/docker-compose.yml b/apps/halo/docker-compose.yml index e3da01e2..4b89825f 100644 --- a/apps/halo/docker-compose.yml +++ b/apps/halo/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: halo: - image: halohub/halo:2.12.1 + image: halohub/halo:2.12.4 container_name: halo restart: unless-stopped depends_on: diff --git a/apps/heimdall/config.json b/apps/heimdall/config.json new file mode 100644 index 00000000..7d485052 --- /dev/null +++ b/apps/heimdall/config.json @@ -0,0 +1,22 @@ +{ + "name": "Heimdall", + "available": true, + "exposable": true, + "port": 8783, + "id": "heimdall", + "tipi_version": 2, + "version": "2.6.1", + "categories": [ + "utilities" + ], + "description": "Heimdall is a way to organise all those links to your most used web sites and web applications in a simple way", + "short_desc": "Application Dashboard", + "author": "linuxserver", + "source": "https://github.com/linuxserver/Heimdall", + "website": "https://heimdall.site/", + "form_fields": [], + "supported_architectures": [ + "arm64", + "amd64" + ] +} diff --git a/apps/heimdall/docker-compose.yml b/apps/heimdall/docker-compose.yml new file mode 100644 index 00000000..3e61d337 --- /dev/null +++ b/apps/heimdall/docker-compose.yml @@ -0,0 +1,42 @@ +version: '3.9' + +services: + heimdall: + image: lscr.io/linuxserver/heimdall:2.6.1 + container_name: heimdall + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TZ} + volumes: + - ${APP_DATA_DIR}/data/config:/config + ports: + - ${APP_PORT}:80 + restart: unless-stopped + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.heimdall-web-redirect.redirectscheme.scheme: https + traefik.http.services.heimdall.loadbalancer.server.port: 3000 + # Web + traefik.http.routers.heimdall-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.heimdall-insecure.entrypoints: web + traefik.http.routers.heimdall-insecure.service: heimdall + traefik.http.routers.heimdall-insecure.middlewares: heimdall-web-redirect + # Websecure + traefik.http.routers.heimdall.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.heimdall.entrypoints: websecure + traefik.http.routers.heimdall.service: heimdall + traefik.http.routers.heimdall.tls.certresolver: myresolver + # Local domain + traefik.http.routers.heimdall-local-insecure.rule: Host(`heimdall.${LOCAL_DOMAIN}`) + traefik.http.routers.heimdall-local-insecure.entrypoints: web + traefik.http.routers.heimdall-local-insecure.service: heimdall + traefik.http.routers.heimdall-local-insecure.middlewares: heimdall-web-redirect + # Local domain secure + traefik.http.routers.heimdall-local.rule: Host(`heimdall.${LOCAL_DOMAIN}`) + traefik.http.routers.heimdall-local.entrypoints: websecure + traefik.http.routers.heimdall-local.service: heimdall + traefik.http.routers.heimdall-local.tls: true diff --git a/apps/heimdall/metadata/description.md b/apps/heimdall/metadata/description.md new file mode 100644 index 00000000..86fab798 --- /dev/null +++ b/apps/heimdall/metadata/description.md @@ -0,0 +1,7 @@ +## About + +As the name suggests Heimdall is a dashboard for all your web applications. It doesn't need to be limited to applications though, you can add links to anything you like. + +Heimdall is an elegant solution to organise all your web applications. It’s dedicated to this purpose so you won’t lose your links in a sea of bookmarks. + +Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo. diff --git a/apps/heimdall/metadata/logo.jpg b/apps/heimdall/metadata/logo.jpg new file mode 100644 index 00000000..e36ec2ac Binary files /dev/null and b/apps/heimdall/metadata/logo.jpg differ diff --git a/apps/homarr/config.json b/apps/homarr/config.json index f94c2770..fb1f2449 100644 --- a/apps/homarr/config.json +++ b/apps/homarr/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8102, "id": "homarr", - "tipi_version": 24, - "version": "0.14.4", + "tipi_version": 26, + "version": "0.15.0", "categories": [ "utilities" ], diff --git a/apps/homarr/docker-compose.yml b/apps/homarr/docker-compose.yml index 60f7ae09..fee8602d 100644 --- a/apps/homarr/docker-compose.yml +++ b/apps/homarr/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: homarr: container_name: homarr - image: ghcr.io/ajnart/homarr:0.14.4 + image: ghcr.io/ajnart/homarr:0.15.0 restart: unless-stopped volumes: - ${APP_DATA_DIR}/data/config:/app/data/configs diff --git a/apps/homeassistant-1/config.json b/apps/homeassistant-1/config.json new file mode 100644 index 00000000..1fb7cc0d --- /dev/null +++ b/apps/homeassistant-1/config.json @@ -0,0 +1,22 @@ +{ + "$schema": "../schema.json", + "name": "Home Assistant", + "port": 8209, + "available": true, + "exposable": true, + "id": "homeassistant-1", + "tipi_version": 5, + "version": "2024.2.5", + "categories": [ + "automation" + ], + "description": "Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server.", + "short_desc": "Open source home automation that puts local control and privacy first", + "author": "Home Assistant", + "source": "https://github.com/home-assistant/core", + "form_fields": [], + "supported_architectures": [ + "arm64", + "amd64" + ] +} diff --git a/apps/homeassistant-1/data/config/automations.yaml b/apps/homeassistant-1/data/config/automations.yaml new file mode 100644 index 00000000..0637a088 --- /dev/null +++ b/apps/homeassistant-1/data/config/automations.yaml @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/apps/homeassistant-1/data/config/configuration.yaml b/apps/homeassistant-1/data/config/configuration.yaml new file mode 100644 index 00000000..304fe25d --- /dev/null +++ b/apps/homeassistant-1/data/config/configuration.yaml @@ -0,0 +1,17 @@ +# Loads default set of integrations. Do not remove. +default_config: + +# Load frontend themes from the themes folder +frontend: + themes: !include_dir_merge_named themes + +automation: !include automations.yaml +script: !include scripts.yaml +scene: !include scenes.yaml + +http: + use_x_forwarded_for: true + trusted_proxies: + - 127.0.0.1 + - 172.16.0.0/12 + - ::1 diff --git a/apps/homeassistant-1/data/config/scenes.yaml b/apps/homeassistant-1/data/config/scenes.yaml new file mode 100644 index 00000000..e69de29b diff --git a/apps/homeassistant-1/data/config/scripts.yaml b/apps/homeassistant-1/data/config/scripts.yaml new file mode 100644 index 00000000..e69de29b diff --git a/apps/homeassistant-1/docker-compose.yml b/apps/homeassistant-1/docker-compose.yml new file mode 100644 index 00000000..4284c1c6 --- /dev/null +++ b/apps/homeassistant-1/docker-compose.yml @@ -0,0 +1,41 @@ +version: '3' + +services: + homeassistant-1: + image: ghcr.io/home-assistant/home-assistant:2024.2.5 + container_name: homeassistant-1 + environment: + - TZ=${TZ} + restart: unless-stopped + ports: + - ${APP_PORT}:8123 + volumes: + - /etc/localtime:/etc/localtime:ro + - ${APP_DATA_DIR}/data/config:/config + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.homeassistant-web-redirect.redirectscheme.scheme: https + traefik.http.services.homeassistant.loadbalancer.server.port: 8123 + # Web + traefik.http.routers.homeassistant-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.homeassistant-insecure.entrypoints: web + traefik.http.routers.homeassistant-insecure.service: homeassistant + traefik.http.routers.homeassistant-insecure.middlewares: homeassistant-web-redirect + # Websecure + traefik.http.routers.homeassistant.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.homeassistant.entrypoints: websecure + traefik.http.routers.homeassistant.service: homeassistant + traefik.http.routers.homeassistant.tls.certresolver: myresolver + # Local domain + traefik.http.routers.homeassistant-local-insecure.rule: Host(`homeassistant.${LOCAL_DOMAIN}`) + traefik.http.routers.homeassistant-local-insecure.entrypoints: web + traefik.http.routers.homeassistant-local-insecure.service: homeassistant + traefik.http.routers.homeassistant-local-insecure.middlewares: homeassistant-web-redirect + # Local domain secure + traefik.http.routers.homeassistant-local.rule: Host(`homeassistant.${LOCAL_DOMAIN}`) + traefik.http.routers.homeassistant-local.entrypoints: websecure + traefik.http.routers.homeassistant-local.service: homeassistant + traefik.http.routers.homeassistant-local.tls: true \ No newline at end of file diff --git a/apps/homeassistant-1/metadata/description.md b/apps/homeassistant-1/metadata/description.md new file mode 100644 index 00000000..2e98683f --- /dev/null +++ b/apps/homeassistant-1/metadata/description.md @@ -0,0 +1,30 @@ +# Home Assistant + +Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server. + +Check out [home-assistant.io](https://home-assistant.io) for a [demo](https://home-assistant.io/demo/), installation [instructions](https://home-assistant.io/getting-started/), [tutorials](https://home-assistant.io/getting-started/automation/) and [documentation](https://home-assistant.io/docs/) + +## Migration + +February 2024 + +This version of Home Assistant can be exposed. To migrate from the non-exposable app, follow these steps: + +- stop the installed app +- rename `runtipi/app-data/homeassistant` to `runtipi/app-data/__homeassistant` +- make a backup of `runtipi/app-data/__homeassistant` to a safe location +- uninstall the app +- install Home Assistant from the App Store +- stop the app +- remove `runtipi/app-data/homeassistant-1` +- rename `runtipi/app-data/__homeassistant` to `runtipi/app-data/homeassistant-1` +- add the following section to `runtipi/app-data/homeassistant/data/config/configuration.yaml` + ``` + http: + use_x_forwarded_for: true + trusted_proxies: + - 127.0.0.1 + - 172.16.0.0/12 + - ::1 + ``` +- start the app diff --git a/apps/homeassistant-1/metadata/logo.jpg b/apps/homeassistant-1/metadata/logo.jpg new file mode 100644 index 00000000..f090130e Binary files /dev/null and b/apps/homeassistant-1/metadata/logo.jpg differ diff --git a/apps/homeassistant/config.json b/apps/homeassistant/config.json index 5e6f0169..0364386b 100644 --- a/apps/homeassistant/config.json +++ b/apps/homeassistant/config.json @@ -1,16 +1,22 @@ { "$schema": "../schema.json", - "name": "Home Assistant", + "name": "Home Assistant non exposed", "available": true, + "deprecated": true, "port": 8123, - "tipi_version": 2, + "tipi_version": 3, "version": "stable", "id": "homeassistant", - "categories": ["automation"], + "categories": [ + "automation" + ], "description": "Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server.", "short_desc": "Open source home automation that puts local control and privacy first", "author": "ArneNaessens", "source": "https://github.com/home-assistant/core", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] -} + "supported_architectures": [ + "arm64", + "amd64" + ] +} \ No newline at end of file diff --git a/apps/homeassistant/metadata/description.md b/apps/homeassistant/metadata/description.md index b7b2a420..47edc6eb 100644 --- a/apps/homeassistant/metadata/description.md +++ b/apps/homeassistant/metadata/description.md @@ -1,7 +1,31 @@ - ## Open source home automation that puts local control and privacy first Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server. Check out [home-assistant.io](https://home-assistant.io) for a [demo](https://home-assistant.io/demo/), installation [instructions](https://home-assistant.io/getting-started/), [tutorials](https://home-assistant.io/getting-started/automation/) and [documentation](https://home-assistant.io/docs/) -![Screenshot](https://raw.githubusercontent.com/home-assistant/core/master/docs/screenshots.png) \ No newline at end of file +![Screenshot](https://raw.githubusercontent.com/home-assistant/core/master/docs/screenshots.png) + +## Migration + +February 2024 + +This version of Home Assistant can not be exposed. To migrate to the exposable app, follow these steps: + +- stop the installed app +- rename `runtipi/app-data/homeassistant` to `runtipi/app-data/__homeassistant` +- make a backup of `runtipi/app-data/__homeassistant` to a safe location +- uninstall the app +- install the new Home Assistant from the App Store +- stop the app +- remove `runtipi/app-data/homeassistant-1` +- rename `runtipi/app-data/__homeassistant` to `runtipi/app-data/homeassistant-1` +- add the following section to `runtipi/app-data/homeassistant/data/config/configuration.yaml` + ``` + http: + use_x_forwarded_for: true + trusted_proxies: + - 127.0.0.1 + - 172.16.0.0/12 + - ::1 + ``` +- start the app diff --git a/apps/homepage/config.json b/apps/homepage/config.json index 2e4491c5..d7028c7b 100644 --- a/apps/homepage/config.json +++ b/apps/homepage/config.json @@ -4,8 +4,8 @@ "available": true, "exposable": true, "port": 8756, - "tipi_version": 5, - "version": "0.8.7", + "tipi_version": 6, + "version": "0.8.8", "id": "homepage", "categories": [ "utilities" diff --git a/apps/homepage/docker-compose.yml b/apps/homepage/docker-compose.yml index b2bead40..5bbb0aea 100644 --- a/apps/homepage/docker-compose.yml +++ b/apps/homepage/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.9" services: homepage: - image: ghcr.io/gethomepage/homepage:v0.8.7 + image: ghcr.io/gethomepage/homepage:v0.8.8 container_name: homepage restart: unless-stopped ports: diff --git a/apps/immich/config.json b/apps/immich/config.json index b78dd652..40cdaea5 100644 --- a/apps/immich/config.json +++ b/apps/immich/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8128, "id": "immich", - "tipi_version": 73, - "version": "1.94.1", + "tipi_version": 77, + "version": "1.97.0", "categories": [ "data", "photography" diff --git a/apps/immich/docker-compose.yml b/apps/immich/docker-compose.yml index 2bd31ff8..ac74b4a0 100644 --- a/apps/immich/docker-compose.yml +++ b/apps/immich/docker-compose.yml @@ -1,10 +1,10 @@ -version: '3.7' +version: "3.7" services: immich: container_name: immich - image: ghcr.io/immich-app/immich-server:v1.94.1 - command: ['start-server.sh'] + image: ghcr.io/immich-app/immich-server:v1.97.0 + command: ["start-server.sh"] volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload environment: @@ -52,8 +52,8 @@ services: immich-microservices: container_name: immich-microservices - image: ghcr.io/immich-app/immich-server:v1.94.1 - command: ['start-microservices.sh'] + image: ghcr.io/immich-app/immich-server:v1.97.0 + command: ["start-microservices.sh"] volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload environment: @@ -74,7 +74,7 @@ services: immich-machine-learning: container_name: immich-machine-learning - image: ghcr.io/immich-app/immich-machine-learning:v1.94.1 + image: ghcr.io/immich-app/immich-machine-learning:v1.97.0 volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload - ${APP_DATA_DIR}/data/immich-ml-cache:/cache @@ -100,7 +100,7 @@ services: immich-db: container_name: immich-db - image: tensorchord/pgvecto-rs:pg14-v0.1.11 + image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0 environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: tipi diff --git a/apps/invoice-ninja/docker-compose.yml b/apps/invoice-ninja/docker-compose.yml index 1c3ba443..5766f858 100644 --- a/apps/invoice-ninja/docker-compose.yml +++ b/apps/invoice-ninja/docker-compose.yml @@ -42,7 +42,7 @@ services: traefik.http.routers.invoice-ninja-local.tls: true invoice-ninja-server: - image: invoiceninja/invoiceninja:5.8.21 + image: invoiceninja/invoiceninja:5.8.30 container_name: invoice-ninja-server restart: unless-stopped user: 1500:1500 diff --git a/apps/jellyfin/config.json b/apps/jellyfin/config.json index c5054cfe..c4cffaa2 100644 --- a/apps/jellyfin/config.json +++ b/apps/jellyfin/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8091, "id": "jellyfin", - "tipi_version": 7, - "version": "10.8.11", + "tipi_version": 8, + "version": "10.8.13", "categories": [ "media" ], diff --git a/apps/jellyfin/docker-compose.yml b/apps/jellyfin/docker-compose.yml index bb900137..4f0d955c 100644 --- a/apps/jellyfin/docker-compose.yml +++ b/apps/jellyfin/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: jellyfin: - image: lscr.io/linuxserver/jellyfin:10.8.11 + image: lscr.io/linuxserver/jellyfin:10.8.13 container_name: jellyfin volumes: - ${APP_DATA_DIR}/data/config:/config diff --git a/apps/kanboard/config.json b/apps/kanboard/config.json index de37be63..dcf47c32 100644 --- a/apps/kanboard/config.json +++ b/apps/kanboard/config.json @@ -5,8 +5,8 @@ "port": 8010, "id": "kanboard", "description": "Kanboard is a free and open source Kanban project management software.", - "tipi_version": 8, - "version": "1.2.34", + "tipi_version": 9, + "version": "1.2.35", "categories": [ "development" ], diff --git a/apps/kanboard/docker-compose.yml b/apps/kanboard/docker-compose.yml index 8f8d7961..1ae8cdf5 100644 --- a/apps/kanboard/docker-compose.yml +++ b/apps/kanboard/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.9" services: kanboard: container_name: kanboard - image: kanboard/kanboard:v1.2.34 + image: kanboard/kanboard:v1.2.35 environment: - PLUGIN_INSTALLER=${PLUGIN_INSTALLER} ports: diff --git a/apps/kavita/config.json b/apps/kavita/config.json index 9416f9c3..1a1e3891 100644 --- a/apps/kavita/config.json +++ b/apps/kavita/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "kavita", - "tipi_version": 11, - "version": "0.7.13", + "tipi_version": 12, + "version": "0.7.14", "categories": [ "media" ], diff --git a/apps/kavita/docker-compose.yml b/apps/kavita/docker-compose.yml index 55109e32..b4d7b152 100644 --- a/apps/kavita/docker-compose.yml +++ b/apps/kavita/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.9" services: kavita: container_name: kavita - image: jvmilazz0/kavita:0.7.13 + image: jvmilazz0/kavita:0.7.14 ports: - ${APP_PORT}:5000 volumes: diff --git a/apps/koillection/config.json b/apps/koillection/config.json index 0093317f..9a67035a 100644 --- a/apps/koillection/config.json +++ b/apps/koillection/config.json @@ -6,8 +6,8 @@ "exposable": true, "id": "koillection", "description": "Koillection is a self-hosted service allowing users to manage any kind of collections.", - "tipi_version": 6, - "version": "1.5.3", + "tipi_version": 8, + "version": "1.5.6", "categories": [ "utilities" ], diff --git a/apps/koillection/docker-compose.yml b/apps/koillection/docker-compose.yml index 038ab85a..9e79a2e7 100644 --- a/apps/koillection/docker-compose.yml +++ b/apps/koillection/docker-compose.yml @@ -2,7 +2,7 @@ version: '3' services: koillection: - image: koillection/koillection:1.5.3 + image: koillection/koillection:1.5.6 container_name: koillection restart: unless-stopped ports: diff --git a/apps/lidarr/config.json b/apps/lidarr/config.json index 98bcd5ee..d4487e29 100644 --- a/apps/lidarr/config.json +++ b/apps/lidarr/config.json @@ -5,12 +5,9 @@ "exposable": true, "port": 8131, "id": "lidarr", - "tipi_version": 6, - "version": "1.4.5", - "categories": [ - "media", - "music" - ], + "tipi_version": 7, + "version": "2.1.7", + "categories": ["media", "music"], "description": "Lidarr is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.", "short_desc": " Looks and smells like Sonarr but made for music.", "author": "lidarr.audio", diff --git a/apps/lidarr/docker-compose.yml b/apps/lidarr/docker-compose.yml index e3d98d85..6afdda7e 100644 --- a/apps/lidarr/docker-compose.yml +++ b/apps/lidarr/docker-compose.yml @@ -1,7 +1,7 @@ -version: "3.7" +version: '3.7' services: lidarr: - image: lscr.io/linuxserver/lidarr:1.4.5 + image: ghcr.io/linuxserver/lidarr:2.1.7 container_name: lidarr environment: - PUID=1000 diff --git a/apps/lobe-chat/config.json b/apps/lobe-chat/config.json index a1e7e2ed..5e2d3d9b 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": 24, - "version": "0.122.7", + "tipi_version": 37, + "version": "0.130.2", "categories": [ "ai" ], diff --git a/apps/lobe-chat/docker-compose.yml b/apps/lobe-chat/docker-compose.yml index d78b9a2f..201e5e22 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.122.7 + image: lobehub/lobe-chat:v0.130.2 environment: - OPENAI_API_KEY=${OPENAI_API_KEY} - OPENAI_PROXY_URL=${OPEANAI_PROXY_URL} diff --git a/apps/logto/config.json b/apps/logto/config.json index 9d8b4b42..39161765 100644 --- a/apps/logto/config.json +++ b/apps/logto/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "logto", - "tipi_version": 13, - "version": "1.12.0", + "tipi_version": 15, + "version": "1.13.1", "force_expose": true, "categories": [ "security" diff --git a/apps/logto/docker-compose.yml b/apps/logto/docker-compose.yml index fbfb831e..9ccb5947 100644 --- a/apps/logto/docker-compose.yml +++ b/apps/logto/docker-compose.yml @@ -4,7 +4,7 @@ services: depends_on: logto-db: condition: service_healthy - image: svhd/logto:1.12.0 + image: svhd/logto:1.13.1 container_name: logto entrypoint: ["sh", "-c", "npm run cli db seed -- --swe && npm start"] ports: diff --git a/apps/maintainerr/config.json b/apps/maintainerr/config.json index b61d2b71..d8921735 100644 --- a/apps/maintainerr/config.json +++ b/apps/maintainerr/config.json @@ -4,8 +4,8 @@ "exposable": true, "port": 8030, "id": "maintainerr", - "tipi_version": 1, - "version": "1.7.1", + "tipi_version": 3, + "version": "2.0.2", "categories": [ "media", "utilities" @@ -15,5 +15,8 @@ "author": "jorenn92", "source": "https://github.com/jorenn92/Maintainerr", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": [ + "arm64", + "amd64" + ] } diff --git a/apps/maintainerr/docker-compose.yml b/apps/maintainerr/docker-compose.yml index e3f24a4c..d93b9879 100644 --- a/apps/maintainerr/docker-compose.yml +++ b/apps/maintainerr/docker-compose.yml @@ -2,7 +2,7 @@ version: '3' services: maintainerr: - image: ghcr.io/jorenn92/maintainerr:1.7.1 # or jorenn92/maintainerr:1.7.1 + image: ghcr.io/jorenn92/maintainerr:2.0.2 # or jorenn92/maintainerr:1.7.1 container_name: maintainerr # user: 1000:1000 # only use this with release 2.0 and up volumes: @@ -11,7 +11,7 @@ services: - TZ=${TZ} # - DEBUG=true # uncomment to enable verbose logs ports: - - ${APP_PORT}:80 + - ${APP_PORT}:6246 restart: unless-stopped networks: - tipi_main_network @@ -19,7 +19,7 @@ services: # Main traefik.enable: true traefik.http.middlewares.maintainerr-web-redirect.redirectscheme.scheme: https - traefik.http.services.maintainerr.loadbalancer.server.port: 8030 + traefik.http.services.maintainerr.loadbalancer.server.port: 6246 # Web traefik.http.routers.maintainerr-insecure.rule: Host(`${APP_DOMAIN}`) traefik.http.routers.maintainerr-insecure.entrypoints: web diff --git a/apps/mastodon/config.json b/apps/mastodon/config.json index 792bab92..4a8be085 100644 --- a/apps/mastodon/config.json +++ b/apps/mastodon/config.json @@ -7,8 +7,8 @@ "force_expose": true, "generate_vapid_keys": true, "id": "mastodon", - "tipi_version": 15, - "version": "4.2.5", + "tipi_version": 18, + "version": "4.2.8", "categories": [ "social" ], diff --git a/apps/mastodon/docker-compose.yml b/apps/mastodon/docker-compose.yml index 3823e328..bf75cee5 100644 --- a/apps/mastodon/docker-compose.yml +++ b/apps/mastodon/docker-compose.yml @@ -3,7 +3,7 @@ version: "3" services: mastodon: container_name: mastodon - image: lscr.io/linuxserver/mastodon:4.2.5 + image: lscr.io/linuxserver/mastodon:4.2.8 ports: - 8209:80 - ${APP_PORT}:443 diff --git a/apps/memos/config.json b/apps/memos/config.json index 4e5423a9..5fea4c72 100644 --- a/apps/memos/config.json +++ b/apps/memos/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 5230, "id": "memos", - "tipi_version": 25, - "version": "0.19.1", + "tipi_version": 26, + "version": "0.20.0", "categories": [ "utilities" ], diff --git a/apps/memos/docker-compose.yml b/apps/memos/docker-compose.yml index 9f862e5a..0a565dd3 100644 --- a/apps/memos/docker-compose.yml +++ b/apps/memos/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: memos: - image: neosmemo/memos:0.19.1 + image: neosmemo/memos:0.20.0 container_name: memos volumes: - ${APP_DATA_DIR}/memos:/var/opt/memos diff --git a/apps/minio/config.json b/apps/minio/config.json index 0b5a31a5..d5673a48 100644 --- a/apps/minio/config.json +++ b/apps/minio/config.json @@ -5,8 +5,8 @@ "port": 8001, "id": "minio", "description": "MinIO is a high-performance, S3 compatible object store. It is built for large scale AI/ML, data lake and database workloads.", - "tipi_version": 1, - "version": "RELEASE.2023-05-04T21-44-30Z", + "tipi_version": 2, + "version": "RELEASE.2024-02-24T17-11-14Z", "categories": ["development"], "short_desc": "High Performance Object Storage", "author": "MinIO, Inc", diff --git a/apps/minio/docker-compose.yml b/apps/minio/docker-compose.yml index b677b835..a2966b06 100644 --- a/apps/minio/docker-compose.yml +++ b/apps/minio/docker-compose.yml @@ -3,7 +3,7 @@ version: '3.9' services: minio: container_name: minio - image: minio/minio:RELEASE.2023-05-04T21-44-30Z + image: minio/minio:RELEASE.2024-02-24T17-11-14Z environment: - MINIO_ROOT_USER=${MINIO_ROOT_USER} - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD} @@ -17,7 +17,7 @@ services: - ${APP_DATA_DIR}/data/minio/data:/data networks: - tipi_main_network - command: "server --console-address :9001 /data" + command: 'server --console-address :9001 /data' labels: traefik.enable: ${APP_EXPOSED} # Console @@ -31,4 +31,4 @@ services: traefik.http.routers.minio.entrypoints: websecure traefik.http.routers.minio.service: minio traefik.http.routers.minio.tls.certresolver: myresolver - traefik.http.services.minio.loadbalancer.server.port: 9000 \ No newline at end of file + traefik.http.services.minio.loadbalancer.server.port: 9000 diff --git a/apps/moodist/config.json b/apps/moodist/config.json new file mode 100644 index 00000000..08cf87a7 --- /dev/null +++ b/apps/moodist/config.json @@ -0,0 +1,21 @@ +{ + "$schema": "../schema.json", + "name": "Moodist", + "port": 8221, + "available": true, + "exposable": true, + "id": "moodist", + "tipi_version": 1, + "version": "v1.3.1", + "categories": [ + "media" + ], + "description": "Ambient sounds for focus and calm.", + "short_desc": "Ambient sounds for focus and calm.", + "author": "remvze", + "source": "https://github.com/remvze/moodist", + "form_fields": [], + "supported_architectures": [ + "amd64" + ] +} \ No newline at end of file diff --git a/apps/moodist/docker-compose.yml b/apps/moodist/docker-compose.yml new file mode 100644 index 00000000..557de54a --- /dev/null +++ b/apps/moodist/docker-compose.yml @@ -0,0 +1,38 @@ +version: "3.7" + +services: + moodist: + image: ghcr.io/remvze/moodist:v1.3.1 + container_name: moodist + restart: unless-stopped + volumes: + - /etc/localtime:/etc/localtime:ro + ports: + - ${APP_PORT}:8080 + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.moodist-web-redirect.redirectscheme.scheme: https + traefik.http.services.moodist.loadbalancer.server.port: 8080 + # Web + traefik.http.routers.moodist-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.moodist-insecure.entrypoints: web + traefik.http.routers.moodist-insecure.service: moodist + traefik.http.routers.moodist-insecure.middlewares: moodist-web-redirect + # Websecure + traefik.http.routers.moodist.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.moodist.entrypoints: websecure + traefik.http.routers.moodist.service: moodist + traefik.http.routers.moodist.tls.certresolver: myresolver + # Local domain + traefik.http.routers.moodist-local-insecure.rule: Host(`moodist.${LOCAL_DOMAIN}`) + traefik.http.routers.moodist-local-insecure.entrypoints: web + traefik.http.routers.moodist-local-insecure.service: moodist + traefik.http.routers.moodist-local-insecure.middlewares: moodist-web-redirect + # Local domain secure + traefik.http.routers.moodist-local.rule: Host(`moodist.${LOCAL_DOMAIN}`) + traefik.http.routers.moodist-local.entrypoints: websecure + traefik.http.routers.moodist-local.service: moodist + traefik.http.routers.moodist-local.tls: true diff --git a/apps/moodist/metadata/description.md b/apps/moodist/metadata/description.md new file mode 100644 index 00000000..b38f9554 --- /dev/null +++ b/apps/moodist/metadata/description.md @@ -0,0 +1,9 @@ +# Moodist + +Ambient sounds for focus and calm. + +## App Links + + + + diff --git a/apps/moodist/metadata/logo.jpg b/apps/moodist/metadata/logo.jpg new file mode 100644 index 00000000..d676bed7 Binary files /dev/null and b/apps/moodist/metadata/logo.jpg differ diff --git a/apps/n8n-1/config.json b/apps/n8n-1/config.json new file mode 100644 index 00000000..8ff88958 --- /dev/null +++ b/apps/n8n-1/config.json @@ -0,0 +1,31 @@ +{ + "$schema": "../schema.json", + "name": "n8n", + "available": true, + "exposable": true, + "port": 8215, + "id": "n8n-1", + "tipi_version": 1, + "version": "1.27.2", + "categories": ["automation"], + "description": "n8n is an extendable workflow automation tool. With a fair-code distribution model, n8n will always have visible source code, be available to self-host, and allow you to add your own custom functions, logic and apps. n8n's node-based approach makes it highly versatile, enabling you to connect anything to everything.", + "short_desc": "Workflow Automation Tool. Alternative to Zapier", + "author": "n8n.io", + "source": "https://github.com/n8n-io/n8n", + "website": "https://n8n.io/", + "form_fields": [ + { + "type": "random", + "label": "Database Password", + "min": 32, + "env_variable": "N8N_DB_PASSWORD" + }, + { + "type": "random", + "label": "Database Non Root Password", + "min": 32, + "env_variable": "N8N_NR_DB_PASSWORD" + } + ], + "supported_architectures": ["arm64", "amd64"] +} diff --git a/apps/n8n-1/data/init-data.sh b/apps/n8n-1/data/init-data.sh new file mode 100644 index 00000000..f34e7691 --- /dev/null +++ b/apps/n8n-1/data/init-data.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -e; + +if [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then + psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL + CREATE USER ${POSTGRES_NON_ROOT_USER} WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}'; + GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_NON_ROOT_USER}; + EOSQL +else + echo "SETUP INFO: No Environment variables given!" +fi diff --git a/apps/n8n-1/docker-compose.yml b/apps/n8n-1/docker-compose.yml new file mode 100644 index 00000000..e001ff10 --- /dev/null +++ b/apps/n8n-1/docker-compose.yml @@ -0,0 +1,73 @@ +version: '3.7' + +services: + n8n-1: + container_name: n8n-1 + image: n8nio/n8n:1.27.2 + restart: unless-stopped + ports: + - ${APP_PORT}:5678 + volumes: + - ${APP_DATA_DIR}/data/n8n:/home/node/.n8n + environment: + - N8N_EDITOR_BASE_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} + - WEBHOOK_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} + - DB_TYPE=postgresdb + - DB_POSTGRESDB_HOST=n8n-db + - DB_POSTGRESDB_PORT=5432 + - DB_POSTGRESDB_DATABASE=n8n + - DB_POSTGRESDB_USER=n8n + - DB_POSTGRESDB_PASSWORD=${N8N_NR_DB_PASSWORD} + networks: + - tipi_main_network + links: + - n8n-db + depends_on: + n8n-db: + condition: service_healthy + labels: + # Main + traefik.enable: true + traefik.http.middlewares.n8n-web-redirect.redirectscheme.scheme: https + traefik.http.services.n8n.loadbalancer.server.port: 5678 + # Web + traefik.http.routers.n8n-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.n8n-insecure.entrypoints: web + traefik.http.routers.n8n-insecure.service: n8n + traefik.http.routers.n8n-insecure.middlewares: n8n-web-redirect + # Websecure + traefik.http.routers.n8n.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.n8n.entrypoints: websecure + traefik.http.routers.n8n.service: n8n + traefik.http.routers.n8n.tls.certresolver: myresolver + # Local domain + traefik.http.routers.n8n-local-insecure.rule: Host(`n8n.${LOCAL_DOMAIN}`) + traefik.http.routers.n8n-local-insecure.entrypoints: web + traefik.http.routers.n8n-local-insecure.service: n8n + traefik.http.routers.n8n-local-insecure.middlewares: n8n-web-redirect + # Local domain secure + traefik.http.routers.n8n-local.rule: Host(`n8n.${LOCAL_DOMAIN}`) + traefik.http.routers.n8n-local.entrypoints: websecure + traefik.http.routers.n8n-local.service: n8n + traefik.http.routers.n8n-local.tls: true + + n8n-db: + container_name: n8n-db + image: postgres:11 + restart: unless-stopped + networks: + - tipi_main_network + environment: + - POSTGRES_USER=tipi + - POSTGRES_PASSWORD=${N8N_DB_PASSWORD} + - POSTGRES_DB=n8n + - POSTGRES_NON_ROOT_USER=n8n + - POSTGRES_NON_ROOT_PASSWORD=${N8N_NR_DB_PASSWORD} + volumes: + - ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data + - ${APP_DATA_DIR}/data/init-data.sh:/docker-entrypoint-initdb.d/init-data.sh + healthcheck: + test: ['CMD-SHELL', 'pg_isready -h localhost -U $$POSTGRES_USER -d $$POSTGRES_DB'] + interval: 5s + timeout: 5s + retries: 10 diff --git a/apps/n8n-1/metadata/description.md b/apps/n8n-1/metadata/description.md new file mode 100644 index 00000000..85a7e4ff --- /dev/null +++ b/apps/n8n-1/metadata/description.md @@ -0,0 +1,16 @@ +## Installation Notes ## + +To enable OAUTH integrations you will need to enable the "expose app" option and configure a URL in Tipi. This setting can be changed at a later date if an integration is identified that needs it. + +## Easily automate tasks across different services. + +n8n is an extendable workflow automation tool. With a fair-code distribution model, n8n will always have visible source code, be available to self-host, and allow you to add your own custom functions, logic and apps. n8n's node-based approach makes it highly +versatile, enabling you to connect anything to everything. + +![Screenshot](https://raw.githubusercontent.com/n8n-io/n8n/master/assets/n8n-screenshot.png) + +## Build with LangChain and AI in n8n +With n8n's LangChain nodes you can build AI-powered functionality within your workflows. The LangChain nodes are configurable, meaning you can choose your preferred agent, LLM, memory, and so on. Alongside the LangChain nodes, you can connect any n8n node as normal: this means you can integrate your LangChain logic with other data sources and services. + +## Available integrations +n8n has 200+ different nodes to automate workflows. The list can be found on: https://n8n.io/integrations diff --git a/apps/n8n-1/metadata/logo.jpg b/apps/n8n-1/metadata/logo.jpg new file mode 100644 index 00000000..5e53b783 Binary files /dev/null and b/apps/n8n-1/metadata/logo.jpg differ diff --git a/apps/n8n/config.json b/apps/n8n/config.json index cc7aab5c..9d9af947 100644 --- a/apps/n8n/config.json +++ b/apps/n8n/config.json @@ -1,11 +1,12 @@ { "$schema": "../schema.json", - "name": "n8n", + "name": "n8n (v0)", "available": true, "exposable": true, + "deprecated": true, "port": 8094, "id": "n8n", - "tipi_version": 26, + "tipi_version": 27, "version": "0.237.0", "categories": ["automation"], "description": "n8n is an extendable workflow automation tool. With a fair-code distribution model, n8n will always have visible source code, be available to self-host, and allow you to add your own custom functions, logic and apps. n8n's node-based approach makes it highly versatile, enabling you to connect anything to everything.", diff --git a/apps/n8n/docker-compose.yml b/apps/n8n/docker-compose.yml index db7847de..02c7026a 100644 --- a/apps/n8n/docker-compose.yml +++ b/apps/n8n/docker-compose.yml @@ -1,4 +1,4 @@ -version: "3.7" +version: '3.7' services: n8n: diff --git a/apps/n8n/metadata/description.md b/apps/n8n/metadata/description.md index a3fccf73..51eef14c 100644 --- a/apps/n8n/metadata/description.md +++ b/apps/n8n/metadata/description.md @@ -1,10 +1,12 @@ -## Installation Notes ## +This version of n8n is deprecated. Please use the latest version of n8n found in the app store. If you need to migrate your data, please follow the [migration guide](https://docs.n8n.io/1-0-migration-checklist/). + +## Installation Notes To enable OAUTH integrations you will need to enable the "expose app" option and configure a URL in Tipi. This setting can be changed at a later date if an integration is identified that needs it. -## Easily automate tasks across different services. +## Easily automate tasks across different services. -n8n is an extendable workflow automation tool. With a fair-code distribution model, n8n will always have visible source code, be available to self-host, and allow you to add your own custom functions, logic and apps. n8n's node-based approach makes it highly +n8n is an extendable workflow automation tool. With a fair-code distribution model, n8n will always have visible source code, be available to self-host, and allow you to add your own custom functions, logic and apps. n8n's node-based approach makes it highly versatile, enabling you to connect anything to everything. ![Screenshot](https://raw.githubusercontent.com/n8n-io/n8n/master/assets/n8n-screenshot.png) diff --git a/apps/navidrome/config.json b/apps/navidrome/config.json index 7a3f87ba..48520871 100644 --- a/apps/navidrome/config.json +++ b/apps/navidrome/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "navidrome", "description": "Modern Music Server and Streamer compatible with Subsonic/Airsonic", - "tipi_version": 9, - "version": "0.51.0", + "tipi_version": 10, + "version": "0.51.1", "categories": [ "media", "music" diff --git a/apps/navidrome/docker-compose.yml b/apps/navidrome/docker-compose.yml index a9ce25a3..5165623e 100644 --- a/apps/navidrome/docker-compose.yml +++ b/apps/navidrome/docker-compose.yml @@ -2,7 +2,7 @@ version: "3" services: navidrome: container_name: navidrome - image: deluan/navidrome:0.51.0 + image: deluan/navidrome:0.51.1 ports: - ${APP_PORT}:4533 restart: unless-stopped diff --git a/apps/netdata/config.json b/apps/netdata/config.json index 7dd69b68..94b88935 100644 --- a/apps/netdata/config.json +++ b/apps/netdata/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "netdata", "description": "Stream any metrics from every physical and virtual server, container and IoT device, to one dashboard, in real-time.", - "tipi_version": 6, - "version": "1.44.1", + "tipi_version": 8, + "version": "1.44.3", "categories": [ "utilities" ], diff --git a/apps/netdata/docker-compose.yml b/apps/netdata/docker-compose.yml index 1f6630eb..77cfe7e0 100644 --- a/apps/netdata/docker-compose.yml +++ b/apps/netdata/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: netdata: - image: netdata/netdata:v1.44.1 + image: netdata/netdata:v1.44.3 container_name: netdata pid: host restart: unless-stopped diff --git a/apps/nextgba/config.json b/apps/nextgba/config.json new file mode 100644 index 00000000..577c8f6e --- /dev/null +++ b/apps/nextgba/config.json @@ -0,0 +1,21 @@ +{ + "name": "NextGBA", + "available": true, + "port": 8435, + "exposable": true, + "id": "nextgba", + "description": "All of your favorite gameboy games in your browser", + "tipi_version": 4, + "version": "0.0.5", + "categories": [ + "gaming" + ], + "short_desc": "Gameboy in your browser", + "author": "meienberger", + "source": "https://github.com/meienberger/nextgba", + "form_fields": [], + "supported_architectures": [ + "arm64", + "amd64" + ] +} diff --git a/apps/nextgba/docker-compose.yml b/apps/nextgba/docker-compose.yml new file mode 100644 index 00000000..cafa7214 --- /dev/null +++ b/apps/nextgba/docker-compose.yml @@ -0,0 +1,40 @@ +version: "3.9" + +services: + nextgba: + container_name: nextgba + image: ghcr.io/meienberger/nextgba:v0.0.5 + restart: unless-stopped + ports: + - ${APP_PORT}:3000 + environment: + - NODE_ENV=production + networks: + - tipi_main_network + volumes: + - ${APP_DATA_DIR}/data/games:/data/games + labels: + # Main + traefik.enable: true + traefik.http.middlewares.nextgba-web-redirect.redirectscheme.scheme: https + traefik.http.services.nextgba.loadbalancer.server.port: 3000 + # Web + traefik.http.routers.nextgba-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.nextgba-insecure.entrypoints: web + traefik.http.routers.nextgba-insecure.service: nextgba + traefik.http.routers.nextgba-insecure.middlewares: nextgba-web-redirect + # Websecure + traefik.http.routers.nextgba.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.nextgba.entrypoints: websecure + traefik.http.routers.nextgba.service: nextgba + traefik.http.routers.nextgba.tls.certresolver: myresolver + # Local domain + traefik.http.routers.nextgba-local-insecure.rule: Host(`nextgba.${LOCAL_DOMAIN}`) + traefik.http.routers.nextgba-local-insecure.entrypoints: web + traefik.http.routers.nextgba-local-insecure.service: nextgba + traefik.http.routers.nextgba-local-insecure.middlewares: nextgba-web-redirect + # Local domain secure + traefik.http.routers.nextgba-local.rule: Host(`nextgba.${LOCAL_DOMAIN}`) + traefik.http.routers.nextgba-local.entrypoints: websecure + traefik.http.routers.nextgba-local.service: nextgba + traefik.http.routers.nextgba-local.tls: true diff --git a/apps/nextgba/metadata/description.md b/apps/nextgba/metadata/description.md new file mode 100644 index 00000000..c8793987 --- /dev/null +++ b/apps/nextgba/metadata/description.md @@ -0,0 +1,8 @@ +# NextGBA - All you gameboy games in a browser window + +Have you ever wanted to play your favorite gameboy games in a self-hosted web app that can save the game state and can be accessed from anywhere on your network? **NextGBA** is your friend! +It emphasize a simple UI with all the features you could ever need. The game player is based on the very famous [EmulatorJS](https://emulatorjs.org/) project. + +![Preview](https://github.com/meienberger/nextgba/raw/main/screenshots/main.png) +![Upload](https://github.com/meienberger/nextgba/raw/main/screenshots/upload.png) +![Ingame](https://github.com/meienberger/nextgba/raw/main/screenshots/ingame.png) \ No newline at end of file diff --git a/apps/nextgba/metadata/logo.jpg b/apps/nextgba/metadata/logo.jpg new file mode 100644 index 00000000..6a42370f Binary files /dev/null and b/apps/nextgba/metadata/logo.jpg differ diff --git a/apps/nocodb/config.json b/apps/nocodb/config.json index 1bfb360e..91bdccf7 100644 --- a/apps/nocodb/config.json +++ b/apps/nocodb/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "nocodb", - "tipi_version": 34, - "version": "0.204.0", + "tipi_version": 35, + "version": "0.204.1", "categories": [ "utilities" ], diff --git a/apps/nocodb/docker-compose.yml b/apps/nocodb/docker-compose.yml index 662d177d..b2bf1b6d 100644 --- a/apps/nocodb/docker-compose.yml +++ b/apps/nocodb/docker-compose.yml @@ -12,7 +12,7 @@ services: - NC_AUTH_JWT_SECRET=${NOCODB_JWT_SECRET} - NC_REDIS_URL=redis://default:${NOCODB_REDIS_PASSWORD}@nocodb-redis:6379 - DB_QUERY_LIMIT_DEFAULT=${NOCODB_TABLE_ROWS-25} - image: "nocodb/nocodb:0.204.0" + image: "nocodb/nocodb:0.204.1" ports: - "${APP_PORT}:8080" restart: always diff --git a/apps/nodered/config.json b/apps/nodered/config.json index 9ef07973..9094b6c2 100644 --- a/apps/nodered/config.json +++ b/apps/nodered/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "nodered", - "tipi_version": 7, - "version": "3.1.3", + "tipi_version": 8, + "version": "3.1.5", "categories": [ "automation" ], diff --git a/apps/nodered/docker-compose.yml b/apps/nodered/docker-compose.yml index cbed1d18..7c7cc263 100644 --- a/apps/nodered/docker-compose.yml +++ b/apps/nodered/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.7" services: nodered: container_name: nodered - image: nodered/node-red:3.1.3 + image: nodered/node-red:3.1.5 restart: unless-stopped ports: - ${APP_PORT}:1880 diff --git a/apps/octobot/config.json b/apps/octobot/config.json index 587af06f..b3b02d92 100644 --- a/apps/octobot/config.json +++ b/apps/octobot/config.json @@ -4,8 +4,8 @@ "available": true, "exposable": true, "id": "octobot", - "tipi_version": 5, - "version": "1.0.7", + "tipi_version": 6, + "version": "1.0.8", "categories": [ "automation", "finance" diff --git a/apps/octobot/docker-compose.yml b/apps/octobot/docker-compose.yml index ce69763e..2287beef 100644 --- a/apps/octobot/docker-compose.yml +++ b/apps/octobot/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.9' services: octobot: container_name: octobot - image: drakkarsoftware/octobot:1.0.7 + image: drakkarsoftware/octobot:1.0.8 environment: - TZ=${TZ} volumes: diff --git a/apps/onedev/config.json b/apps/onedev/config.json index 8e171ea1..24a0ee6b 100644 --- a/apps/onedev/config.json +++ b/apps/onedev/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "onedev", - "tipi_version": 74, - "version": "9.7.0", + "tipi_version": 81, + "version": "10.2.0", "categories": [ "development" ], diff --git a/apps/onedev/docker-compose.yml b/apps/onedev/docker-compose.yml index 3f86eb37..c03ddea3 100644 --- a/apps/onedev/docker-compose.yml +++ b/apps/onedev/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: onedev: - image: 1dev/server:9.7.0 + image: 1dev/server:10.2.0 container_name: onedev environment: - hibernate_dialect=io.onedev.server.persistence.PostgreSQLDialect diff --git a/apps/owncloud/config.json b/apps/owncloud/config.json index 9eca1e7a..193369e7 100644 --- a/apps/owncloud/config.json +++ b/apps/owncloud/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "owncloud", - "tipi_version": 10, - "version": "10.13.4", + "tipi_version": 11, + "version": "10.14.0", "categories": [ "data" ], diff --git a/apps/owncloud/docker-compose.yml b/apps/owncloud/docker-compose.yml index 9c360777..7f154a4c 100644 --- a/apps/owncloud/docker-compose.yml +++ b/apps/owncloud/docker-compose.yml @@ -2,7 +2,7 @@ version: "3" services: owncloud: - image: owncloud/server:10.13.4 + image: owncloud/server:10.14.0 container_name: owncloud restart: unless-stopped ports: diff --git a/apps/pairdrop/config.json b/apps/pairdrop/config.json index 1d421381..301a42d7 100644 --- a/apps/pairdrop/config.json +++ b/apps/pairdrop/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "pairdrop", - "tipi_version": 24, - "version": "1.10.6", + "tipi_version": 25, + "version": "1.10.7", "categories": [ "media", "data", diff --git a/apps/pairdrop/docker-compose.yml b/apps/pairdrop/docker-compose.yml index 341cff93..861083ed 100644 --- a/apps/pairdrop/docker-compose.yml +++ b/apps/pairdrop/docker-compose.yml @@ -2,7 +2,7 @@ version: "3" services: pairdrop: - image: lscr.io/linuxserver/pairdrop:1.10.6 + image: lscr.io/linuxserver/pairdrop:1.10.7 container_name: pairdrop environment: - PUID=1000 diff --git a/apps/paperless-ngx/config.json b/apps/paperless-ngx/config.json index 59f55cc2..d55767e2 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": 18, - "version": "2.4.3", + "tipi_version": 22, + "version": "2.5.4", "categories": [ "utilities" ], diff --git a/apps/paperless-ngx/docker-compose.yml b/apps/paperless-ngx/docker-compose.yml index 6fd9bf1b..61abb33a 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.4.3 + image: ghcr.io/paperless-ngx/paperless-ngx:2.5.4 restart: unless-stopped depends_on: - db @@ -75,7 +75,7 @@ services: - tipi_main_network gotenberg: - image: docker.io/gotenberg/gotenberg:8.0 + image: docker.io/gotenberg/gotenberg:8.2 restart: unless-stopped # The gotenberg chromium route is used to convert .eml files. We do not # want to allow external content like tracking pixels or even javascript. diff --git a/apps/peppermint/config.json b/apps/peppermint/config.json index bae160e5..d7a82612 100644 --- a/apps/peppermint/config.json +++ b/apps/peppermint/config.json @@ -1,11 +1,11 @@ { "$schema": "../schema.json", "name": "Peppermint", - "port": 8176, + "port": 8216, "available": true, "exposable": true, "id": "peppermint", - "tipi_version": 3, + "tipi_version": 5, "version": "latest", "categories": [ "utilities" @@ -20,7 +20,14 @@ "label": "Peppermint DB Password", "min": 32, "env_variable": "PEPPERMINT_DB_PASSWORD" + }, + { + "type": "text", + "label": "API URL", + "required": true, + "hint": "Can be an exposable domiain like peppermintapi.example.com or peppermintapi.tipi.local", + "env_variable": "PEPPERMINT_DOMAIN_API" } ], - "supported_architectures": ["amd64"] + "supported_architectures": ["amd64", "arm64"] } diff --git a/apps/peppermint/docker-compose.yml b/apps/peppermint/docker-compose.yml index 2e603a2c..3249bb83 100644 --- a/apps/peppermint/docker-compose.yml +++ b/apps/peppermint/docker-compose.yml @@ -5,14 +5,14 @@ services: image: pepperlabs/peppermint:latest container_name: peppermint environment: - - PORT=5000 - DB_USERNAME=tipi - DB_PASSWORD=${PEPPERMINT_DB_PASSWORD} - DB_HOST=peppermint-db - - BASE_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} + - API_URL={APP_PROTOCOL:-http}://${PEPPERMINT_DOMAIN_API} restart: unless-stopped ports: - - ${APP_PORT}:5000 + - ${APP_PORT}:3000 + - 8217:5003 depends_on: - peppermint-db networks: @@ -21,7 +21,7 @@ services: # Main traefik.enable: true traefik.http.middlewares.peppermint-web-redirect.redirectscheme.scheme: https - traefik.http.services.peppermint.loadbalancer.server.port: 5000 + traefik.http.services.peppermint.loadbalancer.server.port: 3000 # Web traefik.http.routers.peppermint-insecure.rule: Host(`${APP_DOMAIN}`) traefik.http.routers.peppermint-insecure.entrypoints: web @@ -42,6 +42,29 @@ services: traefik.http.routers.peppermint-local.entrypoints: websecure traefik.http.routers.peppermint-local.service: peppermint traefik.http.routers.peppermint-local.tls: true + #API URL + traefik.http.middlewares.peppermint-api-web-redirect.redirectscheme.scheme: https + traefik.http.services.peppermint-api.loadbalancer.server.port: 5003 + # Web + traefik.http.routers.peppermint-api-insecure.rule: Host(`${PEPPERMINT_DOMAIN_API}`) + traefik.http.routers.peppermint-api-insecure.entrypoints: web + traefik.http.routers.peppermint-api-insecure.service: peppermint + traefik.http.routers.ppeppermint-api-insecure.middlewares: peppermint-api-web-redirect + # Websecure + traefik.http.routers.peppermint-api.rule: Host(`${PEPPERMINT_DOMAIN_API}`) + traefik.http.routers.peppermint-api.entrypoints: websecure + traefik.http.routers.peppermint-api.service: peppermint + traefik.http.routers.peppermint-api.tls.certresolver: myresolver + # Local domain + traefik.http.routers.peppermint-api-local-insecure.rule: Host(`peppermintapi.${LOCAL_DOMAIN}`) + traefik.http.routers.peppermint-api-local-insecure.entrypoints: web + traefik.http.routers.peppermint-api-local-insecure.service: peppermint + traefik.http.routers.peppermint-api-local-insecure.middlewares: peppermint-api-web-redirect + # Local domain secure + traefik.http.routers.peppermint-api-local.rule: Host(`peppermintapi.${LOCAL_DOMAIN}`) + traefik.http.routers.peppermint-api-local.entrypoints: websecure + traefik.http.routers.peppermint-api-local.service: peppermint + traefik.http.routers.peppermint-api-local.tls: true peppermint-db: container_name: peppermint-db diff --git a/apps/pihole/config.json b/apps/pihole/config.json index 81e7d5b6..c58214e2 100644 --- a/apps/pihole/config.json +++ b/apps/pihole/config.json @@ -10,8 +10,8 @@ ] }, "id": "pihole", - "tipi_version": 12, - "version": "2024.01.0", + "tipi_version": 14, + "version": "2024.02.2", "url_suffix": "/admin", "categories": [ "network", diff --git a/apps/pihole/docker-compose.yml b/apps/pihole/docker-compose.yml index 99912acd..b4a7486f 100644 --- a/apps/pihole/docker-compose.yml +++ b/apps/pihole/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.7" services: pihole: container_name: pihole - image: pihole/pihole:2024.01.0 + image: pihole/pihole:2024.02.2 restart: unless-stopped hostname: pihole dns: diff --git a/apps/plex/config.json b/apps/plex/config.json index 23fe0ac9..959abfa0 100644 --- a/apps/plex/config.json +++ b/apps/plex/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 32400, "id": "plex", - "tipi_version": 23, - "version": "1.32.8", + "tipi_version": 24, + "version": "1.40.0", "url_suffix": "/web", "categories": [ "media" diff --git a/apps/plex/docker-compose.yml b/apps/plex/docker-compose.yml index 21a2dc88..c299f640 100644 --- a/apps/plex/docker-compose.yml +++ b/apps/plex/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: plex: - image: lscr.io/linuxserver/plex:1.32.8 + image: lscr.io/linuxserver/plex:1.40.0 container_name: plex network_mode: host environment: diff --git a/apps/privatebin/config.json b/apps/privatebin/config.json index 3d7760a0..c204e373 100644 --- a/apps/privatebin/config.json +++ b/apps/privatebin/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8122, "id": "privatebin", - "tipi_version": 7, - "version": "1.6.2", + "tipi_version": 8, + "version": "1.7.1", "categories": [ "utilities" ], diff --git a/apps/privatebin/docker-compose.yml b/apps/privatebin/docker-compose.yml index 325892f3..c538613d 100644 --- a/apps/privatebin/docker-compose.yml +++ b/apps/privatebin/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: privatebin: - image: privatebin/nginx-fpm-alpine:1.6.2 + image: privatebin/nginx-fpm-alpine:1.7.1 container_name: privatebin dns: - ${DNS_IP} diff --git a/apps/prowlarr/config.json b/apps/prowlarr/config.json index 5922bd54..535d81b8 100644 --- a/apps/prowlarr/config.json +++ b/apps/prowlarr/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8109, "id": "prowlarr", - "tipi_version": 5, - "version": "1.11.4", + "tipi_version": 6, + "version": "1.13.3.4273-ls53", "categories": [ "media", "utilities" diff --git a/apps/prowlarr/docker-compose.yml b/apps/prowlarr/docker-compose.yml index 38cfcb1b..a7034f11 100644 --- a/apps/prowlarr/docker-compose.yml +++ b/apps/prowlarr/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.9" services: prowlarr: # Should be exact same name as "id" field in config.json container_name: prowlarr # Should be exact same name as "id" field in config.json - image: ghcr.io/linuxserver/prowlarr:1.11.4 + image: ghcr.io/linuxserver/prowlarr:1.13.3.4273-ls53 environment: - TZ=${TZ} # Can use any env variable. List in runtipi/templates/env-sample dns: diff --git a/apps/rallly/config.json b/apps/rallly/config.json index 9b89dddd..81407720 100644 --- a/apps/rallly/config.json +++ b/apps/rallly/config.json @@ -6,8 +6,8 @@ "exposable": true, "id": "rallly", "description": "Rallly is an open-source scheduling and collaboration tool designed to make organizing events and meetings easier.", - "tipi_version": 3, - "version": "3.5.1", + "tipi_version": 4, + "version": "3.6.1", "categories": [ "utilities" ], diff --git a/apps/rallly/docker-compose.yml b/apps/rallly/docker-compose.yml index 79a63794..281483db 100644 --- a/apps/rallly/docker-compose.yml +++ b/apps/rallly/docker-compose.yml @@ -1,7 +1,7 @@ services: rallly: container_name: rallly - image: lukevella/rallly:3.5.1 + image: lukevella/rallly:3.6.1 restart: always depends_on: rallly_db: diff --git a/apps/readarr/config.json b/apps/readarr/config.json index b2bc6650..23bbc0fe 100644 --- a/apps/readarr/config.json +++ b/apps/readarr/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8112, "id": "readarr", - "tipi_version": 9, - "version": "0.3.18-nightly", + "tipi_version": 10, + "version": "0.3.19-nightly", "categories": [ "books", "media" diff --git a/apps/readarr/docker-compose.yml b/apps/readarr/docker-compose.yml index c16aac76..a176e43a 100644 --- a/apps/readarr/docker-compose.yml +++ b/apps/readarr/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: readarr: - image: lscr.io/linuxserver/readarr:0.3.18-nightly + image: lscr.io/linuxserver/readarr:0.3.19-nightly container_name: readarr environment: - PUID=1000 diff --git a/apps/serge/config.json b/apps/serge/config.json index 4ee1d7f4..a81d3162 100644 --- a/apps/serge/config.json +++ b/apps/serge/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8008, "id": "serge", - "tipi_version": 8, - "version": "0.8.2", + "tipi_version": 9, + "version": "0.9.0", "categories": [ "ai" ], diff --git a/apps/serge/docker-compose.yml b/apps/serge/docker-compose.yml index 2b6888fb..667c6b5d 100644 --- a/apps/serge/docker-compose.yml +++ b/apps/serge/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: serge: - image: ghcr.io/serge-chat/serge:0.8.2 + image: ghcr.io/serge-chat/serge:0.9.0 container_name: serge restart: unless-stopped ports: diff --git a/apps/sftpgo/docker-compose.yml b/apps/sftpgo/docker-compose.yml index dc6cea52..e005d9b8 100644 --- a/apps/sftpgo/docker-compose.yml +++ b/apps/sftpgo/docker-compose.yml @@ -67,7 +67,7 @@ services: # Postgres SQL sftpgo-db: container_name: sftpgo-db - image: docker.io/library/postgres:16.1-alpine + image: docker.io/library/postgres:16.2-alpine restart: unless-stopped networks: - tipi_main_network diff --git a/apps/shlink/docker-compose.yml b/apps/shlink/docker-compose.yml index 0c91d131..4ad98754 100644 --- a/apps/shlink/docker-compose.yml +++ b/apps/shlink/docker-compose.yml @@ -46,7 +46,7 @@ services: traefik.http.routers.shlink-local.tls: true shlink-db: container_name: shlink-db - image: docker.io/library/postgres:16.1-alpine + image: docker.io/library/postgres:16.2-alpine restart: unless-stopped networks: - tipi_main_network diff --git a/apps/silverbullet/config.json b/apps/silverbullet/config.json index 2373053a..570b000c 100644 --- a/apps/silverbullet/config.json +++ b/apps/silverbullet/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "silverbullet", - "tipi_version": 3, - "version": "0.7.0", + "tipi_version": 5, + "version": "0.7.3", "categories": [ "utilities" ], diff --git a/apps/silverbullet/docker-compose.yml b/apps/silverbullet/docker-compose.yml index ddd3de0f..a4d14c5c 100644 --- a/apps/silverbullet/docker-compose.yml +++ b/apps/silverbullet/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.9' services: silverbullet: - image: zefhemel/silverbullet:0.7.0 + image: zefhemel/silverbullet:0.7.3 container_name: 'silverbullet' restart: unless-stopped volumes: diff --git a/apps/simplex-smp/config.json b/apps/simplex-smp/config.json index 01bc51c7..6ce2418f 100644 --- a/apps/simplex-smp/config.json +++ b/apps/simplex-smp/config.json @@ -6,8 +6,8 @@ "exposable": true, "no_gui": true, "id": "simplex-smp", - "tipi_version": 11, - "version": "5.5.1", + "tipi_version": 13, + "version": "5.5.3", "categories": [ "social" ], diff --git a/apps/simplex-smp/docker-compose.yml b/apps/simplex-smp/docker-compose.yml index 1f52eb94..e15822e3 100644 --- a/apps/simplex-smp/docker-compose.yml +++ b/apps/simplex-smp/docker-compose.yml @@ -1,7 +1,7 @@ version: '3.9' services: simplex-smp: - image: simplexchat/smp-server:v5.5.1 + image: simplexchat/smp-server:v5.5.3 container_name: simplex-smp volumes: - ${APP_DATA_DIR}/data/simplex/logs:/var/opt/simplex:z diff --git a/apps/sonarr/config.json b/apps/sonarr/config.json index 71db845e..111be48d 100644 --- a/apps/sonarr/config.json +++ b/apps/sonarr/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8098, "id": "sonarr", - "tipi_version": 7, - "version": "4.0.1", + "tipi_version": 8, + "version": "4.0.2", "categories": [ "media", "utilities" diff --git a/apps/sonarr/docker-compose.yml b/apps/sonarr/docker-compose.yml index 896faa8d..bdd62221 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.1 + image: lscr.io/linuxserver/sonarr:4.0.2 container_name: sonarr environment: - PUID=1000 diff --git a/apps/speedtest-tracker/config.json b/apps/speedtest-tracker/config.json index 97f6459c..94d10cf7 100644 --- a/apps/speedtest-tracker/config.json +++ b/apps/speedtest-tracker/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "speedtest-tracker", - "tipi_version": 10, - "version": "0.14.5", + "tipi_version": 17, + "version": "0.17.3", "categories": [ "utilities" ], diff --git a/apps/speedtest-tracker/docker-compose.yml b/apps/speedtest-tracker/docker-compose.yml index f73fcbce..6f624e0d 100644 --- a/apps/speedtest-tracker/docker-compose.yml +++ b/apps/speedtest-tracker/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: speedtest-tracker: - image: ghcr.io/alexjustesen/speedtest-tracker:v0.14.5 + image: ghcr.io/alexjustesen/speedtest-tracker:v0.17.3 container_name: speedtest-tracker environment: - PUID=1000 diff --git a/apps/stirling-pdf/config.json b/apps/stirling-pdf/config.json index 26a70be3..771708ad 100644 --- a/apps/stirling-pdf/config.json +++ b/apps/stirling-pdf/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "stirling-pdf", - "tipi_version": 19, - "version": "0.20.1", + "tipi_version": 21, + "version": "0.21.0", "categories": [ "data", "utilities" diff --git a/apps/stirling-pdf/docker-compose.yml b/apps/stirling-pdf/docker-compose.yml index 4b2351fa..b534ae7e 100644 --- a/apps/stirling-pdf/docker-compose.yml +++ b/apps/stirling-pdf/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.9" services: stirling-pdf: - image: frooodle/s-pdf:0.20.1 + image: frooodle/s-pdf:0.21.0 restart: unless-stopped container_name: stirling-pdf privileged: true diff --git a/apps/tailscale/config.json b/apps/tailscale/config.json index 969eeebe..f95c35e3 100644 --- a/apps/tailscale/config.json +++ b/apps/tailscale/config.json @@ -4,8 +4,8 @@ "available": true, "port": 8093, "id": "tailscale", - "tipi_version": 21, - "version": "1.58.2", + "tipi_version": 22, + "version": "1.61.11", "categories": [ "network", "security" diff --git a/apps/tailscale/docker-compose.yml b/apps/tailscale/docker-compose.yml index 7a59f22c..3517bcb5 100644 --- a/apps/tailscale/docker-compose.yml +++ b/apps/tailscale/docker-compose.yml @@ -4,7 +4,7 @@ services: tailscale: container_name: tailscale network_mode: "host" # TODO: Find a way to remove this - image: tailscale/tailscale:v1.58.2 + image: tailscale/tailscale:v1.61.11 privileged: true restart: on-failure stop_grace_period: 1m diff --git a/apps/tandoor/config.json b/apps/tandoor/config.json index 8c19c09d..d7c01033 100644 --- a/apps/tandoor/config.json +++ b/apps/tandoor/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "tandoor", - "tipi_version": 8, - "version": "1.5.12", + "tipi_version": 9, + "version": "1.5.13", "categories": [ "data" ], diff --git a/apps/tandoor/docker-compose.yml b/apps/tandoor/docker-compose.yml index 9fcfc780..5152c599 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.12 + image: ghcr.io/tandoorrecipes/recipes:1.5.13 volumes: - ${APP_DATA_DIR}/data/staticfiles:/opt/recipes/staticfiles - ${APP_DATA_DIR}/data/mediafiles:/opt/recipes/mediafiles diff --git a/apps/tasks-md/config.json b/apps/tasks-md/config.json index d3a6478a..6aba69dd 100644 --- a/apps/tasks-md/config.json +++ b/apps/tasks-md/config.json @@ -5,11 +5,9 @@ "available": true, "exposable": true, "id": "tasks-md", - "tipi_version": 6, - "version": "1.10.1", - "categories": [ - "development" - ], + "tipi_version": 7, + "version": "2.3.2", + "categories": ["development"], "description": "A self-hosted, file based task management board that supports Markdown syntax", "short_desc": "A self-hosted, file based task management board.", "author": "BaldissaraMatheus", diff --git a/apps/tasks-md/docker-compose.yml b/apps/tasks-md/docker-compose.yml index 72fd27ea..30e29a92 100644 --- a/apps/tasks-md/docker-compose.yml +++ b/apps/tasks-md/docker-compose.yml @@ -1,13 +1,14 @@ -version: "3" +version: '3' services: tasks-md: container_name: tasks-md - image: baldissaramatheus/tasks.md:1.10.1 + image: baldissaramatheus/tasks.md:2.3.2 ports: - ${APP_PORT}:8080 volumes: - - ${APP_DATA_DIR}/data/files:/api/files/ + - ${APP_DATA_DIR}/data/files:/tasks/ + - ${APP_DATA_DIR}/data/config:/config/ - ${APP_DATA_DIR}/data/stylesheets:/usr/share/nginx/html/stylesheets/ environment: - TITLE="${TASKS_MD_TITLE}" diff --git a/apps/trilium/config.json b/apps/trilium/config.json index a0a24424..7b7d5866 100644 --- a/apps/trilium/config.json +++ b/apps/trilium/config.json @@ -5,16 +5,11 @@ "exposable": true, "id": "trilium", "description": "Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases. ", - "tipi_version": 12, + "tipi_version": 13, "version": "0.62.6", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "short_desc": "An open-source, self-hosted Notion alterative", "author": "zadam", "source": "https://github.com/zadam/trilium", - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"] } diff --git a/apps/trilium/docker-compose.yml b/apps/trilium/docker-compose.yml index a8317517..b39174bb 100644 --- a/apps/trilium/docker-compose.yml +++ b/apps/trilium/docker-compose.yml @@ -4,8 +4,10 @@ services: container_name: trilium ports: - ${APP_PORT}:8080 + environment: + - TRILIUM_DATA_DIR=/home/node/trilium-data volumes: - - ${APP_DATA_DIR}/home/node/trilium-data + - ${APP_DATA_DIR}/data:/home/node/trilium-data networks: - tipi_main_network labels: diff --git a/apps/tubearchivist/docker-compose.yml b/apps/tubearchivist/docker-compose.yml index 51791beb..bf4d23f6 100644 --- a/apps/tubearchivist/docker-compose.yml +++ b/apps/tubearchivist/docker-compose.yml @@ -62,7 +62,7 @@ services: - tubearchivist-es tubearchivist-es: - image: elasticsearch:8.12.0 + image: elasticsearch:8.12.2 container_name: tubearchivist-es restart: always environment: diff --git a/apps/viewtube/config.json b/apps/viewtube/config.json index 980c7de5..58009a6d 100644 --- a/apps/viewtube/config.json +++ b/apps/viewtube/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "viewtube", - "tipi_version": 8, - "version": "0.15.1", + "tipi_version": 9, + "version": "0.15.2", "categories": [ "media" ], diff --git a/apps/viewtube/docker-compose.arm64.yml b/apps/viewtube/docker-compose.arm64.yml index fcb6766b..88ff8d8a 100644 --- a/apps/viewtube/docker-compose.arm64.yml +++ b/apps/viewtube/docker-compose.arm64.yml @@ -4,7 +4,7 @@ services: viewtube: restart: unless-stopped container_name: viewtube - image: mauriceo/viewtube:0.15.1 + image: mauriceo/viewtube:0.15.2 depends_on: - viewtube-mongodb - viewtube-redis diff --git a/apps/viewtube/docker-compose.yml b/apps/viewtube/docker-compose.yml index e70ed273..d0708577 100644 --- a/apps/viewtube/docker-compose.yml +++ b/apps/viewtube/docker-compose.yml @@ -4,7 +4,7 @@ services: viewtube: restart: unless-stopped container_name: viewtube - image: mauriceo/viewtube:0.15.1 + image: mauriceo/viewtube:0.15.2 depends_on: - viewtube-mongodb - viewtube-redis diff --git a/apps/vikunja/config.json b/apps/vikunja/config.json index 7cda58a7..8f8cf1ab 100644 --- a/apps/vikunja/config.json +++ b/apps/vikunja/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8135, "id": "vikunja", - "tipi_version": 8, - "version": "0.22.0", + "tipi_version": 9, + "version": "0.22.1", "categories": ["utilities"], "description": "The Todo-app to organize your life.", "short_desc": "The Todo-app to organize your life.", diff --git a/apps/vikunja/docker-compose.yml b/apps/vikunja/docker-compose.yml index 7e626782..95ca814e 100644 --- a/apps/vikunja/docker-compose.yml +++ b/apps/vikunja/docker-compose.yml @@ -16,9 +16,10 @@ services: retries: 5 networks: - tipi_main_network + vikunja-api: container_name: vikunja-api - image: vikunja/api:0.22.0 + image: vikunja/api:0.22.1 environment: VIKUNJA_DATABASE_HOST: vikunja-db VIKUNJA_DATABASE_PASSWORD: ${VIKUNJA_DB_PASSWORD} @@ -35,12 +36,14 @@ services: condition: service_healthy networks: - tipi_main_network + vikunja: - image: vikunja/frontend:0.22.0 + image: vikunja/frontend:0.22.1 restart: unless-stopped container_name: vikunja networks: - tipi_main_network + vikunja-proxy: image: nginx container_name: vikunja-proxy diff --git a/apps/wekan/config.json b/apps/wekan/config.json index 40a067cf..37b554d2 100644 --- a/apps/wekan/config.json +++ b/apps/wekan/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "wekan", - "tipi_version": 5, - "version": "7.30", + "tipi_version": 9, + "version": "7.35", "categories": [ "development" ], diff --git a/apps/wekan/docker-compose.yml b/apps/wekan/docker-compose.yml index f57585c7..f7ff541e 100644 --- a/apps/wekan/docker-compose.yml +++ b/apps/wekan/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: wekan: - image: ghcr.io/wekan/wekan:v7.30 + image: ghcr.io/wekan/wekan:v7.35 container_name: wekan environment: # https://github.com/wekan/wekan/blob/main/docker-compose.yml diff --git a/apps/zigbee2mqtt/config.json b/apps/zigbee2mqtt/config.json new file mode 100755 index 00000000..57f91f81 --- /dev/null +++ b/apps/zigbee2mqtt/config.json @@ -0,0 +1,26 @@ +{ + "$schema": "../schema.json", + "name": "Zigbee2MQTT", + "port": 8290, + "available": true, + "exposable": true, + "id": "zigbee2mqtt", + "tipi_version": 1, + "version": "1.35.3", + "categories": ["utilities", "automation"], + "description": "Zigbee to MQTT bridge, get rid of your proprietary Zigbee bridges", + "short_desc": "Zigbee to MQTT bridge", + "author": "@Koenkk", + "source": "https://github.com/Koenkk/zigbee2mqtt", + "website": "https://www.zigbee2mqtt.io/", + "form_fields": [ + { + "type": "string", + "label": "zigbee device path", + "required": true, + "hint": "/dev/ttyUSB0", + "env_variable": "Z2M_DEVICE" + } + ], + "supported_architectures": ["arm64", "amd64"] +} diff --git a/apps/zigbee2mqtt/data/.gitkeep b/apps/zigbee2mqtt/data/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/zigbee2mqtt/docker-compose.yml b/apps/zigbee2mqtt/docker-compose.yml new file mode 100644 index 00000000..23d995cb --- /dev/null +++ b/apps/zigbee2mqtt/docker-compose.yml @@ -0,0 +1,44 @@ +version: '3.7' + +services: + zigbee2mqtt: + container_name: zigbee2mqtt + image: koenkk/zigbee2mqtt:1.35.3 + environment: + - TZ=${TZ} + volumes: + - ${APP_DATA_DIR}/data/:/app/data + devices: + - ${Z2M_DEVICE}:/dev/ttyACM0 + ports: + - ${APP_PORT}:8080 + expose: + - 8080 + restart: unless-stopped + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.zigbee2mqtt-web-redirect.redirectscheme.scheme: https + traefik.http.services.zigbee2mqtt.loadbalancer.server.port: 8080 + # Web + traefik.http.routers.zigbee2mqtt-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.zigbee2mqtt-insecure.entrypoints: web + traefik.http.routers.zigbee2mqtt-insecure.service: zigbee2mqtt-web + traefik.http.routers.zigbee2mqtt-insecure.middlewares: zigbee2mqtt-web-redirect + # Websecure + traefik.http.routers.zigbee2mqtt.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.zigbee2mqtt.entrypoints: websecure + traefik.http.routers.zigbee2mqtt.service: zigbee2mqtt-web + traefik.http.routers.zigbee2mqtt.tls.certresolver: myresolver + # Local domain + traefik.http.routers.zigbee2mqtt-local-insecure.rule: Host(`zigbee2mqtt.${LOCAL_DOMAIN}`) + traefik.http.routers.zigbee2mqtt-local-insecure.entrypoints: web + traefik.http.routers.zigbee2mqtt-local-insecure.service: zigbee2mqtt-web + traefik.http.routers.zigbee2mqtt-local-insecure.middlewares: zigbee2mqtt-web-redirect + # Local domain secure + traefik.http.routers.zigbee2mqtt-local.rule: Host(`zigbee2mqtt.${LOCAL_DOMAIN}`) + traefik.http.routers.zigbee2mqtt-local.entrypoints: websecure + traefik.http.routers.zigbee2mqtt-local.service: zigbee2mqtt-web + traefik.http.routers.zigbee2mqtt-local.tls: true diff --git a/apps/zigbee2mqtt/metadata/description.md b/apps/zigbee2mqtt/metadata/description.md new file mode 100644 index 00000000..87729af3 --- /dev/null +++ b/apps/zigbee2mqtt/metadata/description.md @@ -0,0 +1,29 @@ +# Zigbee2MQTT 🐝🌉🔨 + +Allows you to use your Zigbee devices without the vendor's bridge or gateway. + +It bridges events and allows you to control your Zigbee devices via MQTT. In this way you can integrate your Zigbee devices with whatever smart home infrastructure you are using. + +|**Compatible** | **Integrations** | **Open Source** | +|---|---|---| +| Zigbee2MQTT supports [various Zigbee adapters](https://www.zigbee2mqtt.io/guide/adapters/) and a big bunch of [devices](https://www.zigbee2mqtt.io/supported-devices/). | Zigbee2MQTT integrates well with most home automation solutions because it uses [MQTT](https://mqtt.org/). | Zigbee2MQTT is licenced under the free [GNU General Public License 3](https://www.gnu.org/licenses/gpl-3.0.de.html). | + +## Setup + +You need to have a mqtt broker like [eclipse mosquitto](/apps/eclipse-mosquitto) running to use this app. + +### Configuration of the Zigbee adapter + +For USB apdaters you can use dmesg command on Linux hosts to find the mounted device. Where possible you should use the `/dev/serial/by-id/` path of the stick, instead of `/dev/tty*`. This is because the `/dev/tty*` path can change - for example `/dev/ttyACM0` may become `/dev/ttyACM1` and then later back to `/dev/ttyACM0`. The `/dev/serial/by-id/` path won't change. + +The **usb device path** must be set in the settings of the app before installing. + +## Integrations + +Zigbee2MQTT integrates well with (almost) every home automation solution because it uses MQTT. However the following integrations are worth mentioning: + +- [Home Assistant](/apps/homeassistant) +- [Homey](https://homey.app/) +- [Domoticz](https://www.domoticz.com/) +- [Gladys Assistant](https://gladysassistant.com/) +- [IoBroker](https://www.iobroker.net/) diff --git a/apps/zigbee2mqtt/metadata/logo.jpg b/apps/zigbee2mqtt/metadata/logo.jpg new file mode 100644 index 00000000..b0e0de26 Binary files /dev/null and b/apps/zigbee2mqtt/metadata/logo.jpg differ diff --git a/renovate.js b/renovate.js index 8d55d706..551dc038 100644 --- a/renovate.js +++ b/renovate.js @@ -22,7 +22,7 @@ module.exports = { { managers: ["docker-compose", "dockerfile"], packagePatterns: [ - "^([^\\/]+\\/)?(mysql|mariadb|mongodb|mongo|postgres|redis)(:|$)", + "^([^\\/]+\\/)?(mysql|mariadb|mongodb|mongo|postgres|redis|immich-.*)(:|$)", ], enabled: false, },