【Laravel】XServerにFTPでアップロードする手順!git未使用の超初心者向け

この記事からわかること

  • Laravel本番環境アップロードする方法
  • gitを使わない簡単な方法
  • FTPで送信した場合にやらなければいけないこと

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

ローカル環境で構築していたLaravelのアプリ(サイト)を本番環境へアップロードする方法を超初心者向けに詳しくまとめてみました。

今回は実際に起きたエラーや解決法、gitを使わないLaravelアプリのデプロイ方法を解説していきます。

Laravelを本番環境にアップロードするには

ローカル環境にあるLaravelアプリを本番環境へアップロードする方法は以下の2つの方法があります。アプリを本番環境にアップロードすることをデプロイと言います。

Laravelを本番環境へアップロードする方法

FTPとはファイル送信ソフトのことで、本番環境であるサーバーに自分のパソコン内のファイルを送信できるソフトウェアです。

gitは分散型バージョン管理システムのことで、複数人でアプリを運営する時やバージョン管理をしたい時に古い状態に戻せたり、編集履歴を共有したりできるシステムです。

両者とも一長一短がありますが、gitを使って送信する方が将来的には良いのかもしれません。しかし今回はあえてgitを使わない送信方法を実践してみたのでまとめていきたいと思います。

gitを使わずFTPでアップロードする方法

まずは実際にローカル環境にあるLaravelアプリを本番環境へアップロードする流れを確認してみます。ローカル環境に既にLaravelアプリがある前提で話を進めていきます。

  1. 本番環境用に設定ファイルを変更
  2. ドキュメントルートを修正
  3. FTPで接続してローカルのLaravelをアップロード
  4. ターミナルからSSHでサーバーと接続
  5. バージョンアップやキャッシュの削除

このような流れで進めていきます。私の環境も載せておきますので参考にしてください。

私の環境

1.本番環境用に.envファイルを変更

まずは本番環境で運用するために「.envファイル」を編集していきます。「.envファイル」はプロジェクト配下にある隠しファイルで環境(environment)設定用のファイルです。

隠しファイルは通常では非表示になっているので「Shiftキー+cmdキー+.キー」を押して表示させます。

プロジェクト内の.envファイルを表示させた画面

.envファイルを開いてみると以下のように記述されています。デフォルトではローカル環境で動作するような設定が記述されているのでここを本番環境にあったものに変更していきます。

APP_NAME=Laravel
APP_ENV=local
APP_KEY=キー値
APP_DEBUG=true
APP_URL=http://プロジェクト名.test

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=DBname
DB_USERNAME=root
DB_PASSWORD=root
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

↓↓↓本番用に↓↓↓

APP_NAME=公開するアプリ名
APP_ENV=production
APP_KEY=キー値
APP_DEBUG=false
APP_URL=公開用のURL

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=DBname
DB_USERNAME=本番用ユーザーネーム
DB_PASSWORD=本番用パスワード
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

変更したのはAPP_NAMEAPP_ENVAPP_DEBUGAPP_URLとデータベース設定の部分です。DB_SOCKETの記述があれば丸々削除しておきます。

APP_NAME…サイト名

APP_ENV…配置している環境状態(local/staging/production)

APP_DEBUG…デバッグのON/OFF(本番ではOFFにする)

APP_URL…本番サイトURL

データベース設定…Xサーバーのユーザー情報を記述(サーバーパネルから確認)

Xサーバーパネル

「.envファイル」を変更したら念の為、「config」>「database.php」も変更しておきましょう。

'default' => env('DB_CONNECTION', 'mysql'),
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
'mysql' => [
    'driver' => 'mysql',
    'url' => env('DATABASE_URL'),
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '8889'),
    'database' => env('DB_DATABASE', 'MyDB'),
    'username' => env('DB_USERNAME', '本番用ユーザーネーム'),
    'password' => env('DB_PASSWORD', '本番用パスワード'),

エックスサーバーのデータベースであるMySQLでの接続方法はこちらの記事にもまとめてありますので参考にしてください。

2.ドキュメントルートの修正(publicを消す)

続いてドキュメントルートの修正をしていきます。Laravelを使用するとアクセスするURLは「/public/ファイル名」のようになっています。

本番環境ではURLをドメインのみにしたいのでドキュメントルート(URLで最初にアクセスできるファイル)を修正しておきます。

方法は色々ありますが、今回は超初心者向けの簡易版ということで「.htaccess」を新規に設置してのリダイレクト処理を行なっていきます。

GitHubにコードを共有してくれている方がいたので参考にさせていただきました。

Php laravel 5.5 project .htaccess file

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>
    
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</IfModule>

上記のコードをコピーして新しく「.htaccess」を作成します。設置場所はプロジェクト配下の「.envファイル」と同階層でOKです。

これでURLからpublicを消すことができます。ローカル環境でも使えますので正しい動作をしているか確認してみてください。

3.FTPで接続してローカルのLaravelをアップロード

設定ファイルの変更が終わったら実際にFTPソフトを使用してアップロードしていきます。今回は「FileZila(ファイルジラ)」というソフトを使っていきます。

