共通コマンド

rtCloudコンテナを管理するためにこれらのコマンドを定期的に使用してください。docker-compose.production.ymlを含むディレクトリから実行します。

  # すべてのコンテナのステータスと正常性を確認する
docker compose -f docker-compose.production.yml ps

# ライブログを表示する(すべてのサービス)
docker compose -f docker-compose.production.yml logs -f

# アプリのみのログを表示する
docker compose -f docker-compose.production.yml logs -f rtcloud

# 単一コンテナを再起動する
docker compose -f docker-compose.production.yml restart rtcloud

# すべてのサービスを停止する
docker compose -f docker-compose.production.yml down

# すべてのサービスを起動する
docker compose -f docker-compose.production.yml up -d

# アプリコンテナ内のシェルを開く
docker compose -f docker-compose.production.yml exec rtcloud bash
  

アップグレード

rtCloudのアップデートは新しいDockerイメージタグとして配布されます。アップグレードにより最新のイメージがプルされてアプリコンテナが再作成されます。データベースマイグレーションは起動時に自動的に実行されます。

1. 最新のイメージをプルする:

  docker compose -f docker-compose.production.yml pull
  

2. アプリコンテナを再作成する:

  docker compose -f docker-compose.production.yml up -d
  

Dockerはイメージが変更されたコンテナのみを置き換えます。MySQLコンテナとすべての名前付きボリュームは影響を受けません。

バージョンの固定

latestではなく特定のバージョンにアップグレードするには、.envRTCLOUD_IMAGEを更新する:

  RTCLOUD_IMAGE=rtawebteam/rta-smartsurvey:1.2.3
  

その後、上記のようにdocker compose pullup -dを実行します。

ダウングレード

データベースマイグレーションは元に戻せないため、ダウングレードは一般的に推奨されません。ダウングレードが必要な場合は、アップグレード前に取得したデータベースバックアップから復元してください。


バックアップと復元

データベースのバックアップ

このコマンドを実行してアプリケーションデータベースをSQLファイルにエクスポートします:

  docker compose -f docker-compose.production.yml exec mysql \
  mysqldump -u root -p"$(grep MYSQL_ROOT_PASSWORD .env | cut -d= -f2)" smartsurvey \
  > backup-$(date +%Y%m%d-%H%M%S).sql
  

バックアップファイルはホストの現在のディレクトリに書き込まれます。

データベースの復元

  docker compose -f docker-compose.production.yml exec -T mysql \
  mysql -u root -p"$(grep MYSQL_ROOT_PASSWORD .env | cut -d= -f2)" smartsurvey \
  < backup-20240101-120000.sql
  

アップロードファイルのバックアップ

調査の送信には、名前付きDockerボリュームに保存されたアップロードファイル(写真、音声、ドキュメント)が含まれることが多いです。データベースとは別にバックアップしてください:

  # アップロードのバックアップ
docker run --rm \
  -v rtcloud_uploads:/data \
  -v "$(pwd):/backup" \
  alpine tar czf /backup/uploads-$(date +%Y%m%d).tar.gz -C /data .

# 音声録音のバックアップ
docker run --rm \
  -v rtcloud_audios:/data \
  -v "$(pwd):/backup" \
  alpine tar czf /backup/audios-$(date +%Y%m%d).tar.gz -C /data .
  

デフォルトを変更した場合は、rtcloud_uploadsrtcloud_audiosを実際のボリューム名(COMPOSE_PROJECT_NAMEでプレフィックス)に置き換えてください。

アップロードファイルの復元

  docker run --rm \
  -v rtcloud_uploads:/data \
  -v "$(pwd):/backup" \
  alpine tar xzf /backup/uploads-20240101.tar.gz -C /data
  

自動日次バックアップ

ホストにcronジョブを追加してバックアップを自動的に実行します。crontab -eでrootのcrontabを編集する:

  # 毎日午前2時にデータベースをバックアップし、30日分の履歴を保持する
