はじめに

インターネットに接続できないWindowsマシン1台で、[FileBlog + ONLYOFFICE]の環境を構築できました。

FileBlogはファイルサーバーにアクセスできる文書共有・管理のシステムです。ONLYOFFICEと連携すると、ファイルサーバー上のWord・Excel・PowerPointファイルをWebブラウザで編集・保存ができるようになります。

通常、ONLYOFFICEインストーラーはインターネット接続を要求します。

ONLYOFFICEから配布されるインストーラーはインターネット接続を前提としており、必要なコンポーネントをネットワークからダウンロードするようになっています。

インターネット接続のない閉域のLAN環境でも(閉域網環境の官公庁や製造業などのお客様から実際にご相談がありますが)、あらかじめいくつかの必要コンポーネントをダウンロードすることで、ONLYOFFICEをインストール/構築することが可能です。

本記事はそれを試してみた記録であり、構築成功に至るまでに経験した"つまずき"を「何が起きて、なぜそうなって、どう解決したか」に絞ってお伝えします。

前半の「ONLYOFFICE導入編」は、FileBlogを使っていない方にも役立つ内容です。エラーメッセージで検索してたどり着いた方は、該当する項目からお読みください。後半の「FileBlog連携編」は、FileBlogとの連携に固有の内容です。

検証環境

Hyper-V上の仮想マシン(Windows 11)をインターネット接続なしの状態にして検証しました。

項 目内 容
OSWindows 11(Hyper-V 仮想マシン)
ネットワーク内部スイッチ+固定IP(インターネット接続なし)
FileBlog5.6.2.1(PostgreSQLはFileBlog用に導入済み)
ONLYOFFICE DocsCommunity Edition 9.4.0.129
用意したインストーラーFileBlog、ONLYOFFICE Docs本体、prerequisites package

prerequisites package

prerequisites packageは、ONLYOFFICEの動作に必要なコンポーネントをまとめたインストーラーです。インターネット接続環境では本体のインストーラーがこれらを自動でダウンロードしますが、閉域のネットワーク環境では別途用意が必要です。ONLYOFFICEのWindows向けインストールガイドから入手できます。
https://helpcenter.onlyoffice.com/docs/installation/docs-community-install-windows.aspx#offlineinstallation_block

結果:閉域ネットワークでも動く ― 必要なコンポーネントは3つだけ

閉域のネットワーク環境でもFileBlog連携でONLYOFFICEでの文書編集が問題なく動作しました。prerequisites packageからは入れるコンポーネントは次の3つだけです。

  • Win-Acme
  • FireDaemon OpenSSL 3
  • Visual C++ 2013 Redistributable

パッケージには Python・PostgreSQL・RabbitMQ・Redis も含まれていますが、今回の検証では ONLYOFFICE 9.4 の動作に不要でした。

最終的な構成で次の項目を確認しています。

確認項目結 果
閉域ネットワークでのインストールOK
Word・Excel・PowerPoint の新規作成・編集・保存OK
旧形式ファイル(doc, xls, ppt)の編集・保存OK
PDFでのダウンロードOK
OS再起動後のサービスの自動起動OK
LAN内の別PCからのアクセスOK
5分以上放置後の編集・保存OK

ONLYOFFICE導入編:5つのつまずき

つまずき1:閉域NWだと、インストーラーが「(12002) 処理タイムアウト」で止まる

症状:

本体インストーラー(onlyoffice-documentserver.exe)を既定の「Full installation」のまま進めると、途中で次のエラーが出て止まりました。

Internal error: Worker thread terminated unexpectedly with exception:
Error sending data: (12002) 処理がタイムアウトになりました。

原因:

ONLYOFFICEインストーラは、Full installationでは「Download prerequisites」にチェックが入っています。前提コンポーネントをインターネットから取得しようとし、閉域NWであるため、接続できずにタイムアウトしていました。

対処:

先にprerequisites packageで前提コンポーネントを入れておきます。そのうえで本体インストーラーでは「Compact installation」を選び、「Download prerequisites」のチェックが外れていることを確認して進めます。