FileZila公式サイト

エックスサーバーにアプリの格納場所(ドメイン)を準備し、「public_html」の下、サブドメインであれば「サブドメインファイル」の下にプロジェクトフォルダ配下の中身を全てアップロードしていきます。

appフォルダや.envファイル、publicフォルダがある以下画像階層を丸ごとです。作成した「.htaccess」も一緒にアップロードしてください。

プロジェクト内の.envファイルを表示させた画面

多少時間はかかりますが、私の場合は10分ほどで終了しました。

4.ターミナルからSSHでサーバーと接続

続いてターミナル(コマンドライン)を使っての作業になります。まずSSHを使用できるようにサーバーの設定を変更していきます。

SSHとは「Secure Shell」の略称でネットワークに接続されているパソコンを安全(セキュア)に遠隔操作できる機能です。この機能を使ってサーバー内にアップロードしたファイルを操作していきます。

エックスサーバーのSSH設定でやること

  1. SSHを使えるようにONにする
  2. 公開鍵認証用鍵ペアを生成する

SSHの設定はエックスサーバーのサーバーパネルから変更します。公式サイトでも設定方法を説明していますので参考にしてください。

Xサーバー-top

Xサーバーパネル

SSH設定の公式ドキュメント

「アカウント」>「SSH設定」から設定をONに、次に「公開鍵認証用鍵ペアの生成」にパスフレーズ(サーバーパスワード)を入力して生成をクリックするとファイル名:[サーバーID].keyといったファイルがダウンロードされます。

ダウンロードできたらファイル名([サーバーID].key)も格納場所(ダウンロードフォルダ)もいじらず次のステップに進みます。

4.1ターミナルでのSSH接続方法

Macのターミナルアプリ

まずは自分のパソコンの「アプリケーション」>「ユーティリティ」の中に入っているターミナルを開きます。起動したら以下のコマンドを打ちます。

$ mkdir ~/.ssh

mkdirコマンドはディレクトリ(フォルダ)を作成するコマンドです。ここではhomeの真下に「.ssh」フォルダを作成しています。

$ mv ~/Downloads/サーバーID.key ~/.ssh/ 

続いて先ほど生成したID.keyを「.ssh」フォルダの中にmvコマンドを使って移動させます。

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/サーバーID.key

移動させたらchmodコマンドでパーミション(アクセス権)を変更しておきます。コマンドの引数は数字(0〜7で指定)が大きいほどアクセス権を緩く、少ないほど制限できます。数字で指定する場合、3つ続けて指定することで左から所有者権限グループ権限その他のユーザに対しての権限を付与することができます。

今回は2つのファイルに対して所有者のみに7(読込・書込・実行)と6(読込・書込)を付与して、操作できるようにしています。

これでSSH接続の準備が整ったので実際に接続していきます。下記のコマンドを自分のサーバIDに置き換えながら実行してみてください。

$ ssh -l サーバーID -i ~/.ssh/サーバーID.key サーバーID.xsrv.jp -p 10022

初めて接続しようとする場合、以下のような結果がでることがあります。

The authenticity of host '[サーバーID.xsrv.jp]:10022 ([XX.XXX.XXX.XX]:10022)' can't be established.
ED25519 key fingerprint is SHA256:**************************
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

これは「まだこの接続は信頼できません。暗号化キーは他に使われていません。接続を続行してもよろしいですか?」と表示されていますのでそのままyesと入力してEnterを押せば接続が開始されます。

パスワード入力を求められるので先ほどのフレーズを入力して接続は完了です。

SSH接続を切断したい場合はexitコマンドで実行できます。ここではまだ切断せずに次のステップに進んでいきます。

[サーバID] $ exit

5.PHPのバージョンアップやキャッシュの削除

SSH接続が完了したらやるべきことを一度整理しておきます。

PHPのバージョンを更新しておかないとLaravelのartisanコマンドが使えない可能性があるのでちゃんと最新にしておきましょう。

ここではComposerのインストールやnordbrewのインストールなどをやる人も多いですが、インストールせずとも正常に動作しますので飛ばした場合の解説をしていきます。

インストール方法を知りたい方は以下の記事を参考に、Mac部分を読み替えながら実行すれば可能です。

5.1PHPのバージョン確認とバージョンアップ

この段階でLaravelアプリがサーバーに格納されましたがまだ公開URLにアクセスしても正常に動作はしてくれません。

まずはサーバーで使われているPHPのバージョンを確認します。カレントディレクトリはそのままに以下のコードを打ち込みます。

$ php -v
PHP 5.4.16 (cli) (built: Apr  1 2020 04:07:17) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
with Zend OPcache v7.0.5, Copyright (c) 1999-2015, by Zend Technologies

するとこのようにバージョンを確認できます。2021/12/8時点ではPHP 5.4.16が使われていました。Laravelを動作させるには古いので最新のものに切り替えていきます。

