概要
自端末上の既存 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.php
の prefix
のところにすべてに 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.php
で DB_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/build
と src/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/.htaccess
に RewriteBase /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
の実行で詰め込まれるルートキャッシュが何かおかしいのかも?