Laravelで作っていたが、localhostでしか動かしてなかった。
せっかくなので、レンタルサーバー(ロリポップ!)にデプロイして、公開してみようと思ったので、手順をまとめた。
レンタルサーバーのSSHを設定する
レンタルサーバーにSSHで接続するため、管理画面でSSHの設定をする。
レンタルサーバーににより、若干異なると思うので、適宜読み替えを。
composerをインストールする
レンタルサーバーにSSHでログインする。(自分は今回「Windows ターミナル」を使った。)
ログインに必要な情報はレンタルサーバーのサーバー設定を確認する。
(ロリポップ!の場合はサーバーの管理・設定 > SSHで確認できる。)
下記、コマンドを実行すると、パスワードも聞かれるので入力する。
$ ssh [アカウント名]@[サーバー名] -p [ポート番号]
FTPでログインするディレクトリに移動し、Composerをインストールする。
(ロリポップ!の場合は、対象階層の1つ上にいるので、それを元に記載する。)
PHPのバージョンは管理画面で確認して、指定するものを確認する。
$ cd web
$ /usr/local/php/7.4/bin/php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"
しばらくすると、successfullyとでて、インストールが完了する。
併せて、phpのパスを通す。
$ export PATH="$PATH:/usr/local/php/7.4/bin"
Laravelプロジェクトを配置する。
公開ディレクトリ直下にプロジェクトを配置するのはよろしくないということで、プロジェクトを配置するディレクトリを作成する。
今回は「~/web/laravel」を作成して、その配下に各プロジェクトを配置する。
上記のままの場合、~/webにいるので、laravelディレクトリを作成する。
その中に移動し、githubからクローンしてくる。(今回作ったLaravelアプリ)
$ mkdir laravel
$ cd laravel
$ git clone <git_clone_link>(project)
クローンが完了したら、プロジェクトのディレクトリに移動し、Composerを使用してインストールする。
$ cd project
$ composer install
インストールが完了したら、一部パーミッションを変更する。
$ chmod -R 777 storage
$ chmod -R 775 bootstrap/cache
環境に合わせて.envファイルを作成・変更する。
今回のアプリはDBを使ってないが、使っている場合は接続先情報などを設定する。
その後、アプリケーションキー、シンボリックリンク(画像置き場)を作成する。
$ php artisan key:generate
$ php artisan storage:link
公開フォルダを設定する。
実は今回このあたりの話で、結構ハマった。(画面で403エラーになってしまった。)
結果としては順番がまずかったのと、レンタルサーバの仕様が相まってなかなかうまく公開できなかった。
レンタルサーバーの仕様で公開フォルダを先に指定してしまうと、勝手に存在しないフォルダ作成する。そのため、公開フォルダを設定してしまうと、シンボリックリンクの設定との兼ね合いでうまく想定したフォルダを指定できなかった。
それを振り返りつつ、記載する。
まずは、シンボリックリンクを作成する。
今回はサブドメインで公開するため、サブドメイン用の公開フォルダを指定する。
(例ではprojectがサブドメインになる。)
~/web/projectまでは、ディレクトリとして作成しておく。
$ ln -s ~/web/laravel/project/public/ ~/web/project/public
シンボリックリンクを作成した後に、公開フォルダを指定する。
レンタルサーバーのサブドメインの設定画面で「project/public」を公開フォルダとして指定する。
(公開フォルダの指定を先にしてしまうと、「~/web/project/public」がディレクトリして作成されてしまうため、シンボリックリンクの作成がうまくいかない。 projectまでを先に公開フォルダに指定すると、publicという階層を付けないと表示されなくなるので、これも微妙。。)
動作を確認する。
今回は、以下のURLに公開しました。
ここで、403エラーがでている場合は、シンボリックリンクや公開フォルダの設定がうまくいっていない可能性がある。
その他、レンタルサーバーのWAF(ウェブアプリケーションファイアウォール)や海外アタックガードなどが誤動作する可能性もあるらしいので、一旦無効にして確認してみる。

今回のアプリはキーワード検索で、書籍情報を持ってきて画面に表示するアプリです。
デザインとかも全然ですが、公開されているAPIを叩いてデータ持ってくるとかができたので、ひとまず満足した。
ブラッシュアップはしつつ、別途DB使ったりもやっていこうと思う。
コメント