PHPのバージョンを切り替える流れ

  1. Laravelが使えるバージョンか確認
  2. 古ければ変更できるバージョンを確認→変更
  3. 変更したPHPを使えるように$HOME/bin/php内にシンボリックリンクを作成
  4. 環境変数PATHを通す

まずはmkdirコマンドで「bin」ディレクトリを作成しておきます。

$ mkdir $HOME/bin

次に以下のコマンドでバージョン変更できるPHPのバージョンを確認します。

$ find /opt/php-*/bin -type f -name 'php'
/opt/php-5.1.6/bin/php
/opt/php-5.3.3/bin/php
/opt/php-5.4.16/bin/php
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
/opt/php-7.4.3/bin/php
/opt/php-7.4.4/bin/php
/opt/php-7.4/bin/php
/opt/php-8.0.0/bin/php
/opt/php-8.0.1/bin/php
/opt/php-8.0.10/bin/php
/opt/php-8.0.12/bin/php
/opt/php-8.0.6/bin/php
/opt/php-8.0.7/bin/php
/opt/php-8.0/bin/php

バージョンを決めたらファイルのリンクを作成できるInコマンドでシンボリックリンク(ファイルの詳細や内容は見えないただのリンク)を先ほどの「bin」ディレクトリの中に作成しておきます。

$ ln -s /opt/php-8.0.12/bin/php $HOME/bin/php

phpのバージョン部分は適宜置き換えてください。続いて環境変数PATHを通します。ファイルの中身を変更したいのでテキストエディタであるVimを使って操作していきます。

viコマンドで指定したファイルを開きます。するとファイルが開きますので中身を変更していきます。

$ vi ~/.bash_profile

ファイルが開いたらiキーを押してインサートモード(挿入)にします。これでメモ帳を操作するように変更できるようになります。PATH=$PATH:$HOME/binをコピペで貼り付け、変更できたら:wqと打ち込みvimを終了させます。

PATH=$HOME/bin:$PATH
// ↓この行を追加する
PATH=$PATH:$HOME/bin

// 変更したら以下のコマンドをそのまま半角でそのまま入力し閉じる
:wq

これで環境変数PATHを通すことができたので設定を以下のコードで反映させます。

$ source ~/.bash_profile

最後にしっかりバージョンが変更できているか確認してみます。

$ php -v
PHP 8.0.12 (cli) (built: Oct 22 2021 18:35:15) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.12, Copyright (c) Zend Technologies

エックスサーバーのPHP変更の注意点

実はエックスサーバーはサーバーパネルからも使用するPHPのバージョンを変更することができます。

しかしサーバーパネルで変更できるPHPとSSH接続後に変更するPHPは別物なので注意してください。

先ほどターミナルで変更したPHPはCLI(コマンドラインインタフェース)用のPHPになります。

サーバーパネルからはCLI用のPHPは変更できませんのでこの手続きを必ず実行するようにしてください。

5.2Laravelアプリ内に残っているキャッシュを削除

PHPのバージョンを変更したのでartisanコマンドが使えるようになっているはずです。

現段階では変更した.envファイルが反映されておらず古いデータベース情報がキャッシュとしてLaravel内に残っているのでこれを削除していきます。

以下のコードを打ち込むことでキャッシュを削除できます。

$ php artisan cache:clear
$ php artisan config:clear

これで全ての作業が完了しました。アップロードしたLaravelアプリが公開URLでアクセスできるか確認してみてください。

Laravelをアップロードする流れで起きたエラーの解決法

There is no existing directory at "" and it could not be created: Permission denied

There is no existing directory at "/Applications/MAMP/htdocs/プロジェクト名/storage/logs" and it could not be created: Permission denied

私は最初に「3.FTPでアップロード」をした後に公開URLで接続しようとして上記のようなエラーが出てきました。

エラー内容は「/Applications/MAMP/htdocs/プロジェクト名/storage/logs」に既存のディレクトリがなく、作成できませんでした:アクセスが拒否されました」といったもの。

Laravel内の「storage」>「logs」の中の「laravel.log」が認知されていないのかと思い、パーミション(アクセス権)を変更してみました。

パーミションを変更する際にいじったのは「config」>「logging.php」の以下の部分です。

'daily' => [
  'driver' => 'daily',
  'path' => storage_path('logs/laravel.log'),
  'level' => env('LOG_LEVEL', 'debug'),
  'days' => 14,
  'permission' => 0664, // 追記
],

これが功を奏したのかSSHで接続後、キャッシュを削除することでこのエラーは解決しました。

PHP Parse error: syntax error, unexpected 'class'(T_CLASS), expecting identifier 〜 artisan on line 33

$ php artisan -v
PHP Parse error:  syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in /home/XXXXXX/Xxxxxxxxx/public_html/ドメイン/artisan on line 33

これは古いバージョンのPHPでartisanコマンドを実行しようとしたために起きたエラーでした。バージョンを適切なものに変更することで無事解決できました。

Laravelアプリ公開に悩んでいる方のお役に立っていれば幸いです。また私もまだまだ初心者なので至らぬ点や間違っているところがあると教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index