Ubuntu 24.04でGitとDockerを導入しLaravel Sailを起動するまでのまとめ

## はじめに
以前投稿した[Laravelのインストール記事](https://qiita.com/motuneko253/items/4ca503b2a2beba5fa232)にて、WSL2上にLaravel Sailを構築しましたが、いきなりサーバのお引越しを行います。
今回はVMware上に建てた仮想マシンのUbuntu 24.04を使用し、Dockerの導入およびGitでCloneをしたソースでLaravel Sailの起動が出来る所までやりたいと思います。

## 環境
冒頭でも記載しましたが、今回はUbuntuの最新バージョンであるLTSの24.04を使用していきます。

### OS情報
```ruby:コマンド
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04 LTS (Noble Numbat)"
~省略~
```

## Gitの設定
WSLのUbuntu 24.04ではgitをインストールすると記載していた方もいたのですが、今回私の環境には既にgitが導入されていましたので、インストールは不要みたいです。
### Gitバージョン
```ruby:コマンド
$ git --version
git version 2.43.0
```
早速Git関連の設定をしていきます。
「user.name」、「user.email」は言わずもがなですが、「core.autocrlf」はチェックアウトの際に、Gitが勝手に改行コードがLFからCRLFに変換するのを防ぐ役割があります。
### Gitアカウント設定
```ruby:コマンド
$ git config --global user.name [ユーザ名]
$ git config --global user.email [メールアドレス]
$ git config --global core.autocrlf false
```
以下のコマンドで設定を確認することができます。
```ruby:コマンド
$ git config user.name
$ git config user.email
```

## GitのSSH設定とClone実行
単純にCloneするだけであればHTTPSでもよいかと思いますが、自身の管理しているソースコードという体ですので、SSHで一通りのやり取りができるようにしていきます。
### SSHキーの作成
ユーザのホームディレクトリ配下にあるSSHディレクトリに移動し、ssh-keygenコマンドで鍵を作成します。
3回ほど何か聞かれますので、エンターを押して進めて行きます。
ここで作成された「~/.ssh/id_rsa.pub」を後ほどGit HUBのページに登録します。
```ruby:コマンド
$ cd ~/.ssh
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/XXX/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/XXX/.ssh/id_rsa
Your public key has been saved in /home/XXX/.ssh/id_rsa.pub
```

### Git HUBへ公開鍵の登録
Git HUBの以下のページへアクセスすると、鍵の登録ページが表示されます。

https://github.com/settings/ssh

「New SSH key」を押すと鍵の登録が行えます。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566232/815abce2-6365-4ea2-37fa-144bba4f39af.png)

以下の「Key」項目に先ほど作成した公開鍵の情報を貼り付けます。
Titleは任意でわかりやすい名前を付けておくとわかりやすいです。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566232/a51a5257-e776-1aac-ef22-cca4ab84c1aa.png)

「Add SSH key」を押すと、スマホアプリ側に認証のリクエストが飛びました。
スマホ側で番号を入力してあげると処理が正常に完了します。

### Git HUBへの疎通確認
鍵の登録が無事にできたらSSHコマンドで試しにアクセスしてみます。
「successfully authenticated」と表示されれば正常に疎通できています。
```ruby:コマンド
$ ssh -T git@github.com
Hi XXX! You've successfully authenticated, but GitHub does not provide shell access.
```

