GitLab.com でリモートリポジトリを管理している Laravel のプロジェクトをエックスサーバーへデプロイする方法のメモ。(*以下の作業はエックスサーバーにSSHで接続した状態で行います。)
環境確認と設定
PHPバージョン
Laravel9を動かすためにPHP8以上が必要ですので、PHP5系やPHP7系7など下位バージョンの設定になっている場合はバージョンを変更します。
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
PHPバージョン変更
こちらの「エックスサーバーでコマンド実行時(CLI)に最新のPHPを利用出来るようにする方法」を参考に利用するPHPのバージョンを変更します。(*別途エックスサーバーのサーバーパネルから同じバージョンのPHPに変更します。)
ln -s /opt/php-8.1.12/bin/php $HOME/bin/php echo '' >> ~/.bashrc echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc source ~/.bashrc
変更作業が上手くいけば以下のように変更が確認出来ます。
$ php -v PHP 8.1.12 (cli) (built: Oct 31 2022 09:30:38) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.25, Copyright (c) Zend Technologies
Composerバージョン
デフォルトで1系がインストールされていますが、2系が必要ですので2系をインストールします。
Composerバージョン確認
$ composer -V Composer version 1.10.26 2022-04-13 16:39:56
Composerインストール
こちらの「エックスサーバー Composerをインストール(バージョン変更)する方法」を参考に新しいバージョンのComposerをインストールします。
インストールが上手くいけばデフォルトの1系から2系のComposerに変わっていることが確認出来ます。
$ composer -V Composer version 2.2.18 2022-08-20 11:33:38
Node.jsインストール
Node.jsをインストールしていない場合は「Node.jsをエックスサーバーにインストールする方法(nodebrew利用)」を参考にインストールします。
インストール完了後、”node -v” , “npm -v” で確認します。
$ node -v v17.9.1 $ npm -v 8.11.0
SSHキー(公開鍵と秘密鍵)を作成と設定
SSHキー作成
$ ssh-keygen -t rsa -f ~/.ssh/rsa_key_gitlab Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/xxxxx/.ssh/rsa_key_gitlab. Your public key has been saved in /home/xxxxx/.ssh/rsa_key_gitlab.pub.
.ssh/config 編集( Or 作成)
# GitLab.com Host gitlab.com User userid IdentityFile ~/.ssh/rsa_key_gitlab
GitLab.com にSSHキーの公開鍵を登録
GitLabのリモートリポジトリをクローン
プロジェクト用ディレクトリ作成・移動
$ mkdir projects $ cd projects
クローン
$ git clone git@gitlab.com:xxxxx/example-app.git example-app Cloning into 'example-app'... remote: Enumerating objects: 257, done. remote: Counting objects: 100% (257/257), done. remote: Compressing objects: 100% (223/223), done. remote: Total 257 (delta 70), reused 124 (delta 15), pack-reused 0 Receiving objects: 100% (257/257), 138.02 KiB | 0 bytes/s, done. Resolving deltas: 100% (70/70), done.
クローンしたプロジェクトのディレクトリへ移動
$ cd example-app
Composerパッケージインストール
プロジェクトのディレクトリに移動してComposerパッケージをインストールします。
$ composer install Installing dependencies from lock file (including require-dev) Verifying lock file contents can be installed on current platform. Package operations: 107 installs, 0 updates, 0 removals - Downloading doctrine/inflector (2.0.6) - Downloading doctrine/deprecations (v1.0.0) - Downloading doctrine/lexer (2.1.0) - Downloading symfony/polyfill-ctype (v1.27.0) . . . - Installing spatie/backtrace (1.2.1): Extracting archive - Installing spatie/flare-client-php (1.3.2): Extracting archive - Installing spatie/ignition (1.4.1): Extracting archive - Installing spatie/laravel-ignition (1.6.4): Extracting archive Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi INFO Discovering packages. laravel/sail .................................. DONE laravel/sanctum ............................... DONE laravel/tinker ................................ DONE nesbot/carbon ................................. DONE nunomaduro/collision .......................... DONE nunomaduro/termwind ........................... DONE spatie/laravel-ignition ....................... DONE 80 packages you are using are looking for funding. Use the `composer fund` command to find out more!
プロジェクトの設定
設定ファイル作成
$ cp .env.example .env
APP_KEYを更新
以下のコマンドを実行すると .env の APP_KEY に生成したキーが設定されます。
$ php artisan key:generate INFO Application key set successfully.
.env 編集
ENV / DEBUG / URL
APP_ENV=production APP_DEBUG=false APP_URL=https://xxxx.xsrv.jp
データベース設定
DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=xxx_laravel DB_USERNAME=xxx_usr DB_PASSWORD=xxxxxxxx
マイグレーション実行
$ php artisan migrate
APPLICATION IN PRODUCTION. Do you really wish to run this command? (yes/no) [no] ❯ yes INFO Preparing database. Creating migration table ........................................ 6ms DONE INFO Running migrations. 2014_10_12_000000_create_users_table ............................ 7ms DONE 2014_10_12_100000_create_password_resets_table .................. 5ms DONE 2019_08_19_000000_create_failed_jobs_table ...................... 3ms DONE 2019_12_14_000001_create_personal_access_tokens_table ........... 4ms DONE
シンボリックリンク作成
既存の public_html リネーム
$ mv public_html _old_public_html
シンボリックリンク作成
$ ln -s $HOME/xxxxx.xsrv.jp/projects/example-app/public $HOME/xxxxx.xsrv.jp/public_html
storageディレクトリ用シンボリックリンク
フォームからアップした画像などを公開ディレクトリから参照出来るようにするためシンボリックリンクを作成します。
php artisan storage:link
INFO The [public/storage] link has been connected to [storage/app/public].
上記コマンド実行後に確認するとシンボリックリンクが作成できていることが確認出来ます。
lrwxrwxrwx 1 xxxxx members 63 2月 1 12:27 storage -> /home/xxxxx/xxxxx.xsrv.jp/projects/example-app/storage/app/public
npmパッケージのインストールとビルド
パッケージインストール
$ npm install added 93 packages, and audited 94 packages in 2s 20 packages are looking for funding run `npm fund` for details found 0 vulnerabilities npm notice npm notice New major version of npm available! 8.11.0 -> 9.4.1 npm notice Changelog: https://github.com/npm/cli/releases/tag/v9.4.1 npm notice Run npm install -g npm@9.4.1 to update!
ビルド
$ npm run build > build > vite build vite v4.0.4 building for production... ✓ 51 modules transformed. public/build/manifest.json 0.26 kB public/build/assets/app-21eefc3d.css 26.54 kB │ gzip: 5.29 kB public/build/assets/app-fe5e93e3.js 141.71 kB │ gzip: 52.19 kB
動作環境情報
"エックスサーバー" スタンダード(旧X10) "PHP" 8.1.12 "MariaDB" 10.5 "Laravel Framework" 9.48.0
コメント