Dockerモードパッチ
変更事項
今回のパッチの主な変更事項をまとめると、以下の通りです。
| 順番 | 項目 | 内容 | 備考 |
|---|---|---|---|
| 1 | Kafkaメッセージサイズ変更、Kafka設定 | メッセージを最大2GBに引き上げます。 | 既存の方式と同じ(config置き換え) |
| 2 | HTTPS(Nginx) gzip圧縮 | 応答データをgzip圧縮します。 | 既存の方式と同じ(http.conf置き換え) |
| 3 | onectl関連作業 | シェルスクリプト → バイナリに置き換え、Dockerモードにも新規導入します。web/backend/data/history.db 新規ファイルが追加されます。 | 今回のバージョン固有の作業 |
| 4 | Kafkaメモリ増加、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_HOST | EXEMONE_HOST=localhost |
EXEMONE_HOME | EXEMONE_HOME=/home/exemone/exemone-docker/.../installer/exemone |
EXEMONE_USER_UID | 1000 |
EXEMONE_USER_GID | 1000 |
新しい値で更新する必要がある行:
| 項目 | 説明 |
|---|---|
*_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内のテーブル変更事項の更新が必要です。