AWS EC2 + Git で自前のリモートリポジトリを構築する方法【初心者向け完全解説】

AWS

AWS学習者がまとめたAWSリソースリスト 【随時追記】

自前のEC2(Amazon Linux 2023)にGitをインストールして、リモートリポジトリを自前で構築・運用する方法について紹介していきます。

これはいわゆる「オンプレミスGitサーバー」や「自己ホストGitリポジトリ」と呼ばれる使い方で、以下のようなケースに有効です。

  • 外部サービス(GitHub, GitLab.comなど)を使えない環境
  • 社内開発や個人用途
  • 学習やPoC目的でのGitサーバー構築

📦 前提条件
・AWS EC2 インスタンス(Amazon Linux 2023)
・ローカルPCにGitがインストール済み(git –version で確認)
・EC2インスタンスのポート22が開いている(セキュリティグループ設定)
・ローカルにSSH秘密鍵(例: your-key.pem)


リモートリポジトリの作成

まずはEC2にログインしてGitをインストールしていきます

# EC2にSSH接続
ssh -i ~/your-key.pem ec2-user@<EC2のパブリックIP>

# Gitをインストール
sudo dnf install -y git
  • dnf:Amazon Linux 2023 でのパッケージマネージャ
  • install git:Git本体をインストール
  • -y:確認プロンプトをスキップして自動で「yes」

Gitがインストールされたかの確認を行います

git --version
git version 2.40.1


リモートリポジトリ用ディレクトリを作成

mkdir -p ~/repos/myapp.git
cd ~/repos/myapp.git
git init --bare --shared
  • mkdir -p:中間ディレクトリも含めて作成
  • git init --bare --shared作業コピーなしのリポジトリを初期化(push専用)し、ファイルやディレクトリのパーミッションを緩めて、グループアクセスを許可

🔍 通常の git init はローカル開発用。--bare をつけるとリモート用になります。



ローカルPCの SSH 接続設定(.ssh/config

ローカルの .ssh/config に以下のように追記し、毎回秘密鍵やユーザー名を指定せずに済むようにします。

# ~/.ssh/config
Host ec2-user
  HostName <EC2のパブリックIP>
  User ec2-user
  IdentityFile ~/path/to/your-key.pem
✅この設定の意味
  • Host ec2-user :この名前をショートカットとして使える
  • HostName :実際の接続先IPアドレス
  • User :SSHログインに使うユーザー名
  • IdentityFile :PEM形式の秘密鍵のパス



リモートリポジトリをクローン(または追加)

🌀 初めてクローンする場合:

git clone ec2-user:/home/ec2-user/repos/myapp.git
cd myapp

このコマンドで、リポジトリ名と同じ名前のディレクトリ(ここでは myapp)が自動で作成されます。そのディレクトリに .git フォルダ(Git管理情報)を含むすべての内容が入っているため、その中に入らなければ Git の操作(add、commit、pushなど)は行えません。

🧠 正確な説明:git clone ec2-user:/home/ec2-user/repos/myapp.git

リモートリポジトリの内容(ファイルと履歴)をローカルに複製する

  • myapp.git は **ベアリポジトリ(.git管理情報のみ)**です。
  • git clone すると、その中の すべての履歴(コミットやブランチ情報)と、最新のスナップショット(作業ファイル群) がローカルに展開されます。
  • 結果として、ローカルには .git を含む完全な作業ディレクトリができあがります

📁 ローカルに作成される myapp/ には:

myapp/
├── .git/              ← Gitの管理情報(履歴や設定)
├── README.md          ← 実際のプロジェクトファイル(もし存在していれば)
└── 他のファイルやフォルダ…

クローン元を origin という名前でリモートとして登録する

  • git remote -v で確認すると、
origin  ec2-user:/home/ec2-user/repos/myapp.git (fetch)
origin  ec2-user:/home/ec2-user/repos/myapp.git (push)

となっており、以降の git push や git pull でこのリモートが使われます。

✅ まとめ:クローンとは何か?

観点内容
何がコピーされる?Git のバージョン履歴 + 最新の作業ツリー(ファイル)
何が作られる?git フォルダ付きのローカル作業ディレクトリ
どこから?ベアリポジトリから(ファイルそのものではなく履歴から復元)


🧱 すでにローカルでプロジェクトがある場合:

cd /path/to/your/local/project
git init
git remote add origin ec2-user:/home/ec2-user/repos/myapp.git
git add .
git commit -m "first commit"
git push -u origin master
  • git init:ディレクトリを Git リポジトリとして初期化する。これは「ローカルリポジトリ」を作る操作であり、まだリモート連携はしていない。
  • git remote add origin ec2-user:/home/ec2-user/repos/myapp.git:EC2上のGitリポジトリを「origin」という名前でリモートとして登録する。
  • git push -u origin master:ローカルの master ブランチを origin(EC2)に初回プッシュする。
  • git commit -m “first commit”:一度もコミットしていない状態では、まだブランチが作成されていない。これは git branch -a でブランチがないことお確認できる。git commit ~で最初のコミットが行われると master(もしくはmain)ブランチが自動で作成される。

🧠 正確な説明:git remote add origin ec2-user:/home/ec2-user/repos/myapp.git

origin は 「ブランチ」ではなく「リモート(接続先)」のエイリアス(別名)です。
つまり👉 「ec2-user:/home/ec2-user/repos/myapp.git にある リモートリポジトリ に、origin というエイリアス(別名) を付けて登録する」ということになります。

Gitはこの設定を .git/config に内部的にこう記録します:

[remote "origin"]
    url = ec2-user:/home/ec2-user/repos/myapp.git
    fetch = +refs/heads/*:refs/remotes/origin/*

このおかげで、以降は次のような短縮形でコマンドが使えるようになります:

# ローカルのmasterブランチをorigin(= EC2)に送る
git push origin master

# originのmasterブランチから変更を取得する
git pull origin master


~パーミッションエラーに注意(オプション)~
秘密鍵のパーミッションが「開きすぎている」と SSH 接続が拒否されます。
そんため、以下のように600として、権限を強くしておきます。

chmod 600 ~/path/to/your-key.pem

また、ベアリポジトリの所有者が違う場合にも push に失敗するので注意。
→ローカルで指定したリモートのユーザー(ここではec2-user)とGit ベアリポジトリ(例: myapp.git)のファイルやディレクトリを所有しているLinuxユーザーが異なる場合


🧪 動作確認

ローカル側でコミットして push:

echo "# Hello Git Server" >> README.md
git add README.md
git commit -m "add readme"
git push origin master

EC2側で確認:

cd ~/repos/myapp.git
git log --oneline


📝 おわりに

AWS EC2 を使った Git サーバー構築はとてもシンプルで、ローカル開発に柔軟に対応できます。
GitHubに頼らず、プライベートで管理したいプロジェクトや、CI/CDパイプライン用にぴったりです。


その他コマンド

リモートリポジトリにあるブランチ一覧を見る

git ls-remote --heads origin

最新のリモート情報を取得

git fetch origin

上記コマンドは、あくまでリモートリポジトリの最新のブランチ情報をローカルで取得する(リモート追跡ブランチ:ローカルにキャッシュされた参照情報:origin/masterなど)だけのコマンドです。作業ブランチには影響を与えないので、安全にリモートの更新を確認できます。

リモートの origin/test ブランチを元に、ローカルに新しく test ブランチを作って、そのブランチに切り替える

git checkout -b test origin/test

コメント

タイトルとURLをコピーしました