Team Wiki & Docs
Outline
Wiki và tài liệu cho team, giao diện đẹp và nhanh, thay thế Notion với dữ liệu tự host.
Ghi chú review
Cần cấu hình SSO (OIDC hoặc SAML) để đăng nhập. Nên dùng S3-compatible storage cho file uploads.
Hướng dẫn deploy
Chạy bằng Docker Compose với PostgreSQL, Redis và S3 storage. Bắt buộc cấu hình SSO.
- Cấu hình SSO provider (Authentik, Keycloak, Google, etc.).
- Tạo file .env với database, Redis, S3 và SSO settings.
- Chạy Docker Compose với Outline, PostgreSQL và Redis.
- Truy cập web UI và đăng nhập qua SSO provider.
- Tạo collections và mời team members.
Backup:Backup database PostgreSQL và S3 storage chứa uploaded files.
Copy để chạy trên server
Dùng từng block riêng: lưu compose trước, hoặc copy script bash để tạo file và chạy container.
docker-compose.ymlyaml
services:
outline:
image: outlinewiki/outline:latest
container_name: outline
environment:
DATABASE_URL: "postgres://outline:CHANGEME_db_password@postgres:5432/outline" # CHANGE THIS
REDIS_URL: "redis://redis:6379"
URL: "https://docs.example.com"
SECRET_KEY: "change-me-generate-with-openssl-rand-hex-32" # CHANGE THIS
UTILS_SECRET: "change-me-generate-with-openssl-rand-hex-32" # CHANGE THIS
OIDC_CLIENT_ID: "outline"
OIDC_CLIENT_SECRET: "your-oidc-secret"
OIDC_AUTH_URI: "https://auth.example.com/authorize"
OIDC_TOKEN_URI: "https://auth.example.com/token"
OIDC_USERINFO_URI: "https://auth.example.com/userinfo"
OIDC_DISPLAY_NAME: "SSO Login"
ports:
- "3000:3000"
depends_on:
- postgres
- redis
restart: unless-stopped
postgres:
image: postgres:16-alpine
container_name: outline_postgres
environment:
POSTGRES_USER: outline
POSTGRES_PASSWORD: CHANGEME_db_password # CHANGE THIS
POSTGRES_DB: outline
volumes:
- ./postgres:/var/lib/postgresql/data
restart: unless-stopped
redis:
image: redis:7-alpine
container_name: outline_redis
restart: unless-stoppedsetup.shbash
#!/usr/bin/env bash
set -euo pipefail
sudo mkdir -p /opt/outline
sudo chown "$USER":"$USER" /opt/outline
cd /opt/outline
cat > docker-compose.yml <<'COMPOSE'
services:
outline:
image: outlinewiki/outline:latest
container_name: outline
environment:
DATABASE_URL: "postgres://outline:CHANGEME_db_password@postgres:5432/outline" # CHANGE THIS
REDIS_URL: "redis://redis:6379"
URL: "https://docs.example.com"
SECRET_KEY: "change-me-generate-with-openssl-rand-hex-32" # CHANGE THIS
UTILS_SECRET: "change-me-generate-with-openssl-rand-hex-32" # CHANGE THIS
OIDC_CLIENT_ID: "outline"
OIDC_CLIENT_SECRET: "your-oidc-secret"
OIDC_AUTH_URI: "https://auth.example.com/authorize"
OIDC_TOKEN_URI: "https://auth.example.com/token"
OIDC_USERINFO_URI: "https://auth.example.com/userinfo"
OIDC_DISPLAY_NAME: "SSO Login"
ports:
- "3000:3000"
depends_on:
- postgres
- redis
restart: unless-stopped
postgres:
image: postgres:16-alpine
container_name: outline_postgres
environment:
POSTGRES_USER: outline
POSTGRES_PASSWORD: CHANGEME_db_password # CHANGE THIS
POSTGRES_DB: outline
volumes:
- ./postgres:/var/lib/postgresql/data
restart: unless-stopped
redis:
image: redis:7-alpine
container_name: outline_redis
restart: unless-stopped
COMPOSE
docker compose up -d
echo "Outline is running on http://SERVER_IP:3000"Stack
TypeScriptNode.jsPostgreSQLRedis