10
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

壊してもいい練習用のgitサーバーを構築しよう

Last updated at Posted at 2023-08-25

はじめに

最近のチームでのソフトウェア開発では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は設定してません。

docker-compose.yml
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

1.png

ブラウザでログインできるか確認しましょう。

  • ユーザー名 : 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]パネルをクリック

2.png

[New user]ボタンをクリック

3.png

必要事項を入力して、スクロールして画面下の[Create user]ボタンをクリック


 Name:hoge
 Username:hoge
 Email:hoge@gitlab.local

4.png

作成したユーザーにパスワードを設定するために[Edit]ボタンをクリック

5.png

Password欄が表示されるのでパスワードを設定します。

6.png

グループの追加

 左のバーの[Groups]をクリックし、表示された画面の右側の[New group]をクリック

7.png

[Create group]パネルをクリック

8.png

必要事項を入力して、スクロールして画面下の[Create group]ボタンをクリック


 Group name:new_group
 Group URL:http://127.0.0.1:12080/new_group
 Visibility level:Private

9.png

プロジェクトの追加

[new_group]の右に表示される[New project]ボタンをクリック

10.png

[Create blank project]をクリック

11.png

必要事項を入力して、スクロールして画面下の[Create project]ボタンをクリック


 Project name:new_project
 Project URL:http://127.0.0.1:12080/new_group/new_project
 Visibility level:Private

16.png

プロジェクトへユーザー登録

左のバーの[Manage]-[Members]をクリックしてメンバーのリストを表示する
右に表示される[Invite members]をクリックする

12.png

必要事項を入力して、[Invite]ボタンをクリック


 Username or email addressでユーザー検索して選択する 
 Select a role で権限選択する

13.png

ユーザーが追加されていることを確認

14.png

ログオフして、追加したユーザーでログインを確認する

外部に公開する場合

以下コマンドでポートフォワードの確認

> 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を作成し、ファイル内容は以下で保存する。

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をクリップボードへコピーする

15.png

クリップボードにリポジトリのパスが格納されるのでエディタとかにペーストしておいてください。

gitクライアントで操作する

gitクライアントは何でもいいのですが、以下がおすすめ

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があれば安心して挑戦できます!

トライ・アンド・エラーが一番理解が早いと思いますので、どんどん環境壊しましょう。

10
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?