0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

さくらのレンタルサーバ スタンダードに Laravel 12 を設置したときのメモ 2025-04

Posted at

概要

 自端末上の既存 Laravel プロジェクトをさくらのレンタルサーバ スタンダードに設置する。さくらのレンタルサーバのデフォルトの公開ディレクトリ www は維持しつつ、複数の Laravel プロジェクトを設置できるようにする。

バージョン

  • 自端末側
    • Windows + WSL2 + ubuntu 22.04
    • Docker version 28.0.1
    • Docker Compose version v2.33.1
    • Laravel 12.8.1
      • PHP8.3で使える Laravel の 2025-04時点の最新
  • さくらのレンタルサーバ スタンダード
    • 古いスタンダードプランの場合は新環境に移行しておく
      • 無料でできるが移行に2時間くらいかかる
      • SSD が使われていて早いらしい
    • PHP 8.3.8
    • MySQL 8.0

補足

  • さくらのレンタルサーバ スタンダードには SSH でログインできるようにしておく

自端末側作業

Laravel のプロジェクトを laravel.build 経由の Laravel sail で作る。laravel_sakura はプロジェクト名なので任意の名称でよい。

curl -s https://laravel.build/laravel_sakura?php=83 | bash

Larael sail の長いビルドが終わると Laravel のソースコードが設置されている。

将来他の Laravel プロジェクトも置きたいので、データベース内のテーブル名にはプレフィックスを付けて被らないようにしておく。

config/database.phpprefix のところにすべてに DB_REFIX を仕込み、
.env に DB_REFIX=laravel_sakura_を追記する。

'prefix' => '',
// ↓
'prefix' => env('DB_REFIX', ''),

Laravel の public をさくらのレンタルサーバ側の www/hogehoge としたいので、ソースを調整する。

まず、config/app.php に下記を追記する。

'public_path' => env('APP_PUBLIC_PATH', null),

次に bootstrap/app.phpDB_REFIX が設定されている場合のみ app.public_path を使うように調整する。

<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

$app = Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__ . '/../routes/web.php',
        commands: __DIR__ . '/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        //
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })
    ->create();

// ここで publicPath が調整される。
$publicPath = env('app.public_path');
if (!empty($publicPath)) {
    $app->usePublicPath($publicPath);
}

return $app;

一度コンテナを起動する。
Laravel sail の作るコンテナのネットワークがブリッジなので既にホスト側で 80 番ポート等が使われているとエラーになるので注意。

./vendor/bin/sail up -d

DB_REFIX を確実に反映させるためにキャッシュをクリアしておく。

./vendor/bin/sail artisan config:clear

マイグレーションを実行する。

./vendor/bin/sail artisan migrate
Tables_in_laravel
laravel_sakura_cache
laravel_sakura_cache_locks
laravel_sakura_failed_jobs
laravel_sakura_job_batches
laravel_sakura_jobs
laravel_sakura_migrations
laravel_sakura_password_reset_tokens
laravel_sakura_sessions
laravel_sakura_users

Vite 関連をビルドする。

./vendor/bin/sail npm install
./vendor/bin/sail npm run build

laravel_sakura/public/build のディレクトリが作られる。alpine.js などをコンパイルした静的な javascript 等が入っている。

さくらのレンタルサーバ側作業

将来他の Laravel プロジェクトも置きたいので、サブディレクトリ www/hogehoge を作っておく。

mkdir ~/www/hogehoge

Laravel 本体を置くディレクトリを作る。

mkdir -p ~/src
cd ~/src

自端末側から Laravel のソースを持ってきて src/laravel_sakura に置く。
持ってくる方法は rsync 使ったり、github 経由で pull したり、やりやすい方法で。

2025-04 時点のさくらのレンタルサーバには /usr/local/bin/composer.phar が既に入っていたので、それを使って composer install を行う。

php /usr/local/bin/composer.phar --version
Composer version 2.5.8 2023-06-09 17:13:21

php /usr/local/bin/composer.phar install

.env を作っておく。

  • 基本は自端末側で作ったもの
  • APP_ENV は本番環境 (production) にしておく
  • APP_DEBUG は false にしておく
  • APP_URL は環境に合わせる
  • LOG_CHANNEL は daily にしておく
  • DB 設定はさくらのレンタルサーバに載ってる情報にあわせる
  • メールの設定もさくらのレンタルサーバの情報にあわせる
  • APP_PUBLIC_PATH, DB_REFIX は自分で仕込んだやつ
APP_NAME=Laravel
APP_ENV=production
APP_KEY=base64:xxxx
APP_DEBUG=false
APP_URL=https://exapmle.com/hogehoge

APP_LOCALE=en
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US

APP_MAINTENANCE_DRIVER=file
# APP_MAINTENANCE_STORE=database

APP_PUBLIC_PATH=/home/yyyy/www/hogehoge

PHP_CLI_SERVER_WORKERS=4

BCRYPT_ROUNDS=12

LOG_CHANNEL=daily
LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=mysqlxx.yyyy.sakura.ne.jp
DB_PORT=3306
DB_DATABASE=yyyy_zzzz
DB_USERNAME=yyyy_zzzz
DB_PASSWORD=xxxx
DB_REFIX=laravel_sakura_

SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null

BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=database

CACHE_STORE=database
# CACHE_PREFIX=

MEMCACHED_HOST=127.0.0.1

REDIS_CLIENT=phpredis
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_MAILER=smtp
MAIL_SCHEME=null
MAIL_HOST=yyyy.sakura.ne.jp
MAIL_PORT=587
MAIL_USERNAME=yyyy
MAIL_PASSWORD=xxxx
MAIL_FROM_ADDRESS="aaaa@exapmle.com"
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false

VITE_APP_NAME="${APP_NAME}"

SCOUT_DRIVER=meilisearch
MEILISEARCH_HOST=http://meilisearch:7700

MEILISEARCH_NO_ANALYTICS=false

src/laravel_sakura/public の中身を www/hogehoge の中にコピーしておく。

rsync -avz ~/src/laravel_sakura/public/ ~/www/hogehoge/

ls ~/www/hogehoge/
build           favicon.ico     index.php       robots.txt

node のインストールもできるらしいが、この記事では自端末でビルドしたものを www/hogehoge/buildsrc/laravel_sakura/public/build に置く。

# 自端末側
laravel_sakura/public/build

# ↓

# さくらのレンタルサーバ側
www/hogehoge/build
src/laravel_sakura/public/build

DB_REFIX を確実に反映させるためキャッシュをクリアしておく。

php artisan config:clear

マイグレーションを実行する。
production にしているので最初に警告がでるが Yes で進める。

php artisan migrate

Laravel の public の代わりに www/hogehoge を公開ディレクトリとして使うように調整する。www/hogehoge/.htaccessRewriteBase /hogehoge/ を追記する。

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On
    RewriteBase /hogehoge/

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

~/www/hogehoge/index.php を書き換えて、../../src/laravel_sakura を参照するようにする。

<?php

use Illuminate\Foundation\Application;
use Illuminate\Http\Request;

define('LARAVEL_START', microtime(true));

// Determine if the application is in maintenance mode...
if (file_exists($maintenance = __DIR__.'/../../src/laravel_sakura/storage/framework/maintenance.php')) {
    require $maintenance;
}

// Register the Composer autoloader...
require __DIR__.'/../../src/laravel_sakura/vendor/autoload.php';

// Bootstrap Laravel and handle the request...
/** @var Application $app */
$app = require_once __DIR__.'/../../src/laravel_sakura/bootstrap/app.php';

$app->handleRequest(Request::capture());

キャッシュのクリアをしておく。

php artisan config:clear
php artisan view:clear
php artisan cache:clear
php artisan route:clear

ここまででブラウザからアクセスできるようになっている。

その他

php artisan route:cache でキャッシュクリアすると、405 Method Not Allowed のエラーになった。php artisan route:clear にすると見れるようになったので、php artisan route:cache の実行で詰め込まれるルートキャッシュが何かおかしいのかも?

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?