<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sheltie Garage Tech</title>
	<atom:link href="https://sheltie-garage.xyz/tech/feed/" rel="self" type="application/rss+xml" />
	<link>https://sheltie-garage.xyz/tech/</link>
	<description>テクノロジー関連の話題をまとめたブログです</description>
	<lastBuildDate>Sun, 05 Apr 2026 12:11:19 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Gemma4をOllamaから利用してみる</title>
		<link>https://sheltie-garage.xyz/tech/2026/04/gemma4%e3%82%92ollama%e3%81%8b%e3%82%89%e5%88%a9%e7%94%a8%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/</link>
					<comments>https://sheltie-garage.xyz/tech/2026/04/gemma4%e3%82%92ollama%e3%81%8b%e3%82%89%e5%88%a9%e7%94%a8%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/#respond</comments>
		
		<dc:creator><![CDATA[monodon]]></dc:creator>
		<pubDate>Sun, 05 Apr 2026 12:11:17 +0000</pubDate>
				<category><![CDATA[機械学習]]></category>
		<guid isPermaLink="false">https://sheltie-garage.xyz/tech/?p=1363</guid>

					<description><![CDATA[<p>といっても、正直記事にする必要が無いくらい簡単に利用できます・・・ まずはOllamaをインストール 公式ページからダウンロードしますhttps://ollama.com/ 表示されているコマンドをターミナルに貼り付けて [&#8230;]</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2026/04/gemma4%e3%82%92ollama%e3%81%8b%e3%82%89%e5%88%a9%e7%94%a8%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/">Gemma4をOllamaから利用してみる</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p>といっても、正直記事にする必要が無いくらい簡単に利用できます・・・</p>



<h2 class="wp-block-heading">まずはOllamaをインストール</h2>



<p>公式ページからダウンロードします<br><a href="https://ollama.com/" target="_blank" rel="noreferrer noopener">https://ollama.com/</a></p>



<p>表示されているコマンドをターミナルに貼り付けて実行すればollamaがセットアップされます</p>



<h2 class="wp-block-heading">Gemma4をインストールする</h2>



<p>Gemma4について、Gemma4自身に聞いてみたら以下の回答が返ってきました</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>君自身について紹介してほしい
Gemma4は誰が作成して、いつ公開されたのか・・</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>ご質問ありがとうございます。私自身についてご紹介させていただきますね。&#x2728;

私は**Gemma 4（ジェマ フォー）**という名前の大規模言語モデル（Large Language Model: LLM）です。

&#x1f916; 基本情報
モデル名: Gemma 4
開発元: Google DeepMind（グーグル・ディープマインド）
モデルの性質: 私は「オープンウェイト」モデルとして設計され、研究者や開発者の皆様がより幅広く、責任を持ってAIの技術を活用していただくことを目的として公開されています。
&#x2699; 私の仕組みと得意なこと
私は、膨大な量のテキストデータやコードデータを用いてトレーニングされた結果、人間が使う自然な言葉のパターン、論理的な推論、そしてプログラミングの構造を理解することができます。

具体的には、以下のようなことが可能です。

知識の提供: 幅広いトピックについて、正確で包括的な情報を提供します。
対話: 人間との会話の流れを理解し、自然な会話を続けることができます。
論理的推論: 指示された手順に従って思考し、問題を分解して解決策を導き出すことができます。
コーディング: プログラミングのコード生成、レビュー、デバッグ、最適化を行うことができます。（これはさきほどのプログラミングのお手伝いに活かせる部分です）
&#x1f4c5; 公開について
「いつ公開されたか」という点については、継続的に改良が加えられている最先端の技術基盤の上に成り立っています。私はGoogle DeepMindによって継続的に研究・開発され、その最新の成果として、オープンな形で開発者コミュニティの皆様に提供されています。

要約すると、私はGoogle DeepMindが生み出した、オープンな知性を搭載したAIアシスタントです。

私について何かご不明な点や、試してみたいことはありますか？何でもお気軽にお尋ねください！</code></pre></div>



<p>回答内に（これはさきほどのプログラミングのお手伝いに活かせる部分です）とありますが<br>これは事前に「プログラミングできる？」と質問していたからです</p>



<p>本題のGemma4のセットアップですが、ollama導入後にプロンプトに以下を入力するだけです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>ollama run gemma4:[利用したいモデルの種類]</code></pre></div>



<p>後は自動でモデルのダウンロードが行われ、ダウンロードが終了すればターミナルからでも、GUI画面からでも利用できるようになります</p>



<h2 class="wp-block-heading">早速使ってみる</h2>



<p>今回はollamaのGUIから少し使ってみました<br>まずは挨拶から</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="518" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/04/スクリーンショット-2026-04-05-20.41.57-1024x518.png" alt="" class="wp-image-1364" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/04/スクリーンショット-2026-04-05-20.41.57-1024x518.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/04/スクリーンショット-2026-04-05-20.41.57-300x152.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/04/スクリーンショット-2026-04-05-20.41.57-768x388.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/04/スクリーンショット-2026-04-05-20.41.57-1536x776.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/04/スクリーンショット-2026-04-05-20.41.57.png 1662w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>無事に実行できました！<br>ちなみに自分が利用しているPCの環境は<br>・MacBookPro 2019年モデル<br>・CPU Intel 2.6GHz<br>・メモリ 16GB<br>ということで、正直AIで遊びにはかなり厳しい環境です・・・</p>



<p>ということで今回はエッジデバイス向けの「gemma4:e4b」を使ってます</p>



<p>モデルの種類が何種類かありますが<br>・gemma4:e2b、e4b→エッジデバイス向け<br>・gemma4:26b 31b→ワークステーション向け<br>ということで、当然ながらワークステーション向けのほうがベンチマークは良い結果が出力されています</p>



<p>お金があれば、26bや31bのモデルも動かしてみたいものです・・・</p>



<h2 class="wp-block-heading">色々応用ができそうなGemma4</h2>



<p>ということでGemma4のすごく簡単な紹介でした！<br>個人のPCでも動作可能で、しかも商用利用も可能という、夢が広がるモデルです！</p>



<p>個人的には、ChatGPTやClaude が利用制限に引っかかってしまったときの代替モデルとして利用できないかなーと考えたりしています<br>が、PCスペックが貧弱だから厳しいかなぁ・・・</p>



<p></p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2026/04/gemma4%e3%82%92ollama%e3%81%8b%e3%82%89%e5%88%a9%e7%94%a8%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/">Gemma4をOllamaから利用してみる</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sheltie-garage.xyz/tech/2026/04/gemma4%e3%82%92ollama%e3%81%8b%e3%82%89%e5%88%a9%e7%94%a8%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>LocalでローカルWordPressを構築する</title>
		<link>https://sheltie-garage.xyz/tech/2026/03/local%e3%81%a7%e3%83%ad%e3%83%bc%e3%82%ab%e3%83%abwordpress%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b/</link>
					<comments>https://sheltie-garage.xyz/tech/2026/03/local%e3%81%a7%e3%83%ad%e3%83%bc%e3%82%ab%e3%83%abwordpress%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b/#respond</comments>
		
		<dc:creator><![CDATA[monodon]]></dc:creator>
		<pubDate>Sat, 21 Mar 2026 12:08:34 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<guid isPermaLink="false">https://sheltie-garage.xyz/tech/?p=1347</guid>

					<description><![CDATA[<p>会社で使っているWordPressのプラグインが長らく更新されておらず、安全にバージョンアップできるか検証を行うため、ローカルにWordPressを構築することにしました Localを使用してみる docker comp [&#8230;]</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2026/03/local%e3%81%a7%e3%83%ad%e3%83%bc%e3%82%ab%e3%83%abwordpress%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b/">LocalでローカルWordPressを構築する</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p>会社で使っているWordPressのプラグインが長らく更新されておらず、安全にバージョンアップできるか検証を行うため、ローカルにWordPressを構築することにしました</p>



<h2 class="wp-block-heading">Localを使用してみる</h2>



<p>docker composeで構築してもよいでのすが、もう少し簡単にできないかなと思い、今回は<a href="https://localwp.com/" target="_blank" rel="noreferrer noopener">Local</a>というツールを利用することにしました<br>実際にサイト構築までやってみます</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="602" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.31.39-1024x602.png" alt="" class="wp-image-1348" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.31.39-1024x602.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.31.39-300x176.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.31.39-768x452.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.31.39.png 1370w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>まずは公式ページのDownloadからダウンロード<br>ダンロード時はメールアドレスが必要でした<br>その後、インストールを実施し、Localを実行します</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="682" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.37.40-1024x682.png" alt="" class="wp-image-1349" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.37.40-1024x682.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.37.40-300x200.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.37.40-768x512.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.37.40-1536x1023.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.37.40-2048x1364.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>初期はこんな感じ<br>Create a new siteをクリックして新しいサイトを作成します</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="685" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.38.27-1024x685.png" alt="" class="wp-image-1350" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.38.27-1024x685.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.38.27-300x201.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.38.27-768x513.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.38.27-1536x1027.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.38.27-2048x1369.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Create a new siteを選択してContinueをクリックします</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="686" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.39.47-1024x686.png" alt="" class="wp-image-1351" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.39.47-1024x686.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.39.47-300x201.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.39.47-768x515.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.39.47-1536x1029.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.39.47-2048x1372.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>サイト名を入れます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="685" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.40.39-1024x685.png" alt="" class="wp-image-1352" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.40.39-1024x685.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.40.39-300x201.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.40.39-768x514.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.40.39-1536x1027.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.40.39-2048x1370.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>PreferredかCustomを選択します<br>PHPバージョンやHTTPサーバー、DBを変更したい場合はCustomを選択します</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="689" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.42.12-1024x689.png" alt="" class="wp-image-1353" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.42.12-1024x689.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.42.12-300x202.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.42.12-768x517.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.42.12-1536x1033.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.42.12-2048x1378.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>ユーザー名、パスワード、メールアドレスを設定します</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="686" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.45.50-1024x686.png" alt="" class="wp-image-1354" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.45.50-1024x686.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.45.50-300x201.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.45.50-768x514.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.45.50-1536x1029.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.45.50-2048x1372.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>サイトが追加されました<br>起動した状態で追加されるようなので、右上のWP Adminをクリックして管理画面を表示します</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="496" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.47.23-1024x496.png" alt="" class="wp-image-1355" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.47.23-1024x496.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.47.23-300x145.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.47.23-768x372.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.47.23.png 1291w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>WP Adminをクリックすると、いつものWordPressログイン画面になるので設定したユーザーIDとパスワードでログインします<br>以上で、WordPressのローカル構築は完了しました<br>これで、心置きなく検証が行えますね!</p>



<h2 class="wp-block-heading">その他</h2>



<p>バックアップからの復元など、大きなファイルをアップロードする場合、色々設定が変更になると思います<br></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="513" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.49.50-1024x513.png" alt="" class="wp-image-1356" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.49.50-1024x513.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.49.50-300x150.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.49.50-768x384.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.49.50-1536x769.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.49.50.png 1770w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Site folderをクリックすると、サイトを構成するファイル群にアクセスできます</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="688" height="282" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.51.05.png" alt="" class="wp-image-1357" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.51.05.png 688w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/03/スクリーンショット-2026-03-21-20.51.05-300x123.png 300w" sizes="auto, (max-width: 688px) 100vw, 688px" /></figure>



<p>appにWordPress、confにnginxなどの設定ファイルが入っています</p>



<h2 class="wp-block-heading">いったん、以上</h2>



<p>ざっとですがLocalの紹介でした<br>GUIベースでWordPressを構築できるので、これなら非エンジニアの方でも簡単にWordPressを構築できそうです</p>


<div id="rinkerid1358" class="yyi-rinker-contents  yyi-rinker-postid-1358 yyi-rinker-img-m yyi-rinker-catid-6 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fwordpress%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/9405/9784815609405_1_6.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fwordpress%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">1冊ですべて身につくWordPress入門講座 [ Mana ]</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥2,200</span>
															<span class="price_at">(2026/04/05 21:11:25時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=wordpress&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fwordpress%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3Dwordpress" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>


<div id="rinkerid1359" class="yyi-rinker-contents  yyi-rinker-postid-1359 yyi-rinker-img-m yyi-rinker-catid-6 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fwordpress%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/4214/9784802614214_1_4.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fwordpress%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">HTMLサイトをWordPressにする本 [ 久保田 涼子 ]</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥2,640</span>
															<span class="price_at">(2026/04/05 21:11:25時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=wordpress&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fwordpress%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3Dwordpress" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2026/03/local%e3%81%a7%e3%83%ad%e3%83%bc%e3%82%ab%e3%83%abwordpress%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b/">LocalでローカルWordPressを構築する</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sheltie-garage.xyz/tech/2026/03/local%e3%81%a7%e3%83%ad%e3%83%bc%e3%82%ab%e3%83%abwordpress%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>docker composeのaliasesを利用してみる</title>
		<link>https://sheltie-garage.xyz/tech/2026/02/docker-compose%e3%81%aealiases%e3%82%92%e5%88%a9%e7%94%a8%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/</link>
					<comments>https://sheltie-garage.xyz/tech/2026/02/docker-compose%e3%81%aealiases%e3%82%92%e5%88%a9%e7%94%a8%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/#respond</comments>
		
		<dc:creator><![CDATA[monodon]]></dc:creator>
		<pubDate>Mon, 23 Feb 2026 11:20:08 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<guid isPermaLink="false">https://sheltie-garage.xyz/tech/?p=1343</guid>

					<description><![CDATA[<p>個人開発で開発しているWebアプリは「ブルー/グリーンデプロイメント」を採用していて、docker-composeのサービス名もblue、greenで分けていました そこで発生した問題が「別アプリから接続する時、サービス [&#8230;]</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2026/02/docker-compose%e3%81%aealiases%e3%82%92%e5%88%a9%e7%94%a8%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/">docker composeのaliasesを利用してみる</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p>個人開発で開発しているWebアプリは「ブルー/グリーンデプロイメント」を採用していて、docker-composeのサービス名もblue、greenで分けていました</p>



<p>そこで発生した問題が「別アプリから接続する時、サービス名がblue、greenで切り替わってしまうと接続できなくなる」というもの<br>今回はdocker composeのaliases機能を利用して、上記問題に対処しました</p>



<h2 class="wp-block-heading">aliases機能とは?</h2>



<p>ChatGPTに聞いてみたところ「同じネットワーク内で、そのサービスに対する“追加のホスト名”を付ける機能」とのこと<br>念の為<a href="https://docs.docker.com/reference/compose-file/services/#networks">公式ドキュメント</a>を見てみると「ネットワーク上のサービスの代替ホスト名を宣言します」とのこと<br>ChatGPTの説明で大丈夫そうですね</p>



<p>ということで、aliasesを使用すると、同一のdocker network内でaliasesで指定したホスト名でもサービスが動いているコンテナにアクセスできるようになります</p>



<p>自分のプロジェクトでは以下のように設定しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>    networks:
      ride_webservice_network:
        aliases:
          - ride-batch</code></pre></div>



<p>冒頭で紹介した通り、ブルーグリーンデプロイメントを行うために、サービス名をそれぞれブルー/グリーンで分けており、サービス名だけを頼りに接続設定を行うとデプロイのタイミングで通信が行えなくなります<br>上記のようにaliasesを設定しておくことで、ブルー/グリーンが入れ替わっても「ride-batch」という名称を接続が行えるようになります</p>



<h2 class="wp-block-heading">以上</h2>



<p>ということで、短いですがdocker composeのaliasesという機能の紹介でした</p>



<p>docker composeも環境構築のための最低限の機能しか利用していなかったのですが、調べてみると便利機能が色々ありそうです<br>最近ではAIに気兼ね無く聞くことができるので、開発もインフラ関連も新しい発見だらけで勉強になりますわ</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2026/02/docker-compose%e3%81%aealiases%e3%82%92%e5%88%a9%e7%94%a8%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/">docker composeのaliasesを利用してみる</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sheltie-garage.xyz/tech/2026/02/docker-compose%e3%81%aealiases%e3%82%92%e5%88%a9%e7%94%a8%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Conohaちゃん壊れる</title>
		<link>https://sheltie-garage.xyz/tech/2026/02/conoha%e3%81%a1%e3%82%83%e3%82%93%e5%a3%8a%e3%82%8c%e3%82%8b/</link>
					<comments>https://sheltie-garage.xyz/tech/2026/02/conoha%e3%81%a1%e3%82%83%e3%82%93%e5%a3%8a%e3%82%8c%e3%82%8b/#respond</comments>
		
		<dc:creator><![CDATA[monodon]]></dc:creator>
		<pubDate>Sun, 08 Feb 2026 11:20:38 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<guid isPermaLink="false">https://sheltie-garage.xyz/tech/?p=1327</guid>

					<description><![CDATA[<p>先日ConoHaちゃんでディスク障害があったようです。 自分はVer3.0を利用しており、収容先ホストが変更となった対象にも含まれていたので、おそらく障害の影響を受けてしまったようです。 何が起こったか 症状として、Dc [&#8230;]</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2026/02/conoha%e3%81%a1%e3%82%83%e3%82%93%e5%a3%8a%e3%82%8c%e3%82%8b/">Conohaちゃん壊れる</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p>先日ConoHaちゃんでディスク障害があったようです。</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="oceanwp-oembed-wrap clr"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="ja" dir="ltr">【障害復旧のお知らせ】<br>ConoHa VPSおよびConoHa for GAMEの一部サーバーにおいて障害が発生しておりましたが、現在は復旧いたしました。<br><br>ご利用のお客様には大変ご不便をおかけいたしましたことを深くお詫び申しあげます。<br><br>詳細については、以下をご確認ください。<br>▼VPS<a href="https://t.co/soJE8Uq5F9">https://t.co/soJE8Uq5F9</a></p>&mdash; ConoHaPR (@ConoHaPR) <a href="https://twitter.com/ConoHaPR/status/2017171396443734506?ref_src=twsrc%5Etfw">January 30, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<p>自分はVer3.0を利用しており、収容先ホストが変更となった対象にも含まれていたので、おそらく障害の影響を受けてしまったようです。</p>



<h2 class="wp-block-heading">何が起こったか</h2>



<p>症状として、Dcokerコンテナが起動できなくなり、Dockerデーモンの再起動を試してみたらDockerデーモンも起動できなくなった、という症状が起きました。</p>



<p>復旧のため、VPSを再起動したら今度はVPSも起動できなくなった、という流れです。初めての出来事だったため、かなり焦りました</p>



<h2 class="wp-block-heading">復旧方法</h2>



<p>VPSに関してはConoHaのWebコンソールからログインを行い、復旧しました</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="456" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20280208_002-1024x456.png" alt="" class="wp-image-1339" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20280208_002-1024x456.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20280208_002-300x134.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20280208_002-768x342.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20280208_002-1536x685.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20280208_002-2048x913.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>サーバー一覧のコンソールをクリックすればWebコンソール画面にアクセスできます。<br>余談ですが、ConoHaのコントロールパネルがバレンタイン仕様になっていて、とても可愛いです！</p>



<p>ここからはスクショを撮っておらず記憶ベースになりますが、以下の作業で復旧させました</p>



<h3 class="wp-block-heading">rootユーザーでログイン</h3>



<p>VPSの起動に失敗していると、「rootユーザーでログインすると、メンテナンスモードになります」のような画面が表示されているので、rootユーザーでログインします</p>



<h3 class="wp-block-heading">システムログ確認</h3>



<p>以下のコマンドでシステムログを確認します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>journalctl -xb</code></pre></div>



<p>今回のケースでは、以下のようなエラーが発生していました</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>/dev/vda2 ファイルの整合性が壊れている(UNEXPECTED INCONSISTENCY: RUN fsck MANUALLYのような表記)</code></pre></div>



<h3 class="wp-block-heading">ファイルシステムの復旧</h3>



<p>ログに出力されていた通り、fsckを利用してファイルシステムのチェックと復旧を行います</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>fsck -y /dev/vda2</code></pre></div>



<p>-yオプションはエラーを自動で復旧するオプションです。これがないとエラーを修正する際、毎回聞かれます<br>自分の場合、修正数が多かったため-yオプションを付けてすべて復旧としました</p>



<p>fsckコマンドが終了したら、VPSを再起動して正常に起動するか確認します</p>



<h2 class="wp-block-heading">Dockerファイルシステムの復旧(は、できなかった・・・)</h2>



<p>VPSはfsckで復旧しましたが、Dockerは起動できないままでした。<br>エラーを確認するとDockerが管理しているファイルシステムが破損している可能性があり、もっとも簡単な復旧方法は/va/lin/dockerディレクトリの作り直しでした(要するに、Dockerコンテナに関連するすべての設定やファイルを失う)</p>



<p>自分の場合、対象がWebサーバーだったので残しておきたいデータが無く、簡単に復旧する可能性がある方法としてDockerファイルを削除する方法で対処しました。<br>行ったことは以下のコマンドを実行しただけです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>mv /var/log/docker /var/log/docker.broken
mkdir /var/log/docker</code></pre></div>



<p>ディレクトリを作り直した後、Dockerデーモンの起動、各種Dockerコンテナが正しく起動するようになりました<br>ただし、Dockerのネットワーク設定や、ボリューム設定も消えてしまっているため、これらの設定は戻す必要があります</p>



<h2 class="wp-block-heading">以上です</h2>



<p>今夏はVPSのハードウェア故障というなかなかにレアな障害に遭遇しました。<br>幸い、Webサーバーだったため失っても良いデータしか保存されていなかったのが幸いです。</p>



<p>後は環境はdocker-composeで管理していたため、環境復旧もかなり簡単に行うことができました。<br>今回は色々と運が良かったと思います。</p>



<p>ただ、これがDB環境だったら話が変わってきますね。<br>DBデータはmysqldumpでバックアップは取っていますが、正しく復元できるかなど、訓練を行っておいたほうが良さそうです。<br>オブジェクトストレージについては・・・　流石に壊れないと思っています・・・</p>


<div id="rinkerid1340" class="yyi-rinker-contents  yyi-rinker-postid-1340 yyi-rinker-img-m yyi-rinker-catid-6 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FLinux%2B%25E3%2582%25B3%25E3%2583%259E%25E3%2583%25B3%25E3%2583%2589%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/4044/9784774174044.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FLinux%2B%25E3%2582%25B3%25E3%2583%259E%25E3%2583%25B3%25E3%2583%2589%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">［改訂第3版］Linuxコマンドポケットリファレンス （ポケットリファレンス） [ 沓名亮典 ]</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥2,618</span>
															<span class="price_at">(2026/04/05 21:11:41時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=Linux+%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FLinux%2B%25E3%2582%25B3%25E3%2583%259E%25E3%2583%25B3%25E3%2583%2589%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3DLinux%2B%25E3%2582%25B3%25E3%2583%259E%25E3%2583%25B3%25E3%2583%2589" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2026/02/conoha%e3%81%a1%e3%82%83%e3%82%93%e5%a3%8a%e3%82%8c%e3%82%8b/">Conohaちゃん壊れる</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sheltie-garage.xyz/tech/2026/02/conoha%e3%81%a1%e3%82%83%e3%82%93%e5%a3%8a%e3%82%8c%e3%82%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cloudflare無料版に海外からのアクセスブロック設定を導入する</title>
		<link>https://sheltie-garage.xyz/tech/2026/02/cloudflare%e7%84%a1%e6%96%99%e7%89%88%e3%81%ab%e6%b5%b7%e5%a4%96%e3%81%8b%e3%82%89%e3%81%ae%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%83%96%e3%83%ad%e3%83%83%e3%82%af%e8%a8%ad%e5%ae%9a%e3%82%92%e5%b0%8e/</link>
					<comments>https://sheltie-garage.xyz/tech/2026/02/cloudflare%e7%84%a1%e6%96%99%e7%89%88%e3%81%ab%e6%b5%b7%e5%a4%96%e3%81%8b%e3%82%89%e3%81%ae%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%83%96%e3%83%ad%e3%83%83%e3%82%af%e8%a8%ad%e5%ae%9a%e3%82%92%e5%b0%8e/#respond</comments>
		
		<dc:creator><![CDATA[monodon]]></dc:creator>
		<pubDate>Sun, 01 Feb 2026 12:39:21 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<guid isPermaLink="false">https://sheltie-garage.xyz/tech/?p=1328</guid>

					<description><![CDATA[<p>Cloudflareに設定した国以外からのアクセスをブロックする設定を追加しました TraefikとCloudflareが干渉してサイトアクセス不可に！ 自分のサイトはTraefikに特定の国以外からのアクセスはブロック [&#8230;]</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2026/02/cloudflare%e7%84%a1%e6%96%99%e7%89%88%e3%81%ab%e6%b5%b7%e5%a4%96%e3%81%8b%e3%82%89%e3%81%ae%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%83%96%e3%83%ad%e3%83%83%e3%82%af%e8%a8%ad%e5%ae%9a%e3%82%92%e5%b0%8e/">Cloudflare無料版に海外からのアクセスブロック設定を導入する</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p>Cloudflareに設定した国以外からのアクセスをブロックする設定を追加しました</p>



<h2 class="wp-block-heading">TraefikとCloudflareが干渉してサイトアクセス不可に！</h2>



<p>自分のサイトはTraefikに特定の国以外からのアクセスはブロックする設定を入れていました</p>



<p>先日Cloudflare無料版を導入し、しばらく問題なく動作していたのですが、ある日突然403エラーが発生し、サイトにアクセスできなくなってしまいました<br>Traefikのログを確認すると、[SG](シンガポール)からのアクセスのため遮断されたことがわかりましたが、VPNを使用しているわけでもなく、国内からのアクセスがシンガポールとして検知されてる原因が、この時点ではわかりませんでした</p>



<p>ログ内に残っていたIPアドレスを確認すると、シンガポールに設置されたCloudflareのサーバーと判明！<br>今まではおそらく国内に設置されていたエッジサーバーからのアクセスだったため問題なくサイトが動作していましたが、何かのタイミングでエッジサーバーがシンガポールに変わってしまい、国外アクセスとみなされブロックされたようです</p>



<h2 class="wp-block-heading">Cloudflareに特定の国からのアクセスはブロックする設定を導入する</h2>



<p>ここから本題ですが、Cloudflare無料版にも、指定した国から(またはそれ以外から)のアクセスをブロックするための設定があることがわかりました<br>そこで、Traefikのアクセスブロックは削除し、Cloudflare側で管理するようにしました</p>



<p>Cloudflare &gt; セキュリティ &gt; セキュリティルールから設定できます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="443" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_002-1024x443.png" alt="" class="wp-image-1329" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_002-1024x443.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_002-300x130.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_002-768x332.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_002-1536x664.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_002-2048x885.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>今回は「日本」「アメリカ」からのアクセスのみ許可する設定を導入します<br>(Xアカウント連携を使用している関係で、アメリカからのアクセスも許可する必要がありました)</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="216" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_003-1024x216.png" alt="" class="wp-image-1330" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_003-1024x216.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_003-300x63.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_003-768x162.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_003-1536x324.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_003-2048x432.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>赤枠内のルールを作成からルールが作成できます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="675" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_004-1024x675.png" alt="" class="wp-image-1331" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_004-1024x675.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_004-300x198.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_004-768x506.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_004-1536x1012.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2026/02/20260201_004-2048x1349.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>設定内容は上記のようにしました<br>上記例では直接式を記載していますが、「式ビルダーを使用」をクリックするとGUIを利用してルールを作成できます<br>今回は「日本とアメリカ以外はブロック(日本でもない、かつ、アメリカでもない国はブロック)」というルールとしました</p>



<p>ちなみに、無料版では5つまでルールが作成できます</p>



<h2 class="wp-block-heading">以上です</h2>



<p>Cloudflareで特定の国からのアクセスをブロックする機能を紹介しました<br>ウェブサイトを公開していると、セキュリティや特定の国のみにサービスを提供したいという理由などでアクセスブロックは頻繁に利用される機能かと思います</p>



<p>Cloudflareでは標準で機能として準備されており、かつ無料版でも利用できるというのがありがたいですね<br>うまく活用して、サイトのセキュリティを高めましょう！</p>


<div id="rinkerid1332" class="yyi-rinker-contents  yyi-rinker-postid-1332 yyi-rinker-img-m yyi-rinker-catid-6 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FCloudFlare%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/rakutenkobo-ebooks/cabinet/9052/2000016769052.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FCloudFlare%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">Mastering Cloudflare Optimizing Security, Performance, and Reliability for the Web【電子書籍】[ Robert Johnson ]</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥1,437</span>
															<span class="price_at">(2026/04/05 21:11:25時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=CloudFlare&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FCloudFlare%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3DCloudFlare" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>


<div id="rinkerid809" class="yyi-rinker-contents  yyi-rinker-postid-809 yyi-rinker-img-m yyi-rinker-catid-6 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://www.amazon.co.jp/dp/4908686106?tag=monodon-22&#038;linkCode=ogi&#038;th=1&#038;psc=1" rel="nofollow"><img decoding="async" src="https://m.media-amazon.com/images/I/51gxWVO4BIL._SL160_.jpg" width="112" height="160" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a>					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://www.amazon.co.jp/dp/4908686106?tag=monodon-22&#038;linkCode=ogi&#038;th=1&#038;psc=1" rel="nofollow">Webブラウザセキュリティ Webアプリケーションの安全性を支える仕組みを整理する</a>							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=Cookie+web&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FCookie%2Bweb%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3DCookie%2Bweb" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2026/02/cloudflare%e7%84%a1%e6%96%99%e7%89%88%e3%81%ab%e6%b5%b7%e5%a4%96%e3%81%8b%e3%82%89%e3%81%ae%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%83%96%e3%83%ad%e3%83%83%e3%82%af%e8%a8%ad%e5%ae%9a%e3%82%92%e5%b0%8e/">Cloudflare無料版に海外からのアクセスブロック設定を導入する</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sheltie-garage.xyz/tech/2026/02/cloudflare%e7%84%a1%e6%96%99%e7%89%88%e3%81%ab%e6%b5%b7%e5%a4%96%e3%81%8b%e3%82%89%e3%81%ae%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%83%96%e3%83%ad%e3%83%83%e3%82%af%e8%a8%ad%e5%ae%9a%e3%82%92%e5%b0%8e/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Go言語の単体テスト入門</title>
		<link>https://sheltie-garage.xyz/tech/2026/01/go%e8%a8%80%e8%aa%9e%e3%81%ae%e5%8d%98%e4%bd%93%e3%83%86%e3%82%b9%e3%83%88%e5%85%a5%e9%96%80/</link>
					<comments>https://sheltie-garage.xyz/tech/2026/01/go%e8%a8%80%e8%aa%9e%e3%81%ae%e5%8d%98%e4%bd%93%e3%83%86%e3%82%b9%e3%83%88%e5%85%a5%e9%96%80/#respond</comments>
		
		<dc:creator><![CDATA[monodon]]></dc:creator>
		<pubDate>Sun, 18 Jan 2026 12:02:17 +0000</pubDate>
				<category><![CDATA[Go]]></category>
		<guid isPermaLink="false">https://sheltie-garage.xyz/tech/?p=1323</guid>

					<description><![CDATA[<p>最近はバイブコーディングばっかり行っていて、中身の理解が進まないまま、でもテストでは動作に問題ないプログラムが出来上がっております。(個人開発) 本当にこれでいいのかという思いもあるため、最近は・AIにコードを作ってもら [&#8230;]</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2026/01/go%e8%a8%80%e8%aa%9e%e3%81%ae%e5%8d%98%e4%bd%93%e3%83%86%e3%82%b9%e3%83%88%e5%85%a5%e9%96%80/">Go言語の単体テスト入門</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p>最近はバイブコーディングばっかり行っていて、中身の理解が進まないまま、でもテストでは動作に問題ないプログラムが出来上がっております。(個人開発)</p>



<p>本当にこれでいいのかという思いもあるため、最近は<br>・AIにコードを作ってもらう<br>・中身をレビューしながら既存コードにマージ<br>みたいなことを行っております</p>



<p>さて、最近作成したプログラムで「単体テストするから、項目を箇条書きで出力して」とAIにお願いしたら、ご丁寧にGoのテストコードが出力された</p>



<p>「そうか、単体テストはもう手動で行う時代では無いのか」と思いつつ、いままでの経験上、ほとんどテストコードを書いたことが無いので、Go言語で単体テストをどうやって記述するのか、改めて学んでみることにした</p>



<h2 class="wp-block-heading">2段階認証の認証コードを生成するロジックを例に、内容を紐解く</h2>



<p>まずはAIが生成したテストコードは以下になります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>package service

import (
	&quot;testing&quot; // Goの標準テストパッケージ
)

// テスト関数は必ず &quot;Test&quot; で始まる
// 引数は *testing.T を受け取る
func TestGenerateVerificationCode(t *testing.T) {
	// テスト実行
	code, err := GenerateVerificationCode()
	
	// ========================================
	// アサーション（検証）
	// ========================================
	
	// 1. エラーがないことを確認
	if err != nil {
		t.Errorf(&quot;エラーが発生しました: %v&quot;, err)
		return // エラーがあったらここで終了
	}
	
	// 2. コードが6桁であることを確認
	if len(code) != 6 {
		t.Errorf(&quot;コードの長さが不正です。期待値: 6, 実際: %d&quot;, len(code))
	}
	
	// 3. コードが数字のみであることを確認
	for _, char := range code {
		if char &lt; &#39;0&#39; || char &gt; &#39;9&#39; {
			t.Errorf(&quot;数字以外の文字が含まれています: %s&quot;, code)
			break
		}
	}
	
	// ここまで来たらテスト成功！
	t.Logf(&quot;生成されたコード: %s&quot;, code) // ログ出力（-v オプションで表示）
}</code></pre></div>



<h3 class="wp-block-heading">テストコードファイル名</h3>



<p>Goのテストコードはテスト対象のファイル名 + _test.goとなる。大文字小文字の区別あり<br>これは<strong>必須条件</strong>で、Goでは_test.goのファイルを特別に扱う<br>・_test.goは本番バイナリに含まれない<br>・_test.goはgo buildでビルドされない<br>・_test.goはgo testでのみコンパイルされる<br>という特徴がある</p>



<h3 class="wp-block-heading">引数「t *testing.T」について</h3>



<p>tオブジェクトはテスト制御用オブジェクト<br>go testコマンドの実行で自動で設定される</p>



<p>以下のメソッドが呼び出された場合、テストは失敗となる</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>    t.Error(&quot;失敗&quot;)      
    t.Errorf(&quot;失敗&quot;)     
    t.Fatal(&quot;失敗&quot;)      
    t.Fatalf(&quot;失敗&quot;)     
    t.Fail()            
    t.FailNow()         </code></pre></div>



<p>逆にテスト関数が終了するまで上記関数が呼ばれなければ、テストは成功扱い<br>単純に情報を出力するだけであれば、Log(またはLogf)関数を利用する</p>



<h3 class="wp-block-heading">テストの実行方法</h3>



<p>テストの実行にはgo testコマンドを利用する</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>現在のフォルダ配下にあるテストすべてを実行
go test ./...

指定のパッケージのテストを実行
go test ./internal/service/ -v

指定のテストのみ実行
go test ./internal/service/ -v -run TestGenerateVerificationCode</code></pre></div>



<h3 class="wp-block-heading">基本的なアサーション</h3>



<p>基本的にはGo標準のlen関数や&lt;&gt;などの比較演算子を利用してアサーション(検証)を実行する</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>// エラーチェック
if err != nil {
    t.Errorf(&quot;エラーが発生: %v&quot;, err)
}

// 値の比較
if actual != expected {
    t.Errorf(&quot;期待値: %v, 実際: %v&quot;, expected, actual)
}

// 文字列の長さチェック
if len(str) != 6 {
    t.Errorf(&quot;長さが不正: 期待 6, 実際 %d&quot;, len(str))
}

// nilチェック
if value == nil {
    t.Error(&quot;値がnilです&quot;)
}

// 範囲チェック
if count &lt; 0 || count &gt; 100 {
    t.Errorf(&quot;範囲外: %d&quot;, count)
}</code></pre></div>



<p>以上の知識を得たうえで最初のテストコードを眺めてみると、実行していることは至ってシンプルで<br>・認証コード生成関数を実行<br>・実行結果を検証：エラーが発生していないか<br>・実行結果を検証：コードが6桁か<br>・実行結果を検証：すべて数字か<br>の検証を行っているだけの内容となる</p>



<h2 class="wp-block-heading">今後は積極的に使っていきたいテストコード</h2>



<p>以前勤務していた会社ではJava(JTest)を利用して単体テストコードを作成していたけど、モックの使い方などが独特で馴染めなかった記憶があります</p>



<p>Goに関しても、DBやキャッシュと行った部分にはモック的なものを利用する事になりそうですが、それらについては、また次の課題として取り組んでいこうと思います。</p>



<p>GitHubにCIの仕組みが導入されているので、単体テストコードの整備ができればプルリクのたびに自動でテストを実行し、危険なコードはマージを行わないようなワークフローが構築できますね</p>



<p>※記事中のプログラムには生成AIを利用したコードが含まれます</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2026/01/go%e8%a8%80%e8%aa%9e%e3%81%ae%e5%8d%98%e4%bd%93%e3%83%86%e3%82%b9%e3%83%88%e5%85%a5%e9%96%80/">Go言語の単体テスト入門</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sheltie-garage.xyz/tech/2026/01/go%e8%a8%80%e8%aa%9e%e3%81%ae%e5%8d%98%e4%bd%93%e3%83%86%e3%82%b9%e3%83%88%e5%85%a5%e9%96%80/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CloudFlare(無料枠)を自作Webアプリに導入</title>
		<link>https://sheltie-garage.xyz/tech/2025/12/cloudflare%e7%84%a1%e6%96%99%e6%9e%a0%e3%82%92%e8%87%aa%e4%bd%9cweb%e3%82%a2%e3%83%97%e3%83%aa%e3%81%ab%e5%b0%8e%e5%85%a5/</link>
					<comments>https://sheltie-garage.xyz/tech/2025/12/cloudflare%e7%84%a1%e6%96%99%e6%9e%a0%e3%82%92%e8%87%aa%e4%bd%9cweb%e3%82%a2%e3%83%97%e3%83%aa%e3%81%ab%e5%b0%8e%e5%85%a5/#respond</comments>
		
		<dc:creator><![CDATA[monodon]]></dc:creator>
		<pubDate>Mon, 08 Dec 2025 23:43:25 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<guid isPermaLink="false">https://sheltie-garage.xyz/tech/?p=1304</guid>

					<description><![CDATA[<p>始まりは1通のメールから・・・ サイトにはDataDogを入れていて、負荷が高い状態が一定時間続いたら個人Slackに通知が来るようになっていますが・・・、ちょうど友人とDiscord中にアラートが鳴っていたので対応でき [&#8230;]</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2025/12/cloudflare%e7%84%a1%e6%96%99%e6%9e%a0%e3%82%92%e8%87%aa%e4%bd%9cweb%e3%82%a2%e3%83%97%e3%83%aa%e3%81%ab%e5%b0%8e%e5%85%a5/">CloudFlare(無料枠)を自作Webアプリに導入</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p>始まりは1通のメールから・・・</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="962" height="732" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-001.png" alt="" class="wp-image-1305" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-001.png 962w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-001-300x228.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-001-768x584.png 768w" sizes="auto, (max-width: 962px) 100vw, 962px" /></figure>



<p>サイトにはDataDogを入れていて、負荷が高い状態が一定時間続いたら個人Slackに通知が来るようになっています<br>が・・・、ちょうど友人とDiscord中にアラートが鳴っていたので対応できなかったのですが、ちょうどDDos攻撃を受けていて負荷が高まっていたようです</p>



<p>結果、今回はConoHaさんの対応で攻撃は遮断されたわけですが、個人でも何かしらの対策をしなきゃいけないということで、CloudFlareの無料プランを利用してみることにしました</p>



<p>ちなみに、個人開発アプリは日本、アメリカ以外のアクセスはTraefikで遮断していますが、それでも攻撃を受けました<br>結局プロキシなどでアクセス元を偽装されれば意味ないですね</p>



<h2 class="wp-block-heading">早速CloudFlareに申し込んでみる</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="477" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-002-1024x477.png" alt="" class="wp-image-1306" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-002-1024x477.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-002-300x140.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-002-768x358.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-002-1536x716.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-002-2048x954.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>CloudFlareにアクセスすると、無料で始めるというボタンがあるので、そこをクリック<br>アカウント作成後、ドメインを指定する画面が出てくるので、導入したいドメインを設定します<br>AI Crawlerの設定はデフォルトにしました(全ページブロック)</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="526" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-003-1024x526.png" alt="" class="wp-image-1307" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-003-1024x526.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-003-300x154.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-003-768x394.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-003-1536x789.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-003-2048x1051.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>上記の画面の前に料金プランを選ぶ画面があるのでFree Planを選べばOK<br>次の画面でDNSレコードの追加が出てくるのでRecommendedの選択肢にチェックを入れてContinueをクリック</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="580" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-004-1024x580.png" alt="" class="wp-image-1308" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-004-1024x580.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-004-300x170.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-004-768x435.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-004-1536x870.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-004-2048x1159.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>CloudFlareが自動である程度のDNS設定を行ってくれるのですが、すべてのレコードを追加してくれるわけではありません<br>画面上部に注意が出ているように<strong>自動追加できなかったレコードは手動で追加する必要があります</strong><br>自分はここの注意書きをよく読まずそのまま続けてしまい、バックエンドのAPIと通信ができなくなりました<br>(自動でバックエンドAPIへのDNSが追加されておらず、それに気づかなかった・・・　英語だからとよく読まずに設定を進めたのが原因)</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="603" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-005-1024x603.png" alt="" class="wp-image-1309" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-005-1024x603.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-005-300x177.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-005-768x452.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-005-1536x905.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-005-2048x1206.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>このようにレコードが追加されます<br>すべてのDNSが追加されているか確認しましょう</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="571" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-006-1024x571.png" alt="" class="wp-image-1310" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-006-1024x571.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-006-300x167.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-006-768x429.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-006-1536x857.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-006-2048x1143.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>最後に、ネームサーバーの設定を変更して、CloudFlare経由でサイトにアクセスされるように変更します<br>自分はGMO ConoHaでDNSもドメインも管理しているので、ConoHaの管理画面からネームサーバーを変更します</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="727" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-007-1024x727.png" alt="" class="wp-image-1311" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-007-1024x727.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-007-300x213.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-007-768x546.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-007-1536x1091.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-007-2048x1455.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>ちなみに、ConoHaの場合DNSSECのオプションは無いようなので、特に設定はおこなませんでした</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="323" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-008-1024x323.png" alt="" class="wp-image-1312" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-008-1024x323.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-008-300x95.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-008-768x242.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-008-1536x485.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-008.png 1780w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="729" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-009-1024x729.png" alt="" class="wp-image-1313" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-009-1024x729.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-009-300x214.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-009-768x547.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-009-1536x1094.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-009.png 1730w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>ネームサーバー設定から、CloudFlareが指定したネームサーバーを指定します<br>他の設定は削除するよう書かれていたため、既存のネームサーバーは設定後削除しました</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="464" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-011-1024x464.png" alt="" class="wp-image-1314" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-011-1024x464.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-011-300x136.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-011-768x348.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-011-1536x696.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/12/20251209-011-2048x928.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>あとはCloudFlareが有効になると、メールで通知が飛んでいます<br>これでCloudFlareの設定は完了です</p>



<p>設定自体はそこまで難しくありませんが、英語のページが連続するのでそこだけちょっと大変かもしれません・・・</p>



<h2 class="wp-block-heading">終わりに</h2>



<p>今回はCloudFlareの無料プラン導入のステップを紹介しました<br>自分もまだ導入したばかりで、これから設定などをちゃんと見ていく段階です<br>一応、無料プランでもDDos Protectionが有効になっているので、同じ用にDDos攻撃を受けてサーバー負荷が上がらないか監視していこうと思います</p>



<p>それにしても、利用者が自分しか無い無いようなサーバーにDDos攻撃を仕掛けるなんて・・・　何が目的なのか？</p>


<div id="rinkerid809" class="yyi-rinker-contents  yyi-rinker-postid-809 yyi-rinker-img-m yyi-rinker-catid-6 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://www.amazon.co.jp/dp/4908686106?tag=monodon-22&#038;linkCode=ogi&#038;th=1&#038;psc=1" rel="nofollow"><img decoding="async" src="https://m.media-amazon.com/images/I/51gxWVO4BIL._SL160_.jpg" width="112" height="160" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a>					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://www.amazon.co.jp/dp/4908686106?tag=monodon-22&#038;linkCode=ogi&#038;th=1&#038;psc=1" rel="nofollow">Webブラウザセキュリティ Webアプリケーションの安全性を支える仕組みを整理する</a>							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=Cookie+web&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FCookie%2Bweb%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3DCookie%2Bweb" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>


<div id="rinkerid1315" class="yyi-rinker-contents  yyi-rinker-postid-1315 yyi-rinker-img-m yyi-rinker-catid-6 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FCloudFlare%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/rakutenkobo-ebooks/cabinet/6672/2000000696672.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FCloudFlare%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">Instant CloudFlare Starter【電子書籍】[ Jeff Dickey ]</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥2,287</span>
															<span class="price_at">(2026/04/05 21:11:42時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=CloudFlare&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FCloudFlare%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3DCloudFlare" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2025/12/cloudflare%e7%84%a1%e6%96%99%e6%9e%a0%e3%82%92%e8%87%aa%e4%bd%9cweb%e3%82%a2%e3%83%97%e3%83%aa%e3%81%ab%e5%b0%8e%e5%85%a5/">CloudFlare(無料枠)を自作Webアプリに導入</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sheltie-garage.xyz/tech/2025/12/cloudflare%e7%84%a1%e6%96%99%e6%9e%a0%e3%82%92%e8%87%aa%e4%bd%9cweb%e3%82%a2%e3%83%97%e3%83%aa%e3%81%ab%e5%b0%8e%e5%85%a5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker Composeで構築した本番環境のログ確認環境をGrafana + Loki + Promtailで構築する</title>
		<link>https://sheltie-garage.xyz/tech/2025/11/docker-compose%e3%81%a7%e6%a7%8b%e7%af%89%e3%81%97%e3%81%9f%e6%9c%ac%e7%95%aa%e7%92%b0%e5%a2%83%e3%81%ae%e3%83%ad%e3%82%b0%e7%a2%ba%e8%aa%8d%e7%92%b0%e5%a2%83%e3%82%92grafana-loki-promtail/</link>
					<comments>https://sheltie-garage.xyz/tech/2025/11/docker-compose%e3%81%a7%e6%a7%8b%e7%af%89%e3%81%97%e3%81%9f%e6%9c%ac%e7%95%aa%e7%92%b0%e5%a2%83%e3%81%ae%e3%83%ad%e3%82%b0%e7%a2%ba%e8%aa%8d%e7%92%b0%e5%a2%83%e3%82%92grafana-loki-promtail/#respond</comments>
		
		<dc:creator><![CDATA[monodon]]></dc:creator>
		<pubDate>Sat, 15 Nov 2025 11:33:13 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<guid isPermaLink="false">https://sheltie-garage.xyz/tech/?p=1295</guid>

					<description><![CDATA[<p>タイトル長いですが、そのままの内容です個人開発 &#38; 運用しているウェブアプリが複数のDocker Composeで稼働しており、ログ調査の際にわざわざ各サーバーにSSHでログイン、docker compose l [&#8230;]</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2025/11/docker-compose%e3%81%a7%e6%a7%8b%e7%af%89%e3%81%97%e3%81%9f%e6%9c%ac%e7%95%aa%e7%92%b0%e5%a2%83%e3%81%ae%e3%83%ad%e3%82%b0%e7%a2%ba%e8%aa%8d%e7%92%b0%e5%a2%83%e3%82%92grafana-loki-promtail/">Docker Composeで構築した本番環境のログ確認環境をGrafana + Loki + Promtailで構築する</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p>タイトル長いですが、そのままの内容です<br>個人開発 &amp; 運用しているウェブアプリが複数のDocker Composeで稼働しており、ログ調査の際にわざわざ各サーバーにSSHでログイン、docker compose logsコマンドを使って調査していました</p>



<p>ただこれだとめんどくさいだけでなく、エラー発生の際にアラートを出すことも難しいため、なにか良いツールが無いか調べたところGrafana + Loki + Promtailの構成にたどり着きました</p>



<h2 class="wp-block-heading">各ツールについて簡単なまとめ</h2>



<p>Grafanaとは・・・<br>様々なデータソースから取得した情報をダッシュボードに表示したり、グラフとして表示するためのツール</p>



<p>Lokiとは・・・<br>ログの収集、検索を行うためのシステム</p>



<p>Promtailとは・・・<br>ログを収集し、Lokiにデータを送るためのエージェント</p>



<p>なので、仕組みとしては<br>Promtailがコンテログを収集してLokiに集約、集約されたデータをGrafanaで表示したり、Grafanaで実行した検索クエリをLokiが実行して、結果をGrafanaで表示する　というように、3つのツールが連携して動くようです</p>



<h2 class="wp-block-heading">Grafana + Loki + Promtailの構成例</h2>



<p>Grafana + Loki + Promtailの環境自体もDocker composeで作成します<br>今回はほとんどの内容をClaude(Sonnet 4.5)に作ってもらってます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>services:
  # ログ集約システム
  loki:
    image: grafana/loki:3.5
    container_name: loki
    ports:
      - &quot;3100:3100&quot;
    volumes:
      - ./loki-config.yml:/etc/loki/config.yaml
      - loki-data:/loki
    command: -config.file=/etc/loki/config.yaml
    user: &quot;0&quot;  # rootユーザーで実行（Mac環境での権限問題回避）
    networks:
      - staging-network
    restart: unless-stopped

  # ログ収集エージェント
  promtail:
    image: grafana/promtail:3.5
    container_name: promtail
    volumes:
      - ./promtail-config.yml:/etc/promtail/config.yml
      # Mac用のログパス設定
      - /var/log:/var/log:ro
      # Docker Desktop for Macの場合
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    command: -config.file=/etc/promtail/config.yml
    networks:
      - staging-network
    depends_on:
      - loki
    restart: unless-stopped

  # ダッシュボード
  grafana:
    image: grafana/grafana:11.3.0
    container_name: grafana
    ports:
      - &quot;3101:3000&quot;
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_USERS_ALLOW_SIGN_UP=false
    volumes:
      - grafana-data:/var/lib/grafana
      - ./grafana-datasources.yml:/etc/grafana/provisioning/datasources/datasources.yml
    networks:
      - staging-network
    depends_on:
      - loki

networks:
  staging-network:
    external: true

volumes:
  loki-data:
  grafana-data:</code></pre></div>



<p>Grafana + Loki + Protmailの構成例です<br>上記のdocker composeファイル1つの中にまとめられています</p>



<p>上記はローカル環境の例でMacBook上に構築されたアプリ実行環境(Webアプリ、MySQLなどのインフラが複数のdocker containerで動作している環境)のログを監視できます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>apiVersion: 1

datasources:
  - name: Loki
    type: loki
    access: proxy
    url: http://loki:3100
    isDefault: true
    editable: true
    jsonData:
      maxLines: 1000</code></pre></div>



<p>上記は「grafana-datasources.yml」の構成例です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9096
  log_level: info

common:
  instance_addr: 127.0.0.1
  path_prefix: /loki
  storage:
    filesystem:
      chunks_directory: /loki/chunks
      rules_directory: /loki/rules
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory

# Loki 3.x の新しいストレージ設定
pattern_ingester:
  enabled: true

query_range:
  results_cache:
    cache:
      embedded_cache:
        enabled: true
        max_size_mb: 100

schema_config:
  configs:
    - from: 2024-01-01
      store: tsdb
      object_store: filesystem
      schema: v13
      index:
        prefix: index_
        period: 24h

# Loki 3.x でのストレージ設定
storage_config:
  tsdb_shipper:
    active_index_directory: /loki/tsdb-index
    cache_location: /loki/tsdb-cache
  filesystem:
    directory: /loki/chunks

# コンパクション設定（Loki 3.x）
compactor:
  working_directory: /loki/compactor
  compaction_interval: 10m
  retention_enabled: true
  retention_delete_delay: 2h
  retention_delete_worker_count: 150
  delete_request_store: filesystem

# ログの保持期間とクエリ制限
limits_config:
  retention_period: 744h  # 31日間
  max_query_length: 721h
  max_query_series: 500
  max_query_parallelism: 32
  split_queries_by_interval: 15m
  # Loki 3.x の新機能: パターン検出
  allow_structured_metadata: true
  volume_enabled: true

ruler:
  alertmanager_url: http://localhost:9093
  storage:
    type: local
    local:
      directory: /loki/rules
  rule_path: /loki/rules-temp
  ring:
    kvstore:
      store: inmemory

# Loki 3.x: クエリスケジューラー設定
query_scheduler:
  max_outstanding_requests_per_tenant: 2048

# フロントエンド設定
frontend:
  encoding: protobuf
  log_queries_longer_than: 5s
  compress_responses: true</code></pre></div>



<p>上記は「loki-config.yml」の設定例です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki:3100/loki/api/v1/push

scrape_configs:
  # Dockerコンテナのログを収集
  - job_name: docker
    docker_sd_configs:
      - host: unix:///var/run/docker.sock
        refresh_interval: 5s
    relabel_configs:
      # コンテナ名をラベルに追加
      - source_labels: [&#39;__meta_docker_container_name&#39;]
        regex: &#39;/(.*)&#39;
        target_label: &#39;container&#39;
      # コンテナIDをラベルに追加
      - source_labels: [&#39;__meta_docker_container_id&#39;]
        target_label: &#39;container_id&#39;
      # コンテナのログパスを設定
      - source_labels: [&#39;__meta_docker_container_id&#39;]
        target_label: &#39;__path__&#39;
        replacement: &#39;/var/lib/docker/containers/$1/*-json.log&#39;
      # イメージ名をラベルに追加
      - source_labels: [&#39;__meta_docker_container_image&#39;]
        target_label: &#39;image&#39;
      # ホスト名をラベルに追加
      - source_labels: [&#39;__meta_docker_container_label_com_docker_compose_service&#39;]
        target_label: &#39;service&#39;
    
    # JSON形式のログをパース
    pipeline_stages:
      - json:
          expressions:
            output: log
            stream: stream
            time: time
      - timestamp:
          source: time
          format: RFC3339Nano
      - output:
          source: output

  # システムログの収集（オプション）
  - job_name: system
    static_configs:
      - targets:
          - localhost
        labels:
          job: varlogs
          __path__: /var/log/*.log</code></pre></div>



<p>上記は「promtail-config.yml」の構成例です</p>



<p>上記3つの設定ファイルをdocker composeと同じディレクトリに設置し、docker compose up -dコマンドを実行すればログ監視環境が完成します</p>



<h2 class="wp-block-heading">Grafanaを利用してみる</h2>



<p>docker compose で環境が起動したら、以下のURLでGrafana管理画面にアクセスできます<br>http://localhost:3101</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="701" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115001-1024x701.png" alt="" class="wp-image-1296" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115001-1024x701.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115001-300x205.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115001-768x526.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115001-1536x1052.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115001-2048x1403.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>ログインID / パスワードは以下になります<br>username:admin<br>password:admin<br>※ログイン後、パスワードの変更画面が表示されるので必要に応じて変更してください</p>



<h2 class="wp-block-heading">ログ検索を行ってみる</h2>



<p>無事にログインできたら、早速ログ検索を行ってみましょう</p>



<p>左のExplorerからログの検索が行えます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="511" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115002-1024x511.png" alt="" class="wp-image-1297" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115002-1024x511.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115002-300x150.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115002-768x384.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115002-1536x767.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115002-2048x1023.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Label filtersの項目を以下のように設定します<br>検索用のクエリが自動で生成されます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="466" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115003-1024x466.png" alt="" class="wp-image-1298" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115003-1024x466.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115003-300x137.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115003-768x350.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115003-1536x700.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115003-2048x933.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>あとは右上の青いボタンをクリックすればクエリが実行され、ログ検索結果が表示されます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="682" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115004-1024x682.png" alt="" class="wp-image-1299" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115004-1024x682.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115004-300x200.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115004-768x511.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115004-1536x1023.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2025/11/20251115004-2048x1364.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>自分も、まだここまでしか使い方を調べられていませんが、少なくとも各サーバーにログインしてdocker compose logsを叩くような運用と比較してかなりマシになった気がします</p>



<p>ログ検索以外にも、CPU使用率などのメトリクスを取得でいるようにすれば、その内容をGrafanaに表示して条件に応じてアラートを発生させる<br>ということもできるようです</p>



<p>ログについても、Errorレベルのログが出力されたタイミングでアラートを飛ばすことができるようなので、次はその設定にチャレンジてみたいと思います</p>



<h2 class="wp-block-heading">以上</h2>



<p>Grafana + Loki + Promtailを利用したdocker containerログ確認の紹介でした<br>Docker環境とAIの発達で環境構築もかなり楽に行えるようになったと感じました</p>



<p>ログ監視できる環境は良いのですが、余計なアラートが飛んだり、ログ検索データが多くなりすぎないようにログを適切に出力することも大切だなと感じました<br>(今作っているウェブサイトでは、そのあたりはできていないので・・・)</p>


<div id="rinkerid1300" class="yyi-rinker-contents  yyi-rinker-postid-1300 yyi-rinker-img-m yyi-rinker-catid-6 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FGrafana%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/rakutenkobo-ebooks/cabinet/9749/2000011599749.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FGrafana%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">Getting Started with Grafana Real-Time Dashboards for IT and Business Operations【電子書籍】[ Ronald McCollam ]</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥7,292</span>
															<span class="price_at">(2026/04/05 21:11:42時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=Grafana&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FGrafana%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3DGrafana" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>


<div id="rinkerid1301" class="yyi-rinker-contents  yyi-rinker-postid-1301 yyi-rinker-img-m yyi-rinker-catid-6 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FDocker%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1503/9784798071503_1_3.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FDocker%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">開発系エンジニアのためのDocker絵とき入門 [ 鈴木亮 ]</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥3,080</span>
															<span class="price_at">(2026/04/05 21:11:42時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=Docker&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FDocker%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3DDocker" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2025/11/docker-compose%e3%81%a7%e6%a7%8b%e7%af%89%e3%81%97%e3%81%9f%e6%9c%ac%e7%95%aa%e7%92%b0%e5%a2%83%e3%81%ae%e3%83%ad%e3%82%b0%e7%a2%ba%e8%aa%8d%e7%92%b0%e5%a2%83%e3%82%92grafana-loki-promtail/">Docker Composeで構築した本番環境のログ確認環境をGrafana + Loki + Promtailで構築する</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sheltie-garage.xyz/tech/2025/11/docker-compose%e3%81%a7%e6%a7%8b%e7%af%89%e3%81%97%e3%81%9f%e6%9c%ac%e7%95%aa%e7%92%b0%e5%a2%83%e3%81%ae%e3%83%ad%e3%82%b0%e7%a2%ba%e8%aa%8d%e7%92%b0%e5%a2%83%e3%82%92grafana-loki-promtail/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker Mail Serverの証明書更新を忘れてメール送信不可！</title>
		<link>https://sheltie-garage.xyz/tech/2025/11/docker-mail-server%e3%81%ae%e8%a8%bc%e6%98%8e%e6%9b%b8%e6%9b%b4%e6%96%b0%e3%82%92%e5%bf%98%e3%82%8c%e3%81%a6%e3%83%a1%e3%83%bc%e3%83%ab%e9%80%81%e4%bf%a1%e4%b8%8d%e5%8f%af%ef%bc%81/</link>
					<comments>https://sheltie-garage.xyz/tech/2025/11/docker-mail-server%e3%81%ae%e8%a8%bc%e6%98%8e%e6%9b%b8%e6%9b%b4%e6%96%b0%e3%82%92%e5%bf%98%e3%82%8c%e3%81%a6%e3%83%a1%e3%83%bc%e3%83%ab%e9%80%81%e4%bf%a1%e4%b8%8d%e5%8f%af%ef%bc%81/#respond</comments>
		
		<dc:creator><![CDATA[monodon]]></dc:creator>
		<pubDate>Sun, 09 Nov 2025 12:17:00 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<guid isPermaLink="false">https://sheltie-garage.xyz/tech/?p=1290</guid>

					<description><![CDATA[<p>やらかし記事です趣味開発している「ProjectRIDE」というサイトのメールサーバーはDocker Mail Serverを利用して構築していますが、こちらの証明書更新を忘れていて、いつの間にかメール送信不可になってい [&#8230;]</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2025/11/docker-mail-server%e3%81%ae%e8%a8%bc%e6%98%8e%e6%9b%b8%e6%9b%b4%e6%96%b0%e3%82%92%e5%bf%98%e3%82%8c%e3%81%a6%e3%83%a1%e3%83%bc%e3%83%ab%e9%80%81%e4%bf%a1%e4%b8%8d%e5%8f%af%ef%bc%81/">Docker Mail Serverの証明書更新を忘れてメール送信不可！</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p>やらかし記事です<br>趣味開発している「ProjectRIDE」というサイトのメールサーバーはDocker Mail Serverを利用して構築していますが、こちらの証明書更新を忘れていて、いつの間にかメール送信不可になっていました</p>



<h2 class="wp-block-heading">エラーメッセージ</h2>



<p>たしかこのようなメッセージが表示されていたかと思います</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>TLS handshake failed for service</code></pre></div>



<p>パスワードリセットなどでメールを飛ぶようにしているのですが、いつまでもメールが送信されないなぁと思って調べてみたら、上記のメッセージが表示されていました</p>



<p>Docker Mail Serverは構築手順にLet&#8217;s Encryptを利用した証明書の準備が含まれているのですが、何を勘違いしたのか「証明書は自動更新される」と勘違いしていました。実際には自動更新はされず、期限切れまでに証明書を再作成(更新)する必要があります</p>



<h2 class="wp-block-heading">今回はCronで対応することにした</h2>



<p>似たような質問がGitHubにありました<br><a href="https://github.com/docker-mailserver/docker-mailserver/issues/656">https://github.com/docker-mailserver/docker-mailserver/issues/656</a></p>



<p>自分はDockerを利用してLet&#8217;s Encryptを利用しているので、CronからDockerコンテナを起動するように設定しました<br>(上記のISSUEにもDockerコンテナを利用した設定例が書いてあります)</p>



<p>実際には、12/15にCronの実行が行われるので、その時にきちんと証明書が更新されるかは要チェックです</p>



<h2 class="wp-block-heading">以上</h2>



<p>ということで、Docker Mail Serverでメールが飛ばなくなってしまったお話でした<br>別途、Traefikを利用しており、そちらは証明書自動更新なので期限切れを意識していなかったのですが、Docker Mail Serverはじめ、MySQLやOpenSearchなどでも証明書は利用しているので、意外と証明書を利用している箇所が多くありました</p>



<p>それぞれの証明書が期限切れにならないように、きちんと管理する必要がありそうですね</p>



<p></p>


<div id="rinkerid1291" class="yyi-rinker-contents  yyi-rinker-postid-1291 yyi-rinker-img-m yyi-rinker-catid-6 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fpostfix%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8731/87311195.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fpostfix%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">Postfix実用ガイド [ カイル・D．デント ]</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥3,520</span>
															<span class="price_at">(2026/04/05 21:11:43時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=postfix&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fpostfix%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3Dpostfix" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>


<div id="rinkerid1292" class="yyi-rinker-contents   yyi-rinker-postid-1292 yyi-rinker-no-item">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image"></div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
								サイバートラスト iTrust SSL/TLS サーバー証明書チケット1年(新規・更新・乗換)(対応OS:その他)(SS002I-ISTS) 取り寄せ商品							</div>

			<div class="yyi-rinker-detail">
											</div>
						<ul class="yyi-rinker-links">
																	<li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=TLS%E8%A8%BC%E6%98%8E%E6%9B%B8&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FTLS%25E8%25A8%25BC%25E6%2598%258E%25E6%259B%25B8%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3DTLS%25E8%25A8%25BC%25E6%2598%258E%25E6%259B%25B8" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
	</div><p>投稿 <a href="https://sheltie-garage.xyz/tech/2025/11/docker-mail-server%e3%81%ae%e8%a8%bc%e6%98%8e%e6%9b%b8%e6%9b%b4%e6%96%b0%e3%82%92%e5%bf%98%e3%82%8c%e3%81%a6%e3%83%a1%e3%83%bc%e3%83%ab%e9%80%81%e4%bf%a1%e4%b8%8d%e5%8f%af%ef%bc%81/">Docker Mail Serverの証明書更新を忘れてメール送信不可！</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sheltie-garage.xyz/tech/2025/11/docker-mail-server%e3%81%ae%e8%a8%bc%e6%98%8e%e6%9b%b8%e6%9b%b4%e6%96%b0%e3%82%92%e5%bf%98%e3%82%8c%e3%81%a6%e3%83%a1%e3%83%bc%e3%83%ab%e9%80%81%e4%bf%a1%e4%b8%8d%e5%8f%af%ef%bc%81/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>MySQL 9.4でGTIDベースのレプリケーションを設定する</title>
		<link>https://sheltie-garage.xyz/tech/2025/10/mysql-9-4%e3%81%a7gtid%e3%83%99%e3%83%bc%e3%82%b9%e3%81%ae%e3%83%ac%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b/</link>
					<comments>https://sheltie-garage.xyz/tech/2025/10/mysql-9-4%e3%81%a7gtid%e3%83%99%e3%83%bc%e3%82%b9%e3%81%ae%e3%83%ac%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b/#respond</comments>
		
		<dc:creator><![CDATA[monodon]]></dc:creator>
		<pubDate>Sun, 26 Oct 2025 00:05:04 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<guid isPermaLink="false">https://sheltie-garage.xyz/tech/?p=1286</guid>

					<description><![CDATA[<p>個人開発しているサイトのDBをシングルDB構成からレプリケーション構成に変更しました自分がレプリケーションを設定したことがあるのは、現役時代のMySQL5系だったため、知識のアップデートも兼ねてGTIDベースでレプリケー [&#8230;]</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2025/10/mysql-9-4%e3%81%a7gtid%e3%83%99%e3%83%bc%e3%82%b9%e3%81%ae%e3%83%ac%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b/">MySQL 9.4でGTIDベースのレプリケーションを設定する</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p>個人開発しているサイトのDBをシングルDB構成からレプリケーション構成に変更しました<br>自分がレプリケーションを設定したことがあるのは、現役時代のMySQL5系だったため、知識のアップデートも兼ねてGTIDベースでレプリケーションを構築してみることにしました</p>



<h2 class="wp-block-heading">GTIDベースのレプリケーションとは</h2>



<p>GTID(Global Transaction ID)ベースのレプリケーションはMySQL5.6.11から利用可能になったレプリケーション方法<br>それまではバイナリログのポジションを基準にして、GTIDモードではプライマリDBでトランザクションのコミット毎に発行されるIDをベースにレプリケーションを行います<br>従来のレプリケーション設定時はマスターDBのbin-logやポジションなんかを調べてスレーブに設定する必要がありましたが、GTIDベースではそのような設定も不要となり、設定が大幅に簡略化されるそのこと</p>



<h2 class="wp-block-heading">やってみる</h2>



<p>早速レプリケーションを構成していきます<br>現在はDockerを利用してインフラを構築しています<br>レプリケーション構成は以下のようになります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>services:
  db-primary:
    container_name: ride-mysql-primary
    image: mysql:9.4
    command: &gt;
      mysqld
      --server-id=1
      --log-bin=mysql-bin
      --binlog-do-db=ride
      --character-set-server=utf8mb4 
      --collation-server=utf8mb4_unicode_ci 
      --default-time-zone=Asia/Tokyo
      --gtid-mode=ON
      --enforce-gtid-consistency=ON
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: db
      MYSQL_USER: db_user
      MYSQL_PASSWORD: password
    ports:
      - 3306:3306
    volumes:
      - &#39;./primary-data:/var/lib/mysql&#39;

  db-replica:
    container_name: ride-mysql-replica
    image: mysql:9.4
    command: &gt;
      mysqld
      --server-id=2
      --relay-log=mysql-relay-bin
      --log-slave-updates=1
      --replicate-do-db=db
      --character-set-server=utf8mb4 
      --collation-server=utf8mb4_unicode_ci 
      --default-time-zone=Asia/Tokyo
      --gtid-mode=ON
      --enforce-gtid-consistency=ON
    environment:
      MYSQL_ROOT_PASSWORD: password
    ports:
      - 3307:3306
    volumes:
      - &#39;./replica-data:/var/lib/mysql&#39;
    depends_on:
      - db-primary</code></pre></div>



<p>docker compose up -dで起動すると、db-primary, db-replicaの2つのDBが立ち上がります</p>



<h2 class="wp-block-heading">プライマリDBのデータレプリカDBに読み込み</h2>



<p>プライマリDBのデータをエクスポートします(レプリカDBの初期データとして利用するため)</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>docker compose exec 出力元DB mysqldump -u root -p --all-databases --single-transaction &gt; backup.sql</code></pre></div>



<p>レプリカDBにデータベースを作成</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code># docker-compose.yml があるディレクトリで実行
echo &quot;CREATE DATABASE db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;&quot; | docker compose exec -T db-replica mysql -u root -ppassword</code></pre></div>



<p>データをインポート</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>cat backup.sql | docker compose exec -T db-replica mysql -u root -ppassword</code></pre></div>



<h2 class="wp-block-heading">レプリケーションの設定</h2>



<p>レプリケーションの設定を行います<br>まずはプライマリDBにレプリケーション専用のユーザーを作成</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code># docker-compose.yml があるディレクトリで実行
docker compose exec db-primary mysql -u root -ppassword -e &quot;CREATE USER &#39;replicator&#39;@&#39;%&#39; IDENTIFIED BY &#39;password&#39;; GRANT REPLICATION SLAVE ON *.* TO &#39;replicator&#39;@&#39;%&#39;; FLUSH PRIVILEGES;&quot;</code></pre></div>



<p>レプリカDBにレプリケーションの設定を行います<br>GTIDベースでのレプリケーションのため、CHANGE_MASTER_LOGといったオプションは利用していません<br>GET_SOURCE_PUBLIC_KEY=1を設定していますが、レプリカDBからプライマリDBに接続する際にセキュアな接続を要求されたため、プライマリDBより公開鍵を取得するために設定しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo &quot;CHANGE REPLICATION SOURCE TO SOURCE_HOST=&#39;db-primary&#39;, SOURCE_USER=&#39;replicator&#39;, SOURCE_PASSWORD=&#39;password&#39;, SOURCE_AUTO_POSITION=1, GET_SOURCE_PUBLIC_KEY=1; START REPLICA;&quot; | docker compose exec -T db-replica mysql -u root -ppassword</code></pre></div>



<p>最後にレプリカDBのレプリケーション状態を確認します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo &quot;SHOW REPLICA STATUS&quot; | docker compose exec -T db-replica mysql -u root -ppassword</code></pre></div>



<p>出力結果の Replica_IO_Running と Replica_SQL_Running が両方 Yesとなっていれば、レプリケーションが開始されています</p>



<p>あとはレプリカDBにデータ参照用のユーザーを設定すれば設定完了です</p>



<h2 class="wp-block-heading">以上</h2>



<p>ざっとですがGTIDベースのレプリケーション構築内容を紹介しました<br>以前(MySQL 5系)と比較して、確かに簡単に設定できました。特にマスターDBのbin-logやポジションを調査する必要がないのがありがたいですね</p>



<p>今回のケースでは(個人開発のため)DBを気軽に停止できる環境で行いましたが、停止が許されない環境では構築手順は事前に検証する必要があります</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2025/10/mysql-9-4%e3%81%a7gtid%e3%83%99%e3%83%bc%e3%82%b9%e3%81%ae%e3%83%ac%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b/">MySQL 9.4でGTIDベースのレプリケーションを設定する</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sheltie-garage.xyz/tech/2025/10/mysql-9-4%e3%81%a7gtid%e3%83%99%e3%83%bc%e3%82%b9%e3%81%ae%e3%83%ac%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
