はじめに:なぜ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
#### デバッグプロセス
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
- 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プロジェクトでは以下を重視:
1. 迅速な機能開発
2. 安定した運用環境
3. 障害時の素早い復旧
この観点で、慣れ親しんだDebian系の方が圧倒的に効率的でした。
最適な選択をするための判断基準
AlmaLinuxを選ぶべき場面
- 企業の本番環境(Red Hat系が標準)
- セキュリティが最優先の環境
- 長期間の安定運用が必要
- 専任のインフラエンジニアがいる体制
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は確実に優秀なディストリビューションです:
- エンタープライズグレードのセキュリティ
- 長期サポートによる安定性
- Red Hat エコシステムとの親和性
Debian系の実用性
一方で、以下の場面ではDebian系が圧倒的:
- 迅速な開発サイクルが必要
- 小規模チームでの運用
- 学習コストを抑えたい
- 豊富な情報源を活用したい
最終的な判断基準
> 「技術選択は手段であり、目的ではない」
Lovateプロジェクトでは、安定した環境での迅速な機能開発が最優先。この目標達成のため、使い慣れたDebian系を選択しました。
将来的にエンタープライズ環境で働く機会があれば、その時こそAlmaLinuxの真価を発揮できる場面だと考えています。
—
参考資料
- [AlmaLinux OS Official Documentation](https://wiki.almalinux.org/)
- [Red Hat Enterprise Linux Documentation](https://access.redhat.com/documentation/)
- [Ubuntu Server Guide](https://ubuntu.com/server/docs)
- [SELinux User’s and Administrator’s Guide](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/using_selinux/)
- [Podman Documentation](https://docs.podman.io/)
—
📌 この記事は2025年8月時点の実体験に基づいています。技術の進歩により、今後状況が変わる可能性があります。
