🔰

local環境でgitサーバーの練習をしてみた

2023/06/12に公開

はじめに

パソコン内に閉じた環境でgitサーバー(sshサーバー)でコードを管理できる環境を作ります
実用性は低いですが、gitの練習がてらやったときのメモをまとめてみました

環境

・host環境: docker, ubuntu:22.04
・client環境: mac
・カレントディレクトリ: "/Users/pycetra/projects/20300101_git_repo"
・terminalはclient側(mac上)しか扱いません。(loginとexitを繰り返すとわかりにくくなるため)

ディレクトリ構成

/Users/pycetra/projects/20300101_git_repo/
.

↑実行前の空のディレクトリ
↓"すべてのコマンド"を実行後のディレクトリ

/Users/pycetra/projects/20300101_git_repo/
├── remote_repo                      <- "step3: contanerの作成と起動"で作られるdockerのremote repository
│   └── repo1.git
├── remote_ssh                       <- "step3: contanerの作成と起動"で作られるdockerに登録される公開鍵
│   └── id_rsa_docker_git_repo.pub
└── repo1_download                   <- "verify: git clone"でcloneされるrepository
    └── .git

すべてのコマンド

step1~6+verifyをつなげたもの
"step5: sshの設定"は手動の編集を想定

(いくつかインタラクティブに入力を求められるので1つ1つ実行すると安定するかも)

export GIT_REPO_HOME=/Users/pycetra/projects/20300101_git_repo

docker pull ubuntu:22.04

docker run --detach \
    --hostname localhost \
    --publish 2022:22 \
    --name pycetra_repository \
    -v $GIT_REPO_HOME/remote_ssh:/root/.ssh/ \
    -v $GIT_REPO_HOME/remote_repo:/pycetra/ \
    -it ubuntu:22.04 /bin/bash

ssh-keygen -f $GIT_REPO_HOME/remote_ssh/id_rsa_docker_git_repo
mv $GIT_REPO_HOME/remote_ssh/id_rsa_docker_git_repo ~/.ssh/
mv $GIT_REPO_HOME/remote_ssh/id_rsa_docker_git_repo.pub $GIT_REPO_HOME/remote_ssh/authorized_keys

docker exec pycetra_repository apt update
docker exec pycetra_repository apt install -y openssh-server
docker exec pycetra_repository sh -c "echo 'root:root' | chpasswd"  # パイプが入っているのでshオプションで実行
docker exec pycetra_repository sed -ri 's/^#?PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
docker exec pycetra_repository sed -i 's/^#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /etc/ssh/sshd_config

docker exec pycetra_repository service ssh start

docker exec pycetra_repository apt-get install -y git
docker exec pycetra_repository mkdir /pycetra
docker exec pycetra_repository git init --bare /pycetra/repo1.git


git clone root@localhost:/pycetra/repo1.git

解説

step1: ホームディレクトリの設定

export GIT_REPO_HOME=/Users/pycetra/projects/20300101_git_repo

step2: imageのdownload

docker pull ubuntu:22.04

step3: contanerの作成と起動

docker run --detach \
    --hostname localhost \
    --publish 2022:22 \
    --name pycetra_repository \
    -v $GIT_REPO_HOME/remote_ssh:/root/.ssh/ \
    -v $GIT_REPO_HOME/remote_repo:/pycetra/ \
    -it ubuntu:22.04 /bin/bash

step4: contanerの作成と起動

ssh-keygen -f $GIT_REPO_HOME/remote_ssh/id_rsa_docker_git_repo
mv $GIT_REPO_HOME/remote_ssh/id_rsa_docker_git_repo ~/.ssh/
mv $GIT_REPO_HOME/remote_ssh/id_rsa_docker_git_repo.pub $GIT_REPO_HOME/remote_ssh/authorized_keys

step5: sshの設定

~/.ssh/config へ以下を追記する

Host localhost
  HostName localhost
  User root
  port 2022
  IdentityFile ~/.ssh/id_rsa_docker_git_repo
  TCPKeepAlive yes
  IdentitiesOnly yes

step6: openssh-serverとgitの設定

docker exec pycetra_repository apt update
docker exec pycetra_repository apt install -y openssh-server
docker exec pycetra_repository sh -c "echo 'root:root' | chpasswd"  # パイプが入っているのでshオプションで実行
docker exec pycetra_repository sed -ri 's/^#?PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
docker exec pycetra_repository sed -i 's/^#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /etc/ssh/sshd_config

docker exec pycetra_repository service ssh start

docker exec pycetra_repository apt-get install -y git
docker exec pycetra_repository mkdir /pycetra
docker exec pycetra_repository git init --bare /pycetra/repo1.git

verify: git clone

git clone root@localhost:/pycetra/repo1.git $GIT_REPO_HOME/repo1_download

実行後にclient環境にrepo1フォルダが作られていることを確認できる

参考

GitHubで編集を提案

Discussion