はじめに:なぜ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.
対処に要した時間
- 調査時間: 各エラーにつき平均2-3時間
- ドキュメント確認: Red Hat公式ドキュメント、Stack Overflow
- 試行錯誤:
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
デバッグプロセス
試行錯誤の流れ
- 権限確認:
ls -laZでSELinuxコンテキスト確認 - ログ分析:
/var/log/audit/audit.logの精査 - 設定調整:
config.phpの手動編集試行 - 最終的な断念: 時間コストが予想を大幅に超過
AlmaLinux vs Debian系 詳細比較
セキュリティ機能
| 項目 | AlmaLinux | Ubuntu/Debian |
|---|---|---|
| 強制アクセス制御 | SELinux(厳格) | AppArmor(柔軟) |
| 設定難易度 | 高(専門知識必要) | 中(直感的) |
| トラブル時の調査 | ausearch、sealert |
aa-status、ログ確認 |
| コミュニティサポート | 限定的 | 豊富 |
パッケージ管理
# パッケージ検索
dnf search nginx
dnf info nginx
# インストール
dnf install nginx
# 更新
dnf update
# パッケージ検索
apt search nginx
apt show nginx
# インストール
apt install nginx
# 更新
apt update && apt upgrade
コンテナ技術
| 機能 | AlmaLinux (Podman) | Ubuntu (Docker) |
|---|---|---|
| デーモンレス | ✅ セキュリティ向上 | ❌ dockerd必要 |
| 学習コスト | 高(Docker知識+α) | 低(豊富な情報) |
| エコシステム | 発展途上 | 成熟 |
| トラブルシューティング | 情報少ない | 豊富な事例 |
運用・保守性
ドキュメントの充実度
AlmaLinux
- Red Hat公式ドキュメント(有料部分あり)
- コミュニティWiki(情報量限定)
- Stack Overflowの情報(CentOS/RHEL流用)
Ubuntu/Debian
- 公式ドキュメント(無料で充実)
- Ubuntu Server Guide
- 膨大なコミュニティ情報
トラブル解決速度
実際のトラブル解決時間を計測:
| 問題の種類 | 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 ビジネス価値
時間投資の観点
- SELinuxの深い理解:数十時間の学習が必要
- Podmanの習熟:既存Docker知識の拡張に時間
- トラブルシューティング:情報収集の困難さ
得られる価値
- セキュリティ向上:重要だが、AppArmorでも実用十分
- 企業環境への応用:個人開発では限定的なメリット
3. プロジェクトの優先順位
Lovateプロジェクトでは以下を重視:
- 迅速な機能開発
- 安定した運用環境
- 障害時の素早い復旧
この観点で、慣れ親しんだDebian系の方が圧倒的に効率的でした。
最適な選択をするための判断基準
AlmaLinuxを選ぶべき場面
- 企業の本番環境(Red Hat系が標準)
- セキュリティが最優先の環境
- 長期間の安定運用が必要
- 専任のインフラエンジニアがいる体制
Debian系を選ぶべき場面
- 開発速度重視のスタートアップ
- 個人開発者のプロジェクト
- トラブルシューティングの容易さを求める環境
- 豊富なドキュメントが必要な場合
まとめ:技術選択は目的に応じて
AlmaLinuxは確かに優れた技術的基盤を持つディストリビューションです。特にエンタープライズ環境での安定性とセキュリティは素晴らしいものがあります。
しかし、個人開発者やスタートアップにとっては、開発効率とトラブル解決の速さが最重要です。この観点では、Debian系(特にUbuntu)の方が圧倒的に優位でした。
最終的な結論「技術的に優れている」≠「あなたのプロジェクトに最適」
技術選択は、チームのスキルセット、プロジェクトの目的、時間的制約を総合的に考慮して行うべきです。

じゅんち8
AlmaLinuxへの挑戦は良い勉強になりました。でも、個人開発では「動くものを早く作る」ことが最優先。技術選択は実用性重視で行きましょう!

