前回のログでは、VirtualBox側に存在していたPixelmonサーバーデータをWSL2 + Docker環境へ移行し、コンテナ上での起動とログイン確認までを実施しました。
本記事では、移行後の継続運用に向けて、Mirroredネットワーク、Windows Firewall、不要ファイル整理、Ansibleによるバックアップ手順を整理します。
1. MirroredモードとWindows Firewallの整理
PixelmonサーバーをWSL2 + Docker環境へ移行した後、継続運用に向けてネットワーク経路の整理を行いました。 WSL2の標準構成ではNATモードで動作するため、起動タイミングによってWSL側のIPアドレスが変動し、LAN内接続やポート転送の管理が複雑になります。
本記事では、WSL2のMirroredモードを前提にしたネットワーク経路の整理、Windows Firewallの受信規則追加、VirtualBox時代の旧起動ファイル削除、AnsibleによるPixelmonバックアップ手順のPlaybook化を記録します。
// 1. WSL2のネットワークモード変更
WSL2のNATモードでは、WSL側のIPアドレスを前提にした接続経路を固定しづらくなります。
この運用上の扱いづらさを避けるため、%USERPROFILE%.wslconfig に networkingMode=mirrored を設定し、Windowsホスト側のネットワークを基準にした接続経路へ寄せました。
# %USERPROFILE%\.wslconfig
[wsl2]
networkingMode=mirroredこの設定により、WSL2側のIP変動を前提にした運用から、Windowsホスト側のネットワークを基準にした運用へ寄せることができます。 MinecraftサーバーのようにLAN内接続を前提にするサービスでは、接続経路の管理を単純化できる点が大きなメリットです。
// 2. Windows Firewallで25577/TCPを許可
Pixelmonサーバー側では、Minecraftの待ち受けポートを 25577 として運用しています。
Mirroredモードでネットワーク経路を整理しても、Windows側で受信規則が閉じているとLAN内端末から接続できません。
そのため、PowerShellからWindows Firewallに受信許可ルールを追加しました。
New-NetFirewallRule -DisplayName "Minecraft Server 25577" -Direction Inbound -LocalPort 25577 -Protocol TCP -Action Allow
Windows Firewallに Minecraft Server 25577 の受信許可ルールを追加
これにより、WSL2 + Docker側で起動しているPixelmonサーバーに対して、Windowsホスト側のネットワーク経路から接続できる状態を整えました。
2. VirtualBox時代の旧環境資産の整理
ネットワーク経路の整理に続いて、Pixelmonサーバーディレクトリに残っていた旧環境の起動ファイルを確認しました。 VirtualBox時代に使用していた手動起動用ファイルが残っていると、Docker Composeによる運用と手動起動が混在するリスクがあります。
// 1. 旧起動ファイルの確認
Pixelmonのサーバーディレクトリを確認したところ、旧環境で使用していた run.sh、run.bat、user_jvm_args.txt が残っていました。
これらを誤って実行すると、Docker Composeで管理しているサーバープロセスとは別に手動起動が走り、ワールドデータへの二重アクセスにつながる可能性があります。
ls -la ~/pixelmon-data/server
VirtualBox時代の起動ファイルが残っている状態
今後の起動・停止はDocker Compose側へ寄せるため、旧環境の起動ファイルを削除します。
cd ~/pixelmon-data/server
rm run.bat run.sh user_jvm_args.txt
ls -la
旧起動ファイルを削除し、Docker Compose運用に寄せた状態
3. Pixelmonバックアップ手順のPlaybook化
継続運用に向けて、Pixelmonサーバーのバックアップ手順をAnsible Playbookとして整理しました。 ここで実装したのは、定期実行まで含めた完全自動化ではなく、必要なタイミングで実行できるバックアップ手順のPlaybook化です。
// 1. バックアップ手順の定義
稼働中のサーバーデータをそのまま圧縮すると、書き込み途中のデータを含む可能性があります。 そのため、バックアップ手順は以下の流れにしました。
docker compose stopによるPixelmonコンテナの停止tarによるタイムスタンプ付きアーカイブの作成docker compose startによるPixelmonコンテナの再開- 7日より古いバックアップアーカイブの削除
これにより、停止、圧縮、再開、古いバックアップ削除を個別コマンドで実行するのではなく、1つのPlaybookとして扱えるようにします。
---
# ~/ansible-minecraft/backup.yml
- name: Backup Pixelmon Server Data
hosts: localhost
connection: local
vars_files:
- roles/pixelmon/vars/main.yml
tasks:
- name: Create backup directory
ansible.builtin.file:
path: "{{ ansible_env.HOME }}/pixelmon-backups"
state: directory
mode: '0755'
- name: Get current timestamp for backup file name
ansible.builtin.command: date +%Y%m%d_%H%M%S
register: timestamp
changed_when: false
- name: Stop Pixelmon container safely
ansible.builtin.shell:
cmd: "docker compose stop"
chdir: "{{ data_dir }}"
become: yes
- name: Compress server data using tar
ansible.builtin.shell:
cmd: "tar -czf {{ ansible_env.HOME }}/pixelmon-backups/pixelmon_backup_{{ timestamp.stdout }}.tar.gz -C {{ base_dir }} server"
- name: Restart Pixelmon container
ansible.builtin.shell:
cmd: "docker compose start"
chdir: "{{ data_dir }}"
become: yes
- name: Find backups older than 7 days
ansible.builtin.find:
paths: "{{ ansible_env.HOME }}/pixelmon-backups"
patterns: "pixelmon_backup_*.tar.gz"
age: "7d"
register: old_backups
- name: Remove old backups
ansible.builtin.file:
path: "{{ item.path }}"
state: absent
with_items: "{{ old_backups.files }}"4. backup.yml実行時のパス解決エラー
Playbookの初期実装では、権限昇格の扱いにより、想定していないパスを参照するエラーが発生しました。
Docker操作には管理者権限が必要ですが、Play全体に become: yes を適用すると、ユーザーのホームディレクトリではなく root 側のパスを基準に処理される場面があります。
// 1. /root/pixelmon-data/server を参照した失敗
実行ログでは、/root/pixelmon-data/server に移動しようとして失敗しています。
本来参照したいのは通常ユーザー側の ~/pixelmon-data/server であり、Play全体への権限昇格がパス解決に影響していました。
fatal: [localhost]: FAILED! => {
"changed": false,
"cmd": "docker compose stop",
"msg": "Unable to change directory before execution: [Errno 2] No such file or directory: b'/root/pixelmon-data/server'"
}
Play全体のbecomeにより、root側のパスを参照して失敗した状態
対応として、Play全体への become: yes は外し、Docker操作が必要なタスクにだけ become: yes を付与する形に変更しました。
これにより、バックアップ保存先や変数展開では通常ユーザー側のHOMEを維持しつつ、Docker操作のみ管理者権限で実行できるようにしています。
5. warnパラメータ廃止によるAnsible実行エラー
パス解決の問題を修正した後、次にAnsibleのモジュールパラメータに関するエラーが発生しました。 アーカイブ作成処理で旧来の警告抑制パラメータを利用していたため、現在のAnsibleではサポートされない指定として扱われました。
// 1. Unsupported parameters エラー
実行時には、warn パラメータがサポートされていないというエラーが表示され、バックアップ処理が途中で停止しました。
TASK [Compress server data using tar] ******************************************************
fatal: [localhost]: FAILED! => {
"changed": false,
"msg": "Unsupported parameters for (ansible.legacy.command) module: warn. Supported parameters include: _raw_params, _uses_shell, argv, chdir, creates, executable, removes, stdin, stdin_add_newline, strip_empty_ends."
}
warnパラメータが現在のAnsibleではサポートされず、実行エラーになった状態
対応として、非対応となっていた warn 指定を削除し、Playbookを再実行しました。
その後、コンテナ停止、アーカイブ作成、コンテナ再開、古いバックアップ確認まで一連の処理が完了することを確認しています。
6. バックアップ手順の実行確認
修正後のPlaybookを実行し、Pixelmonサーバーデータのバックアップ処理が完了することを確認しました。 この時点では、Cronやsystemd timerによる定期実行までは行わず、必要なタイミングでPlaybookを手動実行する運用としています。
// 1. Playbookの完了確認
実行結果では、バックアップディレクトリの作成、タイムスタンプ取得、コンテナ停止、圧縮、再起動、古いバックアップ確認までが完了しました。
古いバックアップ削除タスクの skipping は、削除対象が存在しない場合の正常な結果です。
ansible-playbook -i hosts backup.yml -K
バックアップ手順のPlaybookが完走した状態。削除対象がない場合はRemove old backupsがskippingとなる
実行後、バックアップ保存先にタイムスタンプ付きのアーカイブが生成されていることを確認しました。
ls -lh ~/pixelmon-backups
pixelmon-backups配下に2.1GBのバックアップアーカイブが生成された状態
これにより、Pixelmonサーバーのバックアップ作業は、個別コマンドを手作業で実行する状態から、Ansible Playbookとして再利用できる状態になりました。
7. ネットワークとバックアップ手順の整理完了
今回の作業では、WSL2 Mirroredモードを前提にしたネットワーク経路の整理、Windows Firewallの受信規則追加、VirtualBox時代の旧環境資産の削除、Pixelmonバックアップ手順のPlaybook化を行いました。
この段階で、PixelmonサーバーはWSL2 + Docker環境上で起動できるだけでなく、LAN内接続に向けた受信経路の整理、旧環境資産の削除、バックアップ手順の再利用まで進められる状態になりました。 一方で、バックアップの定期実行や、複数サーバーを見据えたディレクトリ全体の整理は、まだ次の運用課題として残っています。