メインコンテンツまでスキップ

Dockerモードパッチ

変更事項​

今回のパッチの主な変更事項をまとめると、以下の通りです。

順番項目内容備考
1Kafkaメッセージサイズ変更、Kafka設定メッセージを最大2GBに引き上げます。既存の方式と同じ(config置き換え)
2HTTPS(Nginx) gzip圧縮応答データをgzip圧縮します。既存の方式と同じ(http.conf置き換え)
3onectl関連作業シェルスクリプト → バイナリに置き換え、Dockerモードにも新規導入します。web/backend/data/history.db 新規ファイルが追加されます。今回のバージョン固有の作業
4Kafkaメモリ増加、Kafka環境変数.env の KAFKA_OPTS 内の MaxDirectMemorySize が3G → 6Gに変更されます。今回のバージョン固有の作業

共通事前準備​

以降のすべてのコマンドは、以下の1行から開始します。 INSTALL_DIR は現在インストールされているexemONEインストールフォルダのパスです。 (既存の EXEMONE_HOME との混同を避けるため、パッチ作業専用の変数として分離します。)

# 実際のインストールパスに修正してください。
export INSTALL_DIR=/home/exemone/exemone
cd $INSTALL_DIR

新規パッケージファイルの配置​

担当者から受け取った新規パッケージtarファイルを /tmp に配置してください。

ls -lh /tmp/exemone-pkg-*.tar.gz

新規パッケージの展開(Dockerモード)​

Dockerパッケージは二重構造です。外側のtarを展開すると agent / docker / image / installer / install.sh が見え、実際のパッチに使用するファイル(onectl, scripts, docker-compose.yml 等)はinstaller/exemone.tar.gz の中にあります。

# 1) 外側のtarを展開
mkdir -p /tmp/patch
tar -zxf /tmp/exemone-pkg-*.tar.gz -C /tmp/patch

# 外側の構造確認: agent, docker, image, installer, install.sh
ls /tmp/patch/exemone

# 2) 内側のinstaller tarを展開(その場で)
tar -zxf /tmp/patch/exemone/installer/exemone.tar.gz \
-C /tmp/patch/exemone/installer

export NEW_PKG=/tmp/patch/exemone/installer/exemone
ls $NEW_PKG # onectl, scripts, docker-compose.yml 等が見えればOKです。

# 既存のexemone packageパス
export INSTALL_DIR=/home/exemone/exemone/installer/exemone

