はじめに
最近のチームでのソフトウェア開発ではgitの利用が必須だと思っているのですが、仕事してるとまだまだgit使ったことない人がいて説明が面倒だなと思うことがあります。
新人の練習用に壊してもいいgit環境を提供したり、
チームメンバにgit利用経験を積んでもらうためのローカルのgitサーバーを構築したことで、おすすめの手順が見えてきたのでまとめておきます。
3行で要約
-
無料、クローズドのgitサーバー(Windows + WSL + docker + gitlab)の構築手順
-
LAN内でチーム利用するためのポートフォワードとhostsの設定も記載
-
WSLやdockerを利用しているので壊しても再構築が容易なので、学習用にどうぞ。
環境
- Windows
利用のハードルを下げるためにWindowsで利用する想定
- WSL + Ubuntu
メインのWindows環境を汚さないためにWSL + Ubuntuを利用
systemdを動かすためにWSL2が必須
- docker + gitlab
簡単に構築するためにdockerhubで提供されるgitlab公式コンテナを利用
WSLでUbuntuを入れる
- 管理者でコマンドプロンプト起動
スタートメニューでコマンドプロンプトを選択して「管理者として起動」を選択します。
- wslにUbuntuをインストール
> wsl --update
> wsl --set-default-version 2
> wsl --install -d Ubuntu
インストール中: Ubuntu
Ubuntu はインストールされました。
Ubuntu を起動しています...
Ubuntuにdockerを入れる
docker公式手順通りにdocker環境をインストールします。
起動したWSL上のUbuntuで以下を実行する。
apt updateが失敗する場合は、ネットワークかファイアウォールを確認してください。
$ sudo apt update
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
$ docker -v
Docker version 24.0.5, build ced0996
gitabのdockerイメージからコンテナ作成
dockerhubのgitlab-ceイメージを利用します。
$ sudo apt install docker-compose
$ mkdir gitlab
$ cd gitlab
$ vi docker-compose.yml
docker-compose.ymlの中身は以下の内容をコピペ。
ポート番号は12080にしてあります。sshは設定してません。
version: '3'
services:
gitlab:
container_name: gitlab_local
image: 'gitlab/gitlab-ce:latest'
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.local:12080'
nginx['listen_port'] = 80
ports:
- '12080:80'
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'
コピペでインデントズレたら直して下さい。
docker-composeでコンテナ作成します。
$ sudo docker-compose up -d
※docker ps でコンテナが起動していることを確認
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
84a1d0cadba6 gitlab/gitlab-ce:latest "/assets/wrapper" About a minute ago Up About a minute (health: starting) 22/tcp, 443/tcp, 0.0.0.0:12080->80/tcp, :::12080->80/tcp gitlab_local
※health: starting が healthy になるまで数分待機してください。
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17edcff9fb11 gitlab/gitlab-ce:latest "/assets/wrapper" 2 minutes ago Up 2 minutes (healthy) 22/tcp, 443/tcp, 0.0.0.0:12080->80/tcp, :::12080->80/tcp gitlab_local
※gitlabのrootパスワード確認
1日経過するとファイルが消えてしまうので、忘れないようにコンテナ作成直後に確認
$ sudo docker exec gitlab_local cat /etc/gitlab/initial_root_password
略
Password: beCqi//W9ucz/WkrxJtuQ9GAGmA4tV7za1s4SJCp2mY=
http://127.0.0.1:12080/
にブラウザでアクセスして以下のようなログイン画面が表示されればOK
ブラウザでログインできるか確認しましょう。
- ユーザー名 : root
- パスワード : (上記で確認したもの)
次にwslのipアドレスでもアクセス可能か確認します。
wslのubuntuで以下実行し、IPアドレスを確認
$ ip a
略
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
略
inet xxx.xxx.xxx.xxx/20 brd 172.20.47.255 scope global eth0
valid_lft forever preferred_lft forever
※[wslのIPアドレス]=xxx.xxx.xxx.xxx
http://[wslのIPアドレス]:12080/
で接続できることを確認
gitlabの設定
ブラウザで各種設定を行います。
ユーザーの追加
右下の[Configure GitLab]パネルをクリック
[New user]ボタンをクリック
必要事項を入力して、スクロールして画面下の[Create user]ボタンをクリック
例
Name:hoge
Username:hoge
Email:hoge@gitlab.local
作成したユーザーにパスワードを設定するために[Edit]ボタンをクリック
Password欄が表示されるのでパスワードを設定します。
グループの追加
左のバーの[Groups]をクリックし、表示された画面の右側の[New group]をクリック
[Create group]パネルをクリック
必要事項を入力して、スクロールして画面下の[Create group]ボタンをクリック
例
Group name:new_group
Group URL:http://127.0.0.1:12080/new_group
Visibility level:Private
プロジェクトの追加
[new_group]の右に表示される[New project]ボタンをクリック
[Create blank project]をクリック
必要事項を入力して、スクロールして画面下の[Create project]ボタンをクリック
例
Project name:new_project
Project URL:http://127.0.0.1:12080/new_group/new_project
Visibility level:Private
プロジェクトへユーザー登録
左のバーの[Manage]-[Members]をクリックしてメンバーのリストを表示する
右に表示される[Invite members]をクリックする
必要事項を入力して、[Invite]ボタンをクリック
例
Username or email addressでユーザー検索して選択する
Select a role で権限選択する
ユーザーが追加されていることを確認
ログオフして、追加したユーザーでログインを確認する
外部に公開する場合
以下コマンドでポートフォワードの確認
> netsh interface portproxy show v4tov4
何も表示されれない場合はポートフォワードが設定されていない。
windowsのipアドレス確認しポートフォワードの設定を行います。
> ipconfig
略
IPv4 アドレス . . . . . . . . . . . .: xxx.xxx.xxx.xxx
※[windowsのIPアドレス]=xxx.xxx.xxx.xxx
http://[windowsのIPアドレス]:12080/
で接続できないことを確認
管理者のコマンドプロンプト起動し、ポートフォワードの設定を行います。
> netsh interface portproxy add v4tov4 listenaddress=[windowsのIPアドレス] listenport=12080 connectaddress=[wslのIPアドレス] connectport=12080
※[windowsのIPアドレス]と[wslのIPアドレス]は確認した値を入れる
> netsh interface portproxy show v4tov4
ipv4 をリッスンする: ipv4 に接続する:
Address Port Address Port
--------------- ---------- --------------- ----------
[windowsのIP] 12080 [wslのIP] 12080
http://[windowsのIPアドレス]:12080/
で接続できることを確認
hostsの設定
名前でアクセスできるようにhostsを設定します。
wslのIPや、127.0.0.1でアクセスする運用でいい人はスキップしてください。
管理者でメモ帳を起動して以下を開く
C:\Windows\System32\drivers\etc\hosts
最後の行に追加
外部に公開する場合はWindowsのIPを指定
外部公開しない場合はローカルIPかWSLのIPを指定
127.0.0.1 gitlab.local
http://gitlab.local:12080/
でつながることを確認
自動起動
スタートアップによるログイン時のWSL開始
ファイル名を指定して実行で以下を行う
%homepath%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
エクスプローラーで開いたフォルダにwsl2-startup.wsfを作成し、ファイル内容は以下で保存する。
<job>
<script language="JScript">
var shell = WScript.CreateObject("WScript.Shell");
shell.Run('wsl -d ubuntu', 0);
shell = null;
</script>
</job>
Windowsにログインするタイミングでwslが起動してgitlabが常駐します。
OS起動時にサービス起動する方法も次に記載しますが、安定していないので個人利用なのであれば、本章で記載したログイン時に起動する方式がおすすめです。
タスクスケジューラによるOS起動時のWSL開始
2024/11/28追記
ログイン時ではなく、OS起動時にバックグラウンドで起動する方法も記載しておきます。
サービスとしてチームに提供する想定はこちらになると思います。
タスクスケジューラを使うことでWindows開始時にWSLを起動します。
基本的には以下のコマンドで登録してOS再起動すればOKです。
WSL起動までにしばらく時間がかかりますので、のんびり待ってください。
たまに起動しないこともあります。
起動しなかった場合の監視や再起動設定を入れたほうが良いかもですが、タスクスケジューラに詳しくないので、サービス起動してなっかったら手動でWSLを起動する運用にしています。
>schtasks /create /tn "wsl startup" /tr "\"C:\Program Files\WSL\wsl.exe\"" /sc onstart /RU (アカウント) /RP (パスワード)
>schtasks /query /tn "wsl startup" /v /fo list
gitリポジトリへのアクセス
ブラウザでログインして、プロジェクトを選ぶ
プロジェクトを開きます。
[Clone]ボタンをクリックします
メニューが表示されるのでClone with HTTP の右の ボタンを押してURLをクリップボードへコピーする
クリップボードにリポジトリのパスが格納されるのでエディタとかにペーストしておいてください。
gitクライアントで操作する
gitクライアントは何でもいいのですが、以下がおすすめ
- GUIで使いたい人:sourcetree
- CUIで使いたい人:git for windows
Visual StudioやAndroid Studioなど利用中のIDEがgitに対応している場合は、そのままIDEから利用すればよいかと思います。
リポジトリ:http://gitlab.local:12080/new_group/new_project.git
ユーザー名:作成したユーザー名
パスワード:指定したパスワード
壊した場合に環境破棄して作り直す
方法1.WSLごと削除
管理者権限のコマンドプロンプトで以下コマンドでWSL上のUbuntuを登録解除します。
> wsl --unregister Ubuntu
登録解除。
この操作を正しく終了しました。
Ubuntuの再セットアップから再度行ってください。
> wsl --install -d Ubuntu
こちらよりは次に記載するdockerコンテナのみ削除するほうが簡単でおすすめです。
方法2.dockerコンテナを削除する
Ubuntuで以下コマンドでコンテナを停止、削除します。
$ sudo docker stop gitlab_local
gitlab_local
$ sudo docker rm gitlab_local
gitlab_local
docker-composeでupすれば初期化したコンテナが立ち上がります。
$ sudo docker-compose up -d
おわりに
機密情報をアップするリスクを避けるためにgitを学習しない/させない人たちはローカルgitがあれば安心して挑戦できます!
トライ・アンド・エラーが一番理解が早いと思いますので、どんどん環境壊しましょう。