diff --git a/.env.example b/.env.example index c8971e3..49164f9 100644 --- a/.env.example +++ b/.env.example @@ -149,6 +149,7 @@ LT_PASSWORD_HASH= USER_DOMAIN_NAME= LETSENCRYPT_EMAIL= COMFYUI_HOSTNAME=comfyui.yourdomain.com +DATABASUS_HOSTNAME=databasus.yourdomain.com DIFY_HOSTNAME=dify.yourdomain.com DOCLING_HOSTNAME=docling.yourdomain.com FLOWISE_HOSTNAME=flowise.yourdomain.com @@ -162,7 +163,6 @@ NEO4J_HOSTNAME=neo4j.yourdomain.com NOCODB_HOSTNAME=nocodb.yourdomain.com PADDLEOCR_HOSTNAME=paddleocr.yourdomain.com PORTAINER_HOSTNAME=portainer.yourdomain.com -POSTGRESUS_HOSTNAME=postgresus.yourdomain.com POSTIZ_HOSTNAME=postiz.yourdomain.com PROMETHEUS_HOSTNAME=prometheus.yourdomain.com QDRANT_HOSTNAME=qdrant.yourdomain.com @@ -474,7 +474,7 @@ DIFY_EXPOSE_NGINX_PORT=8080 DIFY_EXPOSE_NGINX_SSL_PORT=9443 ########################################################################################### -COMPOSE_PROFILES="n8n,portainer,monitoring,postgresus" +COMPOSE_PROFILES="n8n,portainer,monitoring,databasus" PROMETHEUS_PASSWORD_HASH= SEARXNG_PASSWORD_HASH= COMFYUI_PASSWORD_HASH= diff --git a/CHANGELOG.md b/CHANGELOG.md index f557d3b..40e09c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ All notable changes to this project are documented in this file. - **n8n 2.1.0+ compatibility** - Switch to static ffmpeg binary (apk removed upstream in n8n 2.1.0) ### Changed +- **Postgresus → Databasus** - Rebrand to Databasus with new Docker image `databasus/databasus:latest`. Now supports PostgreSQL, MySQL, MariaDB, and MongoDB backups - **Git sync** - Replaced `git pull` with `git fetch + reset` for more reliable updates (handles accidental local commits) ## [November 2025] diff --git a/Caddyfile b/Caddyfile index 3b0df0e..72ca155 100644 --- a/Caddyfile +++ b/Caddyfile @@ -81,9 +81,9 @@ reverse_proxy postiz:5000 } -# Postgresus -{$POSTGRESUS_HOSTNAME} { - reverse_proxy postgresus:4005 +# Databasus +{$DATABASUS_HOSTNAME} { + reverse_proxy databasus:4005 } # Letta diff --git a/README.md b/README.md index b59a50e..59ebfac 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ The installer also makes the following powerful open-source tools **available fo ✅ [**Portainer**](https://www.portainer.io/) - A lightweight, secure web UI to manage your Docker environment (containers, images, volumes, networks) with ease. -✅ [**Postgresus**](https://github.com/RostislavDugin/postgresus) - PostgreSQL monitoring and automated backups with a self-hosted UI. +✅ [**Databasus**](https://github.com/databasus/databasus) - Database backups & monitoring with a self-hosted UI. ✅ [**Postiz**](https://postiz.com/) - An open-source social media scheduling and publishing platform. @@ -179,20 +179,20 @@ After successful installation, your services are up and running! Here's how to g - **n8n:** `n8n.yourdomain.com` (Log in with the email address you provided during installation and the initial password from the summary report. You may be prompted to change this password on first login.) - **ComfyUI:** `comfyui.yourdomain.com` (Node-based Stable Diffusion UI) + - **Databasus:** `databasus.yourdomain.com` - **Dify:** `dify.yourdomain.com` (AI application development platform with comprehensive LLMOps capabilities) - **Docling:** `docling.yourdomain.com` (Universal document converter with REST API; web UI available at `/ui`) - **Flowise:** `flowise.yourdomain.com` (Log in with the email address you provided during installation and the initial password from the summary report.) - **Grafana:** `grafana.yourdomain.com` - **Langfuse:** `langfuse.yourdomain.com` - - **LightRAG:** `lightrag.yourdomain.com` - **Letta:** `letta.yourdomain.com` - **LibreTranslate:** `translate.yourdomain.com` + - **LightRAG:** `lightrag.yourdomain.com` - **Neo4j:** `neo4j.yourdomain.com` - **NocoDB:** `nocodb.yourdomain.com` - **Open WebUI:** `webui.yourdomain.com` - **PaddleOCR:** `paddleocr.yourdomain.com` - **Portainer:** `portainer.yourdomain.com` (Protected by Caddy basic auth; on first login, complete Portainer admin setup) - - **Postgresus:** `postgresus.yourdomain.com` - **Postiz:** `postiz.yourdomain.com` - **Prometheus:** `prometheus.yourdomain.com` (Typically used as a data source for Grafana) - **Qdrant:** `qdrant.yourdomain.com` diff --git a/cloudflare-instructions.md b/cloudflare-instructions.md index 2bd9c05..ac662f1 100644 --- a/cloudflare-instructions.md +++ b/cloudflare-instructions.md @@ -34,29 +34,29 @@ After creating the tunnel, go to the **Published application routes** tab to add | Service | Public Hostname | Service URL | Auth Notes | | ------------------ | ----------------------------- | ---------------------------- | ------------------- | | **n8n** | n8n.yourdomain.com | `http://n8n:5678` | Built-in login | -| **Flowise** | flowise.yourdomain.com | `http://flowise:3001` | Built-in login | -| **Open WebUI** | webui.yourdomain.com | `http://open-webui:8080` | Built-in login | -| **Langfuse** | langfuse.yourdomain.com | `http://langfuse-web:3000` | Built-in login | -| **Grafana** | grafana.yourdomain.com | `http://grafana:3000` | Built-in login | -| **Prometheus** | prometheus.yourdomain.com | `http://prometheus:9090` | ⚠️ Loses Caddy auth | -| **Portainer** | portainer.yourdomain.com | `http://portainer:9000` | Built-in login | -| **Neo4j** | neo4j.yourdomain.com | `http://neo4j:7474` | Built-in login | | **ComfyUI** | comfyui.yourdomain.com | `http://comfyui:8188` | ⚠️ Loses Caddy auth | -| **SearXNG** | searxng.yourdomain.com | `http://searxng:8080` | ⚠️ Loses Caddy auth | +| **Databasus** | databasus.yourdomain.com | `http://databasus:4005` | Built-in login | +| **Dify** ¹ | dify.yourdomain.com | `http://nginx:80` | Built-in login | +| **Docling** | docling.yourdomain.com | `http://docling:5001` | ⚠️ Loses Caddy auth | +| **Flowise** | flowise.yourdomain.com | `http://flowise:3001` | Built-in login | +| **Grafana** | grafana.yourdomain.com | `http://grafana:3000` | Built-in login | +| **Langfuse** | langfuse.yourdomain.com | `http://langfuse-web:3000` | Built-in login | | **Letta** | letta.yourdomain.com | `http://letta:8283` | No auth | -| **Weaviate** | weaviate.yourdomain.com | `http://weaviate:8080` | API key recommended | -| **Qdrant** | qdrant.yourdomain.com | `http://qdrant:6333` | API key recommended | +| **LibreTranslate** | libretranslate.yourdomain.com | `http://libretranslate:5000` | ⚠️ Loses Caddy auth | | **LightRAG** | lightrag.yourdomain.com | `http://lightrag:9621` | No auth | +| **Neo4j** | neo4j.yourdomain.com | `http://neo4j:7474` | Built-in login | +| **Open WebUI** | webui.yourdomain.com | `http://open-webui:8080` | Built-in login | +| **PaddleOCR** | paddleocr.yourdomain.com | `http://paddleocr:8080` | ⚠️ Loses Caddy auth | +| **Portainer** | portainer.yourdomain.com | `http://portainer:9000` | Built-in login | +| **Postiz** | postiz.yourdomain.com | `http://postiz:5000` | Built-in login | +| **Prometheus** | prometheus.yourdomain.com | `http://prometheus:9090` | ⚠️ Loses Caddy auth | +| **Qdrant** | qdrant.yourdomain.com | `http://qdrant:6333` | API key recommended | | **RAGApp** | ragapp.yourdomain.com | `http://ragapp:8000` | ⚠️ Loses Caddy auth | | **RagFlow** | ragflow.yourdomain.com | `http://ragflow:80` | Built-in login | -| **Postiz** | postiz.yourdomain.com | `http://postiz:5000` | Built-in login | -| **PostgreSUS** | postgresus.yourdomain.com | `http://postgresus:4005` | No auth | -| **WAHA** | waha.yourdomain.com | `http://waha:3000` | API key recommended | -| **Docling** | docling.yourdomain.com | `http://docling:5001` | ⚠️ Loses Caddy auth | -| **LibreTranslate** | libretranslate.yourdomain.com | `http://libretranslate:5000` | ⚠️ Loses Caddy auth | -| **PaddleOCR** | paddleocr.yourdomain.com | `http://paddleocr:8080` | ⚠️ Loses Caddy auth | -| **Dify** ¹ | dify.yourdomain.com | `http://nginx:80` | Built-in login | +| **SearXNG** | searxng.yourdomain.com | `http://searxng:8080` | ⚠️ Loses Caddy auth | | **Supabase** ¹ | supabase.yourdomain.com | `http://kong:8000` | Built-in login | +| **WAHA** | waha.yourdomain.com | `http://waha:3000` | API key recommended | +| **Weaviate** | weaviate.yourdomain.com | `http://weaviate:8080` | API key recommended | **⚠️ Security Warning:** - Services marked **"Loses Caddy auth"** have basic authentication via Caddy that is bypassed by the tunnel. Use [Cloudflare Access](https://developers.cloudflare.com/cloudflare-one/applications/) or keep them internal. diff --git a/docker-compose.yml b/docker-compose.yml index 973e43d..0416dc7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,7 +22,8 @@ volumes: paddleocr_cache: paddlex_data: portainer_data: - postgresus_data: + databasus_data: + name: localai_postgresus_data postiz-config: postiz-uploads: prometheus_data: @@ -335,7 +336,7 @@ services: PADDLEOCR_PASSWORD_HASH: ${PADDLEOCR_PASSWORD_HASH} PADDLEOCR_USERNAME: ${PADDLEOCR_USERNAME} PORTAINER_HOSTNAME: ${PORTAINER_HOSTNAME} - POSTGRESUS_HOSTNAME: ${POSTGRESUS_HOSTNAME} + DATABASUS_HOSTNAME: ${DATABASUS_HOSTNAME} POSTIZ_HOSTNAME: ${POSTIZ_HOSTNAME} PROMETHEUS_HOSTNAME: ${PROMETHEUS_HOSTNAME} PROMETHEUS_PASSWORD_HASH: ${PROMETHEUS_PASSWORD_HASH} @@ -836,13 +837,19 @@ services: redis: condition: service_healthy - postgresus: - image: rostislavdugin/postgresus:latest - container_name: postgresus - profiles: ["postgresus"] + databasus: + image: databasus/databasus:latest + container_name: databasus + profiles: ["databasus"] restart: unless-stopped volumes: - - postgresus_data:/postgresus-data + - databasus_data:/databasus-data + healthcheck: + test: ["CMD-SHELL", "wget -qO- http://localhost:4005/ || exit 1"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 60s comfyui: image: yanwk/comfyui-boot:cu124-slim diff --git a/scripts/04_wizard.sh b/scripts/04_wizard.sh index 25a0bec..92339e0 100755 --- a/scripts/04_wizard.sh +++ b/scripts/04_wizard.sh @@ -6,7 +6,7 @@ # # Features: # - Single-screen checklist for service selection -# - Default services: n8n, portainer, monitoring, postgresus +# - Default services: n8n, portainer, monitoring, databasus # - Preserves previously selected services on re-run # - Updates COMPOSE_PROFILES in .env file # @@ -41,15 +41,16 @@ base_services_data=( "cloudflare-tunnel" "Cloudflare Tunnel (Zero-Trust Secure Access)" "comfyui" "ComfyUI (Node-based Stable Diffusion UI)" "crawl4ai" "Crawl4ai (Web Crawler for AI)" - "docling" "Docling (Universal Document Converter to Markdown/JSON)" + "databasus" "Databasus (Database backups & monitoring)" "dify" "Dify (AI Application Development Platform with LLMOps)" + "docling" "Docling (Universal Document Converter to Markdown/JSON)" "flowise" "Flowise (AI Agent Builder)" "gost" "Gost Proxy (HTTP/HTTPS proxy for AI services outbound traffic)" "gotenberg" "Gotenberg (Document Conversion API)" "langfuse" "Langfuse Suite (AI Observability - includes Clickhouse, Minio)" "letta" "Letta (Agent Server & SDK)" - "lightrag" "LightRAG (Graph-based RAG with knowledge graphs)" "libretranslate" "LibreTranslate (Self-hosted translation API - 50+ languages)" + "lightrag" "LightRAG (Graph-based RAG with knowledge graphs)" "monitoring" "Monitoring Suite (Prometheus, Grafana, cAdvisor, Node-Exporter)" "n8n" "n8n, n8n-worker, n8n-import (Workflow Automation)" "neo4j" "Neo4j (Graph Database)" @@ -58,7 +59,6 @@ base_services_data=( "open-webui" "Open WebUI (ChatGPT-like Interface)" "paddleocr" "PaddleOCR (OCR API Server)" "portainer" "Portainer (Docker management UI)" - "postgresus" "Postgresus (PostgreSQL backups & monitoring)" "postiz" "Postiz (Social publishing platform)" "python-runner" "Python Runner (Run your custom Python code from ./python-runner)" "qdrant" "Qdrant (Vector Database)" @@ -92,7 +92,7 @@ while [ $idx -lt ${#base_services_data[@]} ]; do else # .env has no COMPOSE_PROFILES or it's empty/just quotes, use hardcoded defaults case "$tag" in - "n8n"|"portainer"|"monitoring"|"postgresus") status="ON" ;; + "n8n"|"portainer"|"monitoring"|"databasus") status="ON" ;; *) status="OFF" ;; esac fi diff --git a/scripts/apply_update.sh b/scripts/apply_update.sh index f089664..87a6848 100755 --- a/scripts/apply_update.sh +++ b/scripts/apply_update.sh @@ -70,8 +70,9 @@ bash "$SCRIPT_DIR/05_configure_services.sh" || { } log_success "Service configuration completed." -# Clean up legacy n8n worker containers from old naming convention +# Clean up legacy containers from old naming conventions cleanup_legacy_n8n_workers +cleanup_legacy_postgresus # Pull latest versions of selected containers based on updated .env set_telemetry_stage "update_docker_pull" diff --git a/scripts/generate_welcome_page.sh b/scripts/generate_welcome_page.sh index 635d813..a14de8d 100755 --- a/scripts/generate_welcome_page.sh +++ b/scripts/generate_welcome_page.sh @@ -89,10 +89,10 @@ if is_profile_active "portainer"; then }") fi -# Postgresus -if is_profile_active "postgresus"; then - SERVICES_ARRAY+=(" \"postgresus\": { - \"hostname\": \"$(json_escape "$POSTGRESUS_HOSTNAME")\", +# Databasus +if is_profile_active "databasus"; then + SERVICES_ARRAY+=(" \"databasus\": { + \"hostname\": \"$(json_escape "$DATABASUS_HOSTNAME")\", \"credentials\": { \"note\": \"PostgreSQL credentials are shown in the PostgreSQL card\" } @@ -495,12 +495,12 @@ if is_profile_active "n8n"; then ((STEP_NUM++)) fi -# Step 3: Configure database backups (if postgresus active) -if is_profile_active "postgresus"; then +# Step 3: Configure database backups (if databasus active) +if is_profile_active "databasus"; then QUICK_START_ARRAY+=(" { \"step\": $STEP_NUM, \"title\": \"Configure database backups\", - \"description\": \"Set up Postgresus for automated PostgreSQL backups\" + \"description\": \"Set up Databasus for automated database backups\" }") ((STEP_NUM++)) fi diff --git a/scripts/update_preview.sh b/scripts/update_preview.sh index 687ee70..94f409e 100755 --- a/scripts/update_preview.sh +++ b/scripts/update_preview.sh @@ -129,9 +129,9 @@ if is_profile_active "searxng"; then check_image_update "searxng" "searxng/searxng:latest" fi -if is_profile_active "postgresus"; then - log_subheader "Postgresus" - check_image_update "postgresus" "ghcr.io/postgresus/postgresus:latest" +if is_profile_active "databasus"; then + log_subheader "Databasus" + check_image_update "databasus" "databasus/databasus:latest" fi # Summary diff --git a/scripts/utils.sh b/scripts/utils.sh index 7c3ff81..47c8dc1 100755 --- a/scripts/utils.sh +++ b/scripts/utils.sh @@ -638,6 +638,22 @@ cleanup_legacy_n8n_workers() { fi } +# Clean up legacy postgresus container after rename to databasus +# This function removes the old "postgresus" container if it exists, +# allowing the new "databasus" container to take its place. +# Usage: cleanup_legacy_postgresus +cleanup_legacy_postgresus() { + local container_name="postgresus" + + # Check if container exists (running or stopped) + if docker ps -a --format '{{.Names}}' | grep -q "^${container_name}$"; then + log_info "Found legacy postgresus container, migrating to databasus..." + docker stop "$container_name" 2>/dev/null || true + docker rm -f "$container_name" 2>/dev/null || true + log_success "Legacy postgresus container removed. Databasus will use existing data via volume alias." + fi +} + #============================================================================= # USER DETECTION #============================================================================= diff --git a/welcome/app.js b/welcome/app.js index d895bc4..b7d2b34 100644 --- a/welcome/app.js +++ b/welcome/app.js @@ -191,13 +191,13 @@ category: 'infra', docsUrl: 'https://docs.portainer.io' }, - 'postgresus': { - name: 'Postgresus', - description: 'PostgreSQL Backups & Monitoring', - icon: 'PG', - color: 'bg-[#336791]', + 'databasus': { + name: 'Databasus', + description: 'Database Backups & Monitoring', + icon: 'DB', + color: 'bg-[#155DFC]', category: 'database', - docsUrl: 'https://postgresus.com/' + docsUrl: 'https://databasus.com/' }, 'langfuse': { name: 'Langfuse',