0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntu 24.04 + Docker で Moodle 4.5 を構築する完全ガイド

0
Posted at

「Moodle を自前で構築したいけれど、環境構築が難しそう…」と感じていませんか?

Docker を使えば、Moodle の構築は驚くほどシンプルになります。依存関係の解決やバージョン管理を Docker が引き受けてくれるため、クリーンな環境を素早く立ち上げられます。また、構築した環境をそのまま移植・複製できるのも大きなメリットです。

この記事では、Ubuntu 24.04 LTS 上に Docker + Docker Compose を使って Moodle 4.5(LTS)を構築する手順を、ゼロから丁寧に解説します。Docker の基本を知っている方はもちろん、「Moodle は初めて」という方でも迷わず進められるよう、各コマンドの意味も補足しながら進めます。

この記事を読み終えると、以下ができるようになります。

  • Ubuntu 24.04 上に Docker で Moodle 4.5 を起動できる
  • docker-compose.yml の構成と各設定値の意味がわかる
  • 本番運用に向けた次のステップがわかる

この記事の前提条件・動作環境

本記事は以下の環境で動作を確認しています。環境が異なる場合は適宜読み替えてください。

項目 バージョン・詳細
OS Ubuntu 24.04 LTS (Noble Numbat)
Docker 26.x 以上
Docker Compose v2.x(compose コマンド形式)
Moodle 4.5(LTS)
データベース MariaDB 10.6 以上
推奨メモリ 2GB 以上(本番環境は 4GB 推奨)
推奨ストレージ 20GB 以上の空き容量

本記事では docker compose(スペースあり)コマンドを使用します。古い環境では docker-compose(ハイフンあり)コマンドが必要な場合があります。docker compose version で確認してください。

また、以下の知識があることを前提としています。

  • Linux の基本コマンド操作(cd・mkdir・vi / nano など)
  • Docker の基本概念(イメージ・コンテナ・ボリュームの違い)

Docker をまだインストールしていない方は、次のセクションから進めてください。すでにインストール済みの方は「docker-compose.yml の作成」まで読み飛ばして構いません。

筆者の動作環境

筆者は自宅のミニPC(GEEKOM A8)で本記事の手順を検証しています。

項目 詳細
機種 GEEKOM A8
CPU AMD Ryzen 9 8945HS
メモリ 24GB
ストレージ 1TB NVMe SSD
OS Ubuntu 24.04 LTS

GEEKOM A8 ミニPC Ubuntu 24.04 Moodle 検証環境

ミニPCは消費電力が低く静音性も高いため、自宅サーバーとして Moodle を常時稼働させるのに非常に適しています。VPS を借りるコストを抑えたい方や、手元で検証環境を持ちたい方にもおすすめです。

Step 1 | Docker・Docker Compose のインストール

すでに Docker・Docker Compose をインストール済みの方は、次の「docker-compose.yml の作成」までスキップしてください。

Ubuntu 24.04 では、apt の公式リポジトリから Docker をインストールするのが最も確実です。以下の手順を順番に実行してください。

Docker のインストール手順

まず、既存の古い Docker パッケージをアンインストールします(クリーンな環境であれば不要ですが、念のため実行してください)。

# 古いパッケージの削除
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
  sudo apt-get remove $pkg
done

次に、Docker 公式リポジトリを追加してインストールします。

# 必要なパッケージのインストール
sudo apt-get update
sudo apt-get install -y ca-certificates curl

# Docker の GPG キーを追加
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Docker リポジトリを追加
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
  https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Docker のインストール
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

インストール後、動作確認をします。

# バージョン確認
docker --version
# Docker version 26.x.x, build xxxxxxx

# sudo なしで実行できるようにする(再ログイン後に有効)
sudo usermod -aG docker $USER
newgrp docker

# 動作確認
docker run hello-world
# Hello from Docker! と表示されれば成功

sudo usermod -aG docker $USER を実行後、一度ログアウト→再ログインすることで sudo なしで docker コマンドが使えるようになります。

Docker Compose のインストール確認

Docker Compose v2 は docker-compose-plugin に含まれているため、前の手順でインストール済みです。以下で確認してください。

# Docker Compose のバージョン確認
docker compose version
# Docker Compose version v2.x.x と表示されれば OK

docker-compose(ハイフンあり)ではなく docker compose(スペースあり)で実行します。v1 系の docker-compose コマンドは非推奨のため本記事では使用しません。

Step 2 | 設定ファイルの作成

今回は2つのファイルを作成します。

ファイル名 役割
Dockerfile MoodleとPHPの環境をまとめて構築する設計図
docker-compose.yml DockerにMoodleとデータベースの起動方法を伝える設定ファイル

Dockerfile と docker-compose.yml の作成

作業ディレクトリを作成して、Dockerfile と docker-compose.yml を配置します。

ディレクトリ構成

今回は以下のディレクトリ構成で進めます。

~/moodle-docker/
├── Dockerfile           # 必要なコンポーネントをビルドするための設定ファイル
├── docker-compose.yml   # コンテナ定義ファイル
├── .env                 # 環境変数(パスワードなど)
└── moodledata/          # Moodle のデータ保存先(自動生成)

ディレクトリを作成します。

mkdir ~/moodle-docker
cd ~/moodle-docker

パスワードは必ず任意の強力なものに変更してください。.env ファイルは Git 管理に含めないよう .gitignore に追加することを強くおすすめします。

Dockerfile の全コード

以下の内容で docker-compose.yml を作成します。

nano Dockerfile
FROM php:8.3-apache

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        unzip git curl \
        libzip-dev libjpeg-dev libpng-dev \
        libfreetype6-dev libicu-dev libxml2-dev \
        libonig-dev && \
    docker-php-ext-configure gd --with-freetype --with-jpeg && \
    docker-php-ext-install \
        mysqli zip gd intl soap exif mbstring xml && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

RUN echo "max_input_vars = 5000" > /usr/local/etc/php/conf.d/moodle.ini && \
    echo "upload_max_filesize = 100M" >> /usr/local/etc/php/conf.d/moodle.ini && \
    echo "post_max_size = 110M" >> /usr/local/etc/php/conf.d/moodle.ini && \
    echo "memory_limit = 256M" >> /usr/local/etc/php/conf.d/moodle.ini

RUN git clone --depth=1 -b MOODLE_405_STABLE \
    https://github.com/moodle/moodle.git /var/www/html && \
    chown -R www-data:www-data /var/www/html

RUN mkdir -p /var/www/moodledata && \
    chown -R www-data:www-data /var/www/moodledata && \
    chmod 0777 /var/www/moodledata

RUN sed -i 's/AllowOverride None/AllowOverride All/g' \
    /etc/apache2/apache2.conf && \
    a2enmod rewrite

EXPOSE 80

docker-compose.yml の全コード

以下の内容で docker-compose.yml を作成します。

nano docker-compose.yml
services:
  moodle45_db:
    image: mariadb:10.11
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword # ①変更してください
      MYSQL_DATABASE: moodle45
      MYSQL_USER: moodleuser
      MYSQL_PASSWORD: moodlepassword # ②変更してください
      MYSQL_CHARACTER_SET_SERVER: utf8mb4
      MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci
    volumes:
      - moodle_db_data:/var/lib/mysql

  moodle:
    build: .
    restart: unless-stopped
    ports:
      - "8045:80"
    depends_on:
      - moodle45_db
    environment:
        MOODLE_DB_HOST: moodle45_db
        MOODLE_DB_NAME: moodle45
        MOODLE_DB_USER: moodleuser
        MOODLE_DB_PASSWORD: moodlepassword # 上の②と同じにします。 
        MOODLE_DB_TYPE: mariadb
    volumes:
      - moodle_data:/var/www/moodledata

volumes:
  moodle_db_data:
  moodle_data:

ここまでで、Docker インストールから Dockerfile、および docker-compose.yml までの本文ができました。

Step 3 | Moodle を起動する

Dockerfile、docker-compose.yml と .env の準備ができたら、Moodle を起動します。

docker compose up -d --build

初回のみ --build オプションが必要です。2回目以降の起動は docker compose up -d だけで大丈夫です。-d オプションはバックグラウンドで起動させるためにつけます。
--build オプションを付けるとMoodleのプログラム一式をダウンロード・構築するため、10〜20分程度かかります。

# ログをリアルタイムで確認(Ctrl+C で終了)
docker compose logs -f moodle

こんな感じの画面が表示されたら完了です。
ログ表示

動作確認

セットアップ完了後、ブラウザで以下にアクセスします。

Moodle のログイン画面が表示されれば成功です。.env で設定した管理者アカウントでログインしてください。

  • ユーザー名:MOODLE_ADMIN で設定した値(例:admin)
  • パスワード:MOODLE_ADMIN_PASSWORD で設定した値

ログイン後、サイト管理画面が表示されれば構築完了です。

VPS やリモートサーバーで構築した場合は localhost の部分をサーバーの IP アドレスに置き換えてください(例:http://203.0.113.1:8045)。

本番運用に向けた追加設定(概要)

ローカル環境での動作確認ができたら、本番運用に向けて以下の設定を行います。詳細は別記事で解説予定です。

  • SSL(HTTPS)化:Nginx リバースプロキシ + Let's Encrypt で対応
  • メール送信:Moodle 管理画面の「サイト管理 → サーバー → メール → 送信メール設定」で SMTP サーバーを設定
  • 定期バックアップ:docker compose exec でダンプを取得するスクリプトを cron で定期実行

本番環境では MOODLE_SITE_URL を実際のドメイン(https://moodle.example.com など)に変更することを忘れないでください。URL が一致しないとリダイレクトループが発生します。

よくあるトラブルと解決方法

私が実際に構築している途中で遭遇したエラーと対処法をまとめておきます。

1. ポートが既に使われています。(Port is already allocated)

エラーメッセージ

Error response from daemon: driver failed programming external connectivity: Bind for 0.0.0.0:8080 failed: port is already allocated

原因と対処
8045番ポートが他のプロセスに使用されています。以下で使用中のプロセスを確認して停止するか、docker-compose.yml のポート番号を変更してください。

# 使用中のポートを確認
sudo lsof -i :8045

# ポートを変更する場合(例:8080に変更)
ports:
  - "8080:8045"

2. moodledata への書き込み権限エラー

エラーメッセージ

Could not create directory. Check permissions.

原因と対処
moodledataフォルダの権限が不足している場合が多いです。以下のコマンドで修正します。

# ボリュームの権限を修正
docker compose exec moodle chown -R daemon:daemon /bitnami/moodledata

3. データベースへの接続エラー (Can't connect to MySQL server)

原因と対処
DB コンテナの起動が Moodle より遅れている場合に発生します。depends_on の設定は確認してください。それでも発生する場合は以下で DB の状態を確認します。

# DB コンテナのログ確認
docker compose logs db

# DB だけ先に起動してから Moodle を起動
docker compose up -d db
sleep 30
docker compose up -d moodle

まとめ

この記事では、Ubuntu 24.04 + Docker + Docker Compose を使って Moodle 4.5 を構築する手順を解説しました。

この記事でできたこと:

・Docker・Docker Compose のインストール
・Dockefile, docker-compose.yml による Moodle + MariaDB の構成
・Moodle 4.5 の起動と動作確認
・よくあるトラブルへの対処法の把握

Docker を使うことで、環境の再現性が高まり、本番移行や複数環境の管理がシンプルになります。一度構築してしまえば docker compose up -d の1コマンドで起動できるのも大きなメリットです。

次回は「Nginx リバースプロキシ + Let's Encrypt で Moodle を HTTPS 化する」手順を解説予定です。本番運用を考えている方はあわせてご覧ください。


※ この記事は Zenn (rublix) にも投稿しています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?