mirror of
https://github.com/kossakovsky/n8n-install.git
synced 2026-03-07 22:33:11 +00:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
107f18296a | ||
|
|
059e141daa | ||
|
|
6505c5cdf4 | ||
|
|
f8e665f85f | ||
|
|
f2f51c6e13 | ||
|
|
ceaa970273 | ||
|
|
6f1aaa0555 | ||
|
|
0dec31539e | ||
|
|
b990b09681 | ||
|
|
de8df8a0b7 | ||
|
|
543593de36 |
22
.env.example
22
.env.example
@@ -99,6 +99,15 @@ NEO4J_AUTH_PASSWORD=
|
|||||||
NOCODB_JWT_SECRET=
|
NOCODB_JWT_SECRET=
|
||||||
|
|
||||||
|
|
||||||
|
############
|
||||||
|
# [required]
|
||||||
|
# Appsmith encryption credentials (auto-generated)
|
||||||
|
############
|
||||||
|
|
||||||
|
APPSMITH_ENCRYPTION_PASSWORD=
|
||||||
|
APPSMITH_ENCRYPTION_SALT=
|
||||||
|
|
||||||
|
|
||||||
############
|
############
|
||||||
# [required]
|
# [required]
|
||||||
# Langfuse credentials
|
# Langfuse credentials
|
||||||
@@ -148,6 +157,7 @@ LT_PASSWORD_HASH=
|
|||||||
|
|
||||||
USER_DOMAIN_NAME=
|
USER_DOMAIN_NAME=
|
||||||
LETSENCRYPT_EMAIL=
|
LETSENCRYPT_EMAIL=
|
||||||
|
APPSMITH_HOSTNAME=appsmith.yourdomain.com
|
||||||
COMFYUI_HOSTNAME=comfyui.yourdomain.com
|
COMFYUI_HOSTNAME=comfyui.yourdomain.com
|
||||||
DATABASUS_HOSTNAME=databasus.yourdomain.com
|
DATABASUS_HOSTNAME=databasus.yourdomain.com
|
||||||
DIFY_HOSTNAME=dify.yourdomain.com
|
DIFY_HOSTNAME=dify.yourdomain.com
|
||||||
@@ -430,11 +440,13 @@ GOST_PROXY_URL=
|
|||||||
|
|
||||||
# External upstream proxy (REQUIRED - asked during wizard if gost is selected)
|
# External upstream proxy (REQUIRED - asked during wizard if gost is selected)
|
||||||
# Examples: socks5://user:pass@proxy.com:1080, http://user:pass@proxy.com:8080
|
# Examples: socks5://user:pass@proxy.com:1080, http://user:pass@proxy.com:8080
|
||||||
|
# IMPORTANT: For HTTP proxies use http://, NOT https://
|
||||||
|
# The protocol refers to proxy type, not connection security.
|
||||||
GOST_UPSTREAM_PROXY=
|
GOST_UPSTREAM_PROXY=
|
||||||
|
|
||||||
# Internal services bypass list (prevents internal Docker traffic from going through 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
|
# 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
|
# Functions - Configuration for Functions
|
||||||
@@ -475,6 +487,14 @@ DIFY_SECRET_KEY=
|
|||||||
DIFY_EXPOSE_NGINX_PORT=8080
|
DIFY_EXPOSE_NGINX_PORT=8080
|
||||||
DIFY_EXPOSE_NGINX_SSL_PORT=9443
|
DIFY_EXPOSE_NGINX_SSL_PORT=9443
|
||||||
|
|
||||||
|
############
|
||||||
|
# Docker Compose parallel limit
|
||||||
|
# Limits the number of simultaneous Docker image pulls to prevent
|
||||||
|
# "net/http: TLS handshake timeout" errors when many services are selected.
|
||||||
|
# Increase this value if you have a fast network connection.
|
||||||
|
############
|
||||||
|
COMPOSE_PARALLEL_LIMIT=3
|
||||||
|
|
||||||
###########################################################################################
|
###########################################################################################
|
||||||
COMPOSE_PROFILES="n8n,portainer,monitoring,databasus"
|
COMPOSE_PROFILES="n8n,portainer,monitoring,databasus"
|
||||||
PROMETHEUS_PASSWORD_HASH=
|
PROMETHEUS_PASSWORD_HASH=
|
||||||
|
|||||||
31
AGENTS.md
Normal file
31
AGENTS.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# Repository Guidelines
|
||||||
|
|
||||||
|
## Project Structure & Module Organization
|
||||||
|
- Core runtime config lives at the repo root: `docker-compose.yml`, `docker-compose.n8n-workers.yml`, and `Caddyfile`.
|
||||||
|
- Installer and maintenance logic is in `scripts/` (install, update, doctor, cleanup, and helpers).
|
||||||
|
- Service-specific assets are grouped by folder (examples: `n8n/`, `grafana/`, `prometheus/`, `searxng/`, `ragflow/`, `python-runner/`, `welcome/`).
|
||||||
|
- Shared files for workflows are stored in `shared/` and mounted inside containers as `/data/shared`.
|
||||||
|
|
||||||
|
## Build, Test, and Development Commands
|
||||||
|
- `make install`: run the full installation wizard.
|
||||||
|
- `make update` or `make git-pull`: refresh images and configuration (fork-friendly via `make git-pull`).
|
||||||
|
- `make logs s=<service>`: tail a specific service’s logs (example: `make logs s=n8n`).
|
||||||
|
- `make doctor`: run system checks for DNS/SSL/containers.
|
||||||
|
- `make restart`, `make stop`, `make start`, `make status`: manage the compose stack.
|
||||||
|
- `make clean` or `make clean-all`: remove unused Docker resources (`clean-all` is destructive).
|
||||||
|
|
||||||
|
## Coding Style & Naming Conventions
|
||||||
|
- Bash scripts in `scripts/` use `#!/bin/bash`, 4-space indentation, and uppercase constants. Match existing formatting.
|
||||||
|
- Environment variable patterns are consistent: hostnames use `_HOSTNAME`, secrets use `_PASSWORD` or `_KEY`, and bcrypt hashes use `_PASSWORD_HASH`.
|
||||||
|
- Services should not publish ports directly; external access goes through Caddy.
|
||||||
|
|
||||||
|
## Testing Guidelines
|
||||||
|
- There is no unit-test suite. Use syntax checks instead:
|
||||||
|
- `docker compose -p localai config --quiet`
|
||||||
|
- `bash -n scripts/install.sh` (and other edited scripts)
|
||||||
|
- For installer changes, validate on a clean Ubuntu 24.04 LTS host and confirm profile selections start correctly.
|
||||||
|
|
||||||
|
## Commit & Pull Request Guidelines
|
||||||
|
- Commit messages follow Conventional Commits: `type(scope): summary` (examples in history include `fix(caddy): ...`, `docs(readme): ...`, `feat(postiz): ...`).
|
||||||
|
- PRs should include a short summary, affected services/profiles, and test commands run.
|
||||||
|
- Update `README.md` and `CHANGELOG.md` for user-facing changes or new services.
|
||||||
30
CHANGELOG.md
30
CHANGELOG.md
@@ -2,6 +2,36 @@
|
|||||||
|
|
||||||
## [Unreleased]
|
## [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
|
||||||
|
- **Ragflow** - Fix nginx config mount path (`sites-available/default` → `conf.d/default.conf`) to resolve default "Welcome to nginx!" page (#41)
|
||||||
|
|
||||||
|
## [1.2.7] - 2026-02-27
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- **Docker** - Limit parallel image pulls (`COMPOSE_PARALLEL_LIMIT=3`) to prevent `TLS handshake timeout` errors when many services are selected
|
||||||
|
|
||||||
|
## [1.2.6] - 2026-02-10
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- **ComfyUI** - Update Docker image to CUDA 12.8 (`cu128-slim`)
|
||||||
|
|
||||||
|
## [1.2.5] - 2026-02-03
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- **n8n** - Use static ffmpeg binaries for Alpine/musl compatibility (fixes glibc errors)
|
||||||
|
|
||||||
|
## [1.2.4] - 2026-01-30
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- **Postiz** - Fix `BACKEND_INTERNAL_URL` to use `localhost` instead of Docker hostname (internal nginx requires localhost)
|
||||||
|
|
||||||
## [1.2.3] - 2026-01-29
|
## [1.2.3] - 2026-01-29
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|||||||
21
CLAUDE.md
21
CLAUDE.md
@@ -10,7 +10,7 @@ This is **n8n-install**, a Docker Compose-based installer that provides a compre
|
|||||||
|
|
||||||
- **Profile-based service management**: Services are activated via Docker Compose profiles (e.g., `n8n`, `flowise`, `monitoring`). Profiles are stored in the `.env` file's `COMPOSE_PROFILES` variable.
|
- **Profile-based service management**: Services are activated via Docker Compose profiles (e.g., `n8n`, `flowise`, `monitoring`). Profiles are stored in the `.env` file's `COMPOSE_PROFILES` variable.
|
||||||
- **No exposed ports**: Services do NOT publish ports directly. All external HTTPS access is routed through Caddy reverse proxy on ports 80/443.
|
- **No exposed ports**: Services do NOT publish ports directly. All external HTTPS access is routed through Caddy reverse proxy on ports 80/443.
|
||||||
- **Shared secrets**: Core services (Postgres, Redis/Valkey, Caddy) are always included. Other services are optional and selected during installation.
|
- **Shared secrets**: Core services (Postgres, Valkey (Redis-compatible, container named `redis` for backward compatibility), Caddy) are always included. Other services are optional and selected during installation.
|
||||||
- **Queue-based n8n**: n8n runs in `queue` mode with Redis, Postgres, and dynamically scaled workers (`N8N_WORKER_COUNT`).
|
- **Queue-based n8n**: n8n runs in `queue` mode with Redis, Postgres, and dynamically scaled workers (`N8N_WORKER_COUNT`).
|
||||||
|
|
||||||
### Key Files
|
### Key Files
|
||||||
@@ -40,9 +40,13 @@ This is **n8n-install**, a Docker Compose-based installer that provides a compre
|
|||||||
- `scripts/docker_cleanup.sh`: Removes unused Docker resources (used by `make clean`)
|
- `scripts/docker_cleanup.sh`: Removes unused Docker resources (used by `make clean`)
|
||||||
- `scripts/download_top_workflows.sh`: Downloads community n8n workflows
|
- `scripts/download_top_workflows.sh`: Downloads community n8n workflows
|
||||||
- `scripts/import_workflows.sh`: Imports workflows from `n8n/backup/workflows/` into n8n (used by `make import`)
|
- `scripts/import_workflows.sh`: Imports workflows from `n8n/backup/workflows/` into n8n (used by `make import`)
|
||||||
|
- `scripts/restart.sh`: Restarts services with proper compose file handling (used by `make restart`)
|
||||||
|
- `scripts/setup_custom_tls.sh`: Configures custom TLS certificates (used by `make setup-tls`)
|
||||||
|
|
||||||
**Project Name**: All docker-compose commands use `-p localai` (defined in Makefile as `PROJECT_NAME := localai`).
|
**Project Name**: All docker-compose commands use `-p localai` (defined in Makefile as `PROJECT_NAME := localai`).
|
||||||
|
|
||||||
|
**Version**: Stored in `VERSION` file at repository root.
|
||||||
|
|
||||||
### Installation Flow
|
### Installation Flow
|
||||||
|
|
||||||
`scripts/install.sh` orchestrates the installation by running numbered scripts in sequence:
|
`scripts/install.sh` orchestrates the installation by running numbered scripts in sequence:
|
||||||
@@ -58,6 +62,8 @@ This is **n8n-install**, a Docker Compose-based installer that provides a compre
|
|||||||
|
|
||||||
The update flow (`scripts/update.sh`) similarly orchestrates: git fetch + reset → service selection → `apply_update.sh` → restart.
|
The update flow (`scripts/update.sh`) similarly orchestrates: git fetch + reset → service selection → `apply_update.sh` → restart.
|
||||||
|
|
||||||
|
**Git update modes**: Default is `reset` (hard reset to origin). Set `GIT_MODE=merge` in `.env` for fork workflows (merges from upstream instead of hard reset). The `make git-pull` command uses merge mode.
|
||||||
|
|
||||||
## Common Development Commands
|
## Common Development Commands
|
||||||
|
|
||||||
### Makefile Commands
|
### Makefile Commands
|
||||||
@@ -156,6 +162,7 @@ This project uses [Semantic Versioning](https://semver.org/). When updating `CHA
|
|||||||
- Configuration stored in `docker-compose.n8n-workers.yml` (auto-generated, gitignored)
|
- Configuration stored in `docker-compose.n8n-workers.yml` (auto-generated, gitignored)
|
||||||
- Runner connects to its worker via `network_mode: "service:n8n-worker-N"` (localhost:5679)
|
- Runner connects to its worker via `network_mode: "service:n8n-worker-N"` (localhost:5679)
|
||||||
- Runner image `n8nio/runners` must match n8n version
|
- Runner image `n8nio/runners` must match n8n version
|
||||||
|
- **Template profile pattern**: `docker-compose.yml` defines `n8n-worker-template` and `n8n-runner-template` with `profiles: ["n8n-template"]` (never activated directly). `generate_n8n_workers.sh` uses these as templates to generate `docker-compose.n8n-workers.yml` with the actual worker/runner services.
|
||||||
- **Scaling**: Change `N8N_WORKER_COUNT` in `.env` and run `bash scripts/generate_n8n_workers.sh`
|
- **Scaling**: Change `N8N_WORKER_COUNT` in `.env` and run `bash scripts/generate_n8n_workers.sh`
|
||||||
- **Code node libraries**: Configured via `n8n/n8n-task-runners.json` and `n8n/Dockerfile.runner`:
|
- **Code node libraries**: Configured via `n8n/n8n-task-runners.json` and `n8n/Dockerfile.runner`:
|
||||||
- JS packages installed via `pnpm add` in Dockerfile.runner
|
- JS packages installed via `pnpm add` in Dockerfile.runner
|
||||||
@@ -170,6 +177,16 @@ This project uses [Semantic Versioning](https://semver.org/). When updating `CHA
|
|||||||
- Hostnames are passed via environment variables (e.g., `N8N_HOSTNAME`, `FLOWISE_HOSTNAME`)
|
- Hostnames are passed via environment variables (e.g., `N8N_HOSTNAME`, `FLOWISE_HOSTNAME`)
|
||||||
- Basic auth uses bcrypt hashes generated by `scripts/03_generate_secrets.sh` via Caddy's hash command
|
- Basic auth uses bcrypt hashes generated by `scripts/03_generate_secrets.sh` via Caddy's hash command
|
||||||
- Never add `ports:` to services in docker-compose.yml; let Caddy handle all external access
|
- Never add `ports:` to services in docker-compose.yml; let Caddy handle all external access
|
||||||
|
- **Caddy Addons** (`caddy-addon/`): Extend Caddy config without modifying the main Caddyfile. Files matching `site-*.conf` are auto-imported. TLS is controlled via `tls-snippet.conf` (all service blocks use `import service_tls`). See `caddy-addon/README.md` for details.
|
||||||
|
|
||||||
|
### External Compose Files (Supabase/Dify)
|
||||||
|
|
||||||
|
Complex services like Supabase and Dify maintain their own upstream docker-compose files:
|
||||||
|
- `start_services.py` handles cloning repos, preparing `.env` files, and starting services
|
||||||
|
- Each external service needs: `is_*_enabled()`, `clone_*_repo()`, `prepare_*_env()`, `start_*()` functions in `start_services.py`
|
||||||
|
- `scripts/utils.sh` provides `get_*_compose()` getter functions and `build_compose_files_array()` includes them
|
||||||
|
- `stop_all_services()` in `start_services.py` checks compose file existence (not profile) to ensure cleanup when a profile is removed
|
||||||
|
- All external compose files use the same project name (`-p localai`) so containers appear together
|
||||||
|
|
||||||
### Secret Generation
|
### Secret Generation
|
||||||
|
|
||||||
@@ -276,6 +293,8 @@ healthcheck:
|
|||||||
test: ["CMD-SHELL", "http_proxy= https_proxy= HTTP_PROXY= HTTPS_PROXY= wget -qO- http://localhost:8080/health || exit 1"]
|
test: ["CMD-SHELL", "http_proxy= https_proxy= HTTP_PROXY= HTTPS_PROXY= wget -qO- http://localhost:8080/health || exit 1"]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**GOST_NO_PROXY**: ALL service container names must be listed in `GOST_NO_PROXY` in `.env.example`. This prevents internal Docker network traffic from routing through the proxy. This applies to every service, not just those using `<<: *proxy-env`.
|
||||||
|
|
||||||
### Welcome Page Dashboard
|
### Welcome Page Dashboard
|
||||||
|
|
||||||
The welcome page (`welcome/`) provides a post-install dashboard showing all active services:
|
The welcome page (`welcome/`) provides a post-install dashboard showing all active services:
|
||||||
|
|||||||
@@ -8,6 +8,12 @@
|
|||||||
# Custom: Run 'make setup-tls' to use your own certificates
|
# Custom: Run 'make setup-tls' to use your own certificates
|
||||||
import /etc/caddy/addons/tls-snippet.conf
|
import /etc/caddy/addons/tls-snippet.conf
|
||||||
|
|
||||||
|
# Appsmith
|
||||||
|
{$APPSMITH_HOSTNAME} {
|
||||||
|
import service_tls
|
||||||
|
reverse_proxy appsmith:80
|
||||||
|
}
|
||||||
|
|
||||||
# N8N
|
# N8N
|
||||||
{$N8N_HOSTNAME} {
|
{$N8N_HOSTNAME} {
|
||||||
import service_tls
|
import service_tls
|
||||||
|
|||||||
@@ -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:
|
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.
|
✅ [**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.
|
✅ [**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):
|
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.)
|
- **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)
|
- **ComfyUI:** `comfyui.yourdomain.com` (Node-based Stable Diffusion UI)
|
||||||
- **Databasus:** `databasus.yourdomain.com`
|
- **Databasus:** `databasus.yourdomain.com`
|
||||||
- **Dify:** `dify.yourdomain.com` (AI application development platform with comprehensive LLMOps capabilities)
|
- **Dify:** `dify.yourdomain.com` (AI application development platform with comprehensive LLMOps capabilities)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
volumes:
|
volumes:
|
||||||
|
appsmith_data:
|
||||||
caddy-config:
|
caddy-config:
|
||||||
caddy-data:
|
caddy-data:
|
||||||
comfyui_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
|
N8N_RUNNERS_TASK_BROKER_URI: http://127.0.0.1:5679
|
||||||
|
|
||||||
services:
|
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:
|
flowise:
|
||||||
image: flowiseai/flowise
|
image: flowiseai/flowise
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
@@ -318,6 +339,7 @@ services:
|
|||||||
- caddy-data:/data:rw
|
- caddy-data:/data:rw
|
||||||
- caddy-config:/config:rw
|
- caddy-config:/config:rw
|
||||||
environment:
|
environment:
|
||||||
|
APPSMITH_HOSTNAME: ${APPSMITH_HOSTNAME}
|
||||||
COMFYUI_HOSTNAME: ${COMFYUI_HOSTNAME}
|
COMFYUI_HOSTNAME: ${COMFYUI_HOSTNAME}
|
||||||
COMFYUI_PASSWORD_HASH: ${COMFYUI_PASSWORD_HASH}
|
COMFYUI_PASSWORD_HASH: ${COMFYUI_PASSWORD_HASH}
|
||||||
COMFYUI_USERNAME: ${COMFYUI_USERNAME}
|
COMFYUI_USERNAME: ${COMFYUI_USERNAME}
|
||||||
@@ -836,7 +858,7 @@ services:
|
|||||||
restart: always
|
restart: always
|
||||||
environment:
|
environment:
|
||||||
<<: *proxy-env
|
<<: *proxy-env
|
||||||
BACKEND_INTERNAL_URL: http://postiz:3000
|
BACKEND_INTERNAL_URL: http://localhost:3000
|
||||||
DATABASE_URL: "postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/${POSTIZ_DB_NAME:-postiz}?schema=postiz"
|
DATABASE_URL: "postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/${POSTIZ_DB_NAME:-postiz}?schema=postiz"
|
||||||
DISABLE_REGISTRATION: ${POSTIZ_DISABLE_REGISTRATION}
|
DISABLE_REGISTRATION: ${POSTIZ_DISABLE_REGISTRATION}
|
||||||
FRONTEND_URL: ${POSTIZ_HOSTNAME:+https://}${POSTIZ_HOSTNAME}
|
FRONTEND_URL: ${POSTIZ_HOSTNAME:+https://}${POSTIZ_HOSTNAME}
|
||||||
@@ -908,7 +930,7 @@ services:
|
|||||||
start_period: 60s
|
start_period: 60s
|
||||||
|
|
||||||
comfyui:
|
comfyui:
|
||||||
image: yanwk/comfyui-boot:cu124-slim
|
image: yanwk/comfyui-boot:cu128-slim
|
||||||
container_name: comfyui
|
container_name: comfyui
|
||||||
profiles: ["comfyui"]
|
profiles: ["comfyui"]
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
@@ -1030,10 +1052,10 @@ services:
|
|||||||
REDIS_HOST: ragflow-redis
|
REDIS_HOST: ragflow-redis
|
||||||
REDIS_PASSWORD: ${RAGFLOW_REDIS_PASSWORD}
|
REDIS_PASSWORD: ${RAGFLOW_REDIS_PASSWORD}
|
||||||
REDIS_PORT: 6379
|
REDIS_PORT: 6379
|
||||||
SVR_HTTP_PORT: 80
|
SVR_HTTP_PORT: 9380
|
||||||
volumes:
|
volumes:
|
||||||
- ragflow_data:/ragflow
|
- ragflow_data:/ragflow
|
||||||
- ./ragflow/nginx.conf:/etc/nginx/sites-available/default:ro
|
- ./ragflow/nginx.conf:/etc/nginx/conf.d/default.conf:ro
|
||||||
depends_on:
|
depends_on:
|
||||||
ragflow-elasticsearch:
|
ragflow-elasticsearch:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
|
# Stage 1: Get static ffmpeg binaries (statically linked, works on Alpine/musl)
|
||||||
|
FROM mwader/static-ffmpeg:latest AS ffmpeg
|
||||||
|
|
||||||
|
# Stage 2: Build final n8n image with ffmpeg
|
||||||
FROM n8nio/n8n:stable
|
FROM n8nio/n8n:stable
|
||||||
|
|
||||||
USER root
|
USER root
|
||||||
# Install static ffmpeg binary from BtbN GitHub releases
|
# Copy static ffmpeg binaries from the ffmpeg stage
|
||||||
RUN wget -qO- --tries=3 --timeout=60 https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linux64-gpl.tar.xz | \
|
COPY --from=ffmpeg /ffmpeg /usr/local/bin/ffmpeg
|
||||||
tar -xJC /tmp && \
|
COPY --from=ffmpeg /ffprobe /usr/local/bin/ffprobe
|
||||||
mv /tmp/ffmpeg-master-latest-linux64-gpl/bin/ffmpeg /tmp/ffmpeg-master-latest-linux64-gpl/bin/ffprobe /usr/local/bin/ && \
|
|
||||||
rm -rf /tmp/ffmpeg-*
|
|
||||||
USER node
|
USER node
|
||||||
|
|||||||
@@ -74,6 +74,8 @@ USER_INPUT_VARS=(
|
|||||||
# Variables to generate: varName="type:length"
|
# Variables to generate: varName="type:length"
|
||||||
# Types: password (alphanum), secret (base64), hex, base64, alphanum
|
# Types: password (alphanum), secret (base64), hex, base64, alphanum
|
||||||
declare -A VARS_TO_GENERATE=(
|
declare -A VARS_TO_GENERATE=(
|
||||||
|
["APPSMITH_ENCRYPTION_PASSWORD"]="password:32"
|
||||||
|
["APPSMITH_ENCRYPTION_SALT"]="password:32"
|
||||||
["CLICKHOUSE_PASSWORD"]="password:32"
|
["CLICKHOUSE_PASSWORD"]="password:32"
|
||||||
["COMFYUI_PASSWORD"]="password:32" # Added ComfyUI basic auth password
|
["COMFYUI_PASSWORD"]="password:32" # Added ComfyUI basic auth password
|
||||||
["DASHBOARD_PASSWORD"]="password:32" # Supabase Dashboard
|
["DASHBOARD_PASSWORD"]="password:32" # Supabase Dashboard
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ current_profiles_for_matching=",$CURRENT_PROFILES_VALUE,"
|
|||||||
# --- Define available services and their descriptions ---
|
# --- Define available services and their descriptions ---
|
||||||
# Base service definitions (tag, description)
|
# Base service definitions (tag, description)
|
||||||
base_services_data=(
|
base_services_data=(
|
||||||
|
"appsmith" "Appsmith (Low-code Platform for Internal Tools & Dashboards)"
|
||||||
"cloudflare-tunnel" "Cloudflare Tunnel (Zero-Trust Secure Access)"
|
"cloudflare-tunnel" "Cloudflare Tunnel (Zero-Trust Secure Access)"
|
||||||
"comfyui" "ComfyUI (Node-based Stable Diffusion UI)"
|
"comfyui" "ComfyUI (Node-based Stable Diffusion UI)"
|
||||||
"crawl4ai" "Crawl4ai (Web Crawler for AI)"
|
"crawl4ai" "Crawl4ai (Web Crawler for AI)"
|
||||||
@@ -215,7 +216,7 @@ if [ $gost_selected -eq 1 ]; then
|
|||||||
EXISTING_UPSTREAM=$(read_env_var "GOST_UPSTREAM_PROXY")
|
EXISTING_UPSTREAM=$(read_env_var "GOST_UPSTREAM_PROXY")
|
||||||
|
|
||||||
GOST_UPSTREAM_INPUT=$(wt_input "Gost Upstream Proxy" \
|
GOST_UPSTREAM_INPUT=$(wt_input "Gost Upstream Proxy" \
|
||||||
"Enter your external proxy URL for geo-bypass.\n\nExamples:\n socks5://user:pass@proxy.com:1080\n http://user:pass@proxy.com:8080\n\nThis proxy should be located outside restricted regions." \
|
"Enter your external proxy URL for geo-bypass.\n\nExamples:\n socks5://user:pass@proxy.com:1080\n http://user:pass@proxy.com:8080\n\nIMPORTANT: For HTTP proxies use http://, NOT https://.\nThe protocol refers to proxy type, not connection security.\n\nThis proxy should be located outside restricted regions." \
|
||||||
"$EXISTING_UPSTREAM") || true
|
"$EXISTING_UPSTREAM") || true
|
||||||
|
|
||||||
if [ -n "$GOST_UPSTREAM_INPUT" ]; then
|
if [ -n "$GOST_UPSTREAM_INPUT" ]; then
|
||||||
|
|||||||
@@ -79,6 +79,9 @@ echo ""
|
|||||||
echo -e " ${WHITE}2.${NC} Store the Welcome Page credentials securely"
|
echo -e " ${WHITE}2.${NC} Store the Welcome Page credentials securely"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " ${WHITE}3.${NC} Configure services as needed:"
|
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
|
if is_profile_active "n8n"; then
|
||||||
echo -e " ${GREEN}*${NC} ${WHITE}n8n${NC}: Complete first-run setup with your email"
|
echo -e " ${GREEN}*${NC} ${WHITE}n8n${NC}: Complete first-run setup with your email"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -27,6 +27,19 @@ GENERATED_AT=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|||||||
# Build services array - each entry is a formatted JSON block
|
# Build services array - each entry is a formatted JSON block
|
||||||
declare -a SERVICES_ARRAY
|
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
|
# n8n
|
||||||
if is_profile_active "n8n"; then
|
if is_profile_active "n8n"; then
|
||||||
N8N_WORKER_COUNT_VAL="${N8N_WORKER_COUNT:-1}"
|
N8N_WORKER_COUNT_VAL="${N8N_WORKER_COUNT:-1}"
|
||||||
@@ -519,6 +532,16 @@ if is_profile_active "databasus"; then
|
|||||||
((STEP_NUM++))
|
((STEP_NUM++))
|
||||||
fi
|
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)
|
# Step 4: Monitor system (if monitoring active)
|
||||||
if is_profile_active "monitoring"; then
|
if is_profile_active "monitoring"; then
|
||||||
QUICK_START_ARRAY+=(" {
|
QUICK_START_ARRAY+=(" {
|
||||||
|
|||||||
@@ -134,6 +134,11 @@ if is_profile_active "databasus"; then
|
|||||||
check_image_update "databasus" "databasus/databasus:latest"
|
check_image_update "databasus" "databasus/databasus:latest"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if is_profile_active "appsmith"; then
|
||||||
|
log_subheader "Appsmith"
|
||||||
|
check_image_update "appsmith" "appsmith/appsmith-ce:release"
|
||||||
|
fi
|
||||||
|
|
||||||
# Summary
|
# Summary
|
||||||
log_divider
|
log_divider
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
@@ -148,6 +148,14 @@
|
|||||||
// DATA - Service metadata and commands
|
// DATA - Service metadata and commands
|
||||||
// ============================================
|
// ============================================
|
||||||
const SERVICE_METADATA = {
|
const SERVICE_METADATA = {
|
||||||
|
'appsmith': {
|
||||||
|
name: 'Appsmith',
|
||||||
|
description: 'Low-code Internal Tools',
|
||||||
|
icon: 'AS',
|
||||||
|
color: 'bg-[#5f2dde]',
|
||||||
|
category: 'tools',
|
||||||
|
docsUrl: 'https://docs.appsmith.com'
|
||||||
|
},
|
||||||
'n8n': {
|
'n8n': {
|
||||||
name: 'n8n',
|
name: 'n8n',
|
||||||
description: 'Workflow Automation',
|
description: 'Workflow Automation',
|
||||||
|
|||||||
Reference in New Issue
Block a user