Outline is one of the best open-source team wikis — a fast, real-time, Notion-like knowledge base with a beautiful editor, full-text search, and deep SSO integration. It's a serious application: it requires PostgreSQL, Redis, an authentication provider, and object storage. There's no "just run one container with no config" path, because Outline mandates SSO from day one.
This guide deploys Outline properly.
Outline's requirements
| Component | Why |
|---|---|
| PostgreSQL | Primary datastore (documents, users, permissions) |
| Redis | Real-time collaboration, caching, websockets |
| Object storage (S3) | File and image attachments |
| SSO provider | Required — no built-in email/password auth |
| SMTP (optional) | Invitations and notifications |
The SSO requirement is the biggest surprise for newcomers. Outline does not have its own username/password login — you authenticate via Google, Slack, OIDC, Azure AD, etc. Plan your identity provider before deploying.
Step 1: Provision PostgreSQL and Redis
On [PandaStack](https://dashboard.pandastack.io), create:
- A managed PostgreSQL (16.x recommended).
- A managed Redis.
Outline reads DATABASE_URL and REDIS_URL directly, so linking the managed PostgreSQL auto-injects the database connection.
Step 2: Generate secrets
Outline needs two random secrets:
openssl rand -hex 32 # SECRET_KEY
openssl rand -hex 32 # UTILS_SECRETStep 3: Set up an SSO provider
Pick one (you can add more later). For OIDC (works with most IdPs):
OIDC_CLIENT_ID=<client-id>
OIDC_CLIENT_SECRET=<client-secret>
OIDC_AUTH_URI=https://idp.example.com/authorize
OIDC_TOKEN_URI=https://idp.example.com/token
OIDC_USERINFO_URI=https://idp.example.com/userinfo
OIDC_DISPLAY_NAME=Company SSOFor Google:
GOOGLE_CLIENT_ID=<id>
GOOGLE_CLIENT_SECRET=<secret>Register your Outline URL's callback (e.g. https://wiki.example.com/auth/oidc.callback) with your IdP.
Step 4: Configure object storage
Attachments go to S3-compatible storage — local disk won't survive redeploys:
FILE_STORAGE=s3
AWS_ACCESS_KEY_ID=<key>
AWS_SECRET_ACCESS_KEY=<secret>
AWS_REGION=<region>
AWS_S3_UPLOAD_BUCKET_NAME=<bucket>
AWS_S3_UPLOAD_BUCKET_URL=<endpoint>
AWS_S3_FORCE_PATH_STYLE=trueStep 5: Assemble the full environment
URL=https://wiki.example.com
PORT=3000
NODE_ENV=production
SECRET_KEY=<generated>
UTILS_SECRET=<generated>
DATABASE_URL=${DATABASE_URL} # injected by linking managed PostgreSQL
PGSSLMODE=require
REDIS_URL=redis://:<password>@<host>:6379
# plus SSO + S3 vars from aboveURL must exactly match your public HTTPS address or SSO callbacks and websockets break.
Step 6: Run database migrations
Outline ships migrations that must run before first boot. Run as a pre-deploy/init step using the Outline image:
yarn db:migrate --env=production-ssl-disabled(Use the SSL-appropriate variant for your managed database; the image documents both.)
Step 7: Deploy
FROM outlinewiki/outline:latest
# Serves on port 3000Pin a version in production.
- 1Push the repo (or reference the image) to GitHub.
- 2Create a container app on PandaStack.
- 3Link managed PostgreSQL; set Redis, SSO, S3, and secret env vars (secrets as secrets).
- 4Set the migrate command as a pre-deploy hook.
- 5Expose port
3000. - 6Add a custom domain matching
URL; SSL is automatic.
Outline uses websockets for real-time collaboration — PandaStack's Kong ingress passes WebSocket upgrades through, so live editing works.
Step 8: First login and team setup
Visit your domain, authenticate via SSO — the first user to log in becomes the admin. From there:
- Invite teammates (they sign in via the same SSO).
- Create collections (top-level groupings of documents).
- Set permissions per collection.
- Optionally configure SMTP so invitations and notifications email out.
Why all these moving parts?
Outline is real-time collaborative software, so it legitimately needs Redis for pub/sub and websockets, PostgreSQL for the document graph, and object storage for media. It's heavier than a static wiki, but the editing experience and search are worth it for teams that live in their knowledge base. If you want something far simpler and are fine editing Markdown files, a static-site wiki (VitePress, Docusaurus) deployed as a static site is a lighter alternative — but you lose real-time editing, permissions, and SSO.
Operating tips
- Back up PostgreSQL — it holds every document. Scheduled backups cover it.
- Object storage holds attachments — back that up too.
- Keep
URLstable — changing it breaks SSO callbacks. - Watch Redis — collaboration features depend on it being healthy.
- Pin image versions and run migrations on upgrades.
References
- [Outline documentation](https://docs.getoutline.com/)
- [Outline self-hosting guide](https://docs.getoutline.com/s/hosting/)
- [Outline environment variables](https://github.com/outline/outline/blob/main/.env.sample)
- [Outline Docker image](https://hub.docker.com/r/outlinewiki/outline)
---
Outline is a premium self-hosted wiki experience, and it needs the supporting cast: PostgreSQL, Redis, object storage, and SSO. PandaStack provisions the managed PostgreSQL and Redis, injects connections, and passes websockets through its ingress for real-time editing. Start your knowledge base at [dashboard.pandastack.io](https://dashboard.pandastack.io).