Mikuの鬆

Mikuの鬆

心有多宽,世界就有多远

Dockerデプロイメントの概要とOAuthサービスとしてのGithubの使用

前言#

前段時間、私が所属する組織木創社は文書協力プログラムを展開する必要があり、いろいろ選んだ結果(実際には以前使ったことがある)Outline を文書協力プログラムとして選びました。オンラインの展開チュートリアルを見ましたが、依然として抽象的で、実際には Nginx を統合しない場合は特に難しくはありません。特別な権限管理や割り当てが必要ないため、直接木創社の GitHub 組織で OAuth App を新規作成し、ログイン認証の方法としました。これにより、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にアクセスし、設定したユーザー名とパスワードでログインします。

ログイン後、設定でRegioncn-1に設定し、Bucketbucketを追加し、outlineという名前を付けてoutlineのデータを保存し、アクセス権限をプライベートに設定します。

オプション操作

Bucket -> outline -> Access -> Userに新しいユーザーを追加し、Outline サービスが Minio サービスにアクセスできるようにします。

GitHub OAuth の設定#

  1. GitHubにアクセスし、ログインします。
  2. OAuth Appsページに移動します(右上のアバターをクリックして、設定 - 開発者設定 - OAuth Apps を順にクリックすることもできます)。
  3. New OAuth Appをクリックします。
  4. Register a new OAuth applicationフォームに記入します。
  • Application name: 自由に記入できます。例:outline
  • Homepage URL: Outline のホームページ URL を記入します。
  • Authorization callback URL: <Homepage URL>/auth/oidc.callbackを記入します。<Homepage URL>は Outline のホームページ URL に置き換える必要があります。
  1. Register applicationボタンをクリックし、アプリケーションの詳細ページに移動します。
  2. Generate a new client secretボタンをクリックします。
  3. 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

# 16進数エンコードされた32バイトのランダムキーを生成します。ターミナルで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認証を設定するには、次のURLでアプリケーションを作成する必要があります:
# => https://api.slack.com/apps
#
# Client IDを設定する際に、OAuth & PermissionsにリダイレクトURLを追加します:
# https://<URL>/auth/slack.callback
# SLACK_CLIENT_ID=Slackから取得したキー
# SLACK_CLIENT_SECRET=上記キーの秘密を取得

# Google認証を設定するには、次のURLで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

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。