💡 参考: image/*.tar.gz はDockerイメージファイルです。Dockerモード §2-2 (5)の手順で /tmp/patch/exemone/image/ パスから docker load -i でロードします。

envファイル置き換え時の共通原則​

今回のバージョンで置き換えが必要なenv系ファイル(.env, kafka.env 等)には、顧客ごとのカスタム値が入っている場合があります。置き換え前に必ず diff で差分を確認し、顧客カスタムがある場合は手動でマージしてください。

# 例
diff $INSTALL_DIR/kafka.env $NEW_PKG/kafka.env

2. Docker(ドッカー)モード​

2-1. コンテナ停止​

コンテナをすべて停止し、状態を確認します。

cd $INSTALL_DIR
./scripts/shutdown.sh
docker ps

すべて Exited 状態であることを確認してください。


2-2. ⭐ 今回のバージョン固有の作業(Docker)​

⚠️ 注意: 本手順を進める前に、$INSTALL_DIR, $NEW_PKG 環境変数が必ず指定されている必要があります。

(1) onectl関連作業 — 今回のバージョンからDockerモードにもonectlを追加​

これまでDockerモードには onectl がありませんでしたが、今回のバージョンからバイナリ/Docker共通CLIとして onectl バイナリが追加されます。onectlが使用する web/backend/data/history.db 新規ファイルも併せて配置します。

# 新規onectl配置
cp $NEW_PKG/onectl $INSTALL_DIR/onectl
chmod 755 $INSTALL_DIR/onectl

(2) scripts/フォルダの置き換え​

非常に古いインストール環境では、現在のスクリプトの一部が欠落している場合があるため、既存フォルダをバックアップし、新規フォルダに置き換えます。

# 既存scriptsバックアップ
mv $INSTALL_DIR/scripts $INSTALL_DIR/scripts.old

# 新しいscriptsコピー
cp -a $NEW_PKG/scripts $INSTALL_DIR/scripts

# 権限
chmod -R 755 $INSTALL_DIR/scripts

(3) kafka.envの更新(顧客カスタム確認後に置き換え)​

kafka.env には顧客ごとのカスタム値が入っている場合があるため、必ず diff で差分を確認してから置き換えます。カスタム値がある場合は手動でマージしてください。

# 差分確認
diff $INSTALL_DIR/kafka.env $NEW_PKG/kafka.env

# 既存ファイルバックアップ
cp $INSTALL_DIR/kafka.env $INSTALL_DIR/kafka.env.old

# カスタムがなければそのまま置き換え
cp $NEW_PKG/kafka.env $INSTALL_DIR/kafka.env

# カスタムがある場合: 上記のcpの代わりにviで両方の値をマージして保存

(4) Nginx http.confの更新(顧客カスタム確認後に置き換え)​

今回のバージョンで http.conf にgzip圧縮ブロックが追加されました。ただしTLS証明書パス、proxyヘッダー、カスタムlocationブロック等、顧客ごとに修正された内容がある場合があるため、diff で必ず確認してから置き換えます。

# 差分確認
diff $INSTALL_DIR/containers/exemone-https/conf.d/http.conf \
$NEW_PKG/containers/exemone-https/conf.d/http.conf

# 既存ファイルバックアップ
cp $INSTALL_DIR/containers/exemone-https/conf.d/http.conf \
$INSTALL_DIR/containers/exemone-https/conf.d/http.conf.old

# カスタムがなければそのまま置き換え
cp $NEW_PKG/containers/exemone-https/conf.d/http.conf \
$INSTALL_DIR/containers/exemone-https/conf.d/http.conf

手動マージ時 — gzipブロックの追加位置と内容​

カスタム内容があり直接マージする必要がある場合は、既存ファイルの server { ... } ブロック内で、ssl_* ディレクティブの直下、# proxy コメントの上に以下のブロックを追加してください。

server {
listen 8443 ssl;
...
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;

# ↓↓↓ ここにgzipブロックを追加 ↓↓↓
# gzip圧縮
gzip on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_vary on;
gzip_proxied any;
gzip_http_version 1.1;

gzip_types
text/plain
text/css
application/javascript
application/json
application/xml
image/svg+xml;
# ↑↑↑ ここまで ↑↑↑

# proxy
proxy_buffer_size 8k;
proxy_buffers 16 8k;
...
}

(5) 新規イメージファイルのロード​

新規パッケージの image/ フォルダに新しいバージョンのDockerイメージtarファイルが入っています。docker load -i で一括ロードします。

# 一括ロード(1行)
ls /tmp/patch/exemone/image/*.tar.gz | xargs -L 1 docker load -i

# ロードされたイメージ確認
docker images | grep -E "v3.0.604|1.28"

(6) .envの更新(手動マージ)​

.env には初期インストール時に入力されたサイト別の値が入っているため、新規ファイルでまるごと上書きしてはいけません。diff で差分を確認した後、vi で直接編集してください。

保持する必要があるキー(上書きしないこと):

キー例
EXEMONE_HOSTEXEMONE_HOST=localhost
EXEMONE_HOMEEXEMONE_HOME=/home/exemone/exemone-docker/.../installer/exemone
EXEMONE_USER_UID1000
EXEMONE_USER_GID1000

新しい値で更新する必要がある行:

項目説明
*_VERSION例: API_VERSION=v3.0.604.5-snapshot
*_IMAGE新規イメージタグを反映します。
その他新規追加行新規ファイルに新しく追加された行をすべて反映します。
ミドルウェアの変更事項REDIS_IMAGE=maxgauge/exemone-redis, REDIS_VERSION, POSTGRES_VERSION の変更有無を確認します。
# 差分確認
diff $INSTALL_DIR/.env $NEW_PKG/.env

# バックアップ
cp $INSTALL_DIR/.env $INSTALL_DIR/.env.old

# 上記diff結果を見てviで手動マージしてください。
vi $INSTALL_DIR/.env

(7) ログローテーション設定​

postgresql, redis, cache, front, https のログローテーション/リテンションは、ホストの logrotation ツールで管理するため、初期設定を行います。

# ログ管理プロセス実行
$INSTALL_DIR/scripts/setup-logrotate.sh

(8) redis dockerfileの追加​

cp -R $NEW_PKG/dockerfile/redis $INSTALL_DIR/dockerfile

(9) exemone-redis containersの追加​

cp -R $NEW_PKG/containers/exemone-redis $INSTALL_DIR/containers

(10) docker-compose.ymlのコピー​

# 差分確認
diff $INSTALL_DIR/docker-compose.yml $NEW_PKG/docker-compose.yml

# バックアップ
cp $INSTALL_DIR/docker-compose.yml $INSTALL_DIR/docker-compose.yml.old

# 上記diff結果を見てviで手動マージしてください。
vi $INSTALL_DIR/docker-compose.yml

2-3. コンテナ起動​

cd $INSTALL_DIR
./onectl restart all

# 検証
./onectl stat

# ログ管理プロセス実行
$INSTALL_DIR/scripts/setup-logrotate.sh

注意事項および参考​

  • .env, kafka.env, http.conf, docker-compose.yml 等は顧客カスタム値が含まれる場合があるため、必ず diff で差分を確認した後に置き換えるか、手動でマージしてください。
  • 本パッチを進める前に、$INSTALL_DIR, $NEW_PKG 環境変数が正確に指定されているか確認してください。Dockerモードは二重tar構造のため、installer/exemone.tar.gz まで展開する必要がある点を覚えておいてください。
  • 今回のバージョンからDockerモードにも onectl バイナリが新規導入されます。既存のDockerモードユーザーも onectl の使用に慣れる必要があります。
  • 新規Dockerイメージをロードしないと、コンテナ起動時にイメージ欠落エラーが発生する可能性があります。docker images | grep -E "v3.0.604|1.28" コマンドで必ず事前に確認してください。
  • KAFKA_OPTS の MaxDirectMemorySize が3G → 6Gに引き上げられます。ホストのメモリリソースが十分か点検してください。
  • ミドルウェアバージョン(REDIS_VERSION, POSTGRES_VERSION)にも変更があるため、.env 更新時に必ず確認してください。
  • setup-logrotate.sh はコンテナ起動後にもう一度実行することで、ログローテーションが正常に適用されたか確認できます。

※ Repository内のテーブル変更事項の更新が必要です。