自前の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 --sharedmkdir -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 masterEC2側で確認:
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


コメント