LoginSignup
2
0

More than 1 year has passed since last update.

XSERVERにlaravelのwebアプリをgitからデプロイ

Posted at

この作業が何回やっても慣れず、自分の備忘録的な意味も含めて書かせていただきました。
もしよければ参考にしてみてください。

SSH接続

初期設定の部分は簡単なので飛ばします

ログインコマンドはこちらです

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

PHPのバージョンアップ

1 , 現在のバージョンを確認

LaravelにはPHPのバージョンが7以上であることを要求されています。
まずは以下のコマンドを実行してphpのバージョンを確認してみます。

php -v

laravel8.*を使うときはバージョンが7以上
laravel9.*を使うときはバージョンが8以上であれば、そのままでも大丈夫です。

2 , バージョンアップ

では、実際にphpのバージョンを変更していきます。
まずはHOME直下にbinディレクトリを作成します。

mkdir $HOME/bin

下記コマンドを実行すると使えるバージョンが表示されます。

find /opt/php-*/bin -type f -name 'php'

次に先ほど作成したbinディレクトリにシンボリックリンクを作成します。

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

*「php-8.0.12」のところは使いたいphpのバージョンに合わせてください。

次に「.bash_profile」ファイルを開きます。

vi ~/.bash_profile

ファイルを開いたら次の「変更後」のように「変更前」の内容を書き換えます。

//変更前
PATH=$PATH:$HOME/bin

//変更後
PATH=$HOME/bin:$PATH

「a」キーを押してインサートモードにし、記述内容を修正します、修正が終わったら「esc」キーでInsertモードを解除、「:wq」で変更したファイルを保存します。

次に新しく作ったバスを反映させます。

source ~/.bash_profile

これでphpのバージョンアップは完了です。
バージョンアップ出来ているか確認してみます。

php -v

このときXserverの方でも設定したphpバージョンに合わせておくことをお勧めします。

3 , Composerのインストール

以下のコマンドを実行してComposerをインストールします。

curl -sS https://getcomposer.org/installer | php

composerのインストールが正常に終了したらバージョンを確認してみます。

composer -v

バージョンが表示されていれば、composerはインストールされています。

4 , Node.jsのインストール

今回はバージョン管理ツール「nodebrew」を使ってNode.jsをインストールを行います。

下記コマンドで「nodebrew」をインストールします。

wget git.io/nodebrew

次に「nodebrew」を使えるようにするため下記コマンドでセットアップします。

perl nodebrew setup

表示されたログの通りにパスを通していきます。

下記コマンドでパスを通します。

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

下記コマンドでパスを反映させます。

source ~/.bath_profile

「nodebrew」がインストールされているか確認しましょう。

nodebrew -v

続いて「nodebrew」を使って「Node.js」をインストールします。

nodebrew install-binary latest

インストールしたNode.jsのバージョンを確認し、これをアクティブにします。

nodebrew list
nodebrew use 確認したバージョン

最後にnodeとnpmのバージョンを確認して、node.jsのインストールは完了です.

node -v
npm -v

5 , LaravelをGIT経由でクローン

まず、SSHの現在の場所から、Laravelをインストールするディレクトリ(フォルダ)に移動します。

cd ドメイン名

ここに、Laravelプロジェクトをクローンします。

git clone https://github.com/user/xxxx.git

このときプロジェクトをprivateにしているとパスワードを求められ、アクセストークンが必要になるので
この作業の時だけはpublicにしとくのがお勧めです。

cloneしただけだと、vendorフォルダなど、足りないものがあり、まだLaravelは動かないので、それをComposerでインストールしていきます。

cd プロジェクト
composer install

続いて、envファイルの設定をしていきますが、cloneしたプロジェクトには.envファイルがないので、「.env example」をコピーして使います。

cp .env.example .env

ファイルを開いて、変更します。

vi .env

修正する内容は下記の通りです。

APP_NAME=○○ //アプリ名
APP_ENV=production //「local」から「production」にする
APP_KEY= ←空白でOK
APP_DEBUG=false //「true」から「false」にする
APP_URL=https://ドメイン名 //httpsにするのがポイント

~省略~

DB_CONNECTION=mysql
DB_HOST=○○.xserver.jp もしくは  localhost  //Xserverのphpmyadminから確認
DB_PORT=3306
DB_DATABASE=○○ //xserverで作成したデータベース名
DB_USERNAME=○○ //xserverでユーザー名
DB_PASSWORD=○○ //xserverでパスワード
~省略~

次にアプリケーションキーを作成します

php artisan key:generate

これで.envファイルの「APP_KEY=」の空白のところに値が追加されているはずです。

データベースのテーブルを作る必要があるので、マイグレーションファイルを実行します。

php artisan migrate

5 , シンボリックリンクの作成

Laravelでは全ての処理の起点は「public」ディレクトリでされているので、アプリURLにアクセスしたらpublicディレクトリに通るようにシンボリックリンクを貼ります。

ということで、下記コマンドでシンボリックリンクを貼ってください。

ln -s ~/メインドメイン/プロジェクト名/public ~/メインドメイン/public_html/public

6 , .htaccessファイルを2つ追加

まず、public_html内に.htaccessがあるかチェックしてください。あればそれを編集、無ければメモ帳などで作成します。

下記コードをpublic_html内の.htaccessに書き換えます

<IfModule mod_rewrite.c>
RewriteEngine On
# Laravelのpublicフォルダをサイトトップ表示
RewriteRule ^(.*)$ public/$1 [QSA,L]
</IfModule>

さらに今度は、プロジェクト/public内に.htaccessがあるかチェックしてください。
あれば、それを編集、無ければ作成してください。下記コードを追記します。

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>

RewriteEngine On

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# 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]

# httpsからの通信でwww有りの場合、www無しにリダイレクト
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www.japaslang.com$
RewriteRule ^(.*)$ https://japaslang.com/$1 [R=301,L]

</IfModule>

以上で、デプロイ作業は完了です。
URLにアクセスして、画面に表示される確認をしましょう。

お疲れ様でした。

おまけ

laravel9で作成したwebアプリを公開するときに、xseverのphpバージョンが古いことから

Fatal error: Uncaught TypeError: 
Return value of Illuminate\Container\Container::offsetGet() 
must be an instance of Illuminate\Container\mixed, 
instance of Illuminate\Events\Dispatcher returned in 
/home/xxx/vendor/laravel/framework/src/Illuminate/Container/Container.php:1417 

こちらのエラーが出ました。
同様のエラーが出た方は、Xserverのphpバージョンを8以上にすることで解決すると思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0