diff --git a/.env.example b/.env.example index a8de405..f4599cb 100644 --- a/.env.example +++ b/.env.example @@ -99,6 +99,15 @@ NEO4J_AUTH_PASSWORD= NOCODB_JWT_SECRET= +############ +# [required] +# Appsmith encryption credentials (auto-generated) +############ + +APPSMITH_ENCRYPTION_PASSWORD= +APPSMITH_ENCRYPTION_SALT= + + ############ # [required] # Langfuse credentials @@ -148,6 +157,7 @@ LT_PASSWORD_HASH= USER_DOMAIN_NAME= LETSENCRYPT_EMAIL= +APPSMITH_HOSTNAME=appsmith.yourdomain.com COMFYUI_HOSTNAME=comfyui.yourdomain.com DATABASUS_HOSTNAME=databasus.yourdomain.com DIFY_HOSTNAME=dify.yourdomain.com @@ -436,7 +446,7 @@ GOST_UPSTREAM_PROXY= # Internal services bypass list (prevents internal Docker traffic from going through proxy) # Includes: Docker internal networks (172.16-31.*, 10.*), Docker DNS (127.0.0.11), and all service hostnames -GOST_NO_PROXY=localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.local,postgres,postgres:5432,redis,redis:6379,caddy,ollama,neo4j,qdrant,weaviate,clickhouse,minio,searxng,crawl4ai,gotenberg,langfuse-web,langfuse-worker,flowise,n8n,n8n-import,n8n-worker-1,n8n-worker-2,n8n-worker-3,n8n-worker-4,n8n-worker-5,n8n-worker-6,n8n-worker-7,n8n-worker-8,n8n-worker-9,n8n-worker-10,n8n-runner-1,n8n-runner-2,n8n-runner-3,n8n-runner-4,n8n-runner-5,n8n-runner-6,n8n-runner-7,n8n-runner-8,n8n-runner-9,n8n-runner-10,letta,lightrag,docling,postiz,temporal,temporal-ui,ragflow,ragflow-mysql,ragflow-minio,ragflow-redis,ragflow-elasticsearch,ragapp,open-webui,comfyui,waha,libretranslate,paddleocr,nocodb,db,studio,kong,auth,rest,realtime,storage,imgproxy,meta,functions,analytics,vector,supavisor,gost,api.telegram.org,telegram.org,t.me,core.telegram.org +GOST_NO_PROXY=localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.local,appsmith,postgres,postgres:5432,redis,redis:6379,caddy,ollama,neo4j,qdrant,weaviate,clickhouse,minio,searxng,crawl4ai,gotenberg,langfuse-web,langfuse-worker,flowise,n8n,n8n-import,n8n-worker-1,n8n-worker-2,n8n-worker-3,n8n-worker-4,n8n-worker-5,n8n-worker-6,n8n-worker-7,n8n-worker-8,n8n-worker-9,n8n-worker-10,n8n-runner-1,n8n-runner-2,n8n-runner-3,n8n-runner-4,n8n-runner-5,n8n-runner-6,n8n-runner-7,n8n-runner-8,n8n-runner-9,n8n-runner-10,letta,lightrag,docling,postiz,temporal,temporal-ui,ragflow,ragflow-mysql,ragflow-minio,ragflow-redis,ragflow-elasticsearch,ragapp,open-webui,comfyui,waha,libretranslate,paddleocr,nocodb,db,studio,kong,auth,rest,realtime,storage,imgproxy,meta,functions,analytics,vector,supavisor,gost,api.telegram.org,telegram.org,t.me,core.telegram.org ############ # Functions - Configuration for Functions diff --git a/CHANGELOG.md b/CHANGELOG.md index e686c7d..f1fc97e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## [Unreleased] +## [1.3.0] - 2026-02-27 + +### Added +- **Appsmith** - Low-code platform for building internal tools, dashboards, and admin panels + ## [1.2.8] - 2026-02-27 ### Fixed diff --git a/Caddyfile b/Caddyfile index 5fe2160..6eb3cb5 100644 --- a/Caddyfile +++ b/Caddyfile @@ -8,6 +8,12 @@ # Custom: Run 'make setup-tls' to use your own certificates import /etc/caddy/addons/tls-snippet.conf +# Appsmith +{$APPSMITH_HOSTNAME} { + import service_tls + reverse_proxy appsmith:80 +} + # N8N {$N8N_HOSTNAME} { import service_tls diff --git a/README.md b/README.md index 75283a9..300de19 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,8 @@ This setup provides a comprehensive suite of cutting-edge services, all pre-conf The installer also makes the following powerful open-source tools **available for you to select and deploy** via an interactive wizard during setup: +✅ [**Appsmith**](https://www.appsmith.com/) - An open-source low-code platform for building internal tools, dashboards, and admin panels with a drag-and-drop UI builder. + ✅ [**n8n**](https://n8n.io/) - A low-code platform with over 400 integrations and advanced AI components to automate workflows. ✅ [**ComfyUI**](https://github.com/comfyanonymous/ComfyUI) - A powerful, node-based UI for Stable Diffusion workflows. Build and run image-generation pipelines visually, with support for custom nodes and extensions. @@ -179,6 +181,7 @@ After successful installation, your services are up and running! Here's how to g The installation script provided a summary report with all access URLs and credentials. Please refer to that report. The main services will be available at the following addresses (replace `yourdomain.com` with your actual domain): - **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.) + - **Appsmith:** `appsmith.yourdomain.com` (Low-code app builder) - **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) diff --git a/VERSION b/VERSION index db6fb4a..f0bb29e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.8 +1.3.0 diff --git a/docker-compose.yml b/docker-compose.yml index 6c48ffe..ee1191b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,5 @@ volumes: + appsmith_data: caddy-config: caddy-data: comfyui_data: @@ -144,6 +145,26 @@ x-n8n-worker-runner: &service-n8n-worker-runner N8N_RUNNERS_TASK_BROKER_URI: http://127.0.0.1:5679 services: + appsmith: + image: appsmith/appsmith-ce:release + container_name: appsmith + profiles: ["appsmith"] + restart: unless-stopped + logging: *default-logging + environment: + <<: *proxy-env + APPSMITH_ENCRYPTION_PASSWORD: ${APPSMITH_ENCRYPTION_PASSWORD} + APPSMITH_ENCRYPTION_SALT: ${APPSMITH_ENCRYPTION_SALT} + APPSMITH_DISABLE_TELEMETRY: "true" + volumes: + - appsmith_data:/appsmith-stacks + healthcheck: + test: ["CMD-SHELL", "http_proxy= https_proxy= HTTP_PROXY= HTTPS_PROXY= wget -qO- http://localhost/api/v1/health || exit 1"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 120s + flowise: image: flowiseai/flowise restart: unless-stopped @@ -318,6 +339,7 @@ services: - caddy-data:/data:rw - caddy-config:/config:rw environment: + APPSMITH_HOSTNAME: ${APPSMITH_HOSTNAME} COMFYUI_HOSTNAME: ${COMFYUI_HOSTNAME} COMFYUI_PASSWORD_HASH: ${COMFYUI_PASSWORD_HASH} COMFYUI_USERNAME: ${COMFYUI_USERNAME} diff --git a/scripts/03_generate_secrets.sh b/scripts/03_generate_secrets.sh index e11bada..aa02a21 100755 --- a/scripts/03_generate_secrets.sh +++ b/scripts/03_generate_secrets.sh @@ -74,6 +74,8 @@ USER_INPUT_VARS=( # Variables to generate: varName="type:length" # Types: password (alphanum), secret (base64), hex, base64, alphanum declare -A VARS_TO_GENERATE=( + ["APPSMITH_ENCRYPTION_PASSWORD"]="password:32" + ["APPSMITH_ENCRYPTION_SALT"]="password:32" ["CLICKHOUSE_PASSWORD"]="password:32" ["COMFYUI_PASSWORD"]="password:32" # Added ComfyUI basic auth password ["DASHBOARD_PASSWORD"]="password:32" # Supabase Dashboard diff --git a/scripts/04_wizard.sh b/scripts/04_wizard.sh index 755a9e7..1fc3fab 100755 --- a/scripts/04_wizard.sh +++ b/scripts/04_wizard.sh @@ -38,6 +38,7 @@ current_profiles_for_matching=",$CURRENT_PROFILES_VALUE," # --- Define available services and their descriptions --- # Base service definitions (tag, description) base_services_data=( + "appsmith" "Appsmith (Low-code Platform for Internal Tools & Dashboards)" "cloudflare-tunnel" "Cloudflare Tunnel (Zero-Trust Secure Access)" "comfyui" "ComfyUI (Node-based Stable Diffusion UI)" "crawl4ai" "Crawl4ai (Web Crawler for AI)" diff --git a/scripts/07_final_report.sh b/scripts/07_final_report.sh index d82ed61..ecba0b0 100755 --- a/scripts/07_final_report.sh +++ b/scripts/07_final_report.sh @@ -79,6 +79,9 @@ echo "" echo -e " ${WHITE}2.${NC} Store the Welcome Page credentials securely" echo "" echo -e " ${WHITE}3.${NC} Configure services as needed:" +if is_profile_active "appsmith"; then + echo -e " ${GREEN}*${NC} ${WHITE}Appsmith${NC}: Create admin account on first login (may take a few minutes to start)" +fi if is_profile_active "n8n"; then echo -e " ${GREEN}*${NC} ${WHITE}n8n${NC}: Complete first-run setup with your email" fi diff --git a/scripts/generate_welcome_page.sh b/scripts/generate_welcome_page.sh index 8c11e5f..9db023b 100755 --- a/scripts/generate_welcome_page.sh +++ b/scripts/generate_welcome_page.sh @@ -27,6 +27,19 @@ GENERATED_AT=$(date -u +"%Y-%m-%dT%H:%M:%SZ") # Build services array - each entry is a formatted JSON block declare -a SERVICES_ARRAY +# Appsmith +if is_profile_active "appsmith"; then + SERVICES_ARRAY+=(" \"appsmith\": { + \"hostname\": \"$(json_escape "$APPSMITH_HOSTNAME")\", + \"credentials\": { + \"note\": \"Create your account on first login\" + }, + \"extra\": { + \"docs\": \"https://docs.appsmith.com\" + } + }") +fi + # n8n if is_profile_active "n8n"; then N8N_WORKER_COUNT_VAL="${N8N_WORKER_COUNT:-1}" @@ -519,6 +532,16 @@ if is_profile_active "databasus"; then ((STEP_NUM++)) fi +# Set up Appsmith (if appsmith active) +if is_profile_active "appsmith"; then + QUICK_START_ARRAY+=(" { + \"step\": $STEP_NUM, + \"title\": \"Set up Appsmith\", + \"description\": \"Create your admin account and build your first app\" + }") + ((STEP_NUM++)) +fi + # Step 4: Monitor system (if monitoring active) if is_profile_active "monitoring"; then QUICK_START_ARRAY+=(" { diff --git a/scripts/update_preview.sh b/scripts/update_preview.sh index 94f409e..386e740 100755 --- a/scripts/update_preview.sh +++ b/scripts/update_preview.sh @@ -134,6 +134,11 @@ if is_profile_active "databasus"; then check_image_update "databasus" "databasus/databasus:latest" fi +if is_profile_active "appsmith"; then + log_subheader "Appsmith" + check_image_update "appsmith" "appsmith/appsmith-ce:release" +fi + # Summary log_divider echo "" diff --git a/welcome/app.js b/welcome/app.js index fdd175f..76092b2 100644 --- a/welcome/app.js +++ b/welcome/app.js @@ -148,6 +148,14 @@ // DATA - Service metadata and commands // ============================================ const SERVICE_METADATA = { + 'appsmith': { + name: 'Appsmith', + description: 'Low-code Internal Tools', + icon: 'AS', + color: 'bg-[#5f2dde]', + category: 'tools', + docsUrl: 'https://docs.appsmith.com' + }, 'n8n': { name: 'n8n', description: 'Workflow Automation',