### Git HUBからソースのClone実行
コマンドは「git clone」を実行するだけです。
無事Laravelのプロジェクトがダウンロードできました。
```ruby:コマンド
$ git clone git@github.com:motuneko253/test-project-v10.git
Cloning into 'test-project-v10'...
remote: Enumerating objects: 103, done.
remote: Counting objects: 100% (103/103), done.
remote: Compressing objects: 100% (79/79), done.
remote: Total 103 (delta 6), reused 103 (delta 6), pack-reused 0
Receiving objects: 100% (103/103), 73.84 KiB | 491.00 KiB/s, done.
Resolving deltas: 100% (6/6), done.
$
$ cd test-project-v10
$ ls -la
合計 392
drwxrwxr-x 12 test01 test01   4096  7月 16 15:18 .
drwxr-x--- 18 test01 test01   4096  7月 16 15:18 ..
-rw-rw-r--  1 test01 test01    258  7月 16 15:18 .editorconfig
-rw-rw-r--  1 test01 test01   1097  7月 16 15:18 .env.example
drwxrwxr-x  8 test01 test01   4096  7月 16 15:18 .git
-rw-rw-r--  1 test01 test01    186  7月 16 15:18 .gitattributes
-rw-rw-r--  1 test01 test01    243  7月 16 15:18 .gitignore
-rw-rw-r--  1 test01 test01   4109  7月 16 15:18 README.md
drwxrwxr-x  7 test01 test01   4096  7月 16 15:18 app
-rwxrwxr-x  1 test01 test01   1686  7月 16 15:18 artisan
drwxrwxr-x  3 test01 test01   4096  7月 16 15:18 bootstrap
-rw-rw-r--  1 test01 test01   1882  7月 16 15:18 composer.json
-rw-rw-r--  1 test01 test01 301825  7月 16 15:18 composer.lock
drwxrwxr-x  2 test01 test01   4096  7月 16 15:18 config
drwxrwxr-x  5 test01 test01   4096  7月 16 15:18 database
-rw-rw-r--  1 test01 test01   1761  7月 16 15:18 docker-compose.yml
-rw-rw-r--  1 test01 test01    248  7月 16 15:18 package.json
-rw-rw-r--  1 test01 test01   1064  7月 16 15:18 phpunit.xml
drwxrwxr-x  2 test01 test01   4096  7月 16 15:18 public
drwxrwxr-x  5 test01 test01   4096  7月 16 15:18 resources
drwxrwxr-x  2 test01 test01   4096  7月 16 15:18 routes
drwxrwxr-x  5 test01 test01   4096  7月 16 15:18 storage
drwxrwxr-x  4 test01 test01   4096  7月 16 15:18 tests
-rw-rw-r--  1 test01 test01    263  7月 16 15:18 vite.config.js
```

## Dockerのインストール
gitと同様に既にDockerが導入されていました。インストールイメージに既に色々入っていて拍子抜けというかなんというか…。
### Dockerバージョン
```ruby:コマンド
# docker -v
Docker version 27.0.3, build 7d4bcd8
```

