+
+
+
+## About the Project
+
+
+
+# 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)
+
+
+
+
+
+
+
+
+
+#### [Product Hunt](https://producthunt.com/products/cal-com?utm_source=badge-top-post-badge&utm_medium=badge)
+
+
+
+### 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.
+
+
+
+## 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:
+
+
+
+
+
+## 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.
+
+[](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.
+ 
+
+ 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
+
+[](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.
+
+[](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
+
+[](https://render.com/deploy?repo=https://github.com/calcom/docker)
+
+### Elestio
+
+[](https://elest.io/open-source/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
+
+
+
+
+
+
+
+
+
+
+### 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.
+
+                           
+
+## 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.
+
+
+
+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/)
-
\ No newline at end of file
+
+
+## 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.
+
+
+
+## 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.

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.
+
+
+
+
\ 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,
},