HaRuuuBlog
DATE:2026/5/6

ローカルサーバー環境を整理する【IaCと永続データを分離】

これまでのログでは、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-serverfivem-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: yes

FiveM 側では、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/mysql

FiveM の設定本体は /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
│   └── 各種設計メモ
└── txData

FiveM 側の 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-stopped

Minecraft 側は、world、mods、config、logs を含むサーバーデータ一式を /data としてマウントしています。

// 3. runtime側で管理するもの

/home/haruuu/services/minecraft/pixelmon/data/server
├── docker-compose.yml
├── server.properties
├── mods
├── config
├── logs
└── world

FiveM と同様に、コンテナ本体ではなく、運用上重要なファイル群はすべてホスト側へ残す構成です。

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 上のローカルサーバー環境を projectsservicesarchives に分離し、IaC と永続データの責務を明確化しました。

これにより、Pixelmon 移行直後の暫定的な配置や、FiveM 構築時の個別ディレクトリ管理を、ローカルサーバー全体の標準構成として整理できました。

この構成により、再生成できるものと保護すべきものを区別しやすくなり、FiveM と Minecraft の両方を同じ環境で管理しやすくなりました。今後はこの土台を前提として、FiveM 側の server.cfg や resources の整理、ゲームシステム設計を進めていきます。

INDEX [BACK TO SECTION]