## PHPのインストール
まさかのgitやdockerはインストール済みなのに、PHPは入っていなかったのでインストールします…。
[Laravelのインストール記事](https://qiita.com/motuneko253/items/4ca503b2a2beba5fa232)のLaravel10の構築内容と重複しているのでさらっと書いておきます。

### PHPのインストールとバージョン確認
```ruby:コマンド
# apt -y install php8.3-fpm php-xml php-curl php-dom
# php -v
PHP 8.3.6 (cli) (built: Jun 13 2024 15:23:20) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.6, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.6, Copyright (c), by Zend Technologies
```

### Composerのインストールとバージョン確認
```ruby:コマンド
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Installer verified
# php composer-setup.php
All settings correct for using Composer
Downloading...

Composer (version 2.7.7) successfully installed to: /root/composer.phar
Use it: php composer.phar

# php -r "unlink('composer-setup.php');"
# mv composer.phar /usr/local/bin/composer
# composer -V
Composer version 2.7.7 2024-06-10 22:11:12
PHP version 8.3.6 (/usr/bin/php8.3)
Run the "diagnose" command to get more detailed diagnostics output.
```


## Laravelの起動
このままLaravelを起動しようとすると、「vendar」ディレクトリと「.env」ファイルが存在しておらず起動が出来ません。
「composer install」コマンドで必要な情報をインストールしてくれます。
### composer install
```ruby:コマンド
~/test-project-v10$ composer install
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Package operations: 112 installs, 0 updates, 0 removals
  - Downloading doctrine/inflector (2.0.10)
  - Downloading doctrine/lexer (3.0.1)
  - Downloading symfony/polyfill-ctype (v1.30.0)
  - Downloading webmozart/assert (1.11.0)
~省略~
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi

   INFO  Discovering packages.

  laravel/sail ............................................................. DONE
  laravel/sanctum .......................................................... DONE
  laravel/tinker ........................................................... DONE
  nesbot/carbon ............................................................ DONE
  nunomaduro/collision ..................................................... DONE
  nunomaduro/termwind ...................................................... DONE
  spatie/laravel-ignition .................................................. DONE

83 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
```

### .envの作成
「.env.example」ファイルがサンプルですのでこちらをコピーすればひな形ができますが、今回は移行という体ですのでベースは元のサーバの「.env」をベースにしてしまいます。
```ruby:コマンド
$ cp -p .env.example .env
```

### ユーザのdockerグループ追加
どのユーザでsailを起動するかにもよりますが、起動ユーザがdockerグループに所属していないと起動権限が足りずエラーとなります。
以下のコマンドでユーザにグループを追加してあげましょう。
```ruby:コマンド
# usermod -aG docker test01
# id test01
uid=1000(test01) gid=1000(test01) groups=1000(test01),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),114(lpadmin),984(docker)
```

### プロジェクトの起動
ここまで行けば後は起動するだけです。
プロジェクトディレクトリに移動してsailを起動しましょう。
```ruby:コマンド
$ cd ~/test-project-v10
$ sail up -d
~省略~
 ✔ Container test-project-v10-laravel.test-1  Started                                       1.4s
```

### sailの起動確認
「docker ps」コマンドでコンテナの確認を行うと、無事起動しておりトップページも表示できています！
```ruby:コマンド
$ docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS                   PORTS                                                                                    NAMES
8a66a650b8c9   sail-8.3/app   "start-container"         3 minutes ago   Up 3 minutes             0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:5173->5173/tcp, :::5173->5173/tcp, 8000/tcp   test-project-v10-laravel.test-1
880991debf46   mariadb:11     "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes (healthy)   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp                                                test-project-v10-mariadb-1
```

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566232/40b400c3-b438-d87e-e2f3-58902f0a7d8f.png)

### おまけ
自身の作ったアプリを移行し起動したところエラーが発生したので、npmのインストールなどを行いました。
ついでにDBのマイグレーションも忘れずに。
```ruby:コマンド
$ sail php artisan migrate

   INFO  Preparing database.

  Creating migration table ........................................................... 11ms DONE

   INFO  Running migrations.

  2014_10_12_000000_create_users_table ............................................... 16ms DONE
  2014_10_12_100000_create_password_reset_tokens_table ................................ 5ms DONE
  2019_08_19_000000_create_failed_jobs_table ......................................... 13ms DONE
  2019_12_14_000001_create_personal_access_tokens_table .............................. 21ms DONE
$ sail npm install

added 146 packages, and audited 147 packages in 3s

36 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
$ sail npm run build

> build
> vite build

vite v5.3.3 building for production...
✓ 54 modules transformed.
public/build/manifest.json             0.27 kB x gzip:  0.15 kB
public/build/assets/app-DrEXVF1d.css  35.79 kB x gzip:  6.69 kB
public/build/assets/app-Cs0QkU1O.js   78.50 kB x gzip: 29.14 kB
✓ built in 1.33s


```

## 最後に
Laravelで簡単なWebアプリが作れるので色々楽しんで作っています。
また別記事で自身の備忘のために、Laravelの簡単な流れもまとめていく予定です。
最終的にはkubernetesでLaravelを起動させる所まで実験&記事に出来たらよいなと思っています。

## 参考サイト
・Git を Ubuntu にインストールしてリモートリポジトリにプッシュする
https://qiita.com/studio_meowtoon/items/719e6765dd11f17a0b19

・GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~
https://qiita.com/shizuma/items/2b2f873a0034839e47ce

・気をつけて！Git for Windowsにおける改行コード
https://qiita.com/uggds/items/00a1974ec4f115616580

・【入門】UbuntuにDockerをインストールする
https://www.kagoya.jp/howto/cloud/container/dockerubuntu/

・LaravelのプロジェクトをGithubからcloneして開発環境を構築する方法
https://qiita.com/jefftech/items/32694685f2afdae176fd