つまずき2:PostgreSQLのインストールが異常終了する

症状:

prerequisites packageを既定のまま進めると、同梱のPostgreSQL 18.1のインストールで、データベースの初期化処理(initdb)が「0xC0000005」で異常終了しました。

原因:

ONLYOFFICE9.4のフルパッケージではグループウェア機能なども動かすためにPostgreSQL DBを使いますが、FileBlog連携で必要なのはオフィス文書編集機能を提供するONLYOFFICE Document Serverのみです。
Document Serverは動作にデータベースを必要としないため、そもそもPostgreSQLを入れる必要がありません。

対処:

prerequisites packageのコンポーネント選択画面で、PostgreSQLのチェックも外します。インストール中にPostgreSQL関連のエラーが表示された場合も、[無視]で先に進めて問題ありません。

つまずき3:パッケージの中身が「全部必要」とは限らない

症状:

prerequisites packageには、Python・PostgreSQL・RabbitMQ・Redisなど、7つのコンポーネントが含まれていました。ONLYOFFICE Document Serverを稼働させるために最低限必要なのはどれなのか、パッケージ名だけでは判断できません。

確認方法:

インターネット接続環境で本体インストーラーを実行したマシンと比べ、実際に入るコンポーネントを確認しました。インターネット接続環境で入ったのは、Win-Acme・OpenSSL・Visual C++ 2013 の3つだけでした。さらに、RabbitMQのサービスを停止した状態でも編集・保存ができることを確かめています。

対処:

コンポーネント選択画面で、Python・PostgreSQL・RabbitMQ・Redisの4つのチェックを外します。パッケージには、以前のバージョンで使われていたコンポーネント・フル機能のONLYOFFICEグループウェアが必要とするものが含まれているものと考えられます。

つまずき4:実験環境の課題:nginx が「host not found in upstream」で起動しない

これは「閉域ネットワークを再現しようとした」実験環境特融の落とし穴です。実際のサーバーは閉域ネットワークとはいえLANにつながっているので、通常はこの問題は発生しません。

症状:

閉域ネットワークを再現するために仮想マシンのネットワークアダプターを外したところ、ONLYOFFICEのProxyサービス(DsProxySvc)が起動しなくなりました。nginxのログには次のエラーが出ていました。

host not found in upstream "localhost:8000"

原因:

ループバック(127.0.0.1)以外のIPアドレスを持つネットワークアダプターが1つもなく、Windowsがlocalhostを解決できない状態になっていました。nginxは起動時に転送先の「localhost:8000」を名前解決するため、ここで失敗していました。

対処:

ネットワークアダプターを外すのではなく、Hyper-Vの内部スイッチに接続して固定IPを設定しました。これでインターネットにはつながらないまま、localhostが解決できるようになります。

つまずき5:ポート80番がFileBlogと競合する

症状:

ONLYOFFICEインストーラ実行直後に、FileBlogを起動した状態でONLYOFFICEを動かすと、nginxのログに失敗が出力されてProxyサービスが起動しませんでした。

bind() to 0.0.0.0:80 failed

原因:

FileBlogとONLYOFFICE(nginx)が、どちらもポート80番を使おうとしていました。

対処:

ONLYOFFICEの設定ファイルを開き、待ち受けポートを80番から8070番に変更しました。変更後はDocServiceとProxyの2つのサービスを再起動します。

C:\Program Files\ONLYOFFICE\DocumentServer\nginx\conf\ds.conf

FileBlog連携編:2つのつまずき

ONLYOFFICEが単体で動いたら、次はFileBlogとの連携です。FileBlogはリバースプロキシ機能(YARP)を内蔵しており、ブラウザからONLYOFFICEへの通信をFileBlog経由で中継できます。ここでの2つのつまずきは、いずれもFileBlogの設定に関するものです。

つまずき6:エディターが真っ白になる(エラーが全く出ない)

症状:

FileBlogで[ONLYOFFICEで開く]を実行すると、新しいタブは開くものの画面が真っ白のままでした。エラーメッセージは表示されず、ブラウザの開発者ツール(F12)にも何も出ません。

原因:

FileBlogに http://127.0.0.1/fileblog/ でアクセスしていたことが原因でした。FileBlogの設定 WebServer/OnlyOffice/DocumentServerApiJsUrl には、LANのIPアドレスを使ったURLを登録していました。ブラウザでアクセスするホストと、この設定のホストが一致していないとエディターが起動しません。

対処:

DocumentServerApiJsUrlと同じホスト名(またはIPアドレス)でFileBlogにアクセスしたところ、エディターが表示されました。サーバー上で手軽に127.0.0.1で動作確認したくなりますが、それが原因になる点に注意が必要です。手がかりが何も出ないため、今回最も時間を要したつまずきでした。

つまずき7:保存したファイルの内容がFileBlog画面のHTMLになる

症状:

エディターで編集・保存したファイルを開き直すと、次のメッセージが表示されました。ファイル内容が、FileBlogの画面のHTMLに置き換わっていました。

You need to enable JavaScript to run this app.

原因:

リバースプロキシ設定(ReverseProxy/Simple)の AccessLevel を「ログイン済みユーザーのみ」にしていました。ONLYOFFICEがFileBlogからファイルを取得したり保存を通知したりする通信はサーバー同士の通信です。ブラウザのログイン情報を持たないため、FileBlogのログイン画面に回されます。その結果、ログイン画面のHTMLがファイルとして保存されていました。

対処:

AccessLevelを「公開(匿名アクセス許可)」に変更して解決しました。FileBlogとONLYOFFICEを連携させるにはこの設定が必須です。「特定のロールが必要」を選んだ場合も、同じ理由で通信できません。なお、壊れたファイルは元に戻せないため、設定を直したあとは新しいファイルで確認してください。

「公開(匿名アクセス許可)」で支障はないか

「公開」と聞くと不安に感じるかもしれませんが、FileBlogとONLYOFFICEの間の通信は JWT(JSON Web Token) で保護されています。

FileBlogとONLYOFFICEには、同じシークレットキーを登録します。FileBlogからONLYOFFICEへのリクエスト、ONLYOFFICEからFileBlogへのファイル取得や保存の通知には、このキーで署名したトークンが付帯されます。受け取った側は署名を検証し、正しいトークンが付帯されていないリクエストは受け付けません。

つまり、AccessLevelで止めているのは「ログインしているか」の確認であり、「正規のサーバーからの通信か」はJWTが確認しています。シークレットキーは32文字以上の推測されにくい値にしてください。

さらに、FileBlogの設定 TrustedDocumentServerNetList を使うと、ONLYOFFICEとWebサーバー(FileBlog)の間の通信経路を、指定したネットワークだけに限定できます。指定していない経路からのアクセスは受け付けなくなるため、JWTとあわせてリスクをさらに下げられます。

なお、今回の検証バージョン(FileBlog 5.6.2.1)では、この設定が想定どおりに動作しない不具合がありましたが、修正版(開発版)での検証結果、正常に機能することを確認しました。今後のバージョンで正常に機能する予定です。

まとめ

FileBlog + ONLYOFFICEは、インターネットに接続できない環境でも構築・運用できます。押さえるべき点は次の4つです。

  • 前提コンポーネントはprerequisites packageから入れ、本体は「Compact installation」でインストールする
  • prerequisites packageから入れるのは、Win-Acme・OpenSSL・Visual C++ 2013 の3つだけでよい
  • FileBlogには、DocumentServerApiJsUrlと同じホスト名でアクセスする
  • リバースプロキシのAccessLevelは「公開(匿名アクセス許可)」にする(通信はJWTで保護される)

ONLYOFFICEの導入をご検討の方は、お気軽にお問い合わせください。なお、弊社からのご案内は、FileBlogとあわせてご導入いただくことを前提としております。

ご質問・ご相談はお気軽にお問い合わせください