🚀 Cloudflare + Railway 完全デプロイガイド:お名前.comドメインでGoアプリを公開する
🎯 中心的な主張
お名前.comで取得したドメインをCloudflare経由でRailwayにデプロイされたGoアプリケーションに接続する完全ガイドです。Cloudflareの無料CDN/SSL、Railwayの自動デプロイ機能を活用することで、高速かつセキュアなWebサイトを構築できます。7つのステップで本番環境を構築し、GitHubへのpush後2〜5分で自動的に本番反映される開発フローを実現します。
📊 システム構成図
🌐 Internet(インターネット)
↓
☁️ Cloudflare
├─ DNS管理
├─ CDN(コンテンツ配信)
├─ SSL/TLS証明書
└─ DDoS保護
↓
🚂 Railway
├─ Goアプリケーション実行
├─ 自動ビルド・デプロイ
└─ ヘルスチェック
↓
📦 GitHub
└─ ソースコード管理
各サービスの役割
Cloudflare:
✅ ドメインのDNS管理
✅ 無料SSL/TLS証明書
✅ CDNによる高速化
✅ DDoS攻撃からの保護
✅ キャッシュ管理
Railway:
✅ Goアプリケーションのホスティング
✅ GitHubからの自動デプロイ
✅ 環境変数管理
✅ ログ・メトリクス監視
✅ カスタムドメイン対応
GitHub:
✅ ソースコード管理
✅ push時の自動デプロイトリガー
✅ バージョン管理
🎯 事前準備
必要なもの
✅ チェックリスト:
1. ドメイン
└─ お名前.comで取得済み
└─ 例: infohiroki.com
2. Cloudflareアカウント
└─ 無料プランで十分
└─ https://www.cloudflare.com/
3. Railwayアカウント
└─ GitHub連携で登録
└─ https://railway.app/
4. GitHubリポジトリ
└─ Goアプリケーションのコード
└─ 例: infoHiroki/infohiroki-go
前提知識
必須:
├─ 基本的なGit操作
├─ Goアプリケーションの構造理解
└─ ターミナル操作
あると便利:
├─ Docker の基礎知識
└─ DNS の基本概念
📋 デプロイ手順(全7ステップ)
所要時間: 約30分〜1時間
難易度: ⭐⭐⭐☆☆(中級)
ステップ一覧:
1️⃣ Cloudflareでドメインを追加
2️⃣ お名前.comでネームサーバーを変更
3️⃣ Cloudflareでアクティブ化を確認
4️⃣ RailwayでGoアプリをデプロイ
5️⃣ CloudflareでDNSレコードを設定
6️⃣ Railwayでカスタムドメインを設定
7️⃣ 動作確認
1️⃣ ステップ1: Cloudflareでドメインを追加
1-1. サイトの追加
手順:
1. Cloudflareダッシュボードにアクセス
→ https://dash.cloudflare.com/
2. 「サイトを追加」をクリック
3. ドメイン名を入力
→ 例: infohiroki.com
4. プランを選択
→ 「Free」プランで十分
5. 「サイトを追加」をクリック
1-2. ネームサーバーを確認
⚠️ 重要な情報をメモ:
Cloudflareが表示する2つのネームサーバー:
例:
├─ clyde.ns.cloudflare.com
└─ nagali.ns.cloudflare.com
💡 ポイント:
└─ この2つは次のステップで使います
└─ 必ずメモしておいてください
2️⃣ ステップ2: お名前.comでネームサーバーを変更
2-1. ネームサーバー設定画面を開く
手順:
1. お名前.com Naviにログイン
→ https://navi.onamae.com/
2. 左メニューから選択:
「ドメイン」→「ネームサーバー/DNS」
3. 「ネームサーバーの設定」を選択
2-2. ドメインを選択
操作:
1. 対象ドメインにチェック
→ infohiroki.com
2. 「その他のネームサーバーを使う」を選択
2-3. Cloudflareのネームサーバーを入力
設定値:
ネームサーバー1: clyde.ns.cloudflare.com
ネームサーバー2: nagali.ns.cloudflare.com
削除:
既存のネームサーバー:
├─ 01.dnsv.jp
├─ 02.dnsv.jp
├─ 03.dnsv.jp
└─ 04.dnsv.jp
→ これらは全て削除
最後に:
「確認」→「設定する」
⚠️ 重要な注意点
よくある間違い:
❌ DNSレコード設定画面で変更
✅ ネームサーバー設定画面で変更
場所を間違えないこと!
反映時間:
└─ 最大24時間かかる場合があります
└─ 通常は1〜3時間で完了
3️⃣ ステップ3: Cloudflareでアクティブ化を確認
3-1. 状態確認
手順:
1. Cloudflareダッシュボードに戻る
2. infohiroki.com のステータスを確認
3. 「アクティブ」になるまで待つ
└─ 通常1〜24時間
3-2. アクティブ化後の確認
✅ ステータスが「アクティブ」になったら:
確認事項:
├─ ✅ ネームサーバー変更が完了
├─ ✅ CloudflareがDNSを管理開始
└─ ✅ 次のステップに進める状態
表示:
「アクティブ」← 緑色のチェックマーク
4️⃣ ステップ4: RailwayでGoアプリをデプロイ
4-1. プロジェクト作成
手順:
1. Railwayにログイン
→ https://railway.app/
2. 「New Project」をクリック
3. 「Deploy from GitHub repo」を選択
4. リポジトリを選択
→ infoHiroki/infohiroki-go
5. 自動的にビルド・デプロイが開始
└─ Dockerfileを検出して自動ビルド
4-2. 環境変数の設定(必要な場合)
設定画面:
プロジェクト → 「Variables」タブ
環境変数の例:
PORT=8080
GIN_MODE=release
💡 Note:
└─ PORTはRailwayが自動設定するため
通常は設定不要
4-3. デプロイ完了確認
確認手順:
1. 「Deployments」タブを開く
2. ステータスを確認
✅ Success → デプロイ成功
3. 自動生成されたURLをメモ
例: infohiroki-go-production.up.railway.app
💡 このURLは次のステップで使用
5️⃣ ステップ5: CloudflareでDNSレコードを設定
5-1. DNS設定画面を開く
手順:
1. Cloudflareダッシュボードで
infohiroki.com を選択
2. 左メニュー:
「DNS」→「レコード」
5-2. CNAMEレコードを追加
設定値:
| 項目 | 値 |
|---------------------|-------------------------------------------|
| タイプ | CNAME |
| 名前 | @(ルートドメイン) |
| ターゲット | infohiroki-go-production.up.railway.app |
| プロキシステータス | 🟠 オレンジ(プロキシ有効) |
| TTL | 自動 |
「保存」をクリック
💡 追加設定(オプション)
wwwサブドメインも設定する場合:
| 項目 | 値 |
|---------------------|-------------------------------------------|
| タイプ | CNAME |
| 名前 | www |
| ターゲット | infohiroki-go-production.up.railway.app |
| プロキシステータス | 🟠 オレンジ(プロキシ有効) |
| TTL | 自動 |
6️⃣ ステップ6: Railwayでカスタムドメインを設定
6-1. ドメイン設定画面を開く
手順:
1. Railwayのプロジェクトページを開く
2. 「Settings」タブを選択
3. 「Domains」セクションを探す
6-2. カスタムドメインを追加
操作:
1. 「Add Custom Domain」をクリック
2. ドメイン名を入力
→ infohiroki.com
3. 「Add Domain」をクリック
4. 自動連携
└─ RailwayがCloudflareと自動的に連携
6-3. SSL証明書の確認
自動処理:
├─ Railwayが自動的にSSL証明書を発行
├─ 通常1〜5分で完了
└─ ステータスが「Active」になれば完了
確認:
Domains → infohiroki.com → Status: Active
7️⃣ ステップ7: 動作確認
7-1. アクセステスト
以下のURLにアクセスして確認:
1. メインページ
→ https://infohiroki.com
2. ヘルスチェック
→ https://infohiroki.com/health
→ 期待値: {"status":"ok"}
3. ブログページ
→ https://infohiroki.com/blog
7-2. 確認項目チェックリスト
✅ HTTPSで正常にアクセスできる
└─ 鍵マークが表示されているか
✅ `/health` が正常応答
└─ {"status":"ok"} が返ってくるか
✅ 静的ファイルが正常に表示
├─ CSS が適用されているか
├─ JavaScript が動作しているか
└─ 画像が表示されているか
✅ ブログ記事一覧が表示される
└─ articles/ 内の記事が表示されるか
✅ 個別記事が正常に表示される
└─ 記事ページが開けるか
🔄 更新・デプロイフロー
通常の更新作業
# 1. コードを変更
vim main.go
# または
code main.go
# 2. ローカルでテスト
go run main.go
# ブラウザで http://localhost:8080 を確認
# 3. コミット
git add .
git commit -m "✨ 新機能追加"
# 4. プッシュ
git push
# 5. Railwayが自動デプロイ(2〜5分)
# 6. https://infohiroki.com で確認
新記事の追加フロー
# 1. 記事を作成
vim articles/2025-09-30-new-article.md
# Markdown形式で執筆:
# タイトル(# で開始)
# 本文
# 2. コミット・プッシュ
git add articles/
git commit -m "✨ 新記事追加: タイトル"
git push
# 3. Railway自動デプロイ(2〜5分)
# 4. 記事が公開される
# → https://infohiroki.com/blog で確認
デプロイの流れ
Git push
↓
GitHub (Webhookトリガー)
↓
Railway
├─ コード取得
├─ Dockerビルド
├─ ヘルスチェック
└─ デプロイ完了
↓
本番公開
└─ 2〜5分で反映
🐛 トラブルシューティング
問題1: サイトにアクセスできない
症状
❌ https://infohiroki.com にアクセスできない
❌ DNS_PROBE_FINISHED_NXDOMAIN エラー
❌ ERR_NAME_NOT_RESOLVED エラー
確認事項
1. Cloudflareのステータス
→ 「アクティブ」になっているか?
2. DNSレコード
→ CNAMEレコードが正しく設定されているか?
→ タイプ: CNAME
→ 名前: @
→ ターゲット: infohiroki-go-production.up.railway.app
3. Railwayのデプロイ
→ ステータスが「Success」か?
解決策
# DNSの伝播を確認
dig infohiroki.com
# 期待される結果:
# infohiroki.com. IN CNAME infohiroki-go-production.up.railway.app.
# CloudflareのCDNキャッシュをクリア
# 手順:
# 1. Cloudflareダッシュボード
# 2. キャッシング → すべてをパージ
問題2: 記事が表示されない
症状
❌ ブログページは開くが記事が表示されない
❌ 記事一覧が空
❌ 個別記事ページが404エラー
確認事項
1. articles/ ディレクトリ
└─ Markdownファイルが存在するか?
└─ ファイル名が正しいか?
例: 2025-09-30-article-title.md
2. Dockerfile
└─ articles/ のコピーが設定されているか?
COPY --from=builder /app/articles ./articles
3. main.go
└─ initializeData() が実行されているか?
└─ articlesディレクトリを読み込んでいるか?
解決策
# ローカルで確認
ls articles/
# Markdownファイルが表示されるか確認
# ローカルで実行
go run main.go
# ブラウザで確認
open http://localhost:8080/blog
# 記事が表示されれば、Dockerfileの問題
# Dockerfile を確認:
vim Dockerfile
# この行があるか確認:
# COPY --from=builder /app/articles ./articles
# 修正後、再デプロイ:
git add Dockerfile
git commit -m "🐛 Fix: articles directory not copied"
git push
問題3: デプロイが失敗する
症状
❌ Railwayのデプロイステータスが「Failed」
❌ ビルドエラーが発生
❌ アプリケーションが起動しない
確認事項
1. railway.toml
└─ 存在するか?
└─ 設定が正しいか?
2. Dockerfile
└─ 構文エラーがないか?
└─ 必要なファイルがコピーされているか?
3. ビルドログ
└─ Railwayのログにエラーメッセージがあるか?
解決策
# ローカルでDockerビルドを試す
docker build -t infohiroki-go .
# ビルドが成功したら実行
docker run -p 8080:8080 infohiroki-go
# ブラウザで確認
open http://localhost:8080
# エラーがなければRailwayに再デプロイ
git push
# それでもエラーが出る場合:
# Railwayのログを確認
# → Deploymentsタブ → ログを読む
# → エラーメッセージに従って修正
問題4: SSL証明書エラー
症状
❌ 「接続が安全ではありません」エラー
❌ NET::ERR_CERT_AUTHORITY_INVALID
❌ SSL証明書の警告
確認事項
1. CloudflareのSSL設定
└─ 暗号化モードは何か?
2. Railwayのカスタムドメイン
└─ ステータスが「Active」か?
3. 待機時間
└─ 設定後、十分な時間が経過したか?
解決策
手順:
1. Cloudflareダッシュボードを開く
2. SSL/TLS → 概要
3. 暗号化モードを確認
❌ Off
❌ Flexible
✅ Full(推奨)
✅ Full (strict)
4. 「Full」に設定
5. 数分待ってから再アクセス
注意:
└─ SSL証明書の発行には最大15分かかる場合があります
📝 必要な設定ファイル
railway.toml
# Railway設定ファイル
[build]
builder = "DOCKERFILE"
dockerfilePath = "Dockerfile"
[deploy]
# 起動コマンド
startCommand = "./main"
# ヘルスチェック
healthcheckPath = "/health"
healthcheckTimeout = 100
# 再起動ポリシー
restartPolicyType = "ON_FAILURE"
restartPolicyMaxRetries = 10
Dockerfile
# Go 1.21のマルチステージビルド
FROM golang:1.21-alpine AS builder
# 作業ディレクトリ設定
WORKDIR /app
# Go modulesファイルをコピー
COPY go.mod go.sum ./
# 依存関係をダウンロード
RUN go mod download
# ソースコードをコピー
COPY . .
# アプリケーションをビルド
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
# 本番用の軽量イメージ
FROM alpine:latest
# セキュリティ更新とCA証明書をインストール
RUN apk --no-cache add ca-certificates
# 作業ディレクトリ設定
WORKDIR /root/
# ビルドしたバイナリをコピー
COPY --from=builder /app/main .
# 静的ファイル・テンプレート・記事をコピー
COPY --from=builder /app/templates ./templates
COPY --from=builder /app/static ./static
COPY --from=builder /app/articles ./articles
# ポート設定
EXPOSE 8080
# アプリケーション実行
CMD ["./main"]
.env.example
# アプリケーション設定
PORT=8080
GIN_MODE=release
# Railway環境では自動的にPORTが設定されます
# ローカル開発時は上記のPORTを使用します
main.go(ヘルスチェックエンドポイント)
// Health check endpoint for Railway/Cloudflare
r.GET("/health", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"status": "ok"})
})
🔗 参考リンク
公式ドキュメント
Cloudflare:
└─ https://developers.cloudflare.com/
Railway:
└─ https://docs.railway.app/
お名前.com:
└─ https://www.onamae.com/guide/
Go言語:
└─ https://go.dev/doc/
関連サービス
GitHub:
└─ https://docs.github.com/
Docker:
└─ https://docs.docker.com/
Gin Framework:
└─ https://gin-gonic.com/docs/
✅ デプロイ完了チェックリスト
全体フロー確認:
□ Cloudflareアカウント作成済み
□ Railwayアカウント作成済み
□ GitHubリポジトリ作成済み
Cloudflare設定:
□ サイト追加完了
□ ネームサーバー確認済み
□ ステータスが「アクティブ」
□ CNAMEレコード設定完了
□ プロキシ有効(オレンジ)
お名前.com設定:
□ ネームサーバー変更完了
□ 既存ネームサーバー削除済み
Railway設定:
□ プロジェクト作成完了
□ GitHubリポジトリ連携済み
□ デプロイ成功(Status: Success)
□ カスタムドメイン追加済み
□ SSL証明書発行完了(Active)
動作確認:
□ HTTPSでアクセス可能
□ /health が正常応答
□ 静的ファイル読み込み成功
□ ブログ記事表示成功
□ 全ページ正常動作
自動デプロイ確認:
□ git push でデプロイされる
□ 2〜5分で反映される
💡 運用のベストプラクティス
モニタリング
監視項目:
├─ Railwayのログ確認
├─ デプロイ成功率の追跡
├─ レスポンスタイムの監視
└─ エラーログの定期確認
頻度:
└─ デプロイ後は必ず確認
└─ 週1回の定期チェック
バックアップ
重要ファイル:
├─ ソースコード → GitHubで管理
├─ 記事ファイル → articles/
├─ 設定ファイル → railway.toml, Dockerfile
└─ 環境変数 → Railway Variables
戦略:
└─ すべてGit管理下に置く
└─ 定期的にpush
セキュリティ
注意点:
├─ 環境変数に秘密情報を保存
├─ .gitignore で機密ファイルを除外
├─ HTTPS通信を強制
└─ 定期的な依存関係の更新
コマンド:
# 依存関係の更新
go get -u ./...
go mod tidy
✨ 300字要約
お名前.comで取得したドメインをCloudflare経由でRailwayのGoアプリに接続する完全ガイドです。7つのステップで構成され、①Cloudflareでドメイン追加、②お名前.comでネームサーバー変更、③アクティブ化確認、④RailwayでGoアプリデプロイ、⑤CloudflareでCNAMEレコード設定、⑥Railwayでカスタムドメイン設定、⑦動作確認、という流れで進めます。Cloudflareの無料CDN/SSL、Railwayの自動デプロイ機能により、GitHubへのpush後2〜5分で自動的に本番反映される効率的な開発フローを実現します。トラブルシューティングとして、アクセス不可・記事非表示・デプロイ失敗・SSL証明書エラーの4つの問題と解決策を詳述し、実務で即座に活用できる実践的なガイドとなっています。