diff --git a/blueprints/freshrss/docker-compose.yml b/blueprints/freshrss/docker-compose.yml new file mode 100644 index 00000000..8965edc4 --- /dev/null +++ b/blueprints/freshrss/docker-compose.yml @@ -0,0 +1,30 @@ +services: + freshrss: + image: freshrss/freshrss:${FRESHRSS_VERSION:-latest} + restart: unless-stopped + volumes: + # FreshRSS persistent data such as configuration and SQLite databases + - freshrss_data:/var/www/FreshRSS/data + # Optional volume for storing third-party extensions + - freshrss_extensions:/var/www/FreshRSS/extensions + ports: + - "80" + environment: + # Server timezone + TZ: ${TZ:-UTC} + # Cron job to refresh feeds at specified minutes + CRON_MIN: ${CRON_MIN:-13,43} + # Production or development mode + FRESHRSS_ENV: ${FRESHRSS_ENV:-production} + # Copy logs to syslog + COPY_LOG_TO_SYSLOG: ${COPY_LOG_TO_SYSLOG:-On} + # Copy syslog to stderr for docker logs + COPY_SYSLOG_TO_STDERR: ${COPY_SYSLOG_TO_STDERR:-On} + # Optional auto-install parameters + FRESHRSS_INSTALL: ${FRESHRSS_INSTALL:-} + # Optional auto-create user parameters + FRESHRSS_USER: ${FRESHRSS_USER:-} + +volumes: + freshrss_data: + freshrss_extensions: diff --git a/blueprints/freshrss/freshrss.svg b/blueprints/freshrss/freshrss.svg new file mode 100644 index 00000000..a3c8bf75 --- /dev/null +++ b/blueprints/freshrss/freshrss.svg @@ -0,0 +1,23 @@ + + Logo FreshRSS + + + + + + + + + + + FreshRSS + + + + + + + + + + diff --git a/blueprints/freshrss/template.toml b/blueprints/freshrss/template.toml new file mode 100644 index 00000000..e4f61942 --- /dev/null +++ b/blueprints/freshrss/template.toml @@ -0,0 +1,19 @@ +[variables] +main_domain = "${domain}" +timezone = "UTC" + +[config.env] +FRESHRSS_VERSION = "latest" +TZ = "${timezone}" +CRON_MIN = "13,43" +FRESHRSS_ENV = "production" +COPY_LOG_TO_SYSLOG = "On" +COPY_SYSLOG_TO_STDERR = "On" + +[config] +mounts = [] + +[[config.domains]] +serviceName = "freshrss" +port = 80 +host = "${main_domain}" \ No newline at end of file diff --git a/blueprints/karakeep/docker-compose.yml b/blueprints/karakeep/docker-compose.yml new file mode 100644 index 00000000..dd79e704 --- /dev/null +++ b/blueprints/karakeep/docker-compose.yml @@ -0,0 +1,54 @@ +services: + web: + image: ghcr.io/karakeep-app/karakeep:${KARAKEEP_VERSION:-release} + restart: unless-stopped + volumes: + # By default, the data is stored in a docker volume called "karakeep_data". + # If you want to mount a custom directory, change the volume mapping to: + # - /path/to/your/directory:/data + - karakeep_data:/data + ports: + - "3000" + environment: + DATA_DIR: ${DATA_DIR:-/data} + DISABLE_SIGNUPS: ${DISABLE_SIGNUPS:-false} + NEXTAUTH_SECRET: ${NEXTAUTH_SECRET} + NEXTAUTH_URL: ${NEXTAUTH_URL} + # Meilisearch config + MEILI_ADDR: ${MEILI_ADDR:-http://meilisearch:7700} + MEILI_MASTER_KEY: ${MEILI_MASTER_KEY} + # Chrome config + BROWSER_WEB_URL: ${BROWSER_WEB_URL:-ws://chrome:3000} + BROWSER_CONNECT_ONDEMAND: ${BROWSER_CONNECT_ONDEMAND:-true} + depends_on: + - chrome + - meilisearch + + chrome: + image: browserless/chrome:1-chrome-stable + restart: unless-stopped + ports: + - "3000" + environment: + - DEBUG=browserless* + - MAX_CONCURRENT_SESSIONS=10 + - CONNECTION_TIMEOUT=60000 + - MAX_QUEUE_LENGTH=10 + - PORT=3000 + - CHROME_REFRESH_TIME=2147483647 + + meilisearch: + image: getmeili/meilisearch:v1.10 + restart: unless-stopped + ports: + - "7700" + environment: + MEILI_MASTER_KEY: ${MEILI_MASTER_KEY} + MEILI_NO_ANALYTICS: true + MEILI_ENV: production + volumes: + - meilisearch_data:/meili_data + +volumes: + karakeep_data: + meilisearch_data: diff --git a/blueprints/karakeep/karakeep.svg b/blueprints/karakeep/karakeep.svg new file mode 100644 index 00000000..caabdbe1 --- /dev/null +++ b/blueprints/karakeep/karakeep.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/blueprints/karakeep/template.toml b/blueprints/karakeep/template.toml new file mode 100644 index 00000000..751cf8ec --- /dev/null +++ b/blueprints/karakeep/template.toml @@ -0,0 +1,25 @@ +[variables] +main_domain = "${domain}" +nextauth_secret = "${password:64}" +meili_master_key = "${password:32}" + +[config.env] +KARAKEEP_VERSION = "release" +NEXTAUTH_SECRET = "${nextauth_secret}" +MEILI_MASTER_KEY = "${meili_master_key}" +NEXTAUTH_URL = "http://${main_domain}" +DATA_DIR = "/data" +DISABLE_SIGNUPS = "false" +# Meilisearch config +MEILI_ADDR = "http://meilisearch:7700" +# Chrome config +BROWSER_WEB_URL = "ws://chrome:9222" +BROWSER_CONNECT_ONDEMAND = "true" + +[config] +mounts = [] + +[[config.domains]] +serviceName = "web" +port = 3000 +host = "${main_domain}" \ No newline at end of file diff --git a/blueprints/movary/docker-compose.yml b/blueprints/movary/docker-compose.yml new file mode 100644 index 00000000..f84ff9e5 --- /dev/null +++ b/blueprints/movary/docker-compose.yml @@ -0,0 +1,41 @@ +services: + movary: + image: leepeuker/movary:${MOVARY_VERSION:-latest} + restart: unless-stopped + ports: + - "8080" + environment: + # TMDB API configuration + TMDB_API_KEY: ${TMDB_API_KEY} + # Database configuration + DATABASE_MODE: "mysql" + DATABASE_MYSQL_HOST: "mysql" + DATABASE_MYSQL_NAME: "movary" + DATABASE_MYSQL_USER: "movary_user" + DATABASE_MYSQL_PASSWORD: ${MYSQL_PASSWORD} + # Application settings + APP_URL: ${APP_URL:-http://localhost:8080} + APP_ENV: ${APP_ENV:-production} + volumes: + - movary_storage:/app/storage + depends_on: + - mysql + + mysql: + image: mysql:${MYSQL_VERSION:-8.0} + restart: unless-stopped + environment: + MYSQL_DATABASE: "movary" + MYSQL_USER: "movary_user" + MYSQL_PASSWORD: ${MYSQL_PASSWORD} + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} + # MySQL optimization + MYSQL_INNODB_BUFFER_POOL_SIZE: "128M" + MYSQL_INNODB_LOG_FILE_SIZE: "64M" + volumes: + - movary_db:/var/lib/mysql + command: --default-authentication-plugin=mysql_native_password + +volumes: + movary_db: + movary_storage: diff --git a/blueprints/movary/movary.png b/blueprints/movary/movary.png new file mode 100644 index 00000000..779401a0 Binary files /dev/null and b/blueprints/movary/movary.png differ diff --git a/blueprints/movary/template.toml b/blueprints/movary/template.toml new file mode 100644 index 00000000..e2714d9e --- /dev/null +++ b/blueprints/movary/template.toml @@ -0,0 +1,22 @@ +[variables] +main_domain = "${domain}" +tmdb_api_key = "" +mysql_password = "${password:32}" +mysql_root_password = "${password:32}" + +[config.env] +MOVARY_VERSION = "latest" +MYSQL_VERSION = "8.0" +TMDB_API_KEY = "${tmdb_api_key}" +MYSQL_PASSWORD = "${mysql_password}" +MYSQL_ROOT_PASSWORD = "${mysql_root_password}" +APP_URL = "http://${main_domain}" +APP_ENV = "production" + +[config] +mounts = [] + +[[config.domains]] +serviceName = "movary" +port = 8080 +host = "${main_domain}" \ No newline at end of file diff --git a/meta.json b/meta.json index 6846780f..ed6a0a1f 100644 --- a/meta.json +++ b/meta.json @@ -155,7 +155,15 @@ "website": "https://stalw.art/", "docs": "https://stalw.art/docs/" }, - "tags": ["email", "smtp", "jmap", "imap4", "pop3", "self-hosted", "mail-server"] + "tags": [ + "email", + "smtp", + "jmap", + "imap4", + "pop3", + "self-hosted", + "mail-server" + ] }, { "id": "datalens", @@ -633,14 +641,10 @@ "logo": "typecho.png", "links": { "github": "https://github.com/typecho/typecho", - "website": "https://typecho.org/", + "website": "https://typecho.org/", "docs": "http://docs.typecho.org" }, - "tags": [ - "blog", - "cms", - "php" - ] + "tags": ["blog", "cms", "php"] }, { "id": "gitea", @@ -2508,10 +2512,75 @@ "website": "https://palmr.kyantech.com.br/", "docs": "https://palmr.kyantech.com.br/docs/3.0-beta" }, + "tags": ["file-sharing", "self-hosted", "open-source"] + }, + { + "id": "karakeep", + "name": "KaraKeep", + "version": "0.25.0", + "description": "A self-hostable bookmark-everything app (links, notes and images) with AI-based automatic tagging and full text search. Previously known as Hoarder.", + "logo": "karakeep.svg", + "links": { + "github": "https://github.com/karakeep-app/karakeep", + "website": "https://karakeep.app/", + "docs": "https://github.com/karakeep-app/karakeep/tree/main/docs" + }, "tags": [ - "file-sharing", + "bookmarks", + "bookmark-manager", "self-hosted", - "open-source" + "ai", + "search", + "notes", + "productivity" + ] + }, + { + "id": "freshrss", + "name": "FreshRSS", + "version": "latest", + "description": "A free, self-hostable RSS and Atom feed aggregator. Lightweight, easy to work with, powerful, and customizable with themes and extensions.", + "logo": "freshrss.svg", + "links": { + "github": "https://github.com/FreshRSS/FreshRSS", + "website": "https://freshrss.org/", + "docs": "https://freshrss.github.io/FreshRSS/" + }, + "tags": [ + "rss", + "feed-reader", + "news", + "self-hosted", + "aggregator", + "reader" + ] + }, + { + "id": "movary", + "name": "Movary", + "version": "0.66.2", + "description": "Self-hosted web app to track, rate and explore your movie watch history. Offers detailed statistics, third-party integrations for platforms like Trakt, Letterboxd, Netflix, and automated play tracking for Plex, Jellyfin, Emby or Kodi.", + "logo": "movary.png", + "links": { + "github": "https://github.com/leepeuker/movary", + "website": "https://movary.org/", + "docs": "https://movary.org/docs/", + "demo": "https://demo.movary.org/" + }, + "tags": [ + "movies", + "movie-tracker", + "self-hosted", + "plex", + "jellyfin", + "emby", + "kodi", + "trakt", + "letterboxd", + "netflix", + "tmdb", + "statistics", + "rating" ] }, {