0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【OSSでWiki構築】第2回:(環境構築編)Docker ComposeでOutlineとDBを連携させる

Last updated at Posted at 2026-01-29

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を構築することができました。

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?