{"id":49034941,"url":"https://github.com/JSONbored/simplelogin-aio","last_synced_at":"2026-05-05T15:01:08.822Z","repository":{"id":346501550,"uuid":"1188480338","full_name":"JSONbored/simplelogin-aio","owner":"JSONbored","description":"SimpleLogin All-in-One Docker image for Unraid — self-host your own email alias service with automatic DKIM, database migrations, and s6-overlay process supervision","archived":false,"fork":false,"pushed_at":"2026-05-02T09:02:49.000Z","size":332,"stargazers_count":5,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-02T10:29:35.823Z","etag":null,"topics":["dkim","docker","docker-compose","email-alias","email-forwarding","email-privacy","email-security","homelab","open-source","postfix","privacy","protonmail","s6-overlay","self-hosted","self-hosting","simplelogin","tailscale","unraid","unraid-community-apps","unraid-templates"],"latest_commit_sha":null,"homepage":"https://aethereal.dev","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JSONbored.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"docs/support-thread-template.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":["JSONbored"],"ko_fi":"jsonbored","buy_me_a_coffee":"jsonbored"}},"created_at":"2026-03-22T06:08:06.000Z","updated_at":"2026-05-02T09:02:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/JSONbored/simplelogin-aio","commit_stats":null,"previous_names":["jsonbored/simplelogin-aio"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/JSONbored/simplelogin-aio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JSONbored%2Fsimplelogin-aio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JSONbored%2Fsimplelogin-aio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JSONbored%2Fsimplelogin-aio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JSONbored%2Fsimplelogin-aio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JSONbored","download_url":"https://codeload.github.com/JSONbored/simplelogin-aio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JSONbored%2Fsimplelogin-aio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32654618,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-05T11:29:49.557Z","status":"ssl_error","status_checked_at":"2026-05-05T11:29:48.587Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dkim","docker","docker-compose","email-alias","email-forwarding","email-privacy","email-security","homelab","open-source","postfix","privacy","protonmail","s6-overlay","self-hosted","self-hosting","simplelogin","tailscale","unraid","unraid-community-apps","unraid-templates"],"created_at":"2026-04-19T11:00:24.245Z","updated_at":"2026-05-05T15:01:08.813Z","avatar_url":"https://github.com/JSONbored.png","language":"Shell","funding_links":["https://github.com/sponsors/JSONbored","https://ko-fi.com/jsonbored","https://buymeacoffee.com/jsonbored"],"categories":["In Progress"],"sub_categories":[],"readme":"# SimpleLogin-AIO\n\n\u003c!-- markdownlint-disable MD033 --\u003e\n\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"https://socialify.git.ci/JSONbored/simplelogin-aio/image?custom_description=SimpleLogin+All-in-One+Docker+image+for+Unraid+%E2%80%94+self-host+your+own+email+alias+service+easily.+Highly+configurable+for+power+users.\u0026custom_language=Dockerfile\u0026description=1\u0026font=Raleway\u0026forks=1\u0026language=1\u0026logo=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F51910064%3Fs%3D200%26v%3D4\u0026name=1\u0026owner=1\u0026pattern=Brick+Wall\u0026stargazers=1\u0026theme=Dark\" alt=\"simplelogin-aio\" width=\"640\" height=\"320\" /\u003e\n\n\u003c/div\u003e\n\u003c!-- markdownlint-enable MD033 --\u003e\n\n---\n\nAn Unraid-first, single-container deployment of [SimpleLogin](https://github.com/simple-login/app) for people who want the self-hosted alias stack without manually wiring separate Postgres, Redis, and Postfix containers.\n\n`simplelogin-aio` packages the web UI, background jobs, inbound email handler, Postfix, PostgreSQL, and Redis into one image with persistent Unraid appdata paths. The wrapper is opinionated for a reliable first boot, but it does not hide the real complexity of self-hosted mail: DNS, inbound port 25, SPF/DKIM/DMARC, and sender reputation still matter.\n\n## What This Image Includes\n\n- SimpleLogin web UI on port `7777`\n- Background job runner\n- Inbound email handler\n- Embedded PostgreSQL\n- Embedded Redis\n- Embedded Postfix for inbound and outbound mail routing\n- Unraid CA template at [simplelogin-aio.xml](simplelogin-aio.xml)\n\n## Beginner Install\n\nIf you want the simplest supported path:\n\n1. Install the Unraid template.\n2. Set `URL`, `EMAIL_DOMAIN`, `SUPPORT_EMAIL`, and `FLASK_SECRET`.\n3. Pick a relay mode if your ISP blocks outbound TCP 25.\n4. Leave dropdown-style advanced enum fields such as `ADMIN_FIDO_REQUIRED` on their documented values only. For most installs that means leaving `ADMIN_FIDO_REQUIRED=none`.\n5. Forward inbound TCP 25 from your router/firewall to the Unraid host.\n6. Start the container and wait for first-boot initialization to complete.\n7. Create your first account in the web UI, then disable registration in Advanced View if you want a private instance.\n8. Add the DNS records from [docs/simplelogin-setup.md](docs/simplelogin-setup.md).\n\nFor most users, that is enough to get a working instance online.\n\n## Power User Surface\n\nThis repo is deliberately not a stripped-down \"toy\" wrapper. The template now tracks the full upstream self-hosting environment surface from SimpleLogin's official `example.env`, plus AIO-specific relay controls. In Advanced View you can:\n\n- move PostgreSQL or Redis out of the container with `DB_URI` or `REDIS_URL`\n- override alias domain behavior and onboarding rules\n- configure GitHub, Google, Facebook, Proton, and generic OIDC auth\n- enable hCaptcha, HIBP, SpamAssassin, Plausible, and Sentry\n- provide AWS, Paddle, and Coinbase settings\n- mount `/custom-assets` for custom words files, OpenID keys, Paddle public keys, or other file-based upstream settings\n\nThe wrapper still defaults to the internal bundled services so beginners are not forced into a multi-container setup on day one.\n\n## What You Get In-App\n\nThe official SimpleLogin docs describe several major capabilities that are configured inside the running app after deployment, not through extra container env vars. Once this container is up, those app features are still available without adding more containers for core infrastructure:\n\n- custom domains and alias domains\n- catch-all behavior and mailbox routing\n- reverse aliases / reply flow\n- multiple mailboxes\n- alias directories and organization features exposed by the app UI\n- login methods such as social auth, Proton auth, and generic OIDC when their related env vars are set\n\nIn other words, the template is responsible for exposing deployment-time and integration-time configuration, while the SimpleLogin web UI still handles normal application-level features after first boot.\n\n## Runtime Notes\n\n- Upstream SimpleLogin container support is currently `linux/amd64` only, so this wrapper publishes amd64-only images.\n- First boot initializes PostgreSQL when `DB_URI` is unset, starts Redis when `REDIS_URL` is unset, writes the runtime `.env`, applies `alembic upgrade head`, then runs `init_app.py`.\n- Before any long-running services start, the wrapper now validates the rendered SimpleLogin config and exits once with a fatal error if enum-style values are invalid.\n- `/appdata` is the main persistent volume. It stores PostgreSQL, Redis, uploads, DKIM keys, generated OpenID keys, and other runtime state.\n- `/pgp` is the optional persistent GnuPG home.\n- `/custom-assets` is an optional advanced mount for file-based upstream settings.\n- DKIM keys are persisted under `/appdata/dkim` and symlinked into the in-container paths the app expects.\n\n## Publishing and Releases\n\n- Wrapper releases use the upstream version plus an AIO revision, such as `v4.80.1-aio.1`.\n- Upstream monitoring, release preparation, registry publishing, and catalog sync are owned by `aio-fleet` from `.aio-fleet.yml`.\n- Changelog generation and XML `\u003cChanges\u003e` sync are run centrally by `aio-fleet` during release preparation.\n- `main` publishes `latest`, the pinned upstream version tag, an explicit AIO packaging line tag, and `sha-\u003ccommit\u003e`.\n- The Unraid template uses Docker Hub image tags for Community Applications metadata.\n\nSee [docs/releases.md](docs/releases.md) for the central release process details.\n\n## Validation\n\nLocal validation is built around:\n\n- XML validation for the audited template surface\n- shell and Python syntax checks\n- local Docker build on `linux/amd64`\n- pytest coverage for first boot, health, SMTP readiness, restart, persistence, relay modes, fatal preflight paths, and external service overrides\n- Trunk Flaky Tests JUnit XML output for CI uploads and local report validation\n\nRun it locally with:\n\n```bash\npython3 -m venv .venv\n. .venv/bin/activate\npip install -e \"../aio-fleet[app-tests]\"\npytest tests/unit\npytest tests/integration -m integration\n```\n\nTo generate the exact JUnit XML files used by CI and validate them locally with Trunk Analytics CLI:\n\n```bash\nmkdir -p reports\npytest tests/unit --junit-xml=reports/pytest-unit.xml -o junit_family=xunit1\npytest tests/integration -m integration --junit-xml=reports/pytest-integration.xml -o junit_family=xunit1\ncd ../aio-fleet\n.venv/bin/python -m aio_fleet validate-repo --repo simplelogin-aio --repo-path ../simplelogin-aio\n.venv/bin/python -m aio_fleet trunk run --repo simplelogin-aio --repo-path ../simplelogin-aio --no-fix\n```\n\nCI cost model:\n\n- pull requests and pushes only run the Docker-backed integration suite when build-relevant files change\n- ordinary docs-only or metadata-only changes do not trigger the expensive container matrix\n- image publish remains gated behind the integration suite, so release/publish paths cannot skip it\n- release metadata commits on `main` still trigger the integration suite before publish, even if they only touch changelog/release files\n- nothing in this repo runs the Docker suite automatically before local commits; keep local integration runs explicit instead of turning every commit into an 8-minute pre-commit hook\n\n## Support\n\n- Repo issues: [JSONbored/simplelogin-aio issues](https://github.com/JSONbored/simplelogin-aio/issues)\n- Upstream app: [simple-login/app](https://github.com/simple-login/app)\n\n## Funding\n\nIf this work saves you time, support it here:\n\n- [GitHub Sponsors](https://github.com/sponsors/JSONbored)\n- [Ko-fi](https://ko-fi.com/jsonbored)\n- [Buy Me a Coffee](https://buymeacoffee.com/jsonbored)\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=JSONbored/simplelogin-aio\u0026theme=dark)](https://star-history.com/#JSONbored/simplelogin-aio\u0026Date)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJSONbored%2Fsimplelogin-aio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FJSONbored%2Fsimplelogin-aio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJSONbored%2Fsimplelogin-aio/lists"}