Tech

【OSSでWiki構築】第2回(環境構築編)

最終更新:2026.03.03

Docker ComposeでOutlineとDBを連携させる

Docker Composeによる構築手順

1. はじめに

この記事は、オープンソースのWikiツール「Outline」を、Docker Composeを利用してローカルPC上に構築するまでの一連の手順をまとめたものです。

最終的に、自己署名証明書による安全なHTTPS環境でOutlineが動作する状態を目指します。

第1回はこちら。
【OSSでWiki構築】第1回:OSSの選定

使用技術スタック

  • アプリケーション: Outline
  • 実行環境: Docker / Docker Compose
  • データベース: PostgreSQL
  • キャッシュ: Redis
  • リバースプロキシ (HTTPS化): Caddy

2. 事前準備

構築を始める前に、以下のツールがPCにインストールされていることを確認します。

  • Docker Desktop: 公式サイトからダウンロード。
    • (macOSの場合) Homebrewを使ったインストールが便利です: brew install --cask docker
  • テキストエディタ: Visual Studio Codeなど、コードを編集できるもの。
  • ターミナル (コマンドラインツール)

3. 構築手順

ステップ1: プロジェクトフォルダの作成

まず、作業用のフォルダを作成し、その中に移動します。

# 例としてデスクトップに作成
cd ~/Desktop

# フォルダを作成
mkdir outline-project

# 作成したフォルダに移動
cd outline-project

ステップ2: hostsファイルにカスタムドメインを追加

localhostに紐づくブラウザの強力なキャッシュ(HSTS)を回避し、クリーンな状態でローカルHTTPS環境を構築するため、PCのhostsファイルにoutline.testというカスタムドメインを追加します。

  1. ターミナルで以下のコマンドを実行し、hostsファイルを開きます。(パスワード入力が必要です) sudo nano /etc/hosts
  2. ファイルの末尾に、以下の一行を追記します。 127.0.0.1 outline.test
  3. Control + OEnterで保存し、Control + Xでエディタを終了します。

ステップ3: Caddyの設定ファイルを作成

HTTPS通信を担当する「SSL執事」であるCaddyの設定ファイルを作成します。

outline-projectフォルダ内に、Caddyfileという名前のファイル(拡張子なし)を新規作成し、以下の内容を記述します。

outline.test {
    # これはインターネットに公開しない、内部用の証明書を使うという指示
    tls internal

    # outline.testに来たアクセスを、outlineコンテナの3000番ポートに中継する
    reverse_proxy outline:3000
}

ステップ4: シークレットキーの生成

Outlineのセキュリティ設定に必要な、2つのランダムな文字列(シークレットキー)を生成します。

ターミナルで以下のコマンドを2回実行し、表示された文字列をそれぞれメモしておきます。

openssl rand -hex 32

ステップ5: docker-compose.ymlの作成と編集

プロジェクトの心臓部である設計図docker-compose.ymlを作成します。

outline-projectフォルダ内にdocker-compose.ymlを新規作成し、以下の内容を貼り付けます。

その後、SECRET_KEYUTILS_SECRETの値を、ステップ4で生成した2つのキーに置き換えます。

# 動かしたいコンテナ(サービス)を定義していく
services:
  # 1番目のサービス:Caddy(リバースプロキシ兼SSL執事)
  # ブラウザからのアクセスを全て受け取り、安全なHTTPS通信を提供する
  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    # PCのポート80(HTTP)と443(HTTPS)をCaddyコンテナに接続する
    # CaddyがHTTPからHTTPSへのリダイレクトも自動で行う
    ports:
      - "80:80"
      - "443:443"
    # Caddyの設定ファイル(Caddyfile)をコンテナ内に読み込ませる
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile

  # 2番目のサービス:PostgreSQLデータベース
  db:
    image: postgres:15-alpine
    restart: unless-stopped
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: outline
      POSTGRES_PASSWORD: StrongPassword
      POSTGRES_DB: outline

  # 3番目のサービス:Redis(キャッシュなど一時データ用)
  redis:
    image: redis:7-alpine
    restart: unless-stopped

  # 4番目のサービス:Outline本体
  outline:
    image: outlinewiki/outline:latest
    restart: unless-stopped
    # ポートはCaddyが全て管理するため、Outlineは外部にポートを公開しない
    depends_on:
      - db
      - redis
    environment:
      # ステップ4で生成した2つのキーに置き換える
      SECRET_KEY: 'ここに1つ目のキーを貼り付け'
      UTILS_SECRET: 'ここに2つ目のキーを貼り付け'

      # アプリケーションの公開URL(httpsとカスタムドメインに変更)
      URL: '<https://outline.test>'

      DATABASE_URL: 'postgres://outline:StrongPassword@db:5432/outline'
      REDIS_URL: 'redis://redis:6379'
      PGSSLMODE: 'disable'

# データを保存しておくボリューム(保管庫)を定義
volumes:
  postgres_data:

ステップ6: コンテナの起動

全ての準備が整いました。ターミナルで以下のコマンドを実行し、コンテナを起動します。

docker compose up -d

初回はイメージのダウンロードに数分かかる場合があります。

ステップ7: 動作確認とアクセス

  1. コンテナが正常に起動したか、以下のコマンドで確認します。 docker compose ps 4つのサービス(caddy, db, redis, outline)がすべてUpまたはrunningになっていればOKです。outlineのSTATUSが(healthy)に変わるまで1〜2分待ちます。
  2. Webブラウザで以下のURLにアクセスします。
    https://outline.test
  3. ブラウザに「保護されていない通信」などの警告が表示されますが、これは正常な動作です。「詳細設定」などをクリックし、「outline.testにアクセスする(安全ではありません)」を選択して先に進みます。
  4. Outlineの初期設定画面が表示されれば、環境構築は成功です!

4. まとめ

以上の手順で、4つのコンテナが連携して動作する、安全なローカルHTTPS環境のOutlineを構築することができました。

構築過程で発生した様々なエラーとその解決策については、別の記事でまとめます。