ONLYOFFICE DockerでHTTPSとSSL証明書を設定する方法

ONLYOFFICE DocsをDockerでHTTPS経由で動作させるには、公開ホスト名に一致する証明書を使用し、それをコンテナ内で利用可能にして、コンテナのHTTPSポートを公開します。HTTPSは暗号化されたWeb接続です。TLS証明書は、ブラウザが期待どおりのサーバーに到達したことを検証するのに役立ちます。このガイドでは、信頼できる認証局(CA)から既に取得済みの証明書と秘密鍵を使用します。リバースプロキシを使用する場合は、プロキシがHTTPSを処理する可能性があるため、以下の別のオプションに従ってください。

どのHTTPS設定がお客様の導入環境に適していますか?

ONLYOFFICE Docsは、Dockerコンテナから直接HTTPSを提供できます。また、NGINXやTraefikなどのリバースプロキシを使用してHTTPSを受け入れ、リクエストをDocsに転送することも可能です。パブリックポート80と443が利用可能なスタンドアロンサーバーの場合は、直接TLSを使用するのが簡単な選択肢です。これらのポートを既に別のWebサービスが使用している場合や、複数のサイトが1つのサーバーを共有している場合は、リバースプロキシの方が簡単な場合が多いです。両方のレイヤーを無計画に設定することは避けてください。TLSを終端するコンポーネントを決定し、プロキシとコンテナ間の接続がHTTPかHTTPSかを文書化してください。

このチュートリアルでは、CA 発行の証明書を使用して直接 HTTPS を設定する方法を説明します。ONLYOFFICE では、Let's Encrypt の自動オプションについても説明していますLETS_ENCRYPT_DOMAIN。LETS_ENCRYPT_MAILこのオプションでは、ポート 80 と 443 がアクセス可能で、プロキシによって既に占有されていないことが必要です。自己署名証明書はプライベート テスト ネットワークには便利ですが、パブリック ブラウザーや接続されたストレージ サービスでは自動的に信頼されません。

まず最初に何を準備すべきですか?

  • Docker EngineとDocker ComposeプラグインがインストールされたLinuxホスト。
  • ホスト名(例:)に対応するDNS Aレコードを作成し、docs.example.comホストのパブリックIPv4アドレスを指定します。IPv6が設定され、到達可能な場合にのみ、AAAAレコードを追加してください。
  • TCP 443を許可する受信ファイアウォールおよびクラウドファイアウォールルールが必要です。HTTP検証を使用して証明書を要求または更新する場合は、TCP 80も必要になる場合があります。
  • ホスト名とそれに対応する秘密鍵の証明書チェーン。認証局は通常、証明書チェーン全体ファイルと秘密鍵ファイルを提供します。
  • ONLYOFFICEデータボリューム用の永続的なホストディレクトリと、強力なJWTシークレットが必要です。JWT(JSON Web Token)は、Docsと連携アプリケーション間のリクエストを認証するために使用される共有シークレットです。
Linuxターミナルには、docs.example.comがIPアドレスに解決され、TCPポート443でリスナーが動作していることが表示されます。
コンテナを変更する前に、DNS解決を確認し、DockerホストがHTTPSポート443でリッスンできることを確認してください。

ステップ1:証明書と秘密鍵をホストに配置する

この例では、ホストは永続データを の下に保持します/srv/onlyoffice/data。サンプルホスト名とパスを、ご自身のものに置き換えてください。証明書の完全なチェーンを としてtls.crt、対応する秘密鍵を として、サブディレクトリtls.keyに保存しますcerts。

sudo mkdir -p /srv/onlyoffice/data/certs
sudo install -m 0644 /path/to/fullchain.pem /srv/onlyoffice/data/certs/tls.crt
sudo install -m 0600 /path/to/privkey.pem /srv/onlyoffice/data/certs/tls.key
sudo chown root:root /srv/onlyoffice/data/certs/tls.key

秘密鍵は、それを必要とするアカウントまたはサービスのみが読み取れるようにしてください。Compose ファイル、問題報告、または公開リポジトリに貼り付けないでください。所有権または権限の問題で Docker が鍵を読み取れない場合は、鍵を誰でも読み取れるようにするのではなく、コンテナのランタイムに対してアクセス権限を限定的に調整してください。

サービスを開始する前に、証明書の日付とホスト名を確認してください。

openssl x509 -in /srv/onlyoffice/data/certs/tls.crt -noout -subject -issuer -dates -ext subjectAltName

サブジェクト代替名(SAN)リストには、ユーザーがアクセスするホスト名を正確に含める必要があります。証明書から生成された公開鍵と秘密鍵を比較すると、2つのハッシュ値が一致するはずです。

openssl x509 -in /srv/onlyoffice/data/certs/tls.crt -pubkey -noout | openssl sha256
openssl pkey -in /srv/onlyoffice/data/certs/tls.key -pubout | openssl sha256
ターミナルには、ONLYOFFICE証明書ディレクトリ内にtls.crt、tls.key、およびdhparam.pemが表示され、キーに対するアクセス権限は制限されています。
証明書とその対応する秘密鍵は、ホストの永続的な証明書ディレクトリに保存し、秘密鍵はアクセス権限を制限して保護してください。

ステップ2:Docker Composeサービスの設定

ONLYOFFICE の Docker ドキュメントで/var/www/onlyoffice/Data/certsは、証明書を に配置しています。現在の環境変数リストでは、デフォルトの証明書ファイル名として と が指定されていますtls.crtがtls.key、インストール手順の例では と も使用されていますonlyoffice.crt。onlyoffice.keyパスを明示的に設定することで、ファイル名の規則に依存することを回避できます。ホスト ディレクトリは、対応するコンテナ データ ディレクトリにバインド マウントされ、ポート 443 はホスト ポート 443 として公開されます。

以下のようなファイルを作成しcompose.yaml、サンプルJWT値を、ご使用の環境で生成された秘密鍵に置き換えてください。以下のイメージタグはサンプルバージョンです。公式イメージ一覧を確認し、ご自身が管理する予定のバージョンを使用してください。

services:
  documentserver:
    image: onlyoffice/documentserver:9.4.0
    container_name: onlyoffice-documentserver
    restart: unless-stopped
    ports:
      - "443:443"
    volumes:
      - /srv/onlyoffice/data:/var/www/onlyoffice/Data
    environment:
      SSL_CERTIFICATE_PATH: /var/www/onlyoffice/Data/certs/tls.crt
      SSL_KEY_PATH: /var/www/onlyoffice/Data/certs/tls.key
      JWT_SECRET: replace_with_a_long_random_secret

強力なシークレットを生成しopenssl rand -hex 32、適切なファイル権限で環境ファイルまたはCompose構成に配置してください。別のアプリがDocsと統合する場合は、そのアプリにも同じJWTシークレットと公開HTTPSアドレスを設定してください。既存のインストールの場合、既存のComposeファイルを編集する際に、ボリューム、ネットワーク、その他の環境変数、および統合設定を保持してください。動作中のサービス定義をこの最小限のサンプルで置き換えないでください。

Composeファイルを含むディレクトリからサービスを開始または再作成します。

docker compose up -d
docker compose ps
docker compose logs --tail=100 documentserver
コードエディタには、ポート443を公開し、ONLYOFFICE Docsの証明書と秘密鍵のパスを設定するDocker Composeサービスが表示されます。
ComposeサービスはHTTPSを公開し、ONLYOFFICE Docsをそのデータディレクトリにマウントされた証明書ファイルを参照するように設定しています。

ステップ3:HTTPSと証明書をテストする

ホスト名を置き換えてブラウザで開きますhttps://docs.example.com。ブラウザに安全な接続が表示され、名前の不一致、証明書の有効期限切れ、または信頼できない発行者に関するエラーが報告されないことを確認してください。ONLYOFFICE Docs のウェルカム ページが読み込まれることを確認してください。Docs が Nextcloud、ownCloud、またはその他のプラットフォームに接続されている場合は、ドキュメントの開閉と保存もテストしてください。ブラウザがロックされるだけでは、統合のコールバック リクエストや JWT 構成が正しく機能していることを証明できません。

シェルからサーバーにTLS証明書を要求し、HTTPS応答をテストします。

openssl s_client -connect docs.example.com:443 -servername docs.example.com </dev/null
curl -I https://docs.example.com/

この-servernameオプションは、ホスト名をサーバー名表示(SNI)を使用して送信します。SNIを使用すると、複数のホスト名が同じアドレスを共有している場合でも、サーバーは適切な証明書を選択できます。証明書の日付、発行者、SANは、インストールした証明書と一致している必要があります。docker compose logsブラウザが接続できない場合や、コンテナが繰り返し再起動する場合は、これらの点を確認してください。

ブラウザのアドレスバーには、一般的な ONLYOFFICE Docs のウェルカム画面の横に鍵アイコンが付いた https://docs.example.com が表示されます。
デプロイ後、公開されているHTTPSホスト名にアクセスし、証明書の警告が表示されずにページが読み込まれることを確認してください。

リバースプロキシが既にHTTPSを処理している場合はどうなりますか?

NGINX、Traefik、Caddy、またはホスティングゲートウェイが既にパブリックポート80と443を所有している場合は、そのプロキシにパブリック証明書をインストールする方が良いでしょう。そのトポロジでは、DocsコンテナをプライベートDockerネットワークにのみ公開するか、HTTPポートをループバックにバインドし、プロキシを設定して必要なリクエストとWebSocketトラフィックを転送します。統合アプリケーションのONLYOFFICEアドレスをパブリックhttps://URLに設定します。転送ヘッダーとアップストリームTLSについては、プロキシとONLYOFFICEの現在の指示に従ってください。コンテナのポート443を、プロキシが既に使用しているホストポートと同じポートに公開しないでください。

1つのプロキシで複数のサービスのトラフィックをルーティングする場合は、このパターンを選択してください。DocsがパブリックHTTPSエンドポイントを所有し、必要なポートが空いている場合は、上記の直接コンテナ設定を使用してください。プロキシがHTTP経由でコンテナに接続する場合、その内部ホップは暗号化されません。セキュリティ要件に応じて、信頼できるプライベートネットワーク上に維持するか、アップストリームTLSを設定してください。

よくある問題とその解決方法

  • ブラウザに証明書が無効であると表示されます。SANホスト名、証明書の有効期限、証明書チェーン全体、およびDNSが目的のホストを指していることを確認してください。ベアドメイン用の証明書は、サブドメインを自動的にカバーするものではありません。
  • コンテナは証明書またはキーが見つからないと報告しています。ホストのソースパス、バインドマウント先、正確なファイル名、および2つのSSL_..._PATH値を確認してください。Dockerの--mount構文ではソースパスが存在する必要があります。Composeのバインドマウントも、意図した既存のディレクトリを指している必要があります。
  • ポート443は既に割り当てられています。競合しているサービスを停止するか、リバースプロキシを使用するか、別のパブリックホストポートを選択して、URLとファイアウォールがそれを反映していることを確認してください。プロキシが前面にある場合は、通常、パブリックポート443はプロキシが所有します。
  • HTTPSは正常に動作するが、ドキュメントの編集が失敗する。統合URL、両サービスのJWTシークレット、プロキシ転送ルール、およびDocsがストレージプラットフォームにアクセスできるかどうかを確認してください。実際にファイルを開いて保存する操作をテストしてください。
  • 証明書は更新されましたが、サイトは依然として古い証明書を使用しています。更新によってホストにマウントされたファイルが更新され、ONLYOFFICEがそれを再読み込みしたことを確認してください。必要に応じて、更新後にサービスを再起動してください。例えば、docker compose restart documentserverComposeプロジェクトディレクトリから実行されるCertbotのデプロイフックを使用するなどです。自動化に頼る前に、Certbotのドライランオプションを使用して更新をテストしてください。

証明書を最新の状態に保ってください

HTTPS の設定は、更新が計画されるまで完了しません。証明書の発行者と更新者、秘密鍵の保存場所、更新されたファイルをマウントされたディレクトリにコピーするプロセス、およびサービスがそれらを再読み込みする方法を記録してください。更新クライアントのドライランテストを実行し、証明書の有効期限を監視し、更新のたびに公開エンドポイントを確認してください。ホスト管理証明書の代わりに ONLYOFFICE の組み込み Let's Encrypt 変数を使用する場合は、その方法に関する最新の Docker の手順に従い、実行するイメージとデプロイメントに合わせて更新動作を確認してください。

参考資料として、ONLYOFFICE DocsのDockerインストールおよびHTTPSガイド、Dockerバインドマウントに関するドキュメント、Docker Composeに関するドキュメント、ONLYOFFICE公式Dockerイメージタグ、およびCertbotの公式手順書を参照してください。利用可能なタグとインターフェースの詳細は変更される可能性があるため、新規デプロイメントを準備する際には必ず確認してください。

コメントを残す

Microsoft Wordで画像を移動する方法

Microsoft Wordで画像を移動する方法

Wordで画像をドラッグする方法、テキストの折り返しを選択する方法、段落内に画像を保持する方法、ページ上に画像を固定する方法、そして画像が移動しない場合のトラブルシューティング方法を学びましょう。

Excelにチェックボックスを挿入する方法:2つの簡単な方法

Excelにチェックボックスを挿入する方法:2つの簡単な方法

Excelのセル内ツールを使ってチェックボックスを挿入する方法、数式を使ってチェックされた項目の数を数える方法、古いデスクトップ版でリンクされたフォームコントロールを追加する方法を学びましょう。

Excelで文字を自動入力する方法:AからZ、そしてその先へ

Excelで文字を自動入力する方法:AからZ、そしてその先へ

Excelでフィルハンドル関数、SEQUENCE関数、または再利用可能なカスタムリストを使用して、AからZまでのアルファベット、小文字、またはZを超えるラベルを生成します。

Excelで取り消し線を引く方法:ショートカットと手順

Excelで取り消し線を引く方法:ショートカットと手順

Windows、Mac、Web版Excelで取り消し線を引く方法、セルの一部に書式を設定する方法、値を削除せずに行を削除する方法を学びましょう。

Microsoft Accessとは?そのデータベースツールはどのように機能するのか?

Microsoft Accessとは?そのデータベースツールはどのように機能するのか?

Microsoft Accessは、関連レコードの保存、クエリの作成、データ入力フォームの作成、レポートの生成を行うためのWindowsデータベースアプリケーションです。その仕組みと最適な活用シーンについて解説します。

Word 2010でグリッド線の高さと幅を変更する

Word 2010でグリッド線の高さと幅を変更する

Word 2010でグリッド線の高さと幅を調整する方法、表示される線の頻度を変更する方法、および下地となる水平方向と垂直方向の描画グリッドの間隔を設定する方法を学びましょう。

Office Outlook 2010 のインポートとエクスポート: PST ファイルを使用してデータを移動する

Office Outlook 2010 のインポートとエクスポート: PST ファイルを使用してデータを移動する

Outlook 2010にPSTファイルをインポートする方法、またはメール、連絡先、カレンダー、タスクをエクスポートする方法を学びましょう。正しいメニューに従い、フォルダの欠落や重複を避けてください。

Nucleus Kernelを使用してOutlook PSTファイルのパスワードを復元する

Nucleus Kernelを使用してOutlook PSTファイルのパスワードを復元する

Kernelが提供する最新の手順では、忘れてしまったOutlook PSTファイルのパスワードを復元する方法を解説します。正しいファイルの特定方法、バックアップの作成方法、ツールの制限事項の確認方法などが含まれています。

PowerPointスライドにライブWebページを挿入する方法

PowerPointスライドにライブWebページを挿入する方法

LiveWebアドインを使用すると、WebサイトをPowerPointスライドに配置し、サイズや更新動作を設定し、プレゼンテーション前に互換性を確認できます。

Access 2010データベースをフォームで開く方法

Access 2010データベースをフォームで開く方法

Access 2010データベースアプリケーションを、データ入力フォームに直接開くように設定し、オブジェクトリストを非表示にし、メニューを制限し、共有前に設定を確認します。