Agentic workflows, RAG pipelines, integrations, and observability - dify-aio has it all.
10K+
Unraid-first AIO wrapper for Dify, an open-source platform for building agentic workflows, chat apps, knowledge-base apps, and LLM-backed automations.
dify-aio packages the practical self-hosted Dify stack into one Unraid-friendly image with persistent appdata, first-boot secret generation, and an advanced template surface for operators who need external databases, vector stores, object storage, mail, observability, sandbox, plugin, and datasource settings.
This repository is pre-release. The source template, generated XML, and local container boot path are covered by pytest-backed validation. Community Applications submission is intentionally separate and should happen only after the source template is finalized.
langgenius/dify-apilanggenius/dify-weblanggenius/dify-plugin-daemonlanggenius/dify-sandbox8080/appdata/config/generated.env, with explicit Unraid template values taking precedence/appdata/config/extra.env escape hatch for rare upstream variablesIf you want the simplest supported path:
http://<unraid-ip>:8080/install.If INIT_PASSWORD is set in the template, Dify uses it as the initial admin password. Dify limits that value to 30 characters.
For most users, the default bundled PostgreSQL, pgvector, Redis, sandbox, plugin daemon, and local file storage path is the right first install.
This repo is deliberately not a stripped-down wrapper. The generated Unraid template exposes the practical Dify self-hosted environment surface while keeping the first-run form small enough to use.
In Advanced View you can:
DIFY_USE_INTERNAL_POSTGRES=false and external DB_* settingsDIFY_USE_INTERNAL_REDIS=false and external REDIS_* settingsDIFY_AIO_PUBLIC_URL for reverse-proxy deployments so Dify URL settings derive from one public base URL/appdata/config/extra.env instead of expanding the Unraid form with every possible knob; the file is parsed as KEY=value data and is not shell-sourcedPlaceholder upstream defaults such as your-bucket-name are intentionally blanked in the CA template so external integrations fail closed until you provide real values.
/appdata stores generated secrets, PostgreSQL data, Redis data, uploads, plugin daemon state, sandbox configuration, and local file storage./appdata/config/generated.env. If a masked secret field is left blank, the container generates and reuses a value; if you set a value in the Unraid template, that explicit value takes precedence. /appdata/config/extra.env is parsed last as an advanced override file.CHECK_UPDATE_URL is blank by default to avoid outbound update checks from privacy-focused or offline installs. Set it explicitly if you want Dify to check an update endpoint.SECRET_KEY after setup invalidates encrypted credentials and sessions./appdata and consider external PostgreSQL, Redis, and object storage when uptime or recovery matters.v1.11.0-aio.1.git-cliff.<Changes> block is synced from CHANGELOG.md during release preparation.main publishes latest, the pinned upstream version tag, an explicit AIO packaging line tag, and sha-<commit>.awesome-unraid only after the source template is finalized and validated here.See docs/releases.md for the release workflow details.
Local validation is pytest-first:
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements-dev.txt
python3 scripts/validate-template.py
python3 scripts/generate_dify_template.py --check
pytest tests/unit tests/template
pytest tests/integration -m integration
The integration suite builds a Linux amd64 image and boots the full container stack, so it is intentionally more expensive than the unit and XML checks.
Extended provider checks:
pytest tests/integration -m extended_integration
The extended suite starts provider sidecars for external PostgreSQL plus Redis, Qdrant, MinIO-compatible S3 storage, and SMTP capture, then boots the AIO container against those settings. It also verifies that common optional provider settings for plugin object storage, additional vector backends, SendGrid, workflow execution storage, Notion, Unstructured, Sentry, and OpenTelemetry can be supplied through /appdata/config/extra.env.
The Unraid XML template is generated from docs/upstream/dify.env.example plus AIO-specific defaults. The generated XML is curated for Community Applications usability, while rootfs/opt/dify-aio/upstream-env-vars.txt still tracks the full upstream variable list for blank-value normalization and drift checks. When Dify updates its upstream environment surface, refresh the fixture, run python3 scripts/generate_dify_template.py, and then run validation.
If this work saves you time, support it here:
Content type
Image
Digest
sha256:31ff69e8d…
Size
1.3 GB
Last updated
3 months ago
docker pull jsonbored/dify-aio