Self-Host the Outline Note App with Docker – A Powerful Collaborative Note Setup

If you're looking for a self-hosted, secure, and modern knowledge management tool, Outline is a fantastic choice. It’s like Notion for teams, but open-source and under your full control.
In this tutorial, we’ll walk through setting up Outline with Docker Compose—including PostgreSQL, and Redis —for a complete, powerful deployment.

🧠 Why Outline?
Outline is a beautiful, collaborative knowledge base built for teams. It features:
📁 Drag-and-Drop File Uploads
Attach PDFs, images, and other docs directly inside your notes. Great for:
- Product spec sheets
- Design mockups
- Client documentation
🚀 Build a Private Wiki for Your Team
Create a structured knowledge base with nested documents, organized by collections. Perfect for:
- Onboarding new team members
- Documenting SOPs (standard operating procedures)
- Engineering documentation
- Company handbooks
🔐 Role-Based Access & Permissions
You can control exactly who sees what:
- View-only access for guests or contractors
- Full edit permissions for team members
- Restrict certain collections to specific groups or individuals
💬 Live Collaborative Editing (Like Google Docs)
Outline supports live collaboration—multiple people can edit a doc at once, and you’ll see changes in real-time.
🧠 Powerful Markdown Editor
Built-in rich markdown editor with:
- Tables
- Code blocks
- Checklists
- Links
- Image embeds
You get the simplicity of markdown with the polish of a modern editor.
🌐 Integrations & Auth Providers
Out of the box, Outline supports:
- Google Login
- Slack Login
- OpenID Connect (for self-hosted SSO)
- Webhooks for automation
You can also build custom integrations with the Outline API.
🧩 Embed Anything (Charts, Videos, etc.)
Use Markdown embeds to drop in:
- YouTube videos
- Figma designs
- Loom recordings
- Google Maps
- GitHub Gists

🐳 Prerequisites
Before you begin:
- Docker and Docker Compose installed
- A Linux server or NAS (Synology, Unraid, Ubuntu, etc.)
- A domain name (for HTTPS setup)
- Basic knowledge of terminal commands
🛠 Docker Compose Setup
Here’s a full docker-compose.yml
tailored to run Outline, PostgreSQL, and Redis. This version uses host
networking, perfect for local NAS setups.
version: "3"
services:
outline:
image: docker.getoutline.com/outlinewiki/outline:latest
user: "999:100"
network_mode: "host"
volumes:
- /YOUR_SAVE_PATH_DIRECTORY:/var/lib/outline/data
depends_on:
- postgres
- redis
environment:
SECRET_KEY: "secret_key_here"
UTILS_SECRET: "utils_secret_here"
DATABASE_URL: "postgres://user:pass@localhost:5432/outline?sslmode=disable"
REDIS_URL: "redis://localhost:6379"
URL: "https://yourdomain.com"
FORCE_HTTPS: "true"
PORT: "3333"
FILE_STORAGE: "local"
FILE_STORAGE_UPLOAD_MAX_SIZE: "1073741824" #Set Max file upload size
GOOGLE_CLIENT_ID: "your_google_client_id" #Needed for google auth
GOOGLE_CLIENT_SECRET: "your_google_secret" #Needed for google auth
redis:
image: redis
ports:
- "6379:6379"
volumes:
- ./redis.conf:/redis.conf
command: ["redis-server", "/redis.conf"]
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 30s
retries: 3
networks:
- outline_stack_net
postgres:
image: postgres
user: "999:100"
ports:
- "5432:5432"
volumes:
- /YOUR_SAVE_PATH_DIRECTORY:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-d", "outline", "-U", "user"]
interval: 30s
timeout: 20s
retries: 3
environment:
POSTGRES_USER: "user_name"
POSTGRES_PASSWORD: "password"
POSTGRES_DB: "outline_db"
networks:
- outline_stack_net
networks:
outline_stack_net:
external: true
⚙️ System User Permissions
Make sure to update:
user: "999:100" #use your user and group id to match your system's
This maps to your system's user and group ID. You can find it with:
id yourusername
🔐 Enable HTTPS (Optional but Recommended)
Set up a reverse proxy (like NGINX or Caddy) and use Let's Encrypt for a free SSL certificate. Make sure your domain points to your server IP.
🧪 Test Everything
docker compose up -d
Visit: https://yourdomain.com:3333
🧠 Tips & Best Practices
- Backup your PostgreSQL volume regularly.
- Use Docker secrets for sensitive info in production.
- Run behind a firewall and use fail2ban for added security.
- Monitor container logs with
docker logs <container_name>
Final Thoughts
With Outline running in Docker, you've got a secure, scalable, and self-hosted alternative to cloud note apps like Notion or Confluence.