前言#
前段時間、私が所属する組織木創社は文書協力プログラムを展開する必要があり、いろいろ選定した結果(実際には以前使用したことがある)Outline を文書協力プログラムとして選びました。オンラインの展開チュートリアルを見ましたが、やはり抽象的でした。実際には Nginx を統合しない場合、特別な権限管理や割り当てが必要ないため、特に難しくはありません。そのため、木創社の GitHub 組織に OAuth アプリを新規作成し、ログイン認証の方法として使用しました。これにより、SSO サービスを自分で構築する手間が省けました。
準備#
- サーバー 1 台(最低 1c2g を推奨)に Docker と Docker Compose をインストール
- ドメイン 1 つ、推奨はトップレベルドメイン
サービス#
- Outline(本体)
- PostgreSQL(データベース)
- Redis(キャッシュデータベース)
- Minio(オブジェクトストレージサービス)
展開#
まず Docker と Docker Compose サービスをインストールしてください。もし 1Panel をサーバーパネルとしてインストールした場合、関連サービスがすでに含まれています。展開は 3 つの部分に分かれています。第一部は Minio を展開し、ファイルオブジェクトストレージサービスを設定します。第二部は GitHub OAuth に関する設定を取得します。第三部は Outline 関連サービスを展開します。
あなたは AWS S3 プロトコルに互換性のあるオブジェクトストレージサービスを Outline のオブジェクトストレージとして使用することもできます。例えば:CloudFlare R2、缤纷云、腾讯云 OSS など。
オンラインオブジェクトストレージサービスを使用する場合は、Minio の展開をスキップし、直接 Outline の展開を開始できます。あなたのオブジェクトストレージサービスのドキュメントを参考にして、関連する機密情報とエンドポイントを記入してください。
Minio の展開#
新しいフォルダーを作成し、展開に関連するファイルを入れます。例えば/opt/Minio
のように、以下のコマンドを使用して関連フォルダーを作成し、ディレクトリに移動してから関連ファイルを作成します。
mkdir /opt/Minio && cd /opt/Minio
以下はdocker-compose.yml
ファイルの例です。
version: 3
services:
minio:
image: ${DOCKER_MINIO_IMAGE_NAME}
env_file: ./.env # 環境変数ファイルを指定
container_name: minio
ports:
- 9502:9000
- 9503:9001
restart: always
command: server /data --console-address :9000 --address :9001
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
logging:
options:
max-size: 5M
max-file: 10
driver: json-file
volumes:
- ./minio_data:/data
labels:
createdBy: Apps
Minio に Docker Compose ファイルを置くディレクトリに.env
ファイルを新規作成し、以下の内容を記入します。関連するアカウント情報は安全性を高めるために自分で変更することをお勧めします。
DOCKER_MINIO_IMAGE_NAME=minio/minio:RELEASE.2024-08-03T04-33-23Z.fips
DOCKER_MINIO_ROOT_USER=admin
DOCKER_MINIO_ROOT_PASSWORD=admin
Nginx を使用して minio サービスのリバースプロキシを設定します。9502 ポートは minio サービスの http ポート、9503 ポートは minio サービスの API ポートです。
例: localhost:9502
-> https://minio.example.com
localhost:9503
-> https://api-minio.example.com
展開が完了したら、https://minio.example.com
にアクセスし、設定したユーザー名とパスワードでログインします。
ログイン後、設定でRegion
をcn-1
に設定し、Bucket
にbucket
を追加してoutline
と名付け、outline
のデータを保存します。アクセス権限は私有
に設定します。
オプション操作:
Bucket
-> outline
-> Access
-> User
に新しいユーザーを追加し、Outline サービスが minio サービスにアクセスできるようにします。
GitHub OAuth の設定#
GitHub
にアクセスし、ログインします。OAuth Apps
ページに移動します(右上のアバターをクリック - 設定 - 開発者設定 - OAuth Apps を順にクリックすることでも可能です)。New OAuth App
をクリックします。Register a new OAuth application
フォームに記入します。
- Application name: 自由に記入できます。例えば outline
- Homepage URL: Outline のホームページ URL を記入します。
- Authorization callback URL:
<Homepage URL>/auth/oidc.callback
を記入します。ここで<Homepage URL>
は Outline のホームページ URL に置き換えます。
Register application
ボタンをクリックし、アプリケーションの詳細ページに移動します。Generate a new client secret
ボタンをクリックします。- Client ID と Client secret をメモします。後で環境変数に記入するために使用します(注意:Client secret は作成時にのみ表示され、以降は再度確認できません。誤って失った場合は、再度ボタンをクリックして新しいものを作成できます)。
Outline の展開#
Minio と同様に、新しいフォルダーを作成し、展開に関連するファイルを入れます。例えば/opt/Outline
のように、以下のコマンドを使用して関連フォルダーを作成し、ディレクトリに移動してから関連ファイルを作成します。
mkdir /opt/Outline && cd /opt/Outline
以下はdocker-compose.yml
ファイルの例です。
version: 3.8
services:
outline:
image: ${DOCKER_OUTLINE_IMAGE_NAME}
env_file: ./.env
ports:
- 9303:3000
container_name: outline
restart: always
networks:
- outline
extra_hosts:
- ${DOCKER_OUTLINE_HOSTNAME}:0.0.0.0
depends_on:
- postgres
- redis
redis:
image: ${DOCKER_REDIS_IMAGE_NAME}
env_file: ./.env
volumes:
- ./redis/redis.conf:/redis.conf # 設定ファイルの永続化
container_name: ${DOCKER_REDIS_HOST}
restart: always
networks:
- outline
command: [redis-server, /redis.conf] # 起動コマンド
postgres:
image: ${DOCKER_POSTGRES_IMAGE_NAME}
env_file: ./.env
environment:
POSTGRES_DB: ${DOCKER_POSTGRES_DB}
POSTGRES_USER: ${DOCKER_POSTGRES_USER}
POSTGRES_PASSWORD: ${DOCKER_POSTGRES_PASSWORD}
volumes:
- ./database-data:/var/lib/postgresql/data # データの永続化
container_name: ${DOCKER_POSTGRES_HOST}
restart: always
networks:
- outline
networks:
outline:
以下の設定は行ごとに詳細に読み、実際の状況に応じて修正してください。関連するスペルに注意してください!
Minio と同様に、Docker Compose ファイルを置くディレクトリに.env
ファイルを新規作成し、以下の内容をコピーして記入します。
# イメージ設定
DOCKER_OUTLINE_IMAGE_NAME=docker.getoutline.com/outlinewiki/outline:latest
DOCKER_POSTGRES_IMAGE_NAME=postgres
DOCKER_REDIS_IMAGE_NAME=redis
# コンテナ名
DOCKER_REDIS_HOST=outline_redis
DOCKER_POSTGRES_HOST=outline_postgres
# postgres設定
DOCKER_POSTGRES_USER=outline
DOCKER_POSTGRES_PASSWORD=outline
DOCKER_POSTGRES_DB=outline
# GitHub OAuth設定、前にメモした情報を記入
GITHUB_CLIENT_ID=id
GITHUB_CLIENT_SECRET=secret
# Outline設定
DOCKER_OUTLINE_HOSTNAME=docs.example.com # outlineドメイン(自分でNginxリバースプロキシを使用する必要があります)
# –––––––––––––––– outline必須 –––––––––––––––-
NODE_ENV=production
# 32バイトのランダムな16進数エンコードキーを生成します。ターミナルでopenssl rand -hex 32を使用してランダムな値を生成する必要があります。
SECRET_KEY=d8e45eahe5d298d976464888dea86c92b72dfa73aj8cb8903454205c02c732b3
# 一意のランダムキーを生成します。形式は重要ではありませんが、ターミナルでopenssl rand -hex 32を使用して生成できます。
UTILS_SECRET=cf561a25absbd24c58e6d74edd726f60de11fd5c3fb8c289c725a48ab3b7b759
# 本番環境では、これらをデータベースに指向させる必要があります。開発中はデフォルトで動作するはずです。
DATABASE_URL=postgres://${DOCKER_POSTGRES_USER}:${DOCKER_POSTGRES_PASSWORD}@${DOCKER_POSTGRES_HOST}:5432/${DOCKER_POSTGRES_DB}
DATABASE_CONNECTION_POOL_MIN=
DATABASE_CONNECTION_POOL_MAX=
# この項目のコメントを解除してPostgresへのSSL接続を無効にします。
PGSSLMODE=disable
# Redisについては、ioredisと互換性のあるURLを指定できます。以下のように。
REDIS_URL=redis://${DOCKER_REDIS_HOST}:6379
# または、追加の接続オプションを提供したい場合は、base64エンコードされたJSON接続オプションオブジェクトを使用します。利用可能なオプションのリストについてはioredisのドキュメントを参照してください。
# 例:Redis Sentinelを使用して高可用性を実現
# {sentinels:[{host:sentinel-0,port:26379},{host:sentinel-1,port:26379}],name:mymaster}
# REDIS_URL=ioredis://eyJzZW50aW5lbHMiOlt7Imhvc3QiOiJzZW50aW5lbC0wIiwicG9ydCI6MjYzNzl9LHsiaG9zdCI6InNlbnRpbmVsLTEiLCJwb3J0IjoyNjM3OX1dLCJuYW1lIjoibXltYXN0ZXIifQ==
# URLは完全に資格のある、公開可能なURLを指す必要があります。プロキシを使用する場合、URL内のポートとPORTは異なる場合があります。
URL=https://${DOCKER_OUTLINE_HOSTNAME}
PORT=3000
# 単独の協力サーバーを実行するための[ドキュメント](docs/SERVICES.md)を確認し、通常の操作ではこの設定は必要ありません。
# COLLABORATION_URL=
# アバターや文書添付ファイルの画像をアップロードするためには、互換性のあるs3ストレージを提供する必要があります。冗長性を実現するためにAWS S3を使用することをお勧めしますが、すべてのファイルをローカルに保存したい場合は、例えばminio (https://github.com/minio/minio)の代替案を使用できます。
# S3の詳細な設定ガイドはここにあります:
# => https://wiki.generaloutline.com/share/125de1cc-9ff6-424b-8415-0d58c809a40f
# ここではminio展開時に使用したユーザー名とパスワードを使用するか、前のセクションのオプション操作で作成したユーザーを使用するか、AWS S3プロトコルに互換性のあるオブジェクトストレージ情報を記入します。
AWS_ACCESS_KEY_ID=admin
AWS_SECRET_ACCESS_KEY=admin
AWS_REGION=cn-1
# AWS_S3_ACCELERATE_URL=
AWS_S3_UPLOAD_BUCKET_URL=https://api-minio.example.com
AWS_S3_UPLOAD_BUCKET_NAME=outline
AWS_S3_FORCE_PATH_STYLE=true
AWS_S3_ACL=private
# 使用するストレージシステムを指定します。可能な値はs3またはlocalのいずれかです。
# localの場合、アバター画像と文書添付ファイルはローカルディスクに保存されます。
FILE_STORAGE=s3
# 上記でFILE_STORAGEをlocalに設定した場合、すべての添付ファイル/画像の親ディレクトリを設定します。
# このプロセスがこのパスを作成する権限を持ち、ファイルを書き込む権限も持っていることを確認してください。
FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data
# 添付ファイルの最大アップロードサイズ。
FILE_STORAGE_UPLOAD_MAX_SIZE=262144000
# 文書インポートの最大サイズを上書きします。通常、これは文書添付ファイルの最大サイズよりも小さいはずです。
# FILE_STORAGE_IMPORT_MAX_SIZE=
# ワークスペースインポートの最大サイズを上書きします。これらは特に大きくなる可能性があり、ファイルは一時的で、しばらくすると自動的に削除されます。
# FILE_STORAGE_WORKSPACE_IMPORT_MAX_SIZE=
# –––––––––––––– 認証 ––––––––––––––
# サードパーティのログイン資格情報を設定する必要があります。少なくともGoogle、Slack、またはMicrosoftのいずれかを設定しないと、作業インストールは機能しません。そうでないと、ログインオプションがありません。
# Slack認証を設定するには、次のリンクでアプリケーションを作成する必要があります。
# => https://api.slack.com/apps
#
# Client IDを設定する際に、OAuth & PermissionsにリダイレクトURLを追加します:
# https://<URL>/auth/slack.callback
# SLACK_CLIENT_ID=Slackから取得したキー
# SLACK_CLIENT_SECRET=上記キーの秘密を取得
# Google認証を設定するには、次のリンクでOAuthクライアントIDを作成する必要があります。
# => https://console.cloud.google.com/apis/credentials
#
# クライアントIDを設定する際に、承認されたリダイレクトURIを追加します:
# https://<URL>/auth/google.callback
# GOOGLE_CLIENT_ID=
# GOOGLE_CLIENT_SECRET=
# Microsoft/Azure認証を設定するには、OAuthクライアントを作成する必要があります。設定方法についてはガイドを参照してください:
# => https://wiki.generaloutline.com/share/dfa77e56-d4d2-4b51-8ff8-84ea6608faa4
# AZURE_CLIENT_ID=
# AZURE_CLIENT_SECRET=
# AZURE_RESOURCE_APP_ID=
# GitHub認証
# GitHub OAuthアプリケーションのClient IDとClient secretを記入します。
OIDC_CLIENT_ID=${GITHUB_CLIENT_ID}
OIDC_CLIENT_SECRET=${GITHUB_CLIENT_SECRET}
# GitHubのOAuthエンドポイントを記入します。参考:https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps#web-application-flow
OIDC_AUTH_URI=https://github.com/login/oauth/authorize
OIDC_TOKEN_URI=https://github.com/login/oauth/access_token
# OAuth認可のスコープ
OIDC_SCOPES=read:user user:email
# GitHub APIを通じてユーザーの基本情報を取得します。
OIDC_USERINFO_URI=https://api.github.com/user
OIDC_USERNAME_CLAIM=name
# ログイン画面に「GitHubで続行」と表示させます。
OIDC_DISPLAY_NAME=GitHub
# –––––––––––––––– オプション ––––––––––––––––
# HTTPS終端のためにBase64エンコードされた秘密鍵と証明書を提供します。外部リバースプロキシを使用しない場合にのみ必要です。ドキュメントを参照してください:
# https://wiki.generaloutline.com/share/1c922644-40d8-41fe-98f9-df2b67239d45
# SSL_KEY=
# SSL_CERT=
# Cloudfront/Cloudflare配信や類似のサービスを使用している場合は、以下に設定できます。
# これにより、javascript、スタイルシート、画像のパスがCDN_URLで定義されたホスト名に更新されます。CDN設定では、元のサーバーはURLと同じに設定する必要があります。
# CDN_URL=
# 本番環境で自動的にhttpsにリダイレクトします。デフォルトはtrueですが、SSLが外部ロードバランサーで終端されることを確認できる場合はfalseに設定できます。
FORCE_HTTPS=false
# インストールを更新確認するために、匿名統計データをメンテナに送信します。
ENABLE_UPDATES=false
# 起動するプロセスの数。合理的なルールとして、サーバーの使用可能なメモリを512で割って大まかに推定します。
WEB_CONCURRENCY=1
# リバースプロキシが受信したhttpリクエストを記録している場合、これが重複する場合はこの行を削除できます。
# DEBUG=http
# サーバーログの最低重大度レベルを設定します。error、warn、info、http、verbose、debug、sillyのいずれかである必要があります。
LOG_LEVEL=info
# 完全なSlack統合を実現するためには、検索やチャンネルへの投稿を含め、以下の設定が必要です。詳細は以下を参照してください。
# => https://wiki.generaloutline.com/share/be25efd1-b3ef-4450-b8e5-c4a4fc11e02a
#
# SLACK_VERIFICATION_TOKEN=あなたのトークン
# SLACK_APP_ID=A0XXXXXXX
# SLACK_MESSAGE_ACTIONS=true
# Sentry (sentry.io)を有効にしてエラーとパフォーマンスを追跡し、オプションでUIにSentryトンネルを追加して広告ブロッカーを回避します:
# https://docs.sentry.io/platforms/javascript/troubleshooting/#using-the-tunnel-option)
# SENTRY_DSN=
# SENTRY_TUNNEL=
# 文書が更新されたときや招待されたときなど、出発するトランザクションメールを送信するためには、SMTPサーバーの認証を提供する必要があります。
# SMTP_HOST=smtp.office365.com
# SMTP_PORT=587
# SMTP_USERNAME=
# SMTP_PASSWORD=
# SMTP_FROM_EMAIL=
# SMTP_REPLY_EMAIL=
# SMTP_TLS_CIPHERS=
# SMTP_SECURE=false
# デフォルトのインターフェース言語。利用可能な言語コードとその大まかな翻訳の割合はtranslate.getoutline.comで確認できます。
DEFAULT_LANGUAGE=zh_CN
# アプリケーションWebサーバーのレートリミッターをオプションで有効にします。
RATE_LIMITER_ENABLED=true
# レートリミッターのデフォルトの制限パラメータを設定します。
RATE_LIMITER_REQUESTS=1000
RATE_LIMITER_DURATION_WINDOW=60
# Iframely API設定
# IFRAMELY_URL=
# IFRAMELY_API_KEY=
サービスを起動した後、Nginx を使用して Outline サービスのリバースプロキシを設定します。9303 ポートは Outline サービスの http ポートです。
例: localhost:9303
-> https://docs.example.com
ブラウザでデプロイした Outline のホームページ(例えばhttps://docs.example.com
)にアクセスし、GitHubでログイン
を選択します。設定が正しければ、GitHub の認可ページにリダイレクトされ、あなたのGitHub
関連情報を使用して認可ログインできます。
この文は Mix Space によって xLog に同期更新されました。原始リンクは https://www.sotkg.com/posts/site/7