🐈

Omeka-S Docker環境を別サーバーに移行する完全ガイド

に公開

はじめに

本記事では、Docker ComposeでセットアップされたOmeka-S環境を、volumeデータを含めて別のサーバーに移行する手順を解説します。データの整合性を保ちながら、安全に移行作業を進めることができます。

環境

  • 移行元サーバー: Ubuntu 22.04
  • 移行先サーバー: Ubuntu 22.04(新規セットアップ)
  • 構成: Omeka-S + MariaDB + phpMyAdmin + Traefik + Mailpit

移行の流れ

  1. 移行元サーバーでのバックアップ
  2. ローカルマシンへのダウンロード
  3. 移行先サーバーのDocker環境セットアップ
  4. データの復元と起動

ステップ1: 移行元サーバーでのバックアップ

1.1 現在の環境確認

# 実行中のコンテナを確認
docker ps

# Dockerボリュームを確認
docker volume ls

出力例:

DRIVER    VOLUME NAME
local     omeka-s-docker_mariadb
local     omeka-s-docker_omeka

1.2 バックアップファイルの作成

# /optディレクトリに移動
cd /opt

# 設定ファイル等をバックアップ(約60MB)
sudo tar -czf omeka-backup-$(date +%Y%m%d).tar.gz omeka-s-docker/

# Dockerボリュームのデータをバックアップ(約1GB)
sudo docker run --rm \
  -v omeka-s-docker_omeka:/data/omeka \
  -v omeka-s-docker_mariadb:/data/mariadb \
  -v /opt:/backup \
  alpine tar -czf /backup/omeka-volumes-$(date +%Y%m%d).tar.gz -C /data .

# バックアップファイルの確認
ls -lh /opt/*.tar.gz

出力例:

-rw-r--r-- 1 root root  59M Oct 16 17:02 /opt/omeka-backup-20251016.tar.gz
-rw-r--r-- 1 root root 1.1G Oct 16 17:04 /opt/omeka-volumes-20251016.tar.gz

1.3 バックアップファイルの権限変更

ダウンロード用に、現在のユーザーに所有権を変更します:

sudo chown $USER:$USER /opt/omeka-backup-20251016.tar.gz
sudo chown $USER:$USER /opt/omeka-volumes-20251016.tar.gz

ステップ2: ローカルマシンへのダウンロード

ローカルマシンのターミナルで実行:

# ダウンロード先ディレクトリに移動
cd ~/Downloads

# SCPでファイルをダウンロード
scp user@source-server-ip:/opt/omeka-backup-20251016.tar.gz ./
scp user@source-server-ip:/opt/omeka-volumes-20251016.tar.gz ./

# ダウンロード確認
ls -lh omeka-*.tar.gz

注意: 1.1GBのファイルのため、ダウンロードには時間がかかります。


ステップ3: 移行先サーバーのセットアップ

3.1 システムの更新

sudo apt update
sudo apt upgrade -y

3.2 既存のDockerパッケージの削除(クリーンインストール)

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do 
  sudo apt-get remove $pkg
done

3.3 Dockerの公式リポジトリを追加

# GPGキーの追加
sudo apt-get update
sudo apt-get install ca-certificates curl
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

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

sudo apt-get update

3.4 Docker Engineのインストール

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3.5 インストール確認

# rootでテスト実行
sudo docker run hello-world

3.6 一般ユーザーでのDocker実行権限設定

# dockerグループの作成(すでに存在する場合はエラーが出ますが問題ありません)
sudo groupadd docker

# 現在のユーザーをdockerグループに追加
sudo usermod -aG docker $USER

# グループ変更を反映
newgrp docker

# 一般ユーザーでテスト実行
docker run hello-world

ステップ4: データの転送と復元

4.1 バックアップファイルのアップロード

ローカルマシンから実行:

# 移行先サーバーにアップロード
scp omeka-backup-20251016.tar.gz user@target-server-ip:/tmp/
scp omeka-volumes-20251016.tar.gz user@target-server-ip:/tmp/

4.2 移行先サーバーでの展開

# /optディレクトリに移動
cd /opt

# バックアップファイルを移動
sudo mv /tmp/omeka-backup-20251016.tar.gz /opt/
sudo mv /tmp/omeka-volumes-20251016.tar.gz /opt/

# 設定ファイル等を展開
sudo tar -xzf omeka-backup-20251016.tar.gz

# 所有権を変更
sudo chown -R $USER:$USER omeka-s-docker

# プロジェクトディレクトリに移動
cd omeka-s-docker

4.3 Dockerボリュームの復元

まず、コンテナを作成(起動はしない)してボリュームを準備します:

# docker-compose.ymlを使用する場合
docker compose up --no-start

# 特定のcomposeファイルと環境変数ファイルを使用する場合
docker compose -f docker-compose-omeka-traefik.yml --env-file .env.omeka up --no-start

次に、バックアップからボリュームにデータを復元:

docker run --rm \
  -v omeka-s-docker_omeka:/data/omeka \
  -v omeka-s-docker_mariadb:/data/mariadb \
  -v /opt:/backup \
  alpine tar -xzf /backup/omeka-volumes-20251016.tar.gz -C /data

このコマンドの意味

  • -v omeka-s-docker_omeka:/data/omeka: Omekaのボリュームをマウント
  • -v omeka-s-docker_mariadb:/data/mariadb: MariaDBのボリュームをマウント
  • -v /opt:/backup: バックアップファイルのあるディレクトリをマウント
  • alpine tar -xzf ...: Alpine Linuxイメージでtarコマンドを実行してデータを展開

4.4 ボリューム確認

docker volume ls

出力例:

DRIVER    VOLUME NAME
local     omeka-s-docker_mariadb
local     omeka-s-docker_omeka

ステップ5: コンテナの起動

5.1 環境変数の確認

起動前に、.envファイル(または.env.omekaなど)で以下を確認・設定します:

# .envファイルを編集
nano .env.omeka

最低限必要な設定:

OMEKA_HOST=your-domain.com  # または localhost
# その他の環境変数...

5.2 コンテナの起動

# 標準のdocker-compose.ymlを使用する場合
docker compose up -d

# 特定のcomposeファイルと環境変数ファイルを使用する場合
docker compose -f docker-compose-omeka-traefik.yml --env-file .env.omeka up -d

5.3 起動確認

# コンテナの状態確認
docker ps

# ログの確認
docker compose logs -f

# 特定のサービスのログを確認
docker compose logs -f omeka
docker compose logs -f mariadb

トラブルシューティング

問題1: Traefikでホスト名が空のエラー

エラーメッセージ

error="error while adding rule Host(``): error while checking rule Host: empty args for matcher Host, []"

解決方法
.envファイルでOMEKA_HOSTが設定されているか確認してください。

# .envファイルを確認
cat .env.omeka

# OMEKA_HOSTが設定されていない場合は追加
echo "OMEKA_HOST=localhost" >> .env.omeka

# 再起動
docker compose down
docker compose up -d

問題2: データベース接続エラー

MariaDBの起動に時間がかかる場合があります。以下を確認:

# MariaDBのログを確認
docker compose logs mariadb

# "ready for connections"というメッセージが表示されるまで待つ

問題3: 権限エラー

# ファイルの所有権を確認
ls -la /opt/omeka-s-docker

# 必要に応じて所有権を変更
sudo chown -R $USER:$USER /opt/omeka-s-docker

セキュリティに関する注意事項

公開サーバーでの自動スキャン

サーバーを公開すると、すぐに自動化されたスキャンボットがアクセスを試みます。以下のようなアクセスログが記録されることは正常です:

POST /graphql HTTP/1.1" 404
GET /.env HTTP/1.1" 404
GET /swagger-ui.html HTTP/1.1" 404

これらは脆弱性を探すボットで、すべて404(見つからない)または403(アクセス拒否)であれば問題ありません。

推奨セキュリティ対策

  1. ファイアウォールの設定
sudo ufw allow 22/tcp    # SSH
sudo ufw allow 80/tcp    # HTTP
sudo ufw allow 443/tcp   # HTTPS
sudo ufw enable
  1. Fail2banのインストール
sudo apt install fail2ban
  1. 定期的な更新
sudo apt update && sudo apt upgrade -y

便利なエイリアス設定

特定のcomposeファイルと環境変数ファイルを使用する場合、エイリアスを設定すると便利です:

# ~/.bashrcに追加
echo "alias omeka-compose='docker compose -f docker-compose-omeka-traefik.yml --env-file .env.omeka'" >> ~/.bashrc
source ~/.bashrc

# 使用例
omeka-compose up -d
omeka-compose down
omeka-compose logs -f

まとめ

この手順により、Docker環境のOmeka-Sを安全に移行できます。重要なポイント:

  1. バックアップは2つ作成: 設定ファイル用とボリュームデータ用
  2. ボリューム復元前にコンテナを作成: up --no-startでボリュームを準備
  3. 環境変数ファイルの確認: 特にホスト名の設定
  4. セキュリティ対策: 公開サーバーでは必須

この手順は他のDocker Compose環境の移行にも応用できます。


参考情報


記事の最終更新: 2025年10月

Discussion