From 096ffd851ba0bb20d9feff1470d990717aba5cb2 Mon Sep 17 00:00:00 2001 From: Thomas Kendrick Date: Sat, 20 Dec 2025 01:23:56 +0000 Subject: [PATCH] feat: add karakeep --- AGENTS.md | 1 + bookmarks/karakeep/.env.example | 3 ++ bookmarks/karakeep/docker-compose.yml | 56 +++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 bookmarks/karakeep/.env.example create mode 100644 bookmarks/karakeep/docker-compose.yml diff --git a/AGENTS.md b/AGENTS.md index 7664575..a83e748 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -37,6 +37,7 @@ Each subdirectory containing a `docker-compose.yml` is intended to be deployed a - **Repository URL:** This git repository. - **Compose Path:** Relative path to the file (e.g., `proxies/traefik/docker-compose.yml`). - **Environment Variables:** injected via the Portainer UI ("Environment variables" section) for each stack. Do not hardcode secrets in Git. +- **Security:** Never include actual secrets (API keys, passwords) in `docker-compose.yml`. Use environment variable placeholders (e.g., `${API_KEY}`). ## 4. Common Patterns & Configuration diff --git a/bookmarks/karakeep/.env.example b/bookmarks/karakeep/.env.example new file mode 100644 index 0000000..ef1fe88 --- /dev/null +++ b/bookmarks/karakeep/.env.example @@ -0,0 +1,3 @@ +KARAKEEP_VERSION=latest +NEXTAUTH_SECRET=changeme +MEILI_MASTER_KEY=changeme diff --git a/bookmarks/karakeep/docker-compose.yml b/bookmarks/karakeep/docker-compose.yml new file mode 100644 index 0000000..f994639 --- /dev/null +++ b/bookmarks/karakeep/docker-compose.yml @@ -0,0 +1,56 @@ +version: "3.8" + +services: + karakeep: + image: ghcr.io/karakeep-app/karakeep:latest + container_name: karakeep + restart: unless-stopped + depends_on: + - meilisearch + - chrome + environment: + - KARAKEEP_VERSION=${KARAKEEP_VERSION:-latest} + - NEXTAUTH_SECRET=${NEXTAUTH_SECRET} + - MEILI_MASTER_KEY=${MEILI_MASTER_KEY} + - NEXTAUTH_URL=https://karakeep.${DOMAIN} + volumes: + - ${CONFIG_ROOT}/karakeep/data:/app/data + labels: + - "traefik.enable=true" + - "traefik.http.routers.karakeep.rule=Host(`karakeep.${DOMAIN}`)" + - "traefik.http.routers.karakeep.entrypoints=https" + - "traefik.http.routers.karakeep.tls.certresolver=cloudflare" + - "traefik.http.services.karakeep.loadbalancer.server.port=3000" + - "homepage.group=Bookmarks" + - "homepage.name=Karakeep" + - "homepage.icon=karakeep.png" + - "homepage.href=https://karakeep.${DOMAIN}" + - "homepage.description=AI Bookmarking Tool" + networks: + - traefik_public + - internal + + meilisearch: + image: getmeili/meilisearch:v1.7 + container_name: karakeep-meilisearch + restart: unless-stopped + environment: + - MEILI_MASTER_KEY=${MEILI_MASTER_KEY} + - MEILI_NO_ANALYTICS=true + volumes: + - ${CONFIG_ROOT}/karakeep/meili_data:/meili_data + networks: + - internal + + chrome: + image: ghcr.io/karakeep-app/chrome:latest + container_name: karakeep-chrome + restart: unless-stopped + networks: + - internal + +networks: + traefik_public: + external: true + internal: + driver: bridge