MyDailyNotes
年別
2026年
3月 (3)
1月 (1)
2025年
カテゴリ
タグ
学習教材
© 2026 MyDailyNotes

2026/3/25 · 学習ログ

laravelの学習をする第0章

#IT#ホームラボ

laravelの学習をする第0章

0からAIと一緒にphp-laravelを学習する!
AIから課題を受けてそれを進めていく
今回の目標は自宅の環境を使用してブラウザにlaravelのロゴまで表示させる

背景・動機

laravelを勉強したくなったから

0.サーバ情報

vcpu:4
メモリ:8GB
ストレージ:128GB
OS:debian13

1.学習サーバの構築

自宅のproxmoxにdebian13のLXCがあるのでそれを使用する
以下を行った

  • proxmoxでnesting=1,keyctl=1を設定する
  • タイムゾーンをAsia/Tokyoへ変更
  • ロケールを日本に設定
  • curl,wget,zip,unzip,gnupg,lsb-release,bash-completionの追加
  • docker公式のAPTリポジトリの署名鍵を取得からのAPTに登録
  • docker-ce,docker-ce-cli,containerd.io,docker-buildx-plugin,docker-compose-pluginの追加
  • tailscaleクライアントをインストール
  • ssh接続の設定

以下コマンド一覧

#※LXCでなおかつ学習用のためすべてroot権限を使用  
  
apt update && upgrade -y  
#パッケージの情報更新と既存パッケージのアップグレード  
  
timedatectl set-timezone Asia/Tokyo  
#タイムゾーンの変更  
  
apt install -y curl wget zip unzip ca-certificates gnupg lsb-release  
#必要なものを追加  
  
chmod a+r /etc/apt/keyrings/docker.gpg  
#読み取り権限の付与  
  
echo   "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \  
  https://download.docker.com/linux/debian \  
  $(. /etc/os-release && echo $VERSION_CODENAME) stable" |   tee /etc/apt/sources.list.d/docker.list > /dev/null  
#docker公式リポジトリをAPTに登録  
  
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin  
#docker関係を追加  
  
curl -fsSL https://tailscale.com/install.sh | sh  
#リポジトリの追加  
  
systemctl enable --now tailscaled  
#サービスの起動  
  
tailscale up  
#表示されたURLにアクセスして使用できるようにする  
  
nano /etc/ssh/sshd_config  
  
PubkeyAuthentication yes  
AuthorizedKeysFile .ssh/authorized_keys  
PermitRootLogin prohibit-password  
PasswordAuthentication no  
#パスワードログインを禁止して公開鍵認証のみにする  
#※下3行をsshd_configの最後の行に追加  
  
chmod 700 .ssh/  
chmod 600 .ssh/authorized_keys  
#権限設定  

2.laravelの構築概要とAIからの課題

2.1 概要

作業ディレクトリ:/root/laravel/
構成するサービス:nginx,php,mariadb,phpmyadmin,mailpit
ディレクトリ構成

/root/laravel/  
├── docker-compose.yml  
├── docker/  
│   ├── nginx/  
│   │   └── default.conf  
│   └── php/  
│       └── Dockerfile  
└── src/

2.2 AIからの課題 1 docker-compose.yml

要件

  • nginxphpmariadbphpmyadminmailpit の5サービスを定義する
  • 各サービスは同じネットワーク上に置く
  • MariaDBのデータはボリュームで永続化する
  • Laravelのソースコードは ./src をコンテナの /var/www/html にマウントする

ポート設定

  • nginx:8080
  • phpmyadmin:8081
  • mailpit:8025

2.3 AIからの課題 2 default.conf

要件

  • ポート80でリクエストを受け付ける
  • Laravelの公開ディレクトリ(/var/www/html/public)をルートに設定する
  • PHPファイルは php:9000 に転送する
  • try_files でSPA風のルーティングに対応する

2.4 AIからの課題 3 Dockerfile

要件

  • ベースイメージ:php:8.3-fpm
  • 追加インストールするもの:
    • pdo_mysql(MariaDB接続用のPHP拡張)
    • composer(パッケージ管理ツール)

2.5 AIからの課題 4 laravelプロジェクト

laravelのロゴが出たら第0章のゴール

3 実際に課題を行ってみた

3.1 課題 1 docker-compose.ymlを作成する

記述できたもの

  • サービス名
  • コンテナ名
  • ビルドから使用するイメージの場所
  • docker hubから使用イメージ
  • mariadbの環境変数
  • 名前付きのボリュームの定義
  • カスタムネットワークの定義

記述できなかったもの

  • サービス内で記述するボリューム
  • ポート

サービス内で記述するボリュームの記述できなかった理由

  • ホストの/root/laravel/srcを使用することはわかっていたがコンテナのどのディレクトリにマウントするかわかっていなかった
  • コンテナのディレクトリをホストのディレクトリにマウントすると思っていた
  • 記述の方法を理解できなかった

ポートの記述ができなかった理由

  • コンテナとホストのポートが逆だった

3.2 課題 2 default.confを作成する

記述できたもの

  • なし

記述できなかったもの

  • すべて

意味わからん
AIに模範解答もらっても理解できなかった
各行に解説入れても理解できなかった
下記の図解でやっと理解

ブラウザ
http://ipアドレス:8080/users

nginx(ポート80で受け取る)

├─ /users → ファイルが存在しない → index.phpに転送 ← try_files の仕事


index.php(PHP-FPMに渡す) ← location ~ .php$ の仕事
│ fastcgi_pass php:9000 で渡す

phpコンテナ(PHP-FPM)
│ Laravelがルーティングして処理

レスポンスをnginx経由でブラウザへ返す

3.3 課題 3 Dockerfileを作成する

記述できたもの

  • イメージの指定

記述できなかったもの

  • php専用コマンドでpdo_mysqlをインストールすること
  • composerをマルチステージビルドでコピー

指定があったためイメージは記述できた
しかしapt installでpdo_mysqlをインストールしようとしていたため正しく記述できていなかった
phpの知識とかあったら記述できていたかもしれない composerについては何それ状態で「そんなことできるんだー」って気持ちになった

3.4 課題 4 laravelプロジェクトを作成する

とりあえず全部記述できたのでdocker起動!
http:ipアドレス:8080,8081,8025にアクセスもできた!

laravelのプロジェクトを作成しようとしたが必要なツールがないからエラー
そのためDockerfileをunzip,gitとphp拡張のzipを追加できるように修正
もう一度行うと次は別のエラーが起きlibzip-devが足りないとの内容だったため再度Dockerfileを修正
再度プロジェクトの作成を行うと止まらずに最後まで実行!
laravelのロゴを期待して確認へブラウザを開くとHTTP 500 Internal Server Error
どうやらコンテナがstorage/ と bootstrap/cache/ に書き込みを行うらしいが権限がないからエラーが起きているとのこと
権限を開放して次こそはlaravelのロゴが出ることを期待しましたがまたエラー
laravel11以降デフォルトでSQliteを使うらしくsrc/.envにmariadbの情報を記述しないといけないらしい
.envを更新してマイグレーションを行うことで無事にlaravel13のロゴにたどりつきゴール!
マイダーツ

まとめ

どれだけ他人やAIを頼りに生きてきたかわかりますね
いざ自分で0からやってみると何も分かっていない!
今回作成したファイルはいつもなら既にあるものだったりネットから流用・AIに作らせていたので
自分で0から作ってみることでなんとなく理解できただけでも大きい
ただこれは環境構築の第0章ですのでまだなにも始まっていない
第0章で終わらずphp-laravelの学習をブログにしていきたい!

各コード

docker-compose.yml

services:  
  php:  
    container_name: php  
    build: ./docker/php  
    volumes:  
      - ./src:/var/www/html  
    networks:  
      - laravel-net  
  
  mariadb:  
    container_name: mariadb  
    image: mariadb:12.2.2-noble  
    environment:  
      - MYSQL_ROOT_PASSWORD=root_password  
      - MYSQL_DATABASE=laravel  
      - MYSQL_USER=laravel  
      - MYSQL_PASSWORD=laravel_password  
      - TZ=Asia/Tokyo  
    volumes:  
      - mariadb-data:/var/lib/mysql  
    networks:  
      - laravel-net  
  
  nginx:  
    container_name: nginx  
    image: nginx:1.29.7  
    ports:  
    - "8080:80"  
    volumes:  
      - ./src:/var/www/html  
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf  
    networks:  
      - laravel-net  
  
  phpmyadmin:  
    container_name: phpmyadmin  
    image: phpmyadmin:latest  
    ports:  
      - "8081:80"  
    environment:  
      - PMA_HOST=mariadb  
    networks:  
      - laravel-net  
  
  mailpit:  
    container_name: mailpit  
    image: axllent/mailpit:latest  
    ports:  
      - "8025:8025"  
    networks:  
      - laravel-net  
  
volumes:  
  mariadb-data:  
  
networks:  
  laravel-net:    

default.conf

server {  
    listen 80;  
    root /var/www/html/public;  
    index index.php index.html;  
  
    location / {  
        try_files $uri $uri/ /index.php?$query_string;  
    }  
  
    location ~ \.php$ {  
        fastcgi_pass php:9000;  
        fastcgi_index index.php;  
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
        include fastcgi_params;  
    }  
}  

Dockerfile

FROM php:8.3-fpm  
RUN docker-php-ext-install pdo_mysql  
RUN apt-get update && apt-get install -y git unzip libzip-dev && rm -rf /var/lib/apt/lists/*  
RUN docker-php-ext-install zip  
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer  

関連記事

2025/12/3·メモ

tailscaleのメモ

LXCのtailscaleについてメモします。

#IT#tailscale#NW
2025/11/27·メモ

ブログの作り方

このブログの作り方について説明します。

#IT#blog#作り方