ONLYOFFICEのアップデートで注意すべきこと

学んだことや苦労したことをつらつらと書いていきます。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。
ONLYOFFICE7.2が2022/09/22にリリースされていたのでアップデートのテストをしたところ、ちょっとした躓きがありました。

OS: Ubuntu20.0.4

***

# 動作環境
[Docker-DocumentServer](https://github.com/ONLYOFFICE/Docker-DocumentServer)のリポジトリを利用して、Docker-Composeで動作させています。

```docker-compose.yml
version: '2'
services:
  onlyoffice-documentserver:
    container_name: onlyoffice-documentserver
    image: onlyoffice/documentserver-ee:7.1.1
    command: /sbin/init
    privileged: true
    depends_on:
      - onlyoffice-postgresql
      - onlyoffice-rabbitmq
    environment:
      - DB_TYPE=postgres
      - DB_HOST=onlyoffice-postgresql
      - DB_PORT=5432
      - DB_NAME=onlyoffice
      - DB_USER=onlyoffice
      - AMQP_URI=amqp://guest:guest@onlyoffice-rabbitmq
      # Uncomment strings below to enable the JSON Web Token validation.
      #- JWT_ENABLED=true
      #- JWT_SECRET=secret
      #- JWT_HEADER=Authorization
      #- JWT_IN_BODY=true
    ports:
      - '8080:80'
    stdin_open: true
    restart: always
    stop_grace_period: 60s
    volumes:
       - /var/www/onlyoffice/Data:/var/www/onlyoffice/Data
       - /var/log/onlyoffice:/var/log/onlyoffice
       - /var/lib/onlyoffice/documentserver/App_Data/cache/files:/var/lib/onlyoffice/documentserver/App_Data/cache/files
       - /var/www/onlyoffice/documentserver-example/public/files:/var/www/onlyoffice/documentserver-example/public/files
       - /usr/share/fonts:/usr/share/fonts
       - onlyoffice_config:/etc/onlyoffice/documentserver

  onlyoffice-rabbitmq:
    container_name: onlyoffice-rabbitmq
    image: rabbitmq
    restart: always
    expose:
      - '5672'

  onlyoffice-postgresql:
    container_name: onlyoffice-postgresql
    image: postgres:9.5
    environment:
      - POSTGRES_DB=onlyoffice
      - POSTGRES_USER=onlyoffice
      - POSTGRES_HOST_AUTH_METHOD=trust
    restart: always
    expose:
      - '5432'
    volumes:
      - postgresql_data:/var/lib/postgresql

volumes:
  postgresql_data:
  onlyoffice_config:
```

local.jsonに変更を加えたいため、`/etc/onlyoffice/documentserver/local-production-linux.json`を作成して、そちらに設定を追加します。(local.jsonはコンテナを再起動するたびに書き換わってしまうため。)
設定ファイルの変更を保持するため、docker volumeを利用しています。
```docker-compose.yml
    volumes:
       - onlyoffice_config:/etc/onlyoffice/documentserver

volumes:
  onlyoffice_config:
```

# アップデートしてみる
docker imageの部分を7.2に変更します。
```docker-compose.yml
version: '2'
services:
  onlyoffice-documentserver:
    container_name: onlyoffice-documentserver
    image: onlyoffice/documentserver-ee:7.2.0
```

exampleサーバーを起動して動作確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1762440/296ffbb5-32d3-8d7c-c72f-d91fe5ad1891.png)
...ドキュメントが開けない。

コンテナに入ってサービスを再起動してみましょう。
```
# supervisorctl restart all
ds:metrics: stopped
ds:example: stopped
ds:converter: ERROR (spawn error)
ds:metrics: started
ds:example: started
ds:docservice: ERROR (spawn error)
```
converterとdocserviceが起動できていない様子。
ログを見ても以下の通り。
```
Error: Configuration property "tenants.baseDomain" is not defined
    at Config.get (/snapshot/server/build/server/Common/node_modules/config/lib/config.js:203:11)
    at Object.<anonymous> (/snapshot/server/build/server/Common/sources/tenantManager.js)
    at Module._compile (pkg/prelude/bootstrap.js:1930:22)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at Module.require (pkg/prelude/bootstrap.js:1855:31)
    at require (internal/modules/cjs/helpers.js:101:18)
```

`tenants.baseDomain`というパラメータは設定した覚えがないので、`default.json`に変更があったと考えられますが、docker環境で設定ファイルをマウントしていると自動で書き換わってくれないようです。(deb/rpm インストールの場合は書き換わるようです。)

一応`local.json`を見てみると、パラメータが追加されていました。(local.jsonが書き換わるならdefault.jsonも書き換わって欲しい...)

```local.json
{
  "services": {
    "CoAuthoring": {
      "sql": {
        "type": "postgres",
        "dbHost": "onlyoffice-postgresql",
        "dbPort": "5432",
        "dbName": "onlyoffice",
        "dbUser": "onlyoffice",
        "dbPass": "onlyoffice"
      },
      "redis": {
        "host": "localhost"
      },
      "token": {
        "enable": {
          "request": {
            "inbox": true,
            "outbox": true
          },
          "browser": true
        },
        "inbox": {
          "header": "Authorization",
          "inBody": false
        },
        "outbox": {
          "header": "Authorization",
          "inBody": false
        }
      },
      "secret": {
        "inbox": {
          "string": "LnOrEFUdkkHOqttQeEx4"
        },
        "outbox": {
          "string": "LnOrEFUdkkHOqttQeEx4"
        },
        "session": {
          "string": "LnOrEFUdkkHOqttQeEx4"
        }
      }
    }
  },
  "rabbitmq": {
    "url": "amqp://guest:guest@onlyoffice-rabbitmq"
  },
  "queue": {
    "type": "rabbitmq"
  },
  "storage": {
    "fs": {
      "secretString": "tL8oZBLN0LdQpvwbdgGj"
    }
  }
}
```
以下の部分がONLYOFFICE 7.1では無かった設定項目です。
```
  "storage": {
    "fs": {
      "secretString": "tL8oZBLN0LdQpvwbdgGj"
    }
  }
```
JWTのsecretも自動で生成されるようになっていますね。
```
      "secret": {
        "inbox": {
          "string": "LnOrEFUdkkHOqttQeEx4"
        },
        "outbox": {
          "string": "LnOrEFUdkkHOqttQeEx4"
        },
        "session": {
          "string": "LnOrEFUdkkHOqttQeEx4"
        }
      }
```



パラメータが増えているようなので、変に格闘するのはやめて新しくdocker volumeを作ることにしました。

```docker-compose.yml
    volumes:
       - onlyoffice_config_7.2:/etc/onlyoffice/documentserver

volumes:
  onlyoffice_config_7.2:
```

動作します。(当然ですが)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1762440/3ebf3df9-486f-bf4d-690c-2f1fd37fac0d.png)


# まとめ
ONLYOFFICE 7.1 → ONLYOFFICE 7.2 でパラメータが増えているようで、既存の設定ファイルは利用できませんでした。
ホストに設定ファイルを配置してバインドしている方もいると思いますが、一度docker volumeを作成して丸々持ってくることをお勧めします。