XServer に Laravel 5.8 プロジェクトを GitHub からデプロイする

Laravel 5.8 で作ったプロジェクトを XServer にデプロイすることになったので、設定方法のメモです。

前提条件

環境

  • XServer (sv2000 番台)
  • PHP 7.2.17 (サーバーパネルで設定)
  • MySQL 5.7
  • XServer のサーバーへは SSH 鍵認証で接続できる
  • すでに Laravel 5.8 をベースとしたプロジェクトの GitHub リポジトリがある

ディレクトリ構成

Jenkins から機械的にデプロイするため、リポジトリの構成 (Laravel 標準の構成) をそのまま利用できるようにします。 Laravel 側の .htaccess なども変える必要がないため、 Git で管理しやすくなります。

また、今回はサブドメインではなく 1ドメインとして構築しますので、下記のようなディレクトリ構成にしました。

/home/msen/sample.com
  laravel/ ← Laravel アプリのディレクトリ
    app/
    bootstrap/
    public/
    ~省略~
  public_html/
    .htaccess
    public ← ../laravel/public/ へのシンボリックリンク

この構成であれば、デプロイ時は laravel ディレクトリで git pull し、ビルドコマンドを叩いていくだけなので比較的シンプルです。

ドキュメントルート自体は public_html 以外には設定できない (と思う) ため、 public_html/.htaccess でルートディレクトリのアクセスを public/ 以下にリライトし、さらにシンボリックリンクで laravel/public に飛ばします。このあたりは後述します。

環境整備

SSH で XServer に接続します。

Git のインストール

Git はもともと入っているようなので、これをそのまま利用します。

$ git --version
git version 1.8.3.1

古いですが、普通にクローンするぐらいなら大丈夫でしょう。

SSH で使う PHP バージョンの確認と設定

SSH で使われる PHP のバージョンを設定します。これは XServer のサーバーパネルの PHP の設定とは別ですので注意してください。

まずバージョンを確認しておきます。

$ php -v
PHP 7.1.2 (cli) (built: Feb 22 2017 10:08:41) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

案の定、 7.1.2 でした。 Laravel 5.8 が 7.1.3 以上でしか動かないため、この状態で composer install しても下記のように怒られるはずです。

$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - This package requires php ^7.1.3 but your HHVM version does not satisfy that requirement.
  Problem 2
    - Installation request for laravel/framework v5.8.7 -> satisfiable by laravel/framework[v5.8.7].
    - laravel/framework v5.8.7 requires php ^7.1.3 -> your PHP version (7.1.2) does not satisfy that requirement.

まず利用可能なバージョンを確認します。

$ find /opt/php-*/bin -type f -name 'php'
~省略~
/opt/php-7.2.17/bin/php
/opt/php-7.2.6/bin/php
/opt/php-7.2/bin/php
/opt/php-7.3.4/bin/php
/opt/php-7.3/bin/php

今回は XServer のサーバーパネルで選択しているバージョンと同じ 7.2.17 を使うことにします。

$ mkdir $HOME/bin
mkdir: ディレクトリ `/home/msen/bin' を作成できません: ファイルが存在します
$ rm $HOME/bin/php
$ ln -s /opt/php-7.2.17/bin/php $HOME/bin/php

今回はすでに $HOME/bin/php があったため、シンボリックリンクを作り直しました。

.bashrc.bash_profile$HOME/bin へのパス設定を(なければ)追加します。

$ vi ~/.bash_profile
export PATH=$HOME/bin:$PATH
$ source ~/.bash_profile 

これで PHP のバージョンが無事切り替わったはずです。

$ php -v
PHP 7.2.17 (cli) (built: Apr 13 2019 01:04:33) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

Node.js (nodebrew) のインストール

ビルドに Node.js が必要なため、 SSH でインストールします。

Node.js はそのまま入れるとバージョン管理が面倒なので、切り替えやすくするため nodebrew をインストールします。

$ wget git.io/nodebrew
$ perl nodebrew setup

PATH を通すため .bashrc.bash_profile に追記します。

$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile 

これで nodebrew が使えるようになっているはずなので ls-remote でバージョンを確認し、 install, use でインストールします。

$ nodebrew -v
nodebrew 1.0.1
~省略~
$ nodebrew ls-remote
$ nodebrew install v10.16.0
Fetching: https://nodejs.org/dist/v10.16.0/node-v10.16.0-linux-x64.tar.gz
######################################################################## 100.0%
Installed successfully
$ nodebrew use v10.16.0
use v10.16.0
$ node -v
v10.16.0
$ npm -v
6.9.0

Node のセットアップはこれで OK です。

プロジェクトのデプロイ

Git でリポジトリをクローン

所望のリポジトリを laravel ディレクトリにクローンし、対象のブランチやタグをチェックアウトします。

$ cd ~/sample.com/
$ git clone <リポジトリURL> laravel
$ cd laravel
$ git checkout <デプロイするタグなど>

Laravel セットアップ

.env ファイルを設定します。データベースは XServer の MySQL を使用すると思いますので、該当箇所を書き換えます。

$ cp .env.example .env
$ vi .env

artisan key:generate でキーを生成します。

$ php artisan key:generate

ログファイルやキャッシュのディレクトリのパーミッションを 777 に設定します。

$ chmod -R 777 storage
$ chmod -R 777 bootstrap/cache/

マイグレーション

ここまで設定できたらマイグレーションしてみます。

$ php artisan migrate

問題なく通れば OK です。エラーがでたら .envcomposer dump-autoload などを確認しましょう。

必要ならシーディングまでしておきます。

$ php artisan db:seed

ドキュメントルート (public_html) の設定

nginx のドキュメントルートに設定されている public_html.htaccesslaravel/public へのシンボリックリンクを設定します。

再度ディレクトリ構成を確認します。

/home/msen/sample.com
  laravel/ ← Laravel アプリのディレクトリ
    app/
    bootstrap/
    public/
    ~省略~
  public_html/
    .htaccess
    public ← ../laravel/public/ へのシンボリックリンク

.htaccess を開きリライトの設定を行います。すべてのリクエストを同階層の public 以下に書き換えるだけの設定です。

$ cd ~/sample.com/public_html
$ vi .htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ public/$1 [QSA,L]
</IfModule>

さらに public_html/public から laravel/public へのシンボリックリンクを設定します。

$ ln -s /home/msen/sample.com/laravel/public ./public
$ ll
合計 0
lrwxrwxrwx 1 msen members 44  7月  9 07:42 public -> /home/msen/sample.com/laravel/public

正常にシンボリックリンクが張られれば OK です。

動作確認

すでにドメインの設定まで済んでいる場合は、そのドメイン名でアクセスします。

まだの場合は XServer で「動作確認 URL」が発行できるので、これを利用します。 http://sample-com.check-xserver.jp/ のような URL になることが多いです。

Laravel が正常に動作すれば完了です。

参考

SNSでもご購読できます。

コメント

  1. Wataru より:

    初めまして。
    大変わかりやすく、参考になる記事をありがとうございます。
    こちらの記事を参考に、Laravelで作成したアプリケーションをXServerで動かすことができました。
    初心者の自分でもアプリを公開するところまで来れて、大変嬉しく思っております。

    しかし、作成したアプリケーションにhttpsでアクセスするとXServerの初期ページが表示されてしまい、困っています。
    httpでアクセスした場合は自分のアプリケーションに飛んでくれるのですが、、

    httpsでアクセスした場合でも自分のアプリケーションに飛ばしたい場合、どのファイルをどのように書き換えればよいかご教示願えますでしょうか。
    ドメインのSSL設定は完了しております。
    よろしくお願いいたします。

  2. kenzauros より:

    Wataru 様
    申し訳ありませんが、設定されている環境がわからないため、お答えするのは難しいと思います。
    XServer で取得されたドメインと SSL 証明書の場合、ほぼ全自動で設定されるはずですので、特段の設定は不要なはずです。弊社でも https で運用していますが、特別な設定はせずに動作しています。不具合については XServer にお問い合わせいただくのがよいと思います。
    他の管理業者で取得されたドメインを設定されておられる場合は、少し手動設定が必要と思いますので、その業者と XServer 両方に問い合わせいただき、設定していただく必要があります。
    よろしくお願いいたします。

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください