構築済みデッキ、コンセプトの軸線集中。(統率者メモ:2025/08/18)

先日の買いっぱなしだったこのデッキを、「サボタージュ能力」に軸線を置いた結果、大幅なシェイプアップとカードの入れ替えとなりました。

統率者

  • 《五足のフェリクス/Felix Five-Boots(OTC)》

想定ブラケット

  • 3
  • 《虎の影、百合子/Yuriko, the Tiger's Shadow(CMR)》がGC入りとなっているため

デッキ

クリーチャー

  • 《トリトンの岸忍び/Triton Shorestalker(ZNC)》
  • 《這い寄る刃/Slither Blade(ZNC)》
  • 《K-9 マークI型/K-9, Mark I(WHO)》
  • 《ネットワークの攪乱者/Network Disruptor(NEO)》
  • 《泥棒スカイダイバー/Thieving Skydiver(OTC)》
  • 《裕福な盗人/Prosperous Thief(NEO)》
  • 《深き刻の忍者/Ninja of the Deep Hours(TSR)》
  • 《つむじ風のならず者/Whirler Rogue(ZNC)》
  • 《永劫の好奇心/Enduring Curiosity(DSK)》
  • 《静風の日暮/Higure, the Still Wind(BOK)》
  • 《真夜中の騎士団/Order of Midnight(MOC)》
  • 《月の賢者の養子、ナシ/Nashi, Moon Sage's Scion(OTC)》
  • 《大蛇の魂裂き/Orochi Soul-Reaver(OTC)》
  • 《鬼の下僕、墨目/Ink-Eyes, Servant of Oni(V13)》
  • 《深き闇のエルフ/Elves of Deep Shadow(RAV)》
  • 《ラノワールのエルフ/Llanowar Elves(DOM)》
  • 《エルフの神秘家/Elvish Mystic(M15)》
  • 《シラナの岩礁渡り/Silhana Ledgewalker(RVR)》
  • 《桜族の長老/Sakura-Tribe Elder(TDC)》
  • 《高閣這い/Tower Winder(OTC)》
  • 《抜け目ない交易商人/Savvy Trader(OTC)》
  • 《オーランの凍り牙/Ohran Frostfang(OTC)》
  • 《春葉の報復者/Spring-Leaf Avenger(NEO)》
  • 《悪意の大梟/Baleful Strix(OTC)》
  • 《再誕者、マスター/The Master, Formed Anew(WHO)》
  • 《サイバーコントローラー/The Cyber-Controller(WHO)》
  • 《三角エイの捕食者/Trygon Predator(OTC)》
  • 《正気泥棒/Thief of Sanity(OTC)》
  • 《影魔道士の浸透者/Shadowmage Infiltrator(OTC)》
  • 《冷淡なセルキー/Cold-Eyed Selkie(OTC)》
  • 《トレストの密偵長、エドリック/Edric, Spymaster of Trest(OTC)》
  • 《梅澤悟/Satoru Umezawa(NEO)》
  • 《虎の影、百合子/Yuriko, the Tiger's Shadow(CMR)》
  • 《人質取り/Hostage Taker(OTC)》
  • 《堕ちた忍び/Fallen Shinobi(OTC)》
  • 《ギルドの重鎮、ザナサー/Xanathar, Guild Kingpin(AFR)》
  • 《静刃の鬼/Silent-Blade Oni(OTC)》
  • 《抜け目ない取得者、ゴンティ/Gonti, Canny Acquisitor(OTC)》

インスタント

  • 《悪意の熟達/Baleful Mastery(OTC)》
  • 《断固たる否定/Decisive Denial(OTP)》
  • 《暗殺者の戦利品/Assassin's Trophy(MKM)》
  • 《化膿/Putrefy(TDC)》

ソーサリー

  • 《定業/Preordain(WHO)》
  • 《血清の幻視/Serum Visions(OTC)》
  • 《豚の呪い/Curse of the Swine(OTC)》
  • 《捕食者の刻/Predators' Hour(OTC)》
  • 《大群への給餌/Feed the Swarm(OTC)》
  • 《三顧の礼/Three Visits(OTC)》
  • 《木霊の手の内/Kodama's Reach(OTC)》
  • 《選別の儀式/Culling Ritual(OTC)》

エンチャント

  • 《苦花/Bitterblossom(WOT)》
  • 《狡猾な弁論/Cunning Rhetoric(OTC)》
  • 《自然の意志/Nature's Will(WOT)》

アーティファクト

  • 《太陽の指輪/Sol Ring(LCC)》
  • 《虹色のレンズ/Prismatic Lens(UMA)》
  • 《友なる石/Fellwar Stone(WOC)》
  • 《秘儀の印鑑/Arcane Signet(ZNC)》
  • 《夢盗人のバンダナ/Dream-Thief's Bandana(OTC)》
  • 《梅澤の十手/Umezawa's Jitte(BOK)》
  • 《火と氷の剣/Sword of Fire and Ice(MMA)》
  • 《ソニック・ドライバー/Sonic Screwdriver(WHO)》

土地

  • 5《島/Island》
  • 5《沼/Swamp》
  • 4《森/Forest》
  • 《ラノワールの荒原/Llanowar Wastes(OTC)》
  • 《黄昏のぬかるみ/Twilight Mire(OTC)》
  • 《溢れかえる果樹園/Flooded Grove(OTC)》
  • 《闇滑りの岸/Darkslick Shores(OTC)》
  • 《内陸の湾港/Hinterland Harbor(OTC)》
  • 《繁殖池/Breeding Pool(DES)》
  • 《神秘の神殿/Temple of Mystery(OTC)》
  • 《窪み渓谷/Sunken Hollow(OTC)》
  • 《森林の墓地/Woodland Cemetery(OTC)》
  • 《地底の大河/Underground River(OTC)》
  • 《緑ばんだ沼/Viridescent Bog(OTC)》
  • 《ヤヴィマヤの沿岸/Yavimaya Coast(OTC)》
  • 《異臭の池/Fetid Pools(OTC)》
  • 《ダークウォーターの地下墓地/Darkwater Catacombs(OTC)》
  • 《疾病の神殿/Temple of Malady(OTC)》
  • 《欺瞞の神殿/Temple of Deceit(OTC)》
  • 《水没した地下墓地/Drowned Catacomb(OTC)》
  • 《ディミーアの水路/Dimir Aqueduct(OTC)》
  • 《風変わりな果樹園/Exotic Orchard(OTC)》
  • 《華やかな宮殿/Opulent Palace(OTC)》
  • 《統率の塔/Command Tower(OTC)》
  • 《接続トンネル/Access Tunnel(OTC)》
  • 《聖遺の塔/Reliquary Tower(OTC)》
  • 《霧深い雨林/Misty Rainforest(ZEN)》

と、「戦闘ダメージの誘発型能力(サボタージュ能力)を倍加する《五足のフェリクス/Felix Five-Boots(OTC)》と相性のいい忍者を大量に投入し、その忍術の種となり得る軽量クリーチャーを寄せました。

反面、

  • 相手のライブラリーから奪うカード
  • 重いもの

はバッサリと切り捨て。これを使うためにはもっと多量マナや、相手の猛攻に耐えるだけの構築が必要になります。

まずはこれで試してみようと思います。

テンプレートに沿った統率者デッキの組み直し。(統率者メモ:『パラドックスパワー』2025/08/17)

デッキの調整をどの方向で進めていったらいいだろうと悩んでいるとき、この記事を発見。

新時代の統率者デッキ構築テンプレート|The Command Zone 658【翻訳、要約】|そういちろう

さっくり言うと

  • 土地の比率はまずは38枚。
  • マナカーブに沿ってカードを入れていく。
  • 統率者のシナジーに併せてカードを調整。

というもの。入れたいカードだけ入れるのではなく、

  • 1マナ帯、2マナ帯…… と厳選
  • マナ加速や妨害などを考えていく

は今までの自分の発想にはなかったため、早速試してみます。

デッキはお気に入りのカラーでもある『パラドックスパワー』(ドクター・フー統率者デッキ)』

統率者

  1. 《13代目ドクター/The Thirteenth Doctor(WHO)》
  2. 《ヤズミン・カーン/Yasmin Khan(WHO)》

デッキ

クリーチャー

  • 《熱心な秘儀術師、ハルダン/Haldan, Avid Arcanist(C20)》
  • 《ダニー・ピンク/Danny Pink(WHO)》
  • 《オペレーション・ダブル、オスグッド/Osgood, Operation Double(WHO)》
  • 《メモリーワーム/Memory Worm(WHO)》
  • 《再鍛の刃、ラエリア/Laelia, the Blade Reforged(MH3)》
  • 《ライアン・シンクレア/Ryan Sinclair(WHO)》
  • 《火星の女王、イラクサ/Iraxxa, Empress of Mars(WHO)》
  • 《骨集めのドラコサウルス/Bonehoard Dracosaur(LCI)》
  • 《燃え盛るティラノサウルス/Flaming Tyrannosaurus(WHO)》
  • 《極楽鳥/Birds of Paradise(RAV)》
  • 《グレアム・オブライエン/Graham O'Brien(WHO)》
  • 《探索するドルイド/Questing Druid(WOE)》
  • 《義理堅いルパリ族、カルバニスタ/Karvanista, Loyal Lupari(WHO)》
  • 《自然の怒りのタイタン、ウーロ/Uro, Titan of Nature's Wrath(THB)》
  • 《月の雛/Lunar Hatchling(WHO)》
  • 《戦慄の狼の伝令官、ファルドーン/Faldorn, Dread Wolf Herald(CLB)》
  • 《氷刻み、スヴェラ/Svella, Ice Shaper(KHM)》
  • 《秘儀を運ぶもの、パコ/Pako, Arcane Retriever(C20)》
  • 《嵐の神、ケラノス/Keranos, God of Storms(JOU)》
  • 《シンスの父、ショーン/Shaun, Father of Synths(PIP)》
  • 《フロストフェアのチョウチンアンコウ/Frost Fair Lure Fish(WHO)》
  • 《不死者、ミー/Me, the Immortal(WHO)》

インスタント

  • 《考慮/Consider(WOC)》
  • 《光輝の高揚/Surge of Brilliance(WHO)》
  • 《熟慮/Think Twice(WHO)》
  • 《混沌のねじれ/Chaos Warp(WHO)》
  • 《英雄的介入/Heroic Intervention(WHO)》
  • 《活性の力/Force of Vigor(OTP)》
  • 《成長のらせん/Growth Spiral(WHO)》
  • 《感電の反復/Galvanic Iteration(OTC)》
  • 《マグマ・オパス/Magma Opus(STX)》

ソーサリー

  • 《定業/Preordain(WHO)》
  • 《量子ずれ/Quantum Misalignment(WHO)》
  • 《アールンドの天啓/Alrund's Epiphany(KHM)》
  • 《信仰無き物あさり/Faithless Looting(UMA)》
  • 《ジェスカの意志/Jeska's Will(MKC)》
  • 《迫りくるフラックス/Impending Flux(WHO)》
  • 《混沌の辛苦/Throes of Chaos(WHO)》
  • 《タイム・ボルテックスの中へ/Into the Time Vortex(WHO)》
  • 《冒涜の行動/Blasphemous Act(WHO)》
  • 《ウルヴェンワルド横断/Traverse the Ulvenwald(SOI)》
  • 《遥か見/Farseek(WHO)》
  • 《三顧の礼/Three Visits(WHO)》
  • 《明日への探索/Search for Tomorrow(WHO)》
  • 《耕作/Cultivate(WHO)》
  • 《表現の反復/Expressive Iteration(TDC)》
  • 《倒壊と再建/Wreck and Rebuild(WHO)》
  • 《間の悪い爆発/Ill-Timed Explosion(MKM)》

エンチャント

  • 《花の絨毯/Carpet of Flowers(WHO)》
  • 《鏡割りの寓話/Fable of the Mirror-Breaker(NEO)》
  • 《パイロットにする/Become the Pilot(WHO)》
  • 《中はとても広い/Bigger on the Inside(WHO)》
  • 《過去へ帰還せよ/Return the Past(WHO)》

アーティファクト

  • 《太陽の指輪/Sol Ring(LCC)》
  • 《ターディス/TARDIS(WHO)》
  • 《衝動のタリスマン/Talisman of Impulse(WHO)》
  • 《好奇のタリスマン/Talisman of Curiosity(WHO)》
  • 《秘儀の印鑑/Arcane Signet(ZNC)》
  • 《コンフェッション・ダイアル/Confession Dial(WHO)》
  • 《レーザー・スクリュードライバー/Laser Screwdriver(WHO)》

プレインズウォーカー

  • 《反逆の先導者、チャンドラ/Chandra, Torch of Defiance(CMM)》

土地

  • 2《島/Island》
  • 4《森/Forest》
  • 2《山/Mountain》
  • 《トレンザロアの時計塔/Trenzalore Clocktower(WHO)》
  • 《隠された火山/Hidden Volcano(LCI)》
  • 《根縛りの岩山/Rootbound Crag(XLN)》
  • 《燃えがらの林間地/Cinder Glade(WHO)》
  • 《隠れた茂み/Sheltered Thicket(WHO)》
  • 《繁殖池/Breeding Pool(UNF)》
  • 《眠らずの尖塔/Restless Spire(WOE)》
  • 《神秘の神殿/Temple of Mystery(WHO)》
  • 《焦熱島嶼域/Fiery Islet(WHO)》
  • 《冠水樹林帯/Waterlogged Grove(WHO)》
  • 《蔦明の交錯/Vineglimmer Snarl(WHO)》
  • 《獲物道/Game Trail(WHO)》
  • 《凍沸の交錯/Frostboil Snarl(WHO)》
  • 《夢根の滝/Dreamroot Cascade(WHO)》
  • 《嵐削りの海岸/Stormcarved Coast(WHO)》
  • 《落石の谷間/Rockfall Vale(WHO)》
  • 《轟音の滝/Thundering Falls(MKM)》
  • 《迷路庭園/Hedge Maze(MKM)》
  • 《商業地区/Commercial District(MKM)》
  • 《開拓地の野営地/Frontier Bivouac(WHO)》
  • 《ケトリアのトライオーム/Ketria Triome(IKO)》
  • 《ギャリフレイ評議堂/Gallifrey Council Chamber(WHO)》
  • 《統率の塔/Command Tower(WHO)》
  • 《風変わりな果樹園/Exotic Orchard(WOC)》
  • 《祖先の道/Path of Ancestry(WOC)》
  • 《僻地の灯台/Desolate Lighthouse(WHO)》
  • 《不吉な墓地/Ominous Cemetery(WHO)》
  • 《有望な鉱脈/Promising Vein(LCI)》
  • 《樹木茂る山麓/Wooded Foothills(ZNE)》

主な変更点は太字の部分。

  • 《極楽鳥/Birds of Paradise(RAV)》
  • 《ウルヴェンワルド横断/Traverse the Ulvenwald(SOI)》
  • 《考慮/Consider(WOC)》
  • 《信仰無き物あさり/Faithless Looting(UMA)》

などの1マナを増量し、1ターン目の動きを円滑化。

「色対策をメインで入れても」思っていた《花の絨毯/Carpet of Flowers(WHO)》は、かみ合えば凄く強力。

また、手札の質を高められる《メモリーワーム/Memory Worm(WHO)》も、デメリットも使いようだということで入れました。

当初入れていた手札以外から唱えられるカウンター《襲来の予測/Saw It Coming(KHM)》に関しては、《ヤズミン・カーン/Yasmin Khan(WHO)》などで追放された場合は預言できないということで潔くオミット。

それでも

  1. 統率者デッキ構築済みのコンセプトを崩さず
  2. 主なクリーチャーカードはそのままに
  3. 足回りを強化

できたと思っています。後は、それ以外のデッキも同様にくみ上げていきます。

ケーススタディ・ModSecurity影響下でファイルアップロードできない事象に対応

概要

Redmineでファイルをアップロードしようとした際、ModSecurity (WAF) によってブロックされ、エラーになる事象が発生しました。
その原因と事象解決のメモです。

環境

  • Ubuntu 24.04
  • Apache 2.4
    • RedmineをApacheのMod_Passangerで稼働
  • Redmine 5.1
  • ModSecurity v2 / OWASP Core Rule Set (CRS)

事象の確認

環境をWebArenaからXServerに移行した直後。
Redmineのチケットでファイルをアップロードしようとすると、ファイルアップロードのプログレスバーが完了せず、アップロードできません。

原因の特定

こういうときの答えはたいがい、エラーログに書かれているのでそれを確認します。

見つけたログ(IPアドレスやホスト名は改変済み):

[Wed Aug 13 12:47:21.713637 2025] [security2:error] [pid 11190] [client AAA.BBB.CCC.DDD:40404] ModSecurity: Request body no files data length is larger than the configured limit (131072). [hostname "hoge.example.com"] [uri "/uploads.js"] [unique_id "aJwKye92u8EKc4H_FxCb5QAAABQ"], referer: https://hoge.example.com/issues/123

Request body no files data length is larger than the configured limit (131072)

これは、「ファイル以外のリクエストデータ(no files data)のサイズが、設定された上限値(131072バイト = 128KB)を超えています」という意味です。

Redmineは、ファイルをアップロードする際、ファイルそのものとは別に、チケットの題名や説明といったテキスト情報も同時にサーバーへ送信します。このテキスト情報の合計サイズが、ModSecurityのデフォルトの上限値である128KBを超えてしまったため、攻撃と誤認され、ブロックされる。

というのがAI(Gemini)の回答。

既にApacheのバーチャルサイトの.confファイルには

SecRequestBodyInMemoryLimit 524288000
SecRequestBodyLimit 524288000

と記述していますが、サーバの入れ替えと同時にModSecurityのCRSをアップデートしたことで設定が足りなかったようです。

ここまで分かれば、解決まであと少し。

対処手順

設定ファイルのバックアップ

ModSecurityのメイン設定ファイルで、SecRequestBodyNoFilesLimitの上限値を設定で上書きしていきます。

  • エラーを起こしているバーチャルサイトの.confファイルのバックアップ
sudo cp -pi /etc/apache2/site-available/redmine.conf /path/to/backup/directory/redmine.conf.$(date +%Y%m%d)

.confの名前やバックアップディレクトリは自分の環境に合わせます。

  • バックアップ確認
diff -u /path/to/backup/directory/redmine.conf.$(date +%Y%m%d) /etc/apache2/site-available/redmine.conf

差分がなければ(エラーがなければ)バックアップ成功。

上限値を修正する

上述した設定ファイルを以下のように修正。

修正前(例):

SecRequestBodyInMemoryLimit 524288000
SecRequestBodyLimit 524288000

修正後(例):

SecRequestBodyInMemoryLimit 524288000
SecRequestBodyLimit 524288000
SecRequestBodyNoFilesLimit 524288000

両方の値を同じにしておくと、管理が分かりやすくなります。

なお、500MBとしているのは一時的に大きなファイルを置くこともあるからです。上限値は自分の運用方針やストレージ量に合わせましょう。

修正確認

  • ファイル修正後の差分
diff -u /path/to/backup/directory/redmine.conf.$(date +%Y%m%d) /etc/apache2/site-available/redmine.conf
  • 差分例
SecRequestBodyInMemoryLimit 524288000
SecRequestBodyLimit 524288000
+SecRequestBodyNoFilesLimit 524288000

と、追記した行が出てくることを確認します。

設定反映&動作確認

  • confファイルの構文確認
sudo apache2ctl configtest

Syntax OKを確認します。

  • Webサービス(Apache)再起動
sudo systemctl restart apache2.service
  • Webサービス(Apache)再起動確認
systemctl status apache2.service

Running(active)を確認します。

  • 動作確認

Redmineのチケット作成/編集画面でファイルが正常にアップロードできるようになれば対処完了です。

まとめ

新環境の構築時、最新のCRSを導入したため、旧環境をそのまま引き継いだというのが直接的な原因でした。
こういう罠があちこちに潜んでいるので、何かあったらログを見て事象を確かめるのが事象解消の近道です。

confファイルのチューニングでPassangerのメモリ量を節約。

WebArenaからXServerに移行し、メモリを6GBまで増強したものの、スワップの使用量増加が止まらず。

これをチューニングによりなんとか抑えられたというメモ書きです。

経緯

  1. スペックの負荷状況を調べるためにGrowiを導入
  2. 十分な性能が見込めたためにNextcloudやBookStackなどを入れていく
  3. それでも稼働していったのでRedmineの移行を終える。
  4. Redmineを入れた途端、スワップ使用率が高くなった。

環境

  • Ubuntu / Debian系OS
  • Apache 2.4
  • libapache2-mod-passengerがインストール済み
  • Redmineを複数稼働

チューニングの目的

上記環境のmod_passengerは、筆者のように複数のアプリケーションを、リソースが限られたVPSで運用する場合(いわゆる逸般的な使い方)は、メモリを過剰に消費し、サーバー全体のパフォーマンスを低下させる可能性があります。

事実、free -hコマンドで、Swapの使用量が放置しているのに高まってきたという状況でした。

そこで、リクエストがあれば都度、プロセスを増やしてしまうpassengerの機能をチューニングで抑制します。

さっくりとした手順

  1. passengerの設定ファイルのバックアップを行います。
  2. ファイルの修正によるチューニングを行います。
  3. 設定を反映させ、状況を確認します。

Passengerの設定ファイルをのバックアップ

※この設定は、バーチャルサイト個別設定ではなく、一括で設定を行います。

なぜなら、Passenger関連のディレクティブが、<VirtualHost>ブロックの中に書くことができないからです。

  • ファイルのバックアップ
sudo cp -pi /etc/apache2/mods-available/passenger.conf /path/to/backup/direcotry/passenger.conf.$(date +%Y%m%d)

バックアップディレクトリは自分の環境に合わせます。(筆者環境:/etc/conf/backup)

  • ファイルのバックアップ確認
diff -u -pi /path/to/backup/direcotry/passenger.conf.$(date +%Y%m%d) /etc/apache2/mods-available/passenger.conf 

差分がなく、エラーがなければバックアップはできています。

メモリ管理ディレクティブを追記

上記passenger.confファイルを開き、<IfModule mod_passenger.c>...</IfModule>ブロックの中に、以下の設定を追記します。

<IfModule mod_passenger.c>
  PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
  PassengerDefaultRuby /usr/bin/ruby

  # --- ▼ここから追記▼ ---
  # Passengerが起動するRubyプロセスの最大数を4に制限
  PassengerMaxPoolSize 4
  # 各アプリケーションごとに起動する最大プロセス数を1に制限
  PassengerMaxInstancesPerApp 1
  # プロセスが300秒(5分)アイドルだったら停止させる
  PassengerPoolIdleTime 300
  # --- ▲ここまで追記▲ ---
</IfModule>

各ディレクティブの解説

ディレクティブ説明
PassengerMaxPoolSizePassengerがサーバー全体で起動するRubyプロセスの最大総数です。サーバーのメモリ上限を超えないよう、搭載メモリ量に応じて設定します。
PassengerMaxInstancesPerApp各アプリケーションごとに起動できるプロセスの最大数です。例えば1に設定すると、一つのRedmineサイトは同時に1つのプロセスしか使えなくなります。
PassengerPoolIdleTimeプロセスがここで指定した秒数以上アクセスがない場合、Passengerはそのプロセスを停止させ、メモリを解放します。

設定の反映

ファイルを保存した後、Apacheを再起動して設定を反映させます。

  • 構文確認
sudo apache2ctl configtest

Syntax Okを確認します。エラーが出たらその箇所を確認し、Syntax OKが出るまで修正します。

  • Apache再起動
sudo systemctl restart apache2.service
  • Apache再起動確認
systemctl status apache2.service

Running(Active)を確認します。

動作確認

この状態で一晩ほど様子を見ました。

free -h
               total        used        free      shared  buff/cache   available
Mem:           5.8Gi       3.3Gi       551Mi       141Mi       2.3Gi       2.4Gi
Swap:          2.0Gi       1.5Mi       2.0Gi

のまま。チューニング前はSwapを100~500MBも使用していたことから、動作は安定。設定は有効のようです。

PHP8.3をPHP-FPMで動かすための設定

概要

Nextcloud等のLAMP環境で利用するPHPを、PHP-FPM (FastCGI Process Manager) を使ってApacheと連携させる形でインストール・設定します。
php-fpmを利用すると、PHPの処理がApacheのプロセスから分離されるため、パフォーマンスの向上や、より柔軟なリソース管理が期待できます。

※筆者の好みでaptitudeを用いています。適宜、aptに読み替えてください。

実施した環境

  • Ubuntu 24.04
  • Apache 2.4
  • MySQL 8

さっくりとした手順

  1. レポジトリを追加します。
  2. PHPおよびPHP-FPMパッケージをインストールします。
  3. Apacheの連携用モジュールを設定します。
  4. PHPのパフォーマンス設定(OPcache等)を行います。
  5. 各Webサイト(バーチャルホスト)でPHP-FPMを有効化します。
  6. サービスを再起動し、動作を確認します。

手順詳細

レポジトリ追加とアップデート

最新のPHPバージョンを利用するため、ondrej/phpリポジトリを追加します。

  • PHPレポジトリの追加
sudo add-apt-repository ppa:ondrej/php
  • パッケージ全体のアップデート
sudo aptitude update

PHPパッケージのインストール

PHP本体と、php-fpm、そしてWebアプリケーションで一般的に必要とされる拡張機能をインストールします。

  • PHP本体とFPM
sudo aptitude install php8.3 php8.3-fpm
  • 周辺モジュール (APCuとMemcached)
sudo aptitude install memcached php8.3-apcu
  • Webアプリに必要な周辺モジュール (MySQLを使う場合)
sudo aptitude install php8.3-{opcache,pdo,bcmath,calendar,ctype,fileinfo,ftp,gd,intl,json,ldap,mbstring,mysql,posix,readline,sockets,bz2,tokenizer,zip,curl,iconv,phar,xml,imagick,gmp,redis-server}
  • インストール確認
php -v

PHP 8.3.xのように、インストールしたバージョンが表示されることを確認します。

Apache連携モジュールの設定

php-fpmでPHPを動かすため、従来のmod_phpを無効化し、代わりにphp-fpmと通信するためのproxy_fcgiモジュールを有効化します。

  • mod_phpを無効化
sudo a2dismod php8.3
  • 必要なモジュールを有効化
sudo a2enmod proxy_fcgi setenvif

OPcacheとAPCuの有効化

Nextcloudなどのアプリケーションでは、パフォーマンス向上のためこれらのキャッシュ設定が推奨(あるいは必須)となります。

  • 設定ファイル待避
sudo mv /etc/php/8.3/mods-available/opcache.ini /path/to/backup/directory/opcache.ini.$(date +%Y%m%d)
sudo mv /etc/php/8.3/mods-available/apcu.ini /path/to/backup/directory/apcu.ini.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。(筆者環境/etc/conf_backup)

  • 設定ファイル差し替え
cat <<- __EOF__ | sudo tee /etc/php/8.3/mods-available/opcache.ini > /dev/null
; configuration for php opcache module
; priority=10
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.memory_consumption=256
opcache.save_comments=1
opcache.revalidate_freq=1
__EOF__
cat <<- __EOF__ | sudo tee /etc/php/8.3/mods-available/apcu.ini > /dev/null
extension=apcu.so
[apcu]
apc.enabled=1 apc.shm_size=32M apc.ttl=7200 apc.enable_cli=1 apc.serializer=php
__EOF__

※ メモリ量などは環境に合わせます。

各WebサイトでのPHP-FPM連携設定

各WebサイトのApache設定ファイル(.conf)で、PHPへのリクエストをphp-fpmに渡すように設定します。この設定がなければPHPスクリプトをサーバが解釈せず、動きません。

  • 設定例 (/etc/apache2/sites-available/hoge.confなど)
    <VirtualHost>ブロックの中に、以下の<FilesMatch>ブロックを追記します。
    <VirtualHost *:443>
        ServerName hoge.example.com
        # ...

        <FilesMatch \.php$>
            # SetHandlerで、phpファイルのリクエストをFastCGIプロキシに渡す
            SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost/"
        </FilesMatch>

        # ...
    </VirtualHost>

このSetHandlerディレクティブが、Apacheに来たPHPへのリクエストを、バックグラウンドで動いているphp-fpmのプロセスに転送する役割を担います。

サービスの再起動と動作確認

設定を反映させるため、Apacheとphp-fpmの両方を再起動します。

  • サービス再起動
sudo systemctl restart php8.3-fpm.service
sudo systemctl restart apache2.service
  • 動作確認
    mod_phpは無効化されているため、a2queryではdisabledと表示されるのが正しい状態です。代わりに、php-fpmサービスが稼働していることを確認します。
systemctl status php8.3-fpm.service
`active (running)`と表示されていれば、PHP-FPMの導入と設定は完了です。

XServer VPS切り替え後のトラブル。(ログの肥大化によるサービス停止と対応・恒久的対応策)

概要

2025/08/12 朝、管理しているWebサーバーにSSHで接続できなくなり、Webサイトも全て閲覧できなくなる障害が発生しました。本記事は、その原因究明から、応急処置、そして恒久対策までの一連の流れを記録したものです。

障害発生時の状況

  • Webサイトにアクセスすると、タイムアウトエラーになる。
  • SSHでログインしようとしても、接続ができない。
  • VPSの管理コンソールから再起動をかけると、redis-serverの停止処理(DBの保存)でタイムアウトし、正常にシャットダウンできない。
  • 強制再起動後、一時的に復旧するものの、しばらくすると再び応答がなくなる。

止まっていたサービス

  • mongod
  • redis-server
  • elasticsearch
  • growi

原因の特定手順

切り分け中に原因判明

障害の切り分け中、Wasabiクラウドストレージをマウントしようとした際に、以下のエラーが発生しました。

  • クラウドストレージのマウントを実行
sudo mount -a
mount.s3fs: unable to access MOUNTPOINT /mnt/wasabi: No space left on device

No space left on device(デバイスに空き領域がありません)」というこのエラーメッセージ。150GBもディスク容量があるのになぜ……? 思いつつ調査を行います。

ディスク使用率の確認

上記のエラーを受け、ディスクの空き容量を確認しました。

df -h

実行結果:

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1       145G  145G     0 100% /

この結果から、**ルートディレクトリ(/)のディスク使用率が100%**になり、空き容量がゼロになっていることが、数値的にも裏付けられました。

容量を圧迫しているディレクトリの調査

次に、どのディレクトリが容量を使い果たしているのかを調査しました。

sudo du -h -d 1 /

実行結果(抜粋):

125G    /var

/varディレクトリが125GBを占めていることが分かりました。さらに詳細に調査を進めます。

sudo du -h -d 1 /var/log

実行結果(抜粋):

122G    /var/log/apache2

/var/log/apache2が122GBという、異常なサイズになっていることが特定できました。

肥大化したログファイルの特定

その後、/var/log/apache2ディレクトリの中身を確認しました。

ls -lh /var/log/apache2

実行結果(抜粋):

-rw-r-----  1 root adm   61G  8月 12 08:09 modsec_audit.log
-rw-r-----  1 root adm   59G  8月 11 00:15 modsec_audit.log.1

**ModSecurityの監査ログ(modsec_audit.log)**が、わずか2日間で120GB以上にまで肥大化していたことが、直接の原因であると確定しました。

ここまで分かれば対処はもうすぐです。

対処手順

ステップ1:応急処置(空き容量の確保)

まず、サーバーを正常に動作させるため、巨大化した監査ログを削除し、空き容量を確保します。

  • 巨大なログファイルを削除
sudo rm /var/log/apache2/modsec_audit.log*
  • Apacheを再起動して、ファイルハンドルを解放
sudo systemctl restart apache2.service

ステップ2:恒久対策(監査ログの無効化)

modsec_audit.logは、攻撃の詳細な分析やデバッグには役立ちますが、今回のようにログがディスクを圧迫し、サーバーダウンを引き起こしますため、この設定をオフにします。

  1. ModSecurityのメイン設定ファイルを開きます。 sudo nano /etc/modsecurity/modsecurity.conf
  2. SecAuditEngineの値をOffに変更します。 修正前: SecAuditEngine RelevantOnly 修正後: SecAuditEngine Off
  3. Apacheをリロードして設定を反映させます。 sudo systemctl reload apache2.service

その後、念のためサーバそのものを

```bash
sudo reboot
```

で、状況が元に戻っていることを確認しました。

まとめ

今回の障害は、ModSecurityの監査ログが有効になったまま放置され、そのログがログローテーションの対象になっていなかったために、ディスク容量を100%使い果たしたことが原因でした。

前述したとおり、よりよいスペックのサーバに引っ越した後の出来事だけに、かなりの冷や汗ものでした。

2025年8月の統率者&ボドゲ会メモ。

三連休の最終日、統率者&ボドゲ会を行いました。

統率者

エスパーのゾンビデッキ

残念ながら敗北はしましたが、

  • 動きがつかめた
  • アドバンテージやマナ加速は十分

などの感触が分かったので、次につなげられます。

タルキール氏族対決

タルキール:龍嵐録の構築済みをそのまま使い、「強い部族を決めよう」という企画。

自分はジェスカイを担当。序盤、かなりの劣勢を強いられ、また、リセットをしても《生ける屍》による大量リアニメイトにより苦しい状況が続きました。

しかし、《ジェスカイの意志》を引いたことで場は激変。瞬間的なマナ加速やフラッシュバックを利用し、

  • 再びのリセット
  • 相手のトークンの大量コピー

等を行い場を一気に捲りました。しかし、中盤のダメージが災いし、トークン生成手段を持つマルドゥ氏族に敗北。

スゥルタイに一矢を報いることができたのはよかったし、統率者デッキでありながら残りのライブラリーが一桁でゲームが終わるというすさまじさがありました。

ボードゲーム

ファイブ・シーズンズ・ダイス

ケルト・ダイスのリメイク版。ダイスとセットコレクションのままならなさがいい感じに作用する良作でした。

カム・セイルズ・アウェイ!

なんとしても回したかった作品。不満客を2人に抑えたものの、一意に僅か4点差。

他にも収穫があったいい一日でした。

微調整、ミシュラデッキ(統率者メモ2025/08/11)

ウルザデッキと反して、ミシュラデッキは統率者そのものがコンボパーツであるため、構築済みをベースにしても動きやすいです。

以下、2025/08/11時点でのデッキリスト。

統率者

《高名な者、ミシュラ/Mishra, Eminent One(BRC)》

デッキ

クリーチャー

  • 《湖に潜む者、エムリー/Emry, Lurker of the Loch(BRC)》
  • 《先見的設計家、ムッツィオ/Muzzio, Visionary Architect(BRC)》
  • 《発明の領事、パディーム/Padeem, Consul of Innovation(BRC)》
  • 《練達の変成者/Master Transmuter(BRC)》
  • 《オートンの兵士/Auton Soldier(WHO)》
  • 《無情な屍技術師/Ruthless Technomancer(NEC)》
  • 《艱苦の伝令/Herald of Anguish(BRC)》
  • 《ゴブリンの溶接工/Goblin Welder(C14)》
  • 《ゴブリンの技師/Goblin Engineer(MH2)》
  • 《ゴブリンの修繕屋スロバッド/Slobad, Goblin Tinkerer(BRC)》
  • 《大胆な再製者/Audacious Reshapers(BRC)》
  • 《実業的な回収者、ファリド/Farid, Enterprising Salvager(BRC)》
  • 《爆発炉のヘルカイト/Blast-Furnace Hellkite(BRC)》
  • 《求道の達人、サイラス・レン/Silas Renn, Seeker Adept(BRC)》
  • 《ウェザーライトの艦長、ジョイラ/Jhoira, Weatherlight Captain(BRC)》
  • 《冷酷な者、アシュノッド/Ashnod the Uncaring(BRC)》
  • 《テルカーの技師、ブルーディクラッド/Brudiclad, Telchor Engineer(BRC)》
  • 《増殖されし者、マスター/The Master, Multiplied(WHO)》
  • 《クルーグの災い魔、トラクソス/Traxos, Scourge of Kroog(BRC)》
  • 《飛行機械の組立工/Thopter Assembly(MOC)》
  • 《ワームとぐろエンジン/Wurmcoil Engine(SOM)》
  • 《サイバーマン軍団/Cybermen Squadron(WHO)》
  • 《鉄のゴーレム、ボッシュ/Bosh, Iron Golem(HOP)》
  • 《金属製の巨像/Metalwork Colossus(BRC)》

インスタント

  • 《知識の渇望/Thirst for Knowledge(BRC)》
  • 《発明品の唸り/Whir of Invention(AER)》
  • 《シンクロ解除/Desynchronization(ACR)》
  • 《削剥/Abrade(VOW)》
  • 《魔性/Bedevil(BRC)》

ソーサリー

  • 《加工/Fabricate(M10)》
  • 《ロリアンの発見/Lorien Revealed(LTR)》
  • 《大群への給餌/Feed the Swarm(CLB)》
  • 《テリシアの終焉/Terisiare's Devastation(BRC)》
  • 《消却/Delete(WHO)》
  • 《財宝発掘/Trash for Treasure(C16)》
  • 《冒涜の行動/Blasphemous Act(WHO)》

アーティファクト

  • 《旅人のガラクタ/Wayfarer's Bauble(M3C)》
  • 《虚無の呪文爆弾/Nihil Spellbomb(SOM)》
  • 《太陽の指輪/Sol Ring(LCC)》
  • 《マイコシンスの水源/Mycosynth Wellspring(NPH)》
  • 《胆液の水源/Ichor Wellspring(MBS)》
  • 《忘却の偶像/Idol of Oblivion(TDC)》
  • 《精神石/Mind Stone(ZNC)》
  • 《ラクドスの印鑑/Rakdos Signet(VOC)》
  • 《ディミーアの印鑑/Dimir Signet(ZNC)》
  • 《ソニック・ドライバー/Sonic Screwdriver(WHO)》
  • 《スカイクレイブの秘宝/Skyclave Relic(ZNR)》
  • 《忘却石/Oblivion Stone(MRD)》
  • 《溶鉄の大桶/Smelting Vat(BRC)》
  • 《石成エンジン/Lithoform Engine(BRC)》
  • 《面晶体の記録庫/Hedron Archive(DMC)》
  • 《スランの発電機/Thran Dynamo(V13)》
  • 《ゴンティの霊気心臓/Gonti's Aether Heart(AER)》
  • 《鏡操り/Mirrorworks(MBS)》
  • 《驚異のるつぼ/Wondrous Crucible(BRC)》
  • 《イシュ・サーの背骨/Spine of Ish Sah(BLC)》
  • 《身代わり合成機/Simulacrum Synthesizer(BIG)》
  • 《税血の刃/Tithing Blade(LCI)》
  • 《時の篩/Time Sieve(2XM)》
  • 《呪われた鏡/Cursed Mirror(WHO)》

エンチャント

  • 《鏡割りの寓話/Fable of the Mirror-Breaker(NEO)》

プレインズウォーカー

  • 《屑鉄の学者、ダレッティ/Daretti, Scrap Savant(C16)》

土地

  • 《教議会の座席/Seat of the Synod(BRC)》
  • 《囁きの大霊堂/Vault of Whispers(BRC)》
  • 《大焼炉/Great Furnace(HOP)》
  • 《モリアの坑道/Mines of Moria(LTR)》
  • 《銀色険の橋/Silverbluff Bridge(BRC)》
  • 《轟音の滝/Thundering Falls(MKM)》
  • 《窪み渓谷/Sunken Hollow(WOC)》
  • 《Underground Sea(3ED)》
  • 《水没した地下墓地/Drowned Catacomb(ANN)》
  • 《霧霊堂の橋/Mistvault Bridge(BRC)》
  • 《湿った墓/Watery Grave(RAV)》
  • 《闇滑りの岸/Darkslick Shores(SOM)》
  • 《鉱滓造の橋/Drossforge Bridge(BRC)》
  • 《血の墓所/Blood Crypt(UNF)》
  • 《竜髑髏の山頂/Dragonskull Summit(WHO)》
  • 《燻る湿地/Smoldering Marsh(WHO)》
  • 《硫黄泉/Sulfurous Springs(OTC)》
  • 《黒割れの崖/Blackcleave Cliffs(ZNE)》
  • 《崩れゆく死滅都市/Crumbling Necropolis(WHO)》
  • 《ザンダーの居室/Xander's Lounge(SNC)》
  • 《統率の塔/Command Tower(ZNC)》
  • 《風変わりな果樹園/Exotic Orchard(WOC)》
  • 《汚染された三角州/Polluted Delta(ZNE)》
  • 《血染めのぬかるみ/Bloodstained Mire(ZNE)》
  • 《灰のやせ地/Ash Barrens(WHO)》
  • 《埋没した廃墟/Buried Ruin(PIP)》
  • 《フォモーリの宝物庫/Fomori Vault(BIG)》
  • 《ヨーグモスの墳墓、アーボーグ/Urborg, Tomb of Yawgmoth(LTC)》
  • 3《島/Island》
  • 3《沼/Swamp》
  • 3《山/Mountain》

今後の展望

  • マナカーブの最適化。
    • やはり重いデッキではあるので。
  • 《無限の日時計/Sundial of the Infinite》の検討
    • ミシュラの「ターン終了時に生け贄に捧げる」を無効化。

どちらにしても「高速のミシュラ配置」がキーであることに違いはないです。

VPSをWebArena→XServerへと切り替えたときのメモ。

2024年9月から利用してきた WebARENA VPS を XServer VPS に切り替えました。
理由は大きく分けて以下の3点です。

1. 物理的リソースの逼迫

旧環境では、以下のアプリが同時稼働していました。

この構成ではメモリ使用量が常に高止まりし、スワップ発生も頻繁。
安定運用のためには、より余裕のある環境が必要でした。

2. キャンペーン終了によるコスト増

WebARENA VPS の 4GB プランはキャンペーン中であれば 月額約980円 と魅力的でしたが、
終了後は 月額約1,600円 に上昇。コスト面の優位性が失われました。

3. XServer VPS を選んだ理由

  • 既にこの WordPress をホストしている会社で信頼性が高い
  • 同価格帯でも メモリ6GB と余裕がある
  • NVMe SSD 搭載でストレージ速度が段違い
  • 年額契約でキャンペーン終了後も料金安定
  • 最終的にWebARENA 4GB プランより安くなる

サーバ移行のタイムライン

  • 8/03 : 契約、初期設定(UFW / fail2ban)
  • 8/04 : 負荷試験を兼ねて Growi 導入(Apache / MongoDB / Elasticsearch / Node)
  • 8/05 : MySQL 導入
  • 8/06 : ModSecurity 導入
  • 8/07 : PHP-FPM 導入、Wasabi 接続、Nextcloud・BookStack・Laravel アプリ移行
    • この時点で「Growiを削除しなくてもいける」と確信
  • 8/08 : Redmine 6.0 新規構築に挑戦 → DB移行でエラー
    • 方針転換し Redmine 5.1 を移植(公開用)
  • 8/09 : 残りの Redmine 2件も移行完了、DNS 切替、WebARENA 解約

結果: 7日間で全サービス移行完了。Growi 常駐のまま全サイトを載せられたのは想定外というか、嬉しすぎる誤算でした。

スペック比較

項目WebARENA(旧)XServer(新)変化
CPUXeon E3-12xx (2011年)AMD EPYC Milan (2021年)大幅性能向上
vCPUコア数4コア4コア同等
メモリ4GB6GB1.5倍
ストレージ80GB SSD150GB NVMe SSD約1.9倍+高速化
ネットワーク500Mbps100Mbps低下
月額料金約1,630円(終了後)1,439円(年額換算)安価

新環境のメモリ状況

free -h
               total        used        free      shared  buff/cache   available
Mem:           5.8Gi       2.1Gi       1.6Gi       121Mi       2.5Gi       3.6Gi
Swap:          2.0Gi       623Mi       1.4Gi

Growi(MongoDB + Elasticsearch + Node)常駐のままで 3.6GiB available
旧環境より明確に余裕があり、スワップも軽減。

感想と今後

  • 前払いの安心感:年額払いで価格変動リスクなし
  • サービス統合効果:VPSとレンタルサーバを同社で一元管理
  • 展望:Redmine 6.0 アップデート挑戦、または5.1での堅牢運用

個人的に、NWの転送速度をサーバのリソースで解決するパワープレイができたのが安心です。

公開用Redmineのサーバ移行。

一般公開しているRedmine「クーケン島観光ガイド」、新規VPS、XServerへの移行に伴いデータの移設を行いました。

の構成はそのまま。コンテンツもそのまま移植しています。

ここに至るまで盛大にハマりましたが、なんとかなりました。

この時の記事は改めて記載します。

Page 1 of 264

Powered by WordPress & Theme by Anders Norén