Help us understand the problem. What is going on with this article?

さくらのレンタルサーバにLaravelアプリをデプロイしたときのメモ

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公開フォルダ

さくらのサーバコントロールパネルにおいて、次のように設定されているものとする。
image.png
なお、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 の編集

~/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行を修正。

~/laravel/PROJECT_ROOT/public/index.php
require '/home/初期アカウント名/laravel/PROJECT_ROOT/vendor/autoload.php';
$app = require_once '/home/初期アカウント名/laravel/PROJECT_ROOT/bootstrap/app.php';

環境定義ファイルの修正。データベースの接続情報はサーバコントロールパネルから確認する。

~/laravel/PROJECT_ROOT/.env
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を設定することになると思う。

mindwood
大手SIer(プライムコントラクタ)に20年以上勤続し、某メガバンクのSEを下流から上流までひと通り経験。 退社後は個人事務所を開業し、中堅企業の情シス的なお仕事の他、フルスタックエンジニアとして、いくつかのベンチャー企業のシステム開発に携わり、スキルのバラ売りで食べている。座右の銘は「継続は力なり」。
https://mindwood.jp
alieaters
Alibaba Cloudを上手に使うためのノウハウの共有を目的としたコミュニティ
https://www.alieaters.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした