GitLabをWSL2 + Dockerで構築して、他のPCからアクセスしてみる

## 何をしたの？ <!-- omit in toc -->

DockerのWSLディストロを外付けHDDに移動して、GitLabのDockerコンテナを構築、LAN内のPCからアクセスできるようにしました。

- [docker wslディストロの移動](#3-docker-desktop-ディストリビューションの引っ越し)
- [GitLab Dockerコンテナ構築](#4-gitlabを構築する)
- [LAN内PCからアクセス](#5-他のpcからアクセスできるようにする)

## 目次 <!-- omit in toc -->

- [1. はじめに](#1-はじめに)
- [2. やりたいこと](#2-やりたいこと)
- [3. docker-desktop ディストリビューションの引っ越し](#3-docker-desktop-ディストリビューションの引っ越し)
	- [3.1. WSLを止める](#31-wslを止める)
	- [3.2. WSLを持ち運び可能にする](#32-wslを持ち運び可能にする)
	- [3.3. DockerをWSLから削除](#33-dockerをwslから削除)
	- [3.4. 新しい場所でDockerをインポート](#34-新しい場所でdockerをインポート)
- [4. GitLabを構築する](#4-gitlabを構築する)
	- [4.1. WSLでdocker-compose用のフォルダを作る](#41-wslでdocker-compose用のフォルダを作る)
	- [4.2. docker-compose.ymlを作る](#42-docker-composeymlを作る)
	- [4.3. コンテナ起動！](#43-コンテナ起動)
	- [4.4. localhostにアクセス](#44-localhostにアクセス)
	- [4.5. ログイン！](#45-ログイン)
- [5. 他のPCからアクセスできるようにする](#5-他のpcからアクセスできるようにする)
	- [5.1. ホストPCのIPアドレスの取得](#51-ホストpcのipアドレスの取得)
	- [5.2. hostsに書き込む](#52-hostsに書き込む)
	- [5.3. アクセスする側のPCにも書き込む](#53-アクセスする側のpcにも書き込む)
	- [5.4. アクセス！](#54-アクセス)
- [6. お疲れ様でした](#6-お疲れ様でした)

## 1. はじめに

[GitHubのIssueを有効活用する記事](https://qiita.com/o_ob/items/fd45fba2a9af0ce963c3)を読んでIssueを使いだし、「こういう個人的なのってGitHubに置いとくの恥ずかしいな……あと個人開発のプロジェクトとか、売り物にするの考えるなら人に見られないとこに置いときたいな」となって、GitLabを構築してみることにしました。

やってみたところ結構めんどくさいことが多いうえ、全部の流れを書いてくれてる記事が無かったので書きました。とりあえずこの記事をスタート地点に、もっといい構築方法とか、気になったことを突き詰めてもらえたらと思います。

## 2. やりたいこと

1. GitLabをWSL2 + Docker Desktop上に構築する

2. 外付けHDDとかにGitLabのデータを置いて、プロジェクトをたくさん貯められるようにする

3. 作業PCじゃない別のPCに入れて作業することを想定して、別のPCからGitLabにアクセスできるようにする

## 3. docker-desktop ディストリビューションの引っ越し

まずはGitLabが外付けストレージ内にデータを置けるようにします。といっても、マウントとかじゃなくて、GitLabが入ったDockerごとそのまま引っ越すという力技です。

もうちょっと理解が進んだら、改めてマウントする方法でやってみたいなとは思っています(やれたらやる)。

- [Docker Desktop for Windows のデータを別のドライブに移動する](https://chizuwota.net/wsl/wsl2-move-docker-vdisk/)
  こことか
- [【Docker+Windows】データ保存先の変更 #WSL2](https://qiita.com/__fu__/items/7c533911fc64006f64a0)
  ここを見てやった記憶があります。

### 3.1. WSLを止める

まずはDockerディストリビューションを停止します。

```powershell
wsl -l -v
```

で、現在このPCに入ってるディストリビューションの一覧と状況が分かります。
僕の場合以下のように出ました。

```powershell
  NAME              STATE           VERSION
* Ubuntu            Running         2
  docker-desktop    Running         2
```

`docker-desktop-data`がある人もいるみたいですね([ver4.30.0で無くなったらしい](https://alpha3166.github.io/blog/20240825.html#%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E3%83%87%E3%82%A3%E3%82%B9%E3%83%88%E3%83%AD%E3%82%92%E5%A4%89%E6%9B%B4))。
ちょっと僕の環境には無かったのですが、[こちらの記事](https://qiita.com/__fu__/items/7c533911fc64006f64a0)だとその話もしていたので、参照してみてください。

ともかく、これらのディストリビューションを停止します。

```powershell
wsl --shutdown
```

Dockerもタスクトレイのアイコンを右クリして「Quit Docker Desktop」でシャットダウンできます。

さっきの`wsl -l -v`で起動状況を確認しておくとよいです。

### 3.2. WSLを持ち運び可能にする

`wsl --export`というコマンドで、WSLを圧縮します。

WSLを置くためのフォルダを各自好きな場所に作ったあと、以下のコマンドを実行します。第2引数のパスは調整してください。

```powershell
wsl --export docker-desktop \path\to\new\distro\docker-desktop.tar
```

`.tar`をつけないと何でもない何かが生成されてやり直しです(1敗)。

### 3.3. DockerをWSLから削除

```powershell
wsl --unregister docker-desktop
```

`wsl -l -v`で削除確認もしてください。

### 3.4. 新しい場所でDockerをインポート

先ほど生成した`.tar`ファイルを、各自作ってもらった場所でインポートします。

```powershell
# wsl --import ディストロ名 インポート先 インポート元 --version 2
wsl --import docker-desktp \path\to\new\distro\ docker-desktop.tar --version 2
```

以上で引っ越し終わりです。`wsl -l -v`で、削除したdocker-desktopが生き返ってたら成功です。`.tar`は今後使う予定がなければ消して大丈夫です。

## 4. GitLabを構築する

### 4.1. WSLでdocker-compose用のフォルダを作る

docker-desktopじゃないほうのWSL2で、GitLab用のフォルダを作ります。
GitLabのデータを置くわけじゃないので安心してください。

```bash
mkdir gitlab && cd gitlab
```

### 4.2. docker-compose.ymlを作る

GitLabのDocker環境を構築するために`docker-compose.yml`を作ります。
以下をコピペしてください。

```yml
services:
  gitlab:
    image: "gitlab/gitlab-ce:latest"
    container_name: gitlab
    restart: always
    hostname: "gitlab.local" # ホスト名（好みで変更可能）
    ports:
      - "0.0.0.0:80:80" # HTTP
      - "0.0.0.0:443:443" # HTTPS
      - "0.0.0.0:22:22" # SSH
    volumes:
      - "gitlab-config:/etc/gitlab"
      - "gitlab-logs:/var/log/gitlab"
      - "gitlab-data:/var/opt/gitlab"
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.local'  # アクセスURL（hostnameと合わせて変更）
        gitlab_rails['gitlab_shell_ssh_port'] = 22
        # 必要に応じて以下のコメントを外してメール設定などを行ってください
        # gitlab_rails['smtp_enable'] = true
        # gitlab_rails['smtp_address'] = "smtp.gmail.com"
        # gitlab_rails['smtp_port'] = 587
        # gitlab_rails['smtp_user_name'] = "my.email@gmail.com"
        # gitlab_rails['smtp_password'] = "my-password"
        # gitlab_rails['smtp_domain'] = "smtp.gmail.com"
        # gitlab_rails['smtp_authentication'] = "login"
        # gitlab_rails['smtp_enable_starttls_auto'] = true
        # gitlab_rails['smtp_tls'] = false
        # gitlab_rails['gitlab_email_from'] = 'my.email@gmail.com'
    shm_size: "256m" # GitLabの動作に必要なメモリサイズ

volumes:
  gitlab-config:
  gitlab-logs:
  gitlab-data:
```

:::note warn
hostnameとexternal_urlの値を変更する場合は、両方を同じ値に合わせてください。この値は後で他のPCからアクセスする際のホスト名になります。
:::

Claude様が一晩で作ってくれたものなので「何でこうしてるんですか？」とは聞かないでください。僕もdocker-composeよくわからないです。僕の環境ではうまくいったのでそのまま使ってます。

### 4.3. コンテナ起動！

ここまでやったらコンテナ起動します

```bash
docker-compose up -d
```

GitLabは起動にそこそこ時間がかかります(5〜10分程度かかることもあるらしい)。アクセスできなくても焦らず待ちましょう。

ログ確認とか

```bash
docker-compose logs -f
```

コンテナ状況確認

```bash
docker ps -a
```

で、進捗を確認できます。`docker-compose logs -f`で「システムの初期化が完了しました」のようなメッセージが出たり、`docker ps -a`で全コンテナの`STATUS`が`Up`になれば準備完了です。

### 4.4. localhostにアクセス

GitLabが起動したら、`http://localhost`にアクセスします

### 4.5. ログイン！

rootユーザーで初期ログインします

- ユーザー名: `root`
- パスワード: 次のコマンドで確認できます(24時間経つと消えるのでお早めに)

```bash
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
```

初回ログイン後は、セキュリティのために必ずパスワードを変更してください。右上のユーザーアイコン > Preferences > Password からパスワードを変更できます。

ここまでやれたらとりあえずGitLabを使えるようになっていると思います。試しにGitHubで使ってた分のアカウントを登録したりして楽しみましょう。

## 5. 他のPCからアクセスできるようにする

ネットを通してとなると分からないですが、家の中のPC間だったら結構すぐできます。

### 5.1. ホストPCのIPアドレスの取得

まずはGitLabを動かしているPCのIPアドレスを取得します。
windows設定の「ネットワークとインターネット」>「イーサネット」の「IPv4アドレス」の箇所です

または、コマンドプロンプトで次のコマンドを実行しても確認できます

```cmd
ipconfig
```

### 5.2. hostsに書き込む

IPアドレスが取得できたら、`C:\Windows\System32\drivers\etc\hosts`にIPアドレスを追記します(管理者権限が必要です)。
最後の行に`IPアドレス gitlab.com`と書きます。

```
192.168.1.xxx gitlab.local
```

IPアドレスは実際の値に、`gitlab.local`は`docker-compose.yml`で設定したホスト名に合わせてください。

### 5.3. アクセスする側のPCにも書き込む

別のPCのhostsにも同じ内容を追記します。

### 5.4. アクセス！

別のPCでブラウザ開いてアクセスしてみましょう

## 6. お疲れ様でした

クソ疲れました。でもGitLab楽しいからヨシ！

GitHubに置いてあるリポジトリのインポートは[これ](https://gitlab-docs.creationline.com/ee/user/project/import/github.html)、逆にGitHubをGitLabデータのスペアや公開用に使うなら[これとか](https://scrapbox.io/tsuchinaga/GitLabからGitHubにSSHを使ってミラーリングする)読むといいと思います。

そのうちミニPC買ってGitLabホスティングして、24時間365日稼働させたいです。
あとGitHubをストレージ代わりにしつつ、NAS買って家の中でも冗長化したい……ついでにデカめの動画とかゲームとか保存したい……
VPN使えば外からもアクセスできるんでしたっけ？そういうのもやってみたい……。