この記事で書くこと
Laravel11 + Vite (Vue.js) のインストール
フォルダの作成
myapp(プロジェクトフォルダ)
├── docker
│ ├── app
│ │ ├── Dockerfile
│ │ └── php.ini
│ ├── db
│ │
│ └── nginx
│ ├── Dockerfile
│ ├── default.conf
│ └── logs
├── docker-compose.yaml
└── my.cnf
Docker, docker-compose, 各 conf
docker-compose の編集
services:
nginx:
container_name: "nginx"
build:
context: ./docker/nginx
depends_on:
- app
ports:
- 80:80
volumes:
- ./:/src
app:
container_name: "app"
build:
context: ./docker/app
depends_on:
- db
ports:
- 5173:5173
volumes:
- ./:/src
- /src/node_modules
- /src/vendor
- ./docker/app/php.ini:/usr/local/etc/php/php.ini
db:
image: mysql:8.0.37
container_name: "db"
volumes:
- ./docker/db:/var/lib/mysql
- ./my.cnf:/etc/mysql/conf.d/my.cnf
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=myapp
ports:
- 3306:3306
redis:
image: redis:alpine
container_name: "redis"
ports:
- 16379:6379
-
高速化のため以下のフォルダはマウントから除外(これをしないと vite のロードに 1 分かかる)
- /src/node_modules
- /src/vendor
-
そのため docker-compose down のたびに下記コマンド必須。
- composer install
- npm install
my.cnf の編集
[mysqld]
max_allowed_packet = 32505856
lower_case_table_names = 2
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
nginx の Dockerfile
FROM nginx:1.27
COPY ./default.conf /etc/nginx/conf.d/default.conf
nginx の default.conf
server {
listen 80;
server_name _;
client_max_body_size 1G;
root /src/public;
index index.php;
access_log /src/docker/nginx/logs/access.log;
error_log /src/docker/nginx/logs/error.log;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
app の dockerfile
FROM php:8.3-fpm
EXPOSE 5173
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng-dev \
libfontconfig1 \
libxrender1
RUN docker-php-ext-configure gd --with-freetype --with-jpeg
RUN docker-php-ext-install gd
RUN docker-php-ext-install bcmath
RUN docker-php-ext-install pdo_mysql mysqli exif
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
ENV NODE_VERSION=20.15.0
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
ENV NVM_DIR=/root/.nvm
RUN . "$NVM_DIR/nvm.sh" && nvm install ${NODE_VERSION}
RUN . "$NVM_DIR/nvm.sh" && nvm use v${NODE_VERSION}
RUN . "$NVM_DIR/nvm.sh" && nvm alias default v${NODE_VERSION}
ENV PATH="/root/.nvm/versions/node/v${NODE_VERSION}/bin/:${PATH}"
RUN node --version
RUN npm --version
WORKDIR /src
ADD . /src/storage
RUN chown -R www-data:www-data /src/storage
app の php.ini の編集
upload_max_filesize=256M
post_max_size=256M
Laravel, 初回 migrate
app の起動
> docker compose up -d
一時フォルダを作成して Laravel をインストール
> docker compose exec app bash
src# mkdir temp
src# cd temp
src/temp# composer create-project "laravel/laravel=11.*" . --prefer-dist
中身をプロジェクトフォルダに移動して、一時フォルダを削除する
src/temp# cd ..
src# mv l11dev_tmp/* ./
src# mv l11dev_tmp/.* ./
src# rm l11dev_tmp -rf
依存関係のインストール
src# composer install
src# npm install
The stream or file "/src/storage/logs/laravel.log" could not be opened in append mode の防止
- root 以外に www-data が書き込みできるように変更
- Laravel の公式に指定された、strage のシンボリックリンクを設置
src# chmod -R guo+w storage
src# php artisan storage:link
DB との接続
- env ファイルでコメントアウトされている箇所を変更
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=root
DB_PASSWORD=root
- .env 上記の変更箇所 👇️
- migration
src:# php artisan migrate
アクセステスト
- 共通 #src npm run dev をしてからアクセステスト。
- 共通 Ctrl + C で抜けてから構築作業
-
http://localhost にアクセスしてみる
Vite
welcome.blade.php の確認
- welcome.blade.php に以下の記述があるか確認 -> ない場合は/head の前に記述する
@vite(['resources/css/app.css', 'resources/js/app.js'])
vite.config.js の変更
- 以下の画像の位置にコードを追加する
server: {
host: true,
hmr: {
host: 'localhost',
},
},
Vite の起動
/src# npm run dev
-
http://localhost にアクセス 👇️
設定を変えて再起動するとき
> docker compose down
> docker compose up -d --build
> docker compose exec app bash
src:# composer install
src:# npm install
vue のインストール
src:# npm install vue @vitejs/plugin-vue
app.js の編集
import "./bootstrap";
import { createApp } from "vue";
import ExampleComponent from './components/ExampleComponent.vue';
const app = createApp({});
app.component('example-component', ExampleComponent);
app.mount('#app');
resources/js/components/ExampleComponent.vue の作成
<template>
<div>
<h1>Hello, Vue with Vite!</h1>
</div>
</template>
<script>
export default {
name: 'ExampleComponent',
};
</script>
<style scoped>
h1 {
color: blue;
}
</style>
welcome.blade.php の編集
- body の中をすべて削除して記入
<body>
<div id="app">
<example-component></example-component>
</div>
</body>
Vue の動作確認
- vite.config.js の編集
import { defineConfig } from "vite";
import laravel from "laravel-vite-plugin";
import vue from "@vitejs/plugin-vue";
export default defineConfig({
plugins: [
laravel({
input: ["resources/css/app.css", "resources/js/app.js"],
refresh: true,
}),
vue(),
],
resolve: {
alias: {
vue: "vue/dist/vue.esm-bundler.js",
},
},
server: {
host: true,
hmr: {
host: "localhost",
},
},
});
http://localhost の確認
Laravel の MVC
Controller, View, web.php(routing)
controller の作成
/src# php artisan make:controller SampleController
- controller の編集
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SampleController extends Controller
{
public function index()
{
return view('sample'); // resources/views/sample.blade.php
}
}
view の作成
src# touch resources/views/sample.blade.php
- view の編集
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sample Page</title>
</head>
<body>
<h1>Hello from Sample View!</h1>
</body>
</html>
web.php の編集
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\SampleController;
Route::get('/', function () {
return view('welcome');
});
Route::resource('samples', SampleController::class);
http://localhost/samples にアクセス
migration, seeder
migration ファイルの作成
- create_複数形_table
src# php artisan make:migration create_items_table
- migration ファイルの編集(title は 100 文字制限)
...
public function up(): void
{
Schema::create('items', function (Blueprint $table) {
$table->id();
$table->string('title', 100);
$table->text('content');
$table->timestamps();
});
}
...
migration
src# php artisan migrate
Seeder ファイルの作成
src# php artisan make:seeder ItemsTableSeeder
- Seeder ファイルの編集
...
use Illuminate\Support\Facades\DB;
class itemsTableSeeder extends Seeder
{
public function run(): void
{
DB::table('items')->insert([
'title' => 'タイトル1',
'content' => 'テストデータ1',
],
[
'title' => 'タイトル2',
'content' => 'テストデータ2',
]);
}
...
}
- DatabaseSeeder への登録
...
public function run(): void
{
$this->call(ItemsTableSeeder::class);
...
}
...
seeder の実行
src# php artisan db:seed
Model
model の作成
src# php artisan make:model Item
app/Models/item.php が生成される
db からデータの取り出し
...
use App\Models\Item;
class SampleController extends Controller
{
public function index(Request $request)
{
...
$title = Item::find(1)->title;
return view("sample", ["title" => $title]);
...
}
...
}
sample.blade.php の編集
...
<body>
<h1>Hello from Sample View!</h1>
<?= $title ?>
</body>
...
http://localhost/samples にアクセス
AWS のデプロイ
EC2 起動, security-group
EC2 を開く
途中キーペアを作成した場合はダウンロードしておく(既存のでも OK)
起動したインスタンスのパブリック IPv4DNS を確認
ssh 接続
- キーペアファイルはよく使うのでなくさないように保存
- 保存したフォルダに cd していれば、フルパスじゃなくて、キーペアファイル名のみで OK
> ssh ec2-user@<パブリック IPv4DNSアドレス> -i <キーペアファイルまでのフルパス>
docker のインストール
sudo su
sudo dnf update
sudo dnf install -y docker
sudo systemctl start docker
sudo gpasswd -a $(whoami) docker
sudo chgrp docker /var/run/docker.sock
sudo service docker restart
sudo systemctl enable docker
sudo mkdir -p /usr/local/lib/docker/cli-plugins
sudo curl -SL https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
mkdir -p /work/docker
sudo chown -R ec2-user /work/docker
sudo chmod -R 775 /work/docker
sftp
プロジェクトのアップロード
- プロジェクトを zip 化して、c/projects/docker に置く
sftp -oPort="22" -oIdentityfile="<キーペアのフルパス>" ec2-user@<パブリックIPv4DNS>
sftp> cd /work/docker
sftp> lcd ~/projects/docker
sftp> put myapp.zip
install
ssh ec2-user@<インスタンスのパブリックDNS> -i <キーペアファイル>
cd /work/docker
sudo su
unzip myapp.zip
rm -rf __MACOSX
rm -rf <zip ファイル>
cd myapp
docker compose up -d
docker compose exec app bash
src# composer install
src# npm install
src# npm run build
public アドレスにアクセスして表示確認
参考にした記事