An Unraid-first, single-container deployment of Infisical for people who want the easiest reliable self-hosted install without manually wiring PostgreSQL and Redis on day one.
infisical-aio is opinionated for a predictable beginner install, but it does not hide the real tradeoffs: this is still a serious secrets-management platform, SITE_URL still needs to be correct, backups still matter, and the bundled database/cache path is convenience infrastructure rather than the ideal long-term production topology.
- Infisical web UI and API on port
8080 - Embedded PostgreSQL 16 for the default beginner path
- Embedded Redis 7 for the default beginner path
- Embedded Mailpit inbox for local or lab SMTP capture on the default beginner path
- Persistent
/configstorage for generated wrapper state and bootstrap artifacts - Persistent
/datastorage for bundled PostgreSQL and Redis state - Automatic generation and persistence of
ENCRYPTION_KEYandAUTH_SECRETwhen you leave them blank - Automatic generation and persistence of bundled Mailpit UI credentials when you leave them blank
- Optional first-run bootstrap flow for the initial admin account and organization
- Unraid CA template at infisical-aio.xml
If you want the simplest supported path:
- Install the Unraid template.
- Leave the default
/configand/datapaths in place unless you have a reason to move them. - Set
SITE_URLto the real URL users will visit, such ashttps://secrets.example.comorhttp://tower.local:8080. - Start the container and wait for the API to come up.
- If you want to inspect local mail from the host network, set
Local Mail Inbox Portin Advanced View, then open the bundled Mailpit inbox on that chosen port and read the generatedAIO_MAILPIT_UI_USERNAME/AIO_MAILPIT_UI_PASSWORDvalues from/config/aio/generated.env. - Create the first account in the UI, or set the optional
AIO_BOOTSTRAP_*fields in Advanced View to auto-bootstrap it.
If you leave the important secrets blank, the wrapper will:
- generate and persist
ENCRYPTION_KEY - generate and persist
AUTH_SECRET - create and use an internal PostgreSQL database
- create and use an internal Redis instance
- create and use a bundled local Mailpit inbox unless you configure external SMTP
- disable product telemetry by default
This repo is deliberately not a stripped-down wrapper. Advanced View exposes the broader practical Infisical self-hosted environment surface plus the AIO defaults for the bundled PostgreSQL + Redis path. In Advanced View you can:
- point Infisical at external PostgreSQL with
DB_CONNECTION_URIor the upstream DB fields - point Infisical at external Redis, Redis Sentinel, or Redis Cluster instead of the bundled instance
- use the bundled Mailpit inbox for local or lab email-dependent flows, or configure external SMTP for real delivery
- expose the wider upstream SSO, audit log, telemetry, secret scanning, gateway, PAM, HSM, and app-connection settings
- keep the bundled internal defaults for the easiest install while still retaining the normal escape hatches when you need them
The wrapper still defaults to the internal bundled services so new Unraid users are not forced into extra containers on day one.
Additional advanced wrapper-specific knobs worth knowing about:
AIO_ENABLE_BUNDLED_MAILPITto keep or disable the bundled local inbox whenSMTP_HOSTis blankLocal Mail Inbox Portif you intentionally want host-network access to the bundled Mailpit inbox UIAIO_MAILPIT_UI_USERNAMEandAIO_MAILPIT_UI_PASSWORDif you want to override the generated inbox UI credentialsNODE_EXTRA_CA_CERTSif your external Redis or other upstream dependency uses a private or self-signed CA; point it at a PEM file under/config, such as/config/aio/certs/custom-ca.pem- optional host port
9464when you enableOTEL_TELEMETRY_COLLECTION_ENABLED=truewithOTEL_EXPORT_TYPE=prometheus
- The bundled internal services are pinned to PostgreSQL 16 and Redis 7.x because those are within Infisical's currently documented support range.
- The bundled local inbox is Mailpit, running with UI auth enabled, SMTP kept internal to the container, remote CSS/fonts blocked, version checks disabled, and SQLite WAL disabled for Unraid-friendly persistence.
- The default AIO path embeds PostgreSQL and Redis for convenience. For more serious production deployments, Infisical recommends external high-availability PostgreSQL and Redis.
- The bundled Mailpit inbox is for local or lab use. It helps first boot and local mail-dependent flows, but it is not a production mail relay and should not be mistaken for real deliverability infrastructure.
SITE_URLmatters. If you set it wrong, browser flows, links, email behavior, and some integrations will break in subtle ways.- If you enable automatic bootstrap, you are creating a highly privileged instance-admin identity during first boot. Treat those credentials carefully.
- If you plan to expose this publicly, treat your reverse proxy, SMTP, app credentials, and backup strategy as part of the deployment rather than optional cleanup.
- Wrapper releases use the upstream version plus an AIO revision, such as
v0.159.16-aio.1. - Upstream monitoring, release preparation, registry publishing, and catalog sync are owned by
aio-fleetfrom.aio-fleet.yml. - Changelog generation and XML
<Changes>sync are run centrally byaio-fleetduring release preparation. mainpublisheslatest, the pinned upstream version tag, the explicit AIO package tag, andsha-<commit>to Docker Hub.- Publish jobs require Docker Hub credentials.
See docs/releases.md for the central release process details.
Required local validation is split between app-specific tests and aio-fleet:
python3 -m venv .venv-local
.venv-local/bin/pip install -e "../aio-fleet[app-tests]"
.venv-local/bin/pytest tests/template --junit-xml=reports/pytest-unit.xml -o junit_family=xunit1
.venv-local/bin/pytest tests/integration -m integration --junit-xml=reports/pytest-integration.xml -o junit_family=xunit1
cd ../aio-fleet
.venv/bin/python -m aio_fleet validate-repo --repo infisical-aio --repo-path ../infisical-aio
.venv/bin/python -m aio_fleet trunk run --repo infisical-aio --repo-path ../infisical-aio --no-fixThe extended runtime matrix now lives behind an opt-in pytest marker so the deeper bundled-vs-external coverage still runs through the shared suite:
INFISICAL_ENABLE_RUNTIME_MATRIX=1 \
.venv-local/bin/pytest tests/integration/test_runtime_matrix.py -m extended_integrationCI cost model:
- relevant PRs and
mainpushes run the fast validation layers first - Docker-backed integration tests run for build-relevant changes, for
mainrelease-metadata commits when publish is still in play, and for manual dispatches - image publish stays gated behind the integration suite instead of treating skipped integration as acceptable
- the extended runtime matrix stays opt-in because it is materially more expensive than the required gate
That manual proof helper covers:
- bundled PostgreSQL + Redis boot cleanly
- bundled Mailpit boots cleanly, requires UI auth, and verifies successfully as Infisical's default local SMTP target
- manual
ENCRYPTION_KEYandAUTH_SECREToverrides are honored without being rewritten into/config/aio/generated.env - automatic
AIO_BOOTSTRAP_*bootstrap completes, can persist the saved response artifact, and can drive a real account-recovery email into bundled Mailpit /config/aio/generated.envpersists unchanged across restart- external PostgreSQL keeps the bundled PostgreSQL service idle for both
DB_CONNECTION_URIand upstreamDB_HOST/DB_PORT/DB_USER/DB_PASSWORD/DB_NAME - external Redis keeps the bundled Redis service idle for
REDIS_URL, Redis Sentinel, and Redis Cluster - external SMTP can be validated against an external Mailpit container while the bundled Mailpit service stays idle
- private-CA
rediss://works whenNODE_EXTRA_CA_CERTSpoints at a mounted PEM bundle - Prometheus metrics are exposed on
/metricswhenOTEL_TELEMETRY_COLLECTION_ENABLED=trueandOTEL_EXPORT_TYPE=prometheus
Still manual:
- reverse proxy, TLS, and secure-cookie behavior for your real
SITE_URL - real SMTP delivery, SMTP custom-CA mail flows, and provider-specific deliverability behavior
- external PostgreSQL TLS/root-cert validation
- Redis Sentinel/Cluster auth and TLS combinations beyond the locally validated no-auth path
- SSO/provider-specific integrations and enterprise feature integrations
- Unraid UI behavior in the CA template editor itself
This repo is the source repo. The CA-facing XML and icon should be synced into JSONbored/awesome-unraid only after:
- local validation passes
- the image is publishable
- the support thread content is ready
- Repo issues: JSONbored/infisical-aio issues
- Upstream app: Infisical/infisical
- Official docs: infisical.com/docs
If this work saves you time, support it here: