KylinOSにDockerでONLYOFFICE Docsをインストールする
はじめに
コミュニティ版を使用すると、ONLYOFFICE Docsをローカルサーバーにインストールし、オンラインエディターをONLYOFFICEコラボレーションプラットフォームや他の人気システムと統合することができます(機能の詳細なリストをご覧ください)。バージョン7.2から、ONLYOFFICE DocsのDockerイメージはKylin Linux Advanced Server OSリリースV10での実行に対応するように再設計されました。このガイドでは、KylinOSにONLYOFFICE Docs コミュニティ版のDockerバージョンをインストールする方法を示します。
システム要件
- CPU:デュアルコア2 GHz以上
- RAM:4 GB以上
- HDD:最低40 GBの空き容量
- SWAP:最低4 GB、ただしホストOSに依存します。多いほど良いです
- OS:カーネルバージョン3.10以降のamd64 Linuxディストリビューション
- Docker:KylinOSでサポートされている任意のバージョン
ONLYOFFICE Docsのインストール
DockerはデフォルトでGoogle DNSサーバーを指定します。ONLYOFFICE Docsがインターネットにアクセスしない場合、デフォルトのDocker DNSアドレスをローカルDNSサーバーのアドレスに変更することをお勧めします。そのためには、/etc/default/dockerファイルに移動し、次の行のIPアドレスをローカルネットワーク内のDNSサーバーのIPアドレスに変更します:
docker_OPTS="--dns 8.8.8.8"
CentOSのようなRPMベースのオペレーティングシステムの場合:
-
次の内容で
/etc/docker/daemon.json設定ファイルを作成します:{ "dns" : [ "8.8.8.8" ] } -
Dockerサービスを再起動します:
sudo systemctl restart docker.service
SELinuxを無効にする
/etc/selinux/config設定ファイルでSELinuxを無効にする必要があります。
任意のテキストエディターを使用して/etc/selinux/configファイルを開き、SELINUX=enforcingまたはSELINUX=permissive文字列をSELINUX=disabledに置き換え、変更を保存します。
変更を有効にするためにサーバーを再起動してください。SELinuxが無効になっていることを確認してください:
[root@test ~]# sestatus
SELinux status: disabled
ONLYOFFICE Docsをインストールする
以下のコマンドを実行してONLYOFFICE Docsをインストールします:
sudo docker run -i -t -d -p 80:80 --security-opt seccomp=unconfined --restart=always -e JWT_SECRET=my_jwt_secret onlyoffice/documentserver
バージョン7.2以降、JWTシークレットのランダム生成を追加しました。環境変数でJWTシークレットが指定されていない場合、VMまたは物理サーバーの再起動時に再生成されるため、統合に問題が生じる可能性があります。この問題を避けるために、-e JWT_SECRET=my_jwt_secretで独自の値を指定してください。
インストールでJWTを使用しない場合は、-e JWT_ENABLED=falseを使用してください。
--security-opt seccomp=unconfinedキーは、コンテナのセキュリティプロファイルを無効にするために必要です。詳細はこちらをご覧ください。
カスタムセキュリティプロファイルも使用できます:kylin-seccomp7.json。
デフォルトでは、ONLYOFFICE Docsはポート80を使用して着信接続をリッスンします。バージョン4.3以降、デフォルトのポートの代わりに使用する予定がある場合は、ONLYOFFICE Docsのポートを変更できます。これは、インストール中にマッピングポートを変更することで簡単に行えます:
sudo docker run -i -t -d -p <PORT_NUMBER>:80 --security-opt seccomp=unconfined --restart=always -e JWT_SECRET=my_jwt_secret onlyoffice/documentserver
ここで、<PORT_NUMBER>はONLYOFFICE Docsが使用するポート番号です。
これにより、ONLYOFFICE Docsと必要なすべての依存関係がインストールされます(スクリプトが行うことのリストはこちらで確認できます)。
ファイアウォール例外の追加
firewalld.serviceサービスに例外を追加する必要もあります:
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload
設定が完了したら、ブラウザのアドレスバーにhttp://localhostと入力してONLYOFFICE Docsのウェルカムページを開きます。このページには、ドキュメントのサンプルを有効にする方法や、提供されているAPIを使用してオンラインエディターをウェブアプリケーションに統合する方法についての詳細な説明があります。
コンテナ外へのデータ保存
すべてのデータは、以下の場所にあるデータボリュームという特別に指定されたディレクトリに保存されます:
/var/log/onlyoffice:ONLYOFFICE Docsのログ用/var/www/onlyoffice/Data:証明書用/var/lib/onlyoffice:ファイルキャッシュ用
新しいバージョンがリリースされた際にデータを失うことなくONLYOFFICE Docsを簡単に更新できるように、データをDockerコンテナの外にホストマシン上に保存することを強くお勧めします。
コンテナ外にあるデータにアクセスするには、ボリュームをマウントする必要があります。これは、docker runコマンドで -vオプションを指定することで行えます。
sudo docker run -i -t -d -p 80:80 --security-opt seccomp=unconfined --restart=always \
-v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice \
-v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data \
-v /app/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice
まだ作成されていないフォルダをマウントしようとする場合、これらのフォルダは作成されますが、アクセスが制限されます。アクセス権を手動で変更する必要があります。
通常、コンテナデータを保存する必要はありません。コンテナの動作はその状態に依存しないためです。データを保存することは次の場合に有用です:
- ログなどのコンテナデータに簡単にアクセスするため;
- コンテナ内のデータサイズの制限を解除するため。
HTTPSを使用したONLYOFFICE Docsの実行
sudo docker run -i -t -d -p 443:443 --security-opt seccomp=unconfined --restart=always \
-v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data -e JWT_SECRET=my_jwt_secret onlyoffice/documentserver
ONLYOFFICEアプリケーションへのアクセスは、SSLを使用して保護することができ、不正アクセスを防ぐことができます。CA認定のSSL証明書は、CAを通じて信頼の検証を可能にしますが、自己署名証明書も、各クライアントがウェブサイトのアイデンティティを確認するための追加の手順を踏む限り、同等の信頼検証を提供できます。これを達成するための手順は以下に提供されています。
SSLを介してアプリケーションを保護するには、基本的に2つのものが必要です:
- プライベートキー(.key)
- SSL証明書(.crt)
したがって、次のファイルを作成してインストールする必要があります:
/app/onlyoffice/DocumentServer/data/certs/onlyoffice.key
/app/onlyoffice/DocumentServer/data/certs/onlyoffice.crt
CA認定証明書(例:Let's Encrypt)を使用する場合、これらのファイルはCAによって提供されます。自己署名証明書を使用する場合は、これらのファイルを自分で生成する必要があります。
certbotを使用したONLYOFFICE DocsのHTTPSへの切り替え
ONLYOFFICE DocsをHTTPSに切り替える最も簡単な方法は、Let's Encrypt SSL証明書をcertbotを使用して自動的に取得することです。
ポート80と443を指定し、変数に独自の値を設定して、ONLYOFFICE Docs Dockerコンテナを実行します:
sudo docker run -i -t -d -p 80:80 -p 443:443 --security-opt seccomp=unconfined --restart=always \
-e LETS_ENCRYPT_DOMAIN=yourdomain.com -e LETS_ENCRYPT_MAIL=email@example.com -e JWT_SECRET=my_jwt_secret onlyoffice/documentserver
ここで:
- LETS_ENCRYPT_DOMAIN - 証明書に使用するドメイン名。
- LETS_ENCRYPT_MAIL - 登録および復旧連絡用のメール。
letsencrypt.org CA署名の証明書が自動的に生成され、サーバーにインストールされます。これで、ONLYOFFICE Docsはhttps://yourdomain.comアドレスで利用可能になります。
自己署名証明書の生成
自己署名SSL証明書の生成は、簡単な3ステップの手順です:
ステップ1:サーバープライベートキーの作成
openssl genrsa -out onlyoffice.key 2048
ステップ2:証明書署名要求(CSR)の作成
openssl req -new -key onlyoffice.key -out onlyoffice.csr
ステップ3:プライベートキーとCSRを使用して証明書に署名
openssl x509 -req -days 365 -in onlyoffice.csr -signkey onlyoffice.key -out onlyoffice.crt
これで365日有効なSSL証明書が生成されました。
サーバーセキュリティの強化
このセクションでは、サーバーセキュリティを強化するための手順を提供します。
これを達成するためには、より強力なDHEパラメータを生成する必要があります。
openssl dhparam -out dhparam.pem 2048
SSL証明書のインストール
上記で生成された4つのファイルのうち、onlyoffice.key、onlyoffice.crt、dhparam.pemファイルをONLYOFFICEサーバーにインストールする必要があります。CSRファイルは必要ありませんが、念のためにバックアップを取っておいてください。
ONLYOFFICEアプリケーションがSSL証明書を探すデフォルトのパスは/var/www/onlyoffice/Data/certsですが、これはSSL_KEY_PATH、SSL_CERTIFICATE_PATH、SSL_DHPARAM_PATHの設定オプションを使用して変更できます。
/var/www/onlyoffice/Data/パスはデータストアのパスであるため、/app/onlyoffice/DocumentServer/data/内にcertsというフォルダーを作成し、ファイルをそこにコピーする必要があります。また、セキュリティ対策としてonlyoffice.keyファイルの権限を所有者のみが読み取れるように更新します。
mkdir -p /app/onlyoffice/DocumentServer/data/certs
cp onlyoffice.key /app/onlyoffice/DocumentServer/data/certs/
cp onlyoffice.crt /app/onlyoffice/DocumentServer/data/certs/
cp dhparam.pem /app/onlyoffice/DocumentServer/data/certs/
chmod 400 /app/onlyoffice/DocumentServer/data/certs/onlyoffice.key
そしてDockerコンテナを再起動します:
sudo docker restart {{DOCUMENT_SERVER_ID}}
これで、アプリケーションを安全にするための最後のステップです。
利用可能な設定パラメータ
長いdocker runコマンドを書く手間を省くために、すべての環境変数をプレーンテキストファイルに保存し、--env-fileフラグを使用して渡すことができます:
sudo docker run ... --env-file /path/to/your.env onlyoffice/documentserver
以下は、環境変数を使用して設定できるパラメータの完全なリストです。
- ONLYOFFICE_HTTPS_HSTS_ENABLED:HSTS設定をオフにするための高度な設定オプション。SSL使用時のみ適用されます。デフォルトは
trueです。 - ONLYOFFICE_HTTPS_HSTS_MAXAGE:onlyoffice NGINX vHost設定でのHSTS最大年齢を設定するための高度な設定オプション。SSL使用時のみ適用されます。デフォルトは
31536000です。 - SSL_CERTIFICATE_PATH:使用するSSL証明書のパス。デフォルトは
/var/www/onlyoffice/Data/certs/tls.crtです。 - SSL_KEY_PATH:SSL証明書の秘密鍵のパス。デフォルトは
/var/www/onlyoffice/Data/certs/tls.keyです。 - SSL_DHPARAM_PATH:Diffie-Hellmanパラメータのパス。デフォルトは
/var/www/onlyoffice/Data/certs/dhparam.pemです。 - SSL_VERIFY_CLIENT:
CA_CERTIFICATES_PATHファイルを使用してクライアント証明書の検証を有効にします。デフォルトはfalseです。 - NGINX_WORKER_PROCESSES:NGINXワーカープロセスの数を定義します。
- NGINX_WORKER_CONNECTIONS:NGINXワーカープロセスが開くことができる同時接続の最大数を設定します。
- SECURE_LINK_SECRET:nginx設定ディレクティブsecure_link_md5のシークレットを定義します。デフォルトは
random string(ランダム文字列)です。 - JWT_ENABLED:ONLYOFFICE DocsによるJSON Webトークンの検証を有効にするかどうかを指定します。デフォルトは
trueです。 - JWT_SECRET:ONLYOFFICE DocsへのリクエストでJSON Webトークンを検証するためのシークレットキーを定義します。デフォルトはランダム値です。
- JWT_HEADER:JSON Webトークンを送信するために使用されるHTTPヘッダーを定義します。デフォルトは
Authorizationです。 - JWT_IN_BODY:ONLYOFFICE Docsへのリクエストボディでトークン検証を有効にするかどうかを指定します。デフォルトは
falseです。 - WOPI_ENABLED:wopiハンドラーを有効にするかどうかを指定します。デフォルトは
falseです。 - USE_UNAUTHORIZED_STORAGE:ストレージサーバー(例:Nextcloud)に自己署名証明書を使用している場合は
trueに設定します。デフォルトはfalseです。 - GENERATE_FONTS:
trueの場合、起動時にフォントリストとフォントサムネイルなどを再生成します。デフォルトはtrueです。 - METRICS_ENABLED:ONLYOFFICE DocsのStatsDを有効にするかどうかを指定します。デフォルトは
falseです。 - METRICS_HOST:StatsDのリスニングホストを定義します。デフォルトは
localhostです。 - METRICS_PORT:StatsDのリスニングポートを定義します。デフォルトは
8125です。 - METRICS_PREFIX:バックエンドサービスのStatsDメトリクスプレフィックスを定義します。デフォルトは
ds.です。 - LETS_ENCRYPT_DOMAIN:Let's Encrypt証明書のドメインを定義します。
- LETS_ENCRYPT_MAIL:Let's Encrypt証明書のドメイン管理者メールアドレスを定義します。