はじめに:なぜAlmaLinuxを選んだのか
Lovate本番環境の再構築を機に、これまで使い慣れたDebian系から離れてAlmaLinuxにチャレンジしてみました。
検討の背景
- 長期サポート: Red Hat Enterprise Linux(RHEL)との互換性
- 企業環境での実績: エンタープライズ用途での安定性
- セキュリティ重視: SELinuxによる強固なアクセス制御
- コンテナ技術: PodmanによるDockerレス運用の可能性
目標は、AdGuardHome + UnboundによるプライベートDNS環境と、Nextcloudを含む自宅サーバー環境の安定運用でした。
🧪 AlmaLinuxで構築した環境
基本システム構成
# AlmaLinux 9.4 (Seafoam Ocelot)
$ cat /etc/os-release
NAME="AlmaLinux"
VERSION="9.4 (Seafoam Ocelot)"
ID="almalinux"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.4"
PLATFORM_ID="platform:el9"
実装したサービス
#### 1. Podmanによるコンテナ運用
# AdGuardHome コンテナ
podman run -d --name adguardhome \
--restart=unless-stopped \
-v /opt/adguardhome/work:/opt/adguardhome/work \
-v /opt/adguardhome/conf:/opt/adguardhome/conf \
-p 53:53/tcp -p 53:53/udp -p 3000:3000/tcp \
adguard/adguardhome
Unbound DNS リゾルバ
podman run -d --name unbound \
--restart=unless-stopped \
-v /etc/unbound:/opt/unbound/etc/unbound \
-p 5335:53/tcp -p 5335:53/udp \
mvance/unbound:latest
#### 2. systemdサービス定義
# /etc/systemd/system/container-adguardhome.service
[Unit]
Description=AdGuard Home container
Wants=network-online.target
After=network-online.target
RequiresMountsFor=%t/containers
[Service]
Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=on-failure
TimeoutStopSec=70
ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name adguardhome -v /opt/adguardhome/work:/opt/adguardhome/work -v /opt/adguardhome/conf:/opt/adguardhome/conf -p 53:53/tcp -p 53:53/udp -p 3000:3000/tcp adguard/adguardhome
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify
NotifyAccess=all
[Install]
WantedBy=multi-user.target
#### 3. ファイアウォール設定
# FirewallD設定
firewall-cmd --permanent --add-service=dns
firewall-cmd --permanent --add-port=3000/tcp
firewall-cmd --permanent --add-port=5335/udp
firewall-cmd --reload
Nextcloud導入試行
# Nextcloud用ディレクトリ準備
mkdir -p /opt/nextcloud/{data,config,apps}
chown -R 33:33 /opt/nextcloud/
Podmanでの起動
podman run -d --name nextcloud \
-p 8080:80 \
-v /opt/nextcloud/data:/var/www/html/data \
-v /opt/nextcloud/config:/var/www/html/config \
-v /opt/nextcloud/apps:/var/www/html/custom_apps \
nextcloud:latest
😵 AlmaLinuxで遭遇した課題
1. SELinuxの学習コストとトラブル
#### 問題の詳細
# Samba共有でのアクセス拒否
$ sudo setsebool -P samba_enable_home_dirs on
$ sudo chcon -t public_content_rw_t /shared/data
それでもアクセス拒否が発生
$ sudo sealert -a /var/log/audit/audit.log
SELinux is preventing smbd from write access on the directory data.
#### 対処に要した時間
ausearch、sealertによる原因分析2. Podman特有の権限問題
#### ボリュームマウント時のエラー
# エラー例
Error: mounting volume "/opt/nextcloud/data": chown /opt/nextcloud/data: operation not permitted
WARN[0000] Failed to decode the keys "[]" from "/run/user/1000/containers/auth.json"
#### 解決策と限界
# 権限調整の試行
sudo podman run --privileged \
--security-opt label=disable \
-v /opt/nextcloud/data:/var/www/html/data:Z \
nextcloud:latest
それでもSELinuxコンテキストの問題が残る
3. Nextcloudの設定トラブル
#### 発生した問題
# ログ確認
$ sudo podman logs nextcloud
PHP Warning: file_put_contents(/var/www/html/config/config.php): failed to open stream: Permission denied
#### デバッグプロセス
1. 権限確認: ls -laZでSELinuxコンテキスト確認
2. ログ分析: /var/log/audit/audit.logの精査
3. 設定調整: config.phpの手動編集試行
4. 最終的な断念: 時間コストが予想を大幅に超過
🆚 AlmaLinux vs Debian系 詳細比較
セキュリティ機能
| 項目 | AlmaLinux | Ubuntu/Debian |
|——|———–|—————|
| 強制アクセス制御 | SELinux(厳格) | AppArmor(柔軟) |
| 設定難易度 | 高(専門知識必要) | 中(直感的) |
| トラブル時の調査 | ausearch、sealert | aa-status、ログ確認 |
| コミュニティサポート | 限定的 | 豊富 |
パッケージ管理
#### AlmaLinux(dnf)
# パッケージ検索
dnf search nginx
dnf info nginx
インストール
dnf install nginx
更新
dnf update
#### Ubuntu(apt)
# パッケージ検索
apt search nginx
apt show nginx
インストール
apt install nginx
更新
apt update && apt upgrade
コンテナ技術
| 機能 | AlmaLinux (Podman) | Ubuntu (Docker) |
|——|——————-|—————–|
| デーモンレス | ✅ セキュリティ向上 | ❌ dockerd必要 |
| 学習コスト | 高(Docker知識+α) | 低(豊富な情報) |
| エコシステム | 発展途上 | 成熟 |
| トラブルシューティング | 情報少ない | 豊富な事例 |
運用・保守性
#### ドキュメントの充実度
AlmaLinux
Ubuntu/Debian
#### トラブル解決速度
実際のトラブル解決時間を計測:
| 問題の種類 | AlmaLinux | Ubuntu |
|———-|———–|——–|
| 権限エラー | 3-4時間 | 30分-1時間 |
| サービス設定 | 2-3時間 | 1-2時間 |
| ネットワーク問題 | 1-2時間 | 30分-1時間 |
🔄 Debian系に戻した決定的理由
1. 開発・運用効率の重視
# Ubuntuでの同環境構築時間
AdGuardHome + Unbound: 約2時間
Nextcloud: 約1時間
総構築時間: 約3時間
AlmaLinuxでの構築時間
AdGuardHome + Unbound: 約6時間(SELinux調整含む)
Nextcloud: 未完了(8時間で断念)
2. 学習コスト vs ビジネス価値
時間投資の観点
得られる価値
3. プロジェクトの優先順位
Lovateプロジェクトでは以下を重視:
1. 迅速な機能開発
2. 安定した運用環境
3. 障害時の素早い復旧
この観点で、慣れ親しんだDebian系の方が圧倒的に効率的でした。
✨ 最適な選択をするための判断基準
AlmaLinuxを選ぶべき場面
Debian系を選ぶべき場面
技術選択の思考フレームワーク
graph TD
A[技術選択] --> B{プロジェクト規模}
B -->|企業・大規模| C[AlmaLinux検討]
B -->|個人・中小規模| D[Debian系推奨]
C --> E{セキュリティ要件}
E -->|最高レベル| F[AlmaLinux]
E -->|標準レベル| G[要検討]
D --> H{開発速度重視?}
H -->|はい| I[Ubuntu/Debian]
H -->|いいえ| J[AlmaLinux検討]
🔧 実践的な移行ガイド
AlmaLinuxからDebian系への移行手順
#### 1. サービス設定のバックアップ
# 設定ファイルのバックアップ
tar -czf almalinux-configs.tar.gz \
/etc/systemd/system/ \
/opt/adguardhome/ \
/etc/unbound/ \
/etc/firewalld/
コンテナイメージのエクスポート
podman save adguard/adguardhome -o adguardhome.tar
podman save mvance/unbound -o unbound.tar
#### 2. Ubuntu環境での再構築
# Docker Composeによる簡潔な定義
version: '3.8'
services:
adguardhome:
image: adguard/adguardhome
container_name: adguardhome
restart: unless-stopped
ports:
- "53:53/tcp"
- "53:53/udp"
- "3000:3000/tcp"
volumes:
- ./adguardhome/work:/opt/adguardhome/work
- ./adguardhome/conf:/opt/adguardhome/conf
unbound:
image: mvance/unbound:latest
container_name: unbound
restart: unless-stopped
ports:
- "5335:53/tcp"
- "5335:53/udp"
volumes:
- ./unbound:/opt/unbound/etc/unbound
#### 3. 移行後の検証
# DNS解決テスト
nslookup google.com localhost
dig @localhost google.com
サービス状態確認
sudo systemctl status docker
docker ps
📊 パフォーマンス比較
リソース使用量
| メトリック | AlmaLinux | Ubuntu 22.04 LTS |
|———-|———–|——————-|
| メモリ使用量 | 1.2GB(基本) | 0.8GB(基本) |
| ディスク使用量 | 4.5GB(最小構成) | 2.1GB(最小構成) |
| 起動時間 | 45秒 | 28秒 |
構築・保守コスト
| 作業 | AlmaLinux | Ubuntu | 時短効果 |
|——|———–|——–|———-|
| 初期構築 | 8時間 | 3時間 | 62%短縮 |
| トラブル対応 | 3時間/件 | 1時間/件 | 67%短縮 |
| 機能追加 | 2時間 | 1時間 | 50%短縮 |
💡 今後の技術戦略
段階的なスキルアップ計画
1. Phase 1: Debian系での安定運用確立
2. Phase 2: Docker/Kubernetesスキル向上
3. Phase 3: 企業環境でのRHEL系運用経験
4. Phase 4: AlmaLinuxでの本格運用再チャレンジ
技術選択の原則
技術選択指針:
primary:
- プロジェクト目標達成速度
- チーム・個人のスキルレベル
- 長期保守コスト
secondary:
- 技術トレンド
- エコシステムの成熟度
- コミュニティサポート
evaluation_cycle:
- 四半期ごとの技術選択見直し
- プロジェクト完了時の振り返り
🎯 まとめ:適材適所の技術選択
AlmaLinuxの価値を認めつつ
AlmaLinuxは確実に優秀なディストリビューションです:
Debian系の実用性
一方で、以下の場面ではDebian系が圧倒的:
最終的な判断基準
> 「技術選択は手段であり、目的ではない」
Lovateプロジェクトでは、安定した環境での迅速な機能開発が最優先。この目標達成のため、使い慣れたDebian系を選択しました。
将来的にエンタープライズ環境で働く機会があれば、その時こそAlmaLinuxの真価を発揮できる場面だと考えています。
—
📚 参考資料
—
📌 この記事は2025年8月時点の実体験に基づいています。技術の進歩により、今後状況が変わる可能性があります。