0 2 * * * cd /opt/rtcloud && docker compose -f docker-compose.production.yml exec -T mysql \
  mysqldump -u root -p"$(grep MYSQL_ROOT_PASSWORD .env | cut -d= -f2)" smartsurvey \
  > /backups/db-$(date +\%Y\%m\%d).sql && \
  find /backups -name "db-*.sql" -mtime +30 -delete
  

トラブルシューティング

アプリコンテナが起動しない

エラーメッセージのコンテナログを確認する:

  docker compose -f docker-compose.production.yml logs rtcloud
  

一般的な原因:

  • .envの環境変数が欠落しているか無効
  • MySQLがまだ準備できていない(60秒待ってから再確認)
  • ポートの競合 — 別のプロセスが既にAPP_PORTを使用している

MySQLが正常でない

  docker compose -f docker-compose.production.yml logs mysql
  

一般的な原因:

  • .envMYSQL_ROOT_PASSWORDが設定されていない
  • データボリュームの破損(まれ — df -hでディスクスペースを確認)

MySQLは初回起動時の初期化に30〜60秒かかる場合があります。失敗と判断する前に待って再確認してください。

ポートが既に使用中

.envAPP_PORTまたはSHINY_PORTを空きポートに変更してからコンテナを再作成する:

  docker compose -f docker-compose.production.yml up -d --force-recreate
  

ホストでポートを使用しているものを見つけるには:

  lsof -i :8080
  

400 CSRF Token Could Not Be Verified

このエラーは、リクエストのオリジンが期待されるホストと一致しないローカルまたはリバースプロキシ環境で表示されます。ローカル開発のみCSRF検証を無効にする:

  CSRF_VALIDATION_ENABLED=false
  

その後アプリを再起動する:

  docker compose -f docker-compose.production.yml up -d --force-recreate rtcloud
  

本番環境ではCSRF検証を無効にしないでください。本番環境でこのエラーが発生した場合は、リバースプロキシが正しいHostX-Forwarded-Forヘッダーを転送していることを確認してください。

管理者パスワードを忘れた

データベースで直接管理者パスワードをリセットします。MySQLコンテナに接続してパスワードハッシュを更新する:

ステップ1 — 新しいパスワードハッシュを生成する。newpasswordを希望のパスワードに置き換える:

  docker compose -f docker-compose.production.yml exec rtcloud php -r "
  \$salt = trim(shell_exec(\"mysql -h mysql -u root -p\\\"\${MYSQL_ROOT_PASSWORD}\\\" \${MYSQL_DATABASE} -se \\\"SELECT salt FROM ss_user WHERE username='admin';\\\"\"));
  echo md5(\$salt . 'newpassword') . PHP_EOL;
"
  

ステップ2 — データベースのハッシュを更新する:

  docker compose -f docker-compose.production.yml exec mysql \
  mysql -u root -p"${MYSQL_ROOT_PASSWORD}" smartsurvey \
  -e "UPDATE ss_user SET password='<hash_from_step_1>' WHERE username='admin';"
  

コンテナが再起動し続ける

ヘルスチェックが失敗しているか確認する:

  docker compose -f docker-compose.production.yml ps
docker inspect rtcloud-app --format '{{json .State.Health}}'
  

アプリのヘルスチェックは/healthエンドポイントを呼び出します。繰り返し失敗する場合は、アプリケーションログで起動エラーを確認してください。

ディスクスペースが満杯

スペースを消費しているものを特定する:

  # ホストのディスク使用量を確認する
df -h

# Dockerのディスク使用量を確認する(イメージ、コンテナ、ボリューム)
docker system df

# 未使用のイメージと停止したコンテナを削除する(安全に実行可能)
docker system prune
  

docker system prune --volumesは使用しないでください — アプリケーションデータが削除されます。


ヘルスチェック

各サービスには自動ヘルスチェックがあります。コンテナのステータスは結果を反映します:

コンテナチェック方法開始期間間隔
rtcloud-appHTTP GET /health90秒30秒
rtcloud-mysqlmysqladmin ping30秒10秒
rtcloud-keycloakHTTP GET :9000/health/live120秒30秒

ヘルスチェックが失敗したコンテナはRESTART_POLICY設定(デフォルト:unless-stopped)に従って自動的に再起動されます。

このページは役に立ちましたか?