マイクラ Docker-Compose マルチサーバー:watchtower 自動アップデート&TCP-Proxy 完全ガイド

マイクラ Docker-Compose マルチサーバー:watchtower 自動アップデート&TCP-Proxy 完全ガイド






マイクラ Docker-Compose マルチサーバー:watchtower 自動アップデート&TCP-Proxy 完全ガイド


マイクラ Docker-Compose マルチサーバー

watchtower 自動アップデート&TCP-Proxy 完全ガイド

2025年7月最新情報

Docker-Composeを使ったマインクラフトマルチサーバー構築の最新手法を解説。watchtowerによる自動アップデート機能や.env共有設定まで網羅的に紹介します。

マインクラフトサーバーの運用で最も面倒な作業の一つが、定期的なアップデートです。Docker-Composeとwatchtowerを組み合わせることで、完全に自動化された安定したマルチサーバー環境を構築できます。

目次

Docker-Compose マルチサーバー構築の基本概念

なぜDocker-Composeを使うのか

従来のMinecraftサーバー運用では、バージョンアップのたびに手動でjarファイルを更新し、設定ファイルをバックアップしてサーバーを再起動する必要がありました。Docker-Composeを使用することで、これらの作業がすべて自動化されます。

Docker-Composeの主なメリット

  • 複数のサーバーを一元管理
  • 設定ファイルの統一管理
  • ワンコマンドでの起動・停止
  • 自動アップデート機能

マルチサーバー構成の設計

効率的なマルチサーバー環境を構築するには、以下の要素を考慮する必要があります:

プロキシサーバー

Velocity/BungeeCord

ゲームサーバー

Survival/Creative/Mini-games

データベースサーバー

MySQL/PostgreSQL

監視・管理システム

Watchtower

watchtower 自動アップデート設定

watchtowerの基本設定

watchtowerは、稼働中のコンテナと元になったコンテナイメージを監視し、イメージの更新を検知して自動的にアップデートを実行するツールです。

version: '3.8'

services:
  watchtower:
    container_name: minecraft_watchtower
    image: containrrr/watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Asia/Tokyo
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_POLL_INTERVAL=3600
      - WATCHTOWER_INCLUDE_RESTARTING=true
      - WATCHTOWER_NOTIFICATIONS=discord
      - WATCHTOWER_NOTIFICATION_URL=${DISCORD_WEBHOOK_URL}

高度な自動アップデート設定

設定項目 説明 推奨値
WATCHTOWER_CLEANUP 古いイメージの自動削除 true
WATCHTOWER_POLL_INTERVAL チェック間隔(秒) 3600(1時間)
WATCHTOWER_SCHEDULE Cronスケジュール 0 0 2 * * *(毎日2時)
WATCHTOWER_MONITOR_ONLY 監視のみ(更新なし) false

TCP-Proxy 設定と負荷分散

HAProxy による負荷分散

複数のMinecraftサーバーを効率的に管理するには、TCP-Proxyを使用した負荷分散が重要です。

  haproxy:
    image: haproxy:2.8
    container_name: minecraft_proxy
    ports:
      - "25565:25565"
    volumes:
      - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
    depends_on:
      - survival
      - creative
      - minigames
    restart: unless-stopped

HAProxy設定ファイル

global
    daemon

defaults
    mode tcp
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

frontend minecraft_frontend
    bind *:25565
    default_backend minecraft_servers

backend minecraft_servers
    balance roundrobin
    server survival survival:25565 check
    server creative creative:25566 check
    server minigames minigames:25567 check

.env 共有設定とセキュリティ

環境変数の一元管理

# .env ファイル
MINECRAFT_VERSION=1.20.4
MEMORY_LIMIT=2G
MAX_PLAYERS=50
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
MYSQL_ROOT_PASSWORD=secure_password_here
MYSQL_DATABASE=minecraft_db
MYSQL_USER=minecraft_user
MYSQL_PASSWORD=another_secure_password

重要

.envファイルは機密情報を含むため、.gitignoreに追加し、適切な権限設定(chmod 600)を行ってください。

完全なDocker-Compose構成

メインのdocker-compose.yml

version: '3.8'

services:
  # Velocity プロキシサーバー
  velocity:
    image: itzg/bungeecord
    container_name: minecraft_velocity
    environment:
      TYPE: VELOCITY
      MEMORY: 512m
    ports:
      - "25565:25577"
    volumes:
      - ./velocity:/server
    restart: unless-stopped

  # サバイバルサーバー
  survival:
    image: itzg/minecraft-server
    container_name: minecraft_survival
    environment:
      EULA: "true"
      TYPE: PAPER
      VERSION: ${MINECRAFT_VERSION}
      MEMORY: ${MEMORY_LIMIT}
      MAX_PLAYERS: ${MAX_PLAYERS}
      MOTD: "§aSurvival Server"
      LEVEL: survival_world
      DIFFICULTY: normal
      GAMEMODE: survival
      PVP: "true"
      ONLINE_MODE: "false"
    volumes:
      - ./survival:/data
    restart: unless-stopped
    depends_on:
      - mysql

  # クリエイティブサーバー
  creative:
    image: itzg/minecraft-server
    container_name: minecraft_creative
    environment:
      EULA: "true"
      TYPE: PAPER
      VERSION: ${MINECRAFT_VERSION}
      MEMORY: ${MEMORY_LIMIT}
      MAX_PLAYERS: ${MAX_PLAYERS}
      MOTD: "§bCreative Server"
      LEVEL: creative_world
      DIFFICULTY: peaceful
      GAMEMODE: creative
      PVP: "false"
      ONLINE_MODE: "false"
    volumes:
      - ./creative:/data
    restart: unless-stopped

  # データベースサーバー
  mysql:
    image: mysql:8.0
    container_name: minecraft_mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - ./mysql:/var/lib/mysql
    restart: unless-stopped
    ports:
      - "3306:3306"

  # 自動アップデート
  watchtower:
    image: containrrr/watchtower
    container_name: minecraft_watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Asia/Tokyo
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_POLL_INTERVAL=3600
      - WATCHTOWER_NOTIFICATIONS=discord
      - WATCHTOWER_NOTIFICATION_URL=${DISCORD_WEBHOOK_URL}
    restart: unless-stopped

運用とメンテナンス

起動と停止コマンド

# 全サーバーの起動
docker-compose up -d

# 特定のサーバーのみ起動
docker-compose up -d survival

# 全サーバーの停止
docker-compose down

# ログの確認
docker-compose logs -f survival

バックアップスクリプト

#!/bin/bash
# backup.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/minecraft_${DATE}"

mkdir -p ${BACKUP_DIR}
cp -r ./survival ${BACKUP_DIR}/
cp -r ./creative ${BACKUP_DIR}/
cp -r ./velocity ${BACKUP_DIR}/

tar -czf ${BACKUP_DIR}.tar.gz ${BACKUP_DIR}
rm -rf ${BACKUP_DIR}

echo "Backup completed: ${BACKUP_DIR}.tar.gz"

トラブルシューティング

よくある問題と解決方法

問題 原因 解決方法
サーバーが起動しない メモリ不足 MEMORY設定を確認し、適切な値に変更
プレイヤーが接続できない ポート開放問題 ファイアウォール設定を確認
自動アップデートが動作しない watchtower設定問題 Docker sockのマウントを確認

パフォーマンス最適化

JVMチューニング

JVM_OPTS: >-
  -Xms2G -Xmx2G
  -XX:+UseG1GC
  -XX:+ParallelRefProcEnabled
  -XX:MaxGCPauseMillis=200
  -XX:+UnlockExperimentalVMOptions
  -XX:+DisableExplicitGC
  -XX:+AlwaysPreTouch
  -XX:G1NewSizePercent=30
  -XX:G1MaxNewSizePercent=40
  -XX:G1HeapRegionSize=8M
  -XX:G1ReservePercent=20
  -XX:G1HeapWastePercent=5
  -XX:G1MixedGCCountTarget=4
  -XX:InitiatingHeapOccupancyPercent=15
  -XX:G1MixedGCLiveThresholdPercent=90
  -XX:G1RSetUpdatingPauseTimePercent=5
  -XX:SurvivorRatio=32
  -XX:+PerfDisableSharedMem
  -XX:MaxTenuringThreshold=1

FAQ よくある質問

Q: watchtowerの更新頻度はどのくらいが適切ですか?

A: 本番環境では1日1回(深夜2時頃)、開発環境では1時間に1回程度が推奨されます。頻繁すぎると不安定になる可能性があります。

Q: 複数のサーバーで同じワールドを共有できますか?

A: 直接的な共有はできませんが、プラグインを使用してデータベース経由でプレイヤーデータを同期することは可能です。

Q: メモリ使用量を最適化する方法は?

A: JVMオプションの調整、不要なプラグインの削除、チャンクローディングの最適化が効果的です。

おすすめのMinecraftサーバー比較

Docker-Composeでマルチサーバーを構築する際は、適切なVPSサービスの選択が重要です。以下に主要なサービスを比較しました:

XServer VPS for Game

ゲーム専用に最適化されたVPSサービス。Minecraftサーバー構築が簡単で、高性能なCPUとSSDを標準装備。

  • 2GB~64GBメモリ
  • 高速SSD標準装備
  • Docker環境構築サポート

詳細を見る

ConoHa for GAME

時間単位で利用可能なゲーム特化VPS。初期費用無料で、スケーラブルなリソース配分が可能。

  • 時間単位課金
  • 自動バックアップ機能
  • 豊富なテンプレート

詳細を見る

LOLIPOP! for Gamers

ゲーマー向けに特化したロリポップのVPSサービス。コストパフォーマンスに優れ、初心者にも優しい管理画面。

  • 月額500円から
  • 直感的な管理画面
  • 24時間サポート

詳細を見る

カラフルボックス

高い安定性とセキュリティを誇るVPSサービス。Docker環境での運用に最適化されており、技術サポートも充実。

  • 99.9%稼働率保証
  • 無料SSL証明書
  • 専門技術サポート

詳細を見る


※本記事は2025年7月時点の情報に基づいて執筆されています。内容の正確性には万全を期していますが、最新情報は各公式サイトをご確認ください。


目次