これまでのログでは、PixelmonサーバーのWSL2 + Docker移行と、FiveMサーバーのIaC構築をそれぞれ進めてきました。
本記事では、Minecraft側データ、FiveM側データ、Ansible構成、バックアップファイルが混在しないよう、ローカルサーバー環境全体のディレクトリ構成を整理します。
1. WSL2上のローカルサーバー環境の整理
Pixelmon の WSL2 + Docker 移行、Mirrored モードによるネットワーク経路の整理、バックアップ手順の Playbook 化を進める中で、Minecraft 側のデータ、FiveM 側のデータ、Ansible の構成ファイル、バックアップや移行用アーカイブが混在しやすくなっていました。
FiveM と Minecraft(Pixelmon)を同じ WSL2 環境で運用していく中で、IaC用のコード、コンテナが扱う永続データ、バックアップや移行用データの置き場所が混ざると、どこを編集すべきか、どこを保護すべきかが分かりづらくなります。
そこで今回は、ローカルサーバー環境全体のディレクトリ構成を見直し、再生成できるものと消してはいけないものを分離しました。この記事では、その整理後の構成と運用ルールを記録します。
本記事では、ディレクトリ構成を STRUCTURE、Ansible や Docker Compose などの設定定義を CONFIG として分けて記録します。
2. 整理後の全体構成
現在のホームディレクトリ配下は、次の3つの役割に分かれています。
/home/haruuu/
├── projects/ # IaC(Ansible / docker-compose)
├── services/ # 実データ(FiveM / Minecraft)
└── archives/ # 長期保管projects は Ansible やテンプレートなど、構成を再現するためのコード置き場です。services は FiveM / Minecraft の稼働に必要な永続データ置き場です。archives は移行元データや長期保管用ファイルの退避先として使います。
3. projectsに集約するIaCと構成管理
projects 配下には、Ansibleベースの構成管理用ディレクトリを集約しています。
/home/haruuu/projects
├── ansible-docker
│ └── docker-install.yml
├── ansible-fivem
│ ├── docker-compose.yml
│ ├── hosts
│ ├── roles
│ │ └── fivem
│ └── site.yml
├── ansible-minecraft
│ ├── backup.yml
│ ├── hosts
│ ├── roles
│ │ └── pixelmon
│ └── site.yml
└── memo.mdここでは、Docker自体の構築、FiveM環境のデプロイ、Minecraft環境のデプロイとバックアップ処理をそれぞれ分離しています。
// 1. ansible-docker
Dockerエンジンを Rocky Linux 上へ導入するための Playbook を配置しています。WSL2 上で systemd を有効化したあと、Docker サービスを自動起動できる状態を整えるための役割です。
// 2. ansible-fivem
FiveM と MariaDB を起動するための Playbook、role、template を配置しています。Ansible は FiveM 用の永続データディレクトリを作成し、docker-compose.yml を生成したうえで、Docker Compose による起動までを担当します。
// 3. ansible-minecraft
Pixelmon サーバー用の Playbook、role、template、vars を配置しています。さらに、backup.yml によりバックアップ処理も IaC 側で管理しています。
4. servicesに集約するFiveMとMinecraftの永続データ
services 配下には、コンテナ削除後も残すべき実データを集約しています。
/home/haruuu/services
├── fivem
│ ├── backups
│ └── data
│ ├── mysql
│ ├── server
│ └── txData
└── minecraft
├── backups
└── pixelmon
└── data
└── serverこの構成により、コンテナ本体は作り直しても、FiveM の server.cfg や resources、txAdmin データ、MariaDB のデータ、Minecraft の world / mods / config / logs を維持しやすくなりました。
5. txAdminとMariaDBを含むFiveM環境
FiveM 環境は、fivem-server と fivem-mariadb の2コンテナ構成です。Ansible はまず永続データ用ディレクトリを作成し、その後に Compose 定義を配置して起動します。
// 1. Ansibleが担当する処理
- name: FiveM用データディレクトリを作成する
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: haruuu
group: haruuu
mode: '0755'
loop:
- "/home/haruuu/services/fivem/data/server"
- "/home/haruuu/services/fivem/data/txData"
- "/home/haruuu/services/fivem/data/mysql"
- name: docker-compose.yml を配置する
ansible.builtin.template:
src: docker-compose.yml.j2
dest: "/home/haruuu/projects/ansible-fivem/docker-compose.yml"
owner: haruuu
group: haruuu
mode: '0644'
- name: FiveMコンテナ(txAdmin + MariaDB)を起動する
ansible.builtin.shell:
cmd: docker compose up -d
args:
chdir: "/home/haruuu/projects/ansible-fivem"
become: yesFiveM 側では、Compose ファイルの生成と起動は projects/ansible-fivem 側で行います。
// 2. Composeの実体
services:
fivem:
image: spritsail/fivem:latest
container_name: fivem-server
restart: unless-stopped
stdin_open: true
tty: true
ports:
- "30120:30120/tcp"
- "30120:30120/udp"
- "40120:40120/tcp"
environment:
- TZ=Asia/Tokyo
- NO_DEFAULT_CONFIG=1
- NO_LICENSE_KEY=1
volumes:
- /home/haruuu/services/fivem/data/server:/config
- /home/haruuu/services/fivem/data/txData:/txData
deploy:
resources:
limits:
memory: 4G
depends_on:
- mariadb
mariadb:
image: mariadb:10.6
container_name: fivem-mariadb
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=<DB_ROOT_PASSWORD>
- MYSQL_DATABASE=HaruuuCore
- TZ=Asia/Tokyo
# MariaDB は FiveM コンテナから Docker network 経由で接続するため、
# 外部公開用の ports は記事例では省略しています。
volumes:
- /home/haruuu/services/fivem/data/mysql:/var/lib/mysqlFiveM の設定本体は /config、txAdmin 関連は /txData、MariaDB の実データは /var/lib/mysql を通して、それぞれ services/fivem/data 配下へ保存します。MariaDB はコンテナ間通信で利用するため、外部公開する必要がある場合を除き、ホスト側へDBポートを公開しない方針です。
// 3. runtime側で管理するもの
/home/haruuu/services/fivem/data
├── mysql
├── server
│ ├── server.cfg
│ ├── resources
│ ├── cache
│ └── 各種設計メモ
└── txDataFiveM 側の runtime 領域には、server.cfg、resources、txAdmin データ、MariaDB データが含まれます。HaruuuCore の resources もここで管理しています。
6. runtime側に集約するPixelmonの実データ
Minecraft(Pixelmon)環境も、永続データを services 側へ集約しています。ただし FiveM と異なり、Compose ファイル自体も runtime 側の data/server ディレクトリへ配置している点が特徴です。
// 1. Ansibleが担当する処理
- name: Ensure base directory exists
ansible.builtin.file:
path: "{{ base_dir }}"
state: directory
mode: '0755'
- name: Check if migration archive exists
ansible.builtin.stat:
path: "{{ migration_archive }}"
register: archive_stat
- name: Extract migration data to base directory
ansible.builtin.unarchive:
src: "{{ migration_archive }}"
dest: "{{ base_dir }}"
remote_src: yes
when: archive_stat.stat.exists
- name: Deploy docker-compose.yml from template
ansible.builtin.template:
src: docker-compose.yml.j2
dest: "{{ data_dir }}/docker-compose.yml"
mode: '0644'
- name: Start Pixelmon container via Docker Compose
ansible.builtin.shell:
cmd: "docker compose up -d"
chdir: "{{ data_dir }}"
become: yes移行アーカイブが存在する場合は、Ansible がこれを展開したうえで、runtime 側へ Compose ファイルを配置し、その場所で起動します。
// 2. Composeの実体
services:
pixelmon:
image: itzg/minecraft-server
container_name: pixelmon-server
ports:
- "25577:25565"
environment:
EULA: "TRUE"
TYPE: "NEOFORGE"
VERSION: "1.21.1"
MEMORY: "6G"
ENABLE_ROLLING_LOGS: "true"
volumes:
- "/home/haruuu/services/minecraft/pixelmon/data/server:/data"
restart: unless-stoppedMinecraft 側は、world、mods、config、logs を含むサーバーデータ一式を /data としてマウントしています。
// 3. runtime側で管理するもの
/home/haruuu/services/minecraft/pixelmon/data/server
├── docker-compose.yml
├── server.properties
├── mods
├── config
├── logs
└── worldFiveM と同様に、コンテナ本体ではなく、運用上重要なファイル群はすべてホスト側へ残す構成です。
7. バックアップ方針
現在は、Minecraft と FiveM でバックアップ方針を分けています。
// 1. Pixelmon:Ansibleでバックアップ手順をPlaybook化
Pixelmon 側は backup.yml により、コンテナ停止、圧縮、再起動、古いバックアップ削除までの手順を Playbook として管理しています。
- name: Create backup directory
ansible.builtin.file:
path: "{{ ansible_env.HOME }}/services/minecraft/backups"
state: directory
mode: '0755'
- name: Stop Pixelmon container safely
ansible.builtin.shell:
cmd: "docker compose stop"
chdir: "{{ data_dir }}"
become: yes
- name: Compress Pixelmon server data
ansible.builtin.shell:
cmd: "tar -czf {{ ansible_env.HOME }}/services/minecraft/backups/pixelmon_backup_{{ timestamp.stdout }}.tar.gz -C {{ base_dir }}/data 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 }}/services/minecraft/backups"
patterns: "pixelmon_backup_*.tar.gz"
age: "7d"ここでの自動化は、定期実行まで含めた完全自動化ではなく、停止、圧縮、再起動、古いバックアップ確認までの手順を Playbook として再利用できる状態にしたものです。
// 2. FiveM:停止状態で手動取得
FiveM 側は、現時点では手動バックアップ運用です。バックアップは ~/services/fivem/backups/ に保存しています。
FiveM では MariaDB を含むため、取得時はコンテナ停止状態でフルバックアップを取る方針にしています。
8. この構成のメリット
今回の整理で特に大きかったメリットは、次の4点です。
- IaCと永続データの境界が明確になる:
projectsは再生成可能な構成、servicesは保護すべき実データとして整理できます。 - コンテナ再作成に強い: bind mount により、FiveM / Minecraft ともにデータを維持したまま再デプロイしやすくなります。
- バックアップ対象が判断しやすい: 基本的に
services配下を中心に保護すべき領域だと整理できます。 - 複数サーバーを同じWSL2上で管理しやすい: FiveM と Minecraft を同居させつつ、責務単位で分離できます。
9. 注意点とデメリット
一方で、この構成にはいくつか注意点もあります。
- MariaDBのデータディレクトリは直接編集しない:
services/fivem/data/mysqlはコンテナ管理領域のため、ホスト側から直接触らない方針です。 - sudo操作後の所有権ズレに注意する: root 所有のファイルが混ざると、通常ユーザーでの編集や管理がしづらくなります。
- FiveMとMinecraftは同時起動しない: 現時点では排他制御を自動化していないため、手動で運用します。
- IaC側とruntime側の修正対象を意識する必要がある: Compose や Ansible を直すのか、server.cfg や resources を直すのかを混同しないようにします。
- FiveMとMinecraftでComposeの置き場所が異なる: FiveM は
projects側、Minecraft はservices側に Compose があるため、起動コマンドを混同しないよう注意が必要です。
10. 現在の運用ルール
現時点の運用ルールは次の通りです。
- コードや設定の編集:
haruuuユーザーで実施します。 - Docker操作:
sudoを使って実行します。 - MariaDBデータ: ホスト側から直接編集しません。
- FiveMとMinecraftの同時起動: 行いません。
- バックアップ: Pixelmon は Playbook、FiveM は停止時の手動取得で対応します。
11. まとめ
今回の整理では、WSL2 上のローカルサーバー環境を projects・services・archives に分離し、IaC と永続データの責務を明確化しました。
これにより、Pixelmon 移行直後の暫定的な配置や、FiveM 構築時の個別ディレクトリ管理を、ローカルサーバー全体の標準構成として整理できました。
この構成により、再生成できるものと保護すべきものを区別しやすくなり、FiveM と Minecraft の両方を同じ環境で管理しやすくなりました。今後はこの土台を前提として、FiveM 側の server.cfg や resources の整理、ゲームシステム設計を進めていきます。