Laravel で作られたWebアプリケーションを**さくらのレンタルサーバ【スタンダード】**にデプロイする機会があったのでメモ。
**レンタルサーバ(共用サーバ)**と **VPS(仮想専用サーバ)**のコストパフォーマンスの差が縮まりつつある今日、レンタルサーバを新規に契約する人も減っているので、このノウハウに需要はあまり無いかもしれないが誰かの参考になれば。
実行環境
ソフトウェア | バージョン |
---|---|
OS | FreeBSD 11.2-RELEASE-p14 |
Apache | 2.4.41 |
MySQL | 5.7.27 |
PHP | 7.3.12 |
Laravel | 5.6.5 (Laravel6に移行するかは目下検討中) |
Web公開フォルダ
さくらのサーバコントロールパネルにおいて、次のように設定されているものとする。
なお、2019年3月に、サーバコントロールパネルのデザインリニューアルがあった。上図は新コントロールパネルのもの。
構築手順
ホームディレクトリの下に専用ディレクトリを作成
共用サーバなので、自由がきくのは自分のホームディレクトリの下のみである。
cd ~
mkdir bin
curl -sS https://getcomposer.org/installer | php -- --install-dir=bin --filename=composer
chmod 755 bin/composer
mkdir laravel
FTP転送
ローカル環境にあるLaravelプロジェクトルートごと、~/laravel
の下にアップロードする。
パーミッション設定とシンボリックリンク作成
PROJECT_ROOT
はLaravelのアプリケーション名に読み替えて欲しい。
chmod -R 777 ~/laravel/PROJECT_ROOT/storage
chmod -R 777 ~/laravel/PROJECT_ROOT/bootstrap/cache
ln -s ~/laravel/PROJECT_ROOT/public ~/www/webpath
htaccess の編集
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
RewriteBase /
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# SSL Redirect
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 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>
パーミッション設定。
chmod 604 ~/www/webpath/.htaccess
Laravel の修正
Laravelのエントリポイントとなるindex.php
の下記2行を修正。
require '/home/初期アカウント名/laravel/PROJECT_ROOT/vendor/autoload.php';
$app = require_once '/home/初期アカウント名/laravel/PROJECT_ROOT/bootstrap/app.php';
環境定義ファイルの修正。データベースの接続情報はサーバコントロールパネルから確認する。
APP_ENV=production
APP_DEBUG=false
DB_CONNECTION=mysql
DB_HOST=mysql9999.db.sakura.ne.jp
DB_PORT=3306
DB_DATABASE=初期アカウント名_xxxx_db
DB_USERNAME=初期アカウント名
DB_PASSWORD=PASSWORD
プロジェクトの初期化、データベースのマイグレーション。
php artisan key:generate
php artisan clear-compiled
php artisan optimize
php artisan config:cache
php artisan view:clear
php artisan migrate
以上。
ちなみに、さくらのレンタルサーバは一応cron
が使える。今回は扱わなかったが、キューワーカーが必要ならサーバコントロールパネルのCRON画面にphp artisan queue:work
を設定することになると思う。