- 投稿日:2021-10-25T22:27:13+09:00
Laravelクエリビルダを使ってレコード数を取得する方法
クエリビルダを使ってレコード数を取得する方法 集計メソッドを用いることでレコード数を取得することができる。 例: usersテーブルにてmanageカラムが1のレコード数を取得 $count = \App\Models\User::where('manage', 1)->count() ※select(count(*) as count)のようにせず、レコード数の取得が可能である。 他にもmax、min、avg、sumなどの集計メソッドがある。 参考にしたページ
- 投稿日:2021-10-25T17:00:23+09:00
Xampp環境で開発したReact x Laravel x mysql のアプリケーションをherokuにデプロイする。
はじめに 開発したアプリケーションをherokuにデプロイしようと思ったのですが、使用した技術的にもあまり適当な情報がなかったので備忘録としてまとめるついでに誰かの役にたてばなと思います。環境がLinuxですのでMacの方は適宜読み替えてください。様々なサイトを参考にさせてもらっており、参考文献として最後に載せています。 環境 Ubuntu20.04LTS React Laravel(php) mysql xampp 前提 linuxのコマンドが触れる gitを扱える デプロイの概念がなんとなく分かる laravelアプリケーションフォルダ直下をgitで管理している herokuの登録とClearDBの設定 こちら[1]から登録します。2段階認証みたいなやつはなんか飛ばしちゃいましたが、やっといた方が良い気がする。ログインまで行けたらCreate new appを選択してアプリケーションの作成をします。名前を入力して、リージョンはアメリカとヨーロッパしかないのでアメリカを選択。Overviewを押した後にConfigure Add-onsを押すとAdd-onsと書いてある検索欄が出てくるのでそこにClearDBと入力して出てきたものをクリック。更にIgnite-freeをクリックすると赤い警告のようなものが出てくるので、そこにある下の方のリンクをクリックします。 ここで一旦ここまでの流れを解説します。herokuではデフォルトのDBはpostgreSQLなのでアドオン(拡張機能)を用いてmySQLを使用出来るようにする必要があります。そのアドオン名がClearDBです。その後利用プランを無料のものに選択ししましたが、このアドオンの利用には条件があります。それがクレジットカードの登録です。赤い警告ではクレジットカード登録しろといっているのでリンクをクリックして登録しようとしているという流れです。 リンクをクリックするとクレジットカードの番号、名前、住所などの入力画面が出てくるのですべて英語で入力してください。こちらのサイト[2]で日本語住所を変換すれば簡単に英語になるようですが、順番とか間違えない人だったらそのまま英語で入力しても大丈夫です。完了したら先程の画面に戻ってClearDBの下にあるSubmit Order Formを押したら完了です。 環境変数の設定 Settingsを押した後、Reveal Config Varsを押すと環境変数の追加画面が出てきます。左側のKEYの部分に環境変数名を、 VALUEの部分にその値を入力すれば環境変数を設定することが出来ます。環境変数CLEARDB_DATABASE_URLのURLの部分に色々な情報が含まれているので、それを環境変数として抜き出して使いやすくします。形式は下の形です mysql://ユーザー名:パスワード@ホスト名/データベース名?reconnect=true そして以下のような対応で環境変数を作成します。 KEY:VALUE DB_CONNECTION:mysql DB_HOST:ホスト名 DB_PORT:3306 DB_DATABASE:データベース名 DB_USERNAME:ユーザー名 DB_PASSWORD:パスワード 次にアプリケーション用の環境変数APP_KEYとAPP_URLの設定を行います。laravelの環境で以下のコマンドを実行します。 php artisan key:generate --show このコマンド後に表示されたkeyがAPP_KEYになります。base64の部分も含めます。ちなみにbase64はデータの表現方法の一つで、暗号ではないのでこのkeyは盗まれないようにしましょう。ただこのコマンドはキーを生成してそれをコンソール上に表示しているようですが、そもそもlaravelの設定時にAPP_KEYを.envファイルへ書き込んだ気がします(事実書いてあった)。こっちでも良さそうな感じあるんですが、一応参考サイト通りに生成してそっちを書いておきました。 APP_URLは以下の形式です https://Herokuのアプリケーション名.herokuapp.com この2つの環境変数を追加しましょう。メール機能などがあればもっと環境変数が必要になりますが、僕のアプリケーションにはないので省略します。 ビルドやマイグレーション時の設定 先程のページの下にあるAdd Buildpackボタンを押した後、ポップアップが出てくるのでnodejsを選択した後にSave Changesを選択。もう一度phpで同じことをします。ここらへんはよくわかってないですが、ビルドに要るんだろうなあという感じです。 次にローカルのpackage.jsonの編集を行います。下記のスクリプトをpackage.jsonに追加します。スクリプトは既に存在するはずなので追記するだけでいいです。 "scripts": { "heroku-postbuild": "npm run prod" }, 次にアプリケーションを動かすためのコマンドを記述するファイルであるProcfileを作成していきます。laravelアプリフォルダ直下にProfileというファイル(拡張子なし)を作成して以下の内容を記述します。 Procfile web: vendor/bin/heroku-php-apache2 public/ とりあえずこうすればいいんでしょうが、よく分からなかったので調べてみたところProcfileの書き方は process type : command という感じらしいので、今回はwebという process typeでなんかコマンド実行してるっぽいですね。xamppもapacheで構成されてますし、なんかそこらへんのコマンドなんでしょう。もやもやしますが、深堀りしすぎると性格上脱線しやすいのでここら辺にしておきます。 次にvarchar型の文字数の制限をします。laravel,heroku,デプロイで検索すると複数ヒットしますが、どうやらvarchar型の文字数制限を191にしないとマイグレーション時にエラーが出てしまうようです。このエラー対策としてapp\Providers\AppServiceProvider.phpを下記のように書き換えましょう。 use Illuminate\Support\Facades\Schema;//追加 public function boot() { Schema::defaultStringLength(191);//追加 } Heroku CLIでの操作 Heroku CLIのインストールの前に少しだけ解説をしておくと、CLIはCommand Line Interfaceの略で、全部文字でやろうね的なやつです。これと対比されるのがGUIで、視覚的でこちらの方が一般的だと思います。とりあえずここで理解しておいてほしいのはHeroku CLIはherokuを文字(コマンド)で操作するためのものだということです。要するにターミナルでheroku操作したいからHeroku CLIインストールしようという流れです。 こちらのページ[3]から自分が使ってるOSのコマンドをコピペしてインストールしてください。僕はUbuntuなので下記コマンドになります。 sudo snap install --classic heroku ダウンロードが終わったらログインをします heroku login ここで参考サイトとは異なりメッセージが表示される コマンド 'heroku' は '/snap/bin/heroku' で利用できます '/snap/bin'がPATH環境変数に含まれていないためコマンドを特定できませんでした。 heroku: コマンドが見つかりません どうやらパスが通ってないようなので.bashrcにパスを追加して更新。 export PATH="/snap/bin:$PATH" macだとzshになってたりすると思いますが、適宜置き換えてください。 もう一度ログインするとコマンド自体は成功 › Warning: Our terms of service have changed: https://dashboard.heroku.com/terms-of-service heroku: Press any key to open up the browser to login なんか警告出てるので見てみると、利用規約の変更があったっぽい。読んだが特に問題なさそうだったのでスルーしてもう一度実行 › Warning: heroku update available from 7.59.0 to 7.59.1. heroku: Press any key to open up the browser to login or q to exit: 今度はアップデート出来るよと出てるので調べてみると、単純にアップデートすればいいらしい。 heroku update › Warning: update with: snap refresh heroku heroku: Updating CLI... not updatable としたらまたエラー。調べてみると似たような内容の記事が出てきたのでコマンドを実行 sudo snap refresh All snaps up to date. うまくいったかと思いもう一度ログインを試みるも、さっきと同じエラーが出た。もう一度検索してみると違うコマンドが載っていたのでそちらを実行 source <(curl -sL https://cdn.learnenough.com/heroku_install) curlで取ってきて更新してるっぽい。これで警告はでなくなった。警告放置しておくと後々面倒になることが多いので良かった。最終的には一番下のコマンドを実行すれば良かったっぽい。 警告もなくなったので続きにもどる。最初のコマンドの入力したあとEnterキーなどを押すとサイトが開いた。自分の場合はメールアドレスやパスワードなどは入力しなくてもログインボタンを押すだけでログインできた。恐らくクッキーで保存してるからだと思うので、してない人は入力すればいけるはず。ログインボタンを押すとコンソールの方にログインしたと出力が出来たので、とりあえずCLIでログインすることには成功。 デプロイとマイグレーション herokuではデプロイする場合、herokuリモートリポジトリのmaterブランチにローカルリポジトリのmasterブランチからプッシュすることでデプロイすることが出来ます。一応masterブランチ以外からでもデプロイ出来るようですが、基本的にはデプロイ前にはマージしてmasterブランチを更新しておいた方が良さそうです。 設定も色々変えているので、masterへのマージとプッシュしてあることを確認したら、下のコマンドを実行します。 heroku git:remote -a herokuのアプリケーション名 set git remote heroku to https://git.heroku.com/herokuのアプリケーション名.git git push heroku master これで一応アプリケーションのデプロイは完了です。最後のコマンドの後に出てくるURLをクリックすることでも、自分のアプリケーションのサイトに飛べますし、下記コマンドでも開けます(herokuにアプリケーションが複数ある場合は違うコマンドかも) heroku open しかしアプリケーションをwebで開いてみると、真っ白になっている。デベロッパーツールのコンソールを見てみると下記のエラーが Mixed Content: The page at 'https://frote.herokuapp.com/' was loaded over HTTPS, but requested an insecure script 'http://frote.herokuapp.com/js/App.js'. This request has been blocked; the content must be served over HTTPS. どうやらHttp接続をしているようだが、どこかよく分からない。言われているのがビルド後のReactファイルなのでコードの中身ではなさそうと判断し、色々と情報を調べているとこのサイト[6]の一番最後に同様のエラーに対する対処が書いてあった。この手のサイトあまり信用していないのですが、あまりに情報がないのでとりあえず実行。下記のような環境変数を追加 Key : Value ASSET_URL : https://herokuのアプリケーション名.herokuapp.com これを追加したところ表示された。正直なんでかよく分かっていないので調べたが全然情報が出てこない。恐らくhttps通信にすることが出来たのだろうが、そもそも何が原因だったのか。とりあえず動いたので一旦このままにしておくが、後々原因を究明したほうが良さそう。何か分かる人いたら教えてください。 とりあえず表示までは出来たのでDBを使用するためにマイグレーションしていく。下記コマンドでマイグレーション heroku run php artisan migrate コマンド入力後にDo you really wish to run this command? (yes/no)と聞かれるのでyesと入力。しかしエラーが出て、試行錯誤しているうちに既にテーブルが作成されているためマイグレーションがうまく行かなくなってしまった(エラーを保存し忘れていました。すみません)。コマンドを見る感じheroku runのあとにartisanコマンドが出来そうなので、下記コマンドでデータベースの再構築を試みる。 heroku run php artisan migrate:refresh しかし、同様にテーブルが存在するので無理だとエラーが出る。色々と調べてみるとこちら[7]でrefreshでなくfleshならうまくいったと書いてあったので実行してみる。 heroku run php artisan migrate:fresh このコマンド後にマイグレーションに成功。2つのコマンドの違いを調べたところrefleshはロールバックしてから実行するのに対し、freshは削除してから実行しているよう[8]。何回も実行していたのでロールバックしても同じような状態だったのかもしれない。この後に動作確認をしたが、プログラム通りではない動作は存在しなかった(本番環境になったことで見えてきた修正点はあったが)。とりあえずデプロイ自体は完成したよう。 その他調整 アプリケーション名の変更 アプリケーション名を開発環境だと適当にしていたので、本番環境で名前を変えたくなった。環境変数に以下を追加で解決。 key:value APP_NAME : アプリケーション名 herokuをスリープしないようにする herokuは無料枠だと30分でスリープしてしまう。その対策法として一定時間ごとにcurlコマンドでアクセスするというのがあったのでやってみた。 アドオンを追加 heroku addons:add scheduler:standard Herokuのブラウザアプリにアクセスし、shedulerをクリック。Add Jobをクリックし、Run Commandの部分に下記コマンドを入力 curl herokuアプリケーションのURL で完了。(デフォルトで10分ごとに実行するようになっているはず) デプロイ後のアプリケーションの感想 遅い!herokuは遅いから辞めておけという記事を見て、まあ言うほどでもないやろと思っていたが結構遅い。おかげでローディング時のUIの大切さの理解や遅すぎて動作がはっきり見えるためデバッグしやすいなどの利点もあったが、これは不便さを感じるレベルで無理ですね。まあ無料でこんな簡単に利用してる側が文句言うのはおかしな話なので感謝しなければならないのですが。リージョンに東京がないためアメリカにしているのが結構効いてそうですね。やはりちゃんとしたサービスを展開したいならAWSなどの方が良さそう(やったことないのでどうなのか分かりませんが)。とはいえ完全無料でここまで出来るので、勉強がてらデプロイの理解などをするにはちょうど良さそう。 一応デプロイしたアプリケーションtoDoリストアプリケーションFroteはこちら[9]になります。 おわりに 超簡単という感じでは無かったですが、ちゃんと調べればデプロイは手軽に出来ると思います。ただ自分の真剣に作ったアプリケーションをherokuにデプロイしようとはちょっと思えませんでしたね。アプリケーションの修正とCI/CDだけしたらAWSに移行しようと思います。 参考文献 [1]:heroku [2]:君に届け [3]:The Heroku CLI [4]:Herokuコマンド アップデート [5]:Heroku コマンド を最新バージョンにアップデートする方法 [6]:HerokuにReactjsアセットを使用してLaravel8Webサイトをデプロイする [7]:マイグレーション実行によってHeroku上に作成されたテーブルを消して、再度マイグレーションする方法 [8]:(Laravel) migrationやり直しコマンドあれこれ [9]:Frote [10]:Laravelをherokuにデプロイする方法・手順の解説(MySQL使用)〜コマンドを使わず、Herokuのサイト上で設定するよ!〜
- 投稿日:2021-10-25T16:14:43+09:00
コメント機能 laravel
マイグレーションファイルの作成 $ php artisan make:migration create_comments_table --create=comments comments_table.php public function up() { Schema::create('comments', function (Blueprint $table) { $table->increments('id'); $table->unsignedInteger('article_id'); $table->unsignedInteger('user_id'); $table->text('content'); $table->foreign('article_id')->references('id')->on('articles')->onDelete('cascade'); $table->foreign('user_id')->references('id')->on('users'); $table->timestamps(); }); } 説明 符号なしINTカラム コメントを postに紐付ける $table->unsignedInteger('article_id'); 外部キー制約 foreign('article_id') references('id') どこの→idarticles onDelete() cascade→articleが削除された時に関連するコメントも一気に削除 モデル作成 $ php artisan make:model Comment Comment.php <?php namespace App; use Illuminate\Database\Eloquent\Model; class Comment extends Model { protected $fillable = ['content']; public function article() { return $this->belongsTo('App\Article', 'article_id'); } public function user() { return $this->BelongsTo('App\User', 'user_id'); } } Article.php //追加 public function comments() { return $this->hasMany('App\Comment'); } マイグレーション $ php artisan migrate シーダーファイルの作成 $ php artisan make:seeder CommentsTableSeeder CommentsTableSeeder.php public function run() { for ($i = 0; $i < 30; $i++) { $faker = Faker\Factory::create(); $param = [ 'content' => $faker->paragraph(), 'created_at' => Carbon::today(), 'updated_at' => Carbon::today(), 'article_id' => $faker->numberBetween(1, 10), 'user_id' => $faker->numberBetween(1, 10), ]; DB::table('comments')->insert($param); } } シーダーを実行する順番を追加 DetabaseSeeder.php //最後に追加 $this->call('CommentsTableSeeder'); シーダーの実行 $ php artisan db:seed ルート web.php Route::resource('comment', 'CommentsController', ['only' => ['']]); コントローラー ファイルの作成 $ php artisan make:controller CommentsController view detail.php <div class="card w-50 mx-auto m-5"> <div class="card-body"> <div class="pt-2"> <p class="text-muted font-weight-bold h4 border-bottom border-secondary pb-3">コメント</p> </div> @if($articles->comments->isNotEmpty()) @foreach ($articles->comments as $comment) <div class="border-bottom border-secondary pt-2"> <p class="text-muted mx-3 pt-1">{{ $comment->user->name }} が{{ $comment->created_at->format('Y年n月j日') }}に投稿</p> <p class="text-muted mx-3">{!! nl2br(e($comment->content)) !!}</p> </div> @endforeach {{-- TODO:↓コメント入力欄、コメントボタンの設置--}} @else <p class="text-center pt-2">コメントはまだ投稿されていません。</p> @endif </div> </div> </div>
- 投稿日:2021-10-25T00:30:52+09:00
ローカル環境で開発したLaravelアプリをVPSにデプロイするまで【centOS8】
はじめに この記事では、MAMPなどのローカル環境で開発したLaravelのアプリケーションをVPSにデプロイするまでの過程を記しています。 ほとんど自分向けです。。 この記事の対象者 初心者の方 Laravelを使用 MAMP等のローカル環境で開発 VPSにデプロイしたい 使用環境 ローカル MacBook Air (M1, 2020) macOS Big Sur MAMP Version 6.4 PHP 7.4.16 Laravel 8.64.0 VPS ConoHa VPS メモリ 512MB/CPU 1Core OS centOS8 PHP 7.3.31 Laravel 8.64.0 ConoHa VPSでのcentOS8のVPSを開く方法 とても簡単です。 VPSはすでに開いているよという方はスキップしてください。 まずはConoHaのページにログインします。 サーバーの追加 サーバーを追加をクリック サーバーのプランを選択 私は1ヶ月単位で管理したかったのでVPS割引きっぷは利用しないようにしました。 ここはお好みでご選択ください。 OSはCentOS8にしました。(CentOS7の方が情報は多そうではありますが、最新のがいいかなと言う思いで。) 少し下にいくとサーバーにrootユーザーでアクセスするときのパスワードを設定するところがあります。 ※アルファベット大文字小文字と数字に加えて記号も含める必要があります。 入力したら追加をクリック ドメインの取得 ドメインを取得済みの方はスキップしてください。 左のタブからドメインを選択して、ドメイン取得をクリック。 取得したいドメイン名を入力 検索虫眼鏡をクリックすると下にズラッと取得可能なドメインが並ぶのでお好みに合わせて選択。(.comが無難だと思います) あとはお支払い情報を入れて決済するとドメインの取得は完了です。 ドメインの紐付け まずは紐付けたい先程追加したサーバーのIPアドレスを調べます。 左のタブから一番上のVPSタブを選択して、開いたサーバー名の横の詳細情報をクリック。 するとIPアドレスの欄に載っているのがこのサーバーのIPアドレスです。 次は左のDNSタブを選択して右上の+ドメインをクリックして、先程取得したドメインを入力します。 追加したドメインの編集ボタンを押して、先程調べたIPアドレスや設定を入力します。 これでドメインの設定まで完了です。 SSH接続のための公開鍵・秘密鍵の設定 鍵の設定が不要な方やすでにサーバーに新たにユーザーを追加してssh接続できる方はスキップしてください。 ここでは公開鍵・秘密鍵を用いたSSH接続をするための設定を行います。 セキュリティのためにrootユーザーでの接続を禁止し、新規ユーザーを使った接続を行うようにします。 鍵の生成 ローカル環境で鍵を生成します。 ターミナル上で以下を実施。 local # ホームディレクトリ下に.sshディレクトリを作成し、移動 $ mkdir ~/.ssh $ chmod 700 ~/.ssh $ cd ~/.ssh # 鍵の生成 $ ssh-keygen -t rsa -b 2048 ssh-keygenを実施すると鍵の名前を聞かれるので任意の名前をつけてください。 ここでは仮にssh-keyとしておきます。 その次にパスワードも聞かれるので、秘密鍵を使用する際のパスワードを設定してください。 すると、.sshに秘密鍵ssh-keyと公開鍵ssh-key.pubが生成されています。 local $ ls ~/.ssh ssh-key ssh-key.pub 鍵のアップロード まずはrootユーザーでssh接続します。 local # ssh ユーザー名@設定したドメイン名またはIPアドレスでログイン(ここでは仮にtest.com) $ ssh root@test.com # パスワードを求められるのでConoHaVPSを開いたときに設定したパスワードを入力 するとサーバーにsshでログインできるので、VPS側にも.sshディレクトリを作成します。 VPS [root@test.com ~]# mkdir ~/.ssh [root@test.com ~]# chmod 700 ~/.ssh # 作成後はexitでVPSを抜けます。 [root@test.com ~]# exit そしてローカルから公開鍵をVPS上にauthorized_keysという名前でアップロードします。 local $ scp ~/.ssh/ssh-key.pub root@test.com:~/.ssh/authorized_keys 新規ユーザーでSVNにアクセスするように変更 rootユーザーでアクセスするのはセキュリティ上よろしくないので、新規にユーザーを作成します。 まずはrootユーザーでVPSにログインします。 local $ ssh root@test.com 新規ユーザーを作成 VPS # adduser ユーザー名でユーザーを作成 [root@test.com ~]# adduser test-user # passwd ユーザー名でユーザー名のパスワードを変更 [root@test.com ~]# passwd test-user # gpasswd -a ユーザー名 wheelでrootと同じレベルの権限を持つグループに所属させます。 [root@test.com ~]# gpasswd -a test-user wheel 作成したユーザーでログインできるか試してみる。 local $ ssh test-user@test.com # パスワードを成功して以下のようになれば成功です [test-user@test.com ~]$ rootユーザーでの接続を禁止する 続いてセキュリティを高めるためにrootにてsshでアクセスできないようにします。 /etc/ssh下のsshd_configのPermitRootLoginを編集します。 VPS [test-user@test.com ~]$ sudo vim /etc/ssh/sshd_config /PermitRootLoginと入力して検索し、PermitRootLogin yesと書かれている箇所が見つかったらEnterを押して、iを入力して挿入モードに切り替えてyesをnoに変更します。 sshd_config # PermitRootLogin yes → no PermitRootLogin no 変更できたらescキーで通常モードに戻り、:wqで保存して終了します。 公開鍵認証方式でのSSH接続とその簡略化 ローカルに戻り公開鍵認証でSSH接続をしてみましょう。 local # ssh -i ~/.ssh/秘密鍵 ユーザー名@ドメイン名orIPアドレス $ ssh -i ~/.ssh/test-key test-user@test.com # 鍵生成時に設定したパスワードを入力することでSSH接続できます。 [test-user@test.com ~]$ 公開鍵認証のコマンドを簡略化するには~/.ssh下にconfigを作成し以下のように編集します。 (local)~/.ssh/config Host test HostName 160.xxx.xxx.xxx # VPSのIPアドレス User test-user # 新規作成したユーザー名 Port 22 IdentityFile ~/.ssh/test-key # 秘密鍵のパス 以下でSSH接続ができたら成功です。 local # ssh configで設定したHost名 $ ssh test # 鍵のパスワードを入力して接続 [test-user@test.com ~]$ これでSSH接続の設定は完了です。 LAMP環境の構築 いよいよLAMP環境を整えていきます。 ここからはVPS上での操作なのでSSH接続した上で行ってください。 Apacheのインストール VPS # rootユーザーに変更 [test-user@test.com ~]$ su # Apacheのインストール [root@test.com ~]# dnf -y install httpd # Apacheの起動 [root@test.com ~]# systemctl start httpd # Apacheの確認 [root@test.com ~]# systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/httpd.service.d └─php-fpm.conf Active: active (running) since Thu 2021-10-21 23:09:05 JST; 2 days ago Docs: man:httpd.service(8) Process: 148519 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS) Main PID: 114715 (httpd) ...... # 上記のように表示されたら成功 # サーバー起動時に自動的にApacheを起動するように設定 [root@test.com ~]# systemctl enable httpd ファイアーウォールの設定 http://, https://どちらでもアクセスできるようにファイアーウォールの設定を行います。 VPS # http, httpsのアクセスを開放 [root@test.com ~]# sudo firewall-cmd --permanent -add-service=http [root@test.com ~]# sudo firewall-cmd --permanent -add-service=https # ファイアーウォールの設定の再読み込み [root@test.com ~]# sudo firewall-cmd --reload MySQLの設定(MariaDB) VPS # mariadb(mysql)のインストール [root@test.com ~]# dnf -y install mariadb-server # mariadbの起動 [root@test.com ~]# systemctl start mariadb # mariadbの起動確認 [root@test.com ~]# systemctl status mariadb ● mariadb.service - MariaDB 10.3 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2021-10-21 23:31:57 JST; 2 days ago Docs: man:mysqld(8) ....... # 上記のように表示されたら成功 # サーバー起動時に自動的にApacheを起動するように設定 [root@test.com ~]# systemctl enable mariadb # mariadbの初期設定 質問について答えていく(基本Yes) [root@test.com ~]# mysql_secure_installation PHPのインストール Laravel8を使用したいので、PHP7.3以上をインストールする。 VPS # インストールできるPHPのバージョンを確認 [root@test.com ~]# dnf module list php Failed to set locale, defaulting to C.UTF-8 Last metadata expiration check: 0:38:32 ago on Fri Oct 8 00:30:15 2021. CentOS Stream 8 - AppStream Name Stream Profiles Summary php 7.2 [d] common [d], devel, minimal PHP scripting language php 7.3 common [d], devel, minimal PHP scripting language php 7.4 common [d], devel, minimal PHP scripting language # PHP 7.4をインストール [root@test.com ~]# dnf -y module install php:7.4 # PHP反映 [root@test.com ~]# systemctl restart httpd # PHP動作確認 [root@test.com ~]# php -v PHP 7.4.19 (cli) (built: May 4 2021 11:06:37) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies ここまででLAMP環境は構築完了です。 SSLの設定(https://での通信) https://でサイトにアクセスできるように設定します。 Apacheにmod_sslをインストールします。 VPS # Apacheにmod_sslをインストール [root@test.com ~]# dnf install -y mod_ssl # Apacheを再起動して反映 [root@test.com ~]# systemctl restart httpd /etc/httpd/conf/にApacheの設定ファイルであるhttpd.confがあるのでこれを以下のように編集します。 VPS #その後は再起動 [root@test.com ~]# vi /var/httpd/conf/httpd.conf #Listen 80のあとに追記 Listen 80 ServerAdmin root@twi-twi-poll.com DocumentRoot /var/www/html ServerName twi-twi-poll.com #その後は再起動 [root@test.com ~]# systemctl restart httpd 証明書のインストールを以下の手順で実施 VPS # Apacheにmod_sslをインストール [root@test.com ~]# dnf install -y mod_ssl # Apacheを再起動して反映 [root@test.com ~]# systemctl restart httpd # certbotをインストール [root@test.com ~]# dnf install certbot python3-certbot-apache # sslの反映 [root@test.com ~]# certbot --apache -d twi-twi-poll.com # Apacheを再起動して反映 [root@test.com ~]# systemctl restart httpd この証明書は3ヶ月で有効期限が切れてしまうため自動更新の設定を行う。 VPS # 通常の更新 (有効期限が1ヶ月以内出ないの使えない) [root@test.com ~]# certbot renew # 強制的に更新 [root@test.com ~]# certbot --force-renew # cronで自動更新 [root@test.com ~]# vi /etc/crontab # 末行に以下を追記 0 0 * * * root /usr/bin/cerbot renew これでSSLの設定は完了です。 これまでで一旦VPSの基本的なLAMP環境構築構築は完了で次はいよいよLaravelのアプリケーションのデプロイ作業です。 ローカルのLaravelアプリケーションをGitHubへ登録 説明ではローカルの~/laravel-appというディレクトリでLaravelアプリケーションを開発を行っていることにします。 今回はGitHub経由でデプロイするのでまずはGitHubにpushします。 local # Laravelの開発環境へのパスへ移動します。(自分の環境に合わせて変えてください) $ cd ~/laravel-app # gitの設定 $ git init # ステージングエリアにadd $ git add . # ローカルリポジトリにcommit $ git commit -m "「gitへ登録」などのメッセージ" GitHubで新たにリポジトリを作成 GitHubにログインしてNewをクリックして新しいリポジトリを作成 リポジトリ名を入力してCreate repositoryで作成 作成したリポジトリにpushする。 GitHubのページにもやり方が載っていますが、そのとおりに実行します。 local $ git branch -M main $ git remote add origin https://github.com/GitHubユーザー名/laravel-app.git $ git push -u origin main Composerのインストール LaravelをインストールするためにもComposerをインストールします。 VPS # Composerのインストーラーをダウンロード [root@test.com ~]# sudo wget https://getcomposer.org/installer -O composer-installer.php # Composerのインストール [root@test.com ~]# php composer-installer.php --filename=composer --install-dir=/usr/local/bin # Composerのアップデート [root@test.com ~]# composer self-update # Composerのバージョンの確認 [root@test.com ~]# composer --version Composer version 2.1.9 2021-10-05 09:47:38 ドキュメントルートの設定 まずは今回デプロイするアプリケーションをGitHubからcloneしましょう。 VPS # GitHubからclone [root@test.com ~]# cd /var [root@test.com ~]# git clone https://github.com/GitHubユーザー名/laravel-app.git SSLを設定する過程で、/etc/httpd/confにhttp-le-ssl.confという名前のファイルができているはずです。 コチラを編集してドキュメントルートを/var/laravel-app/publicに設定しましょう。 VPS # GitHubからclone [root@test.com ~]# vi /etc/httpd/conf/http-le-ssl.conf # 以下のようにドメインに合わせて設定 ServerAdmin root@test.com DocumentRoot /var/laravel-app/public ServerName test.com Laravelの設定 Laravelのデータベース等の設定を.envにて行います。 VPS # .envファイルを編集 [root@test.com ~]# vi /var/laravel-app/.env APP_NAME=SimpleMemo # アプリの名称 APP_ENV=production # 本番環境の場合productionを設定 APP_KEY= # 後ほどphp artisan key:generateで設定(ここでは空白) APP_DEBUG=false # 本番環境ではDebugは実施しない APP_URL=https://test.com # ドメインを設定 LOG_CHANNEL=stack LOG_LEVEL=debug DB_CONNECTION=mysql DB_HOST=localhost # 今回はアプリサーバとDBサーバが同じなのでlocalhost DB_PORT=3306 DB_DATABASE=test-db # データベース名 DB_USERNAME=laravel # MySQLのユーザー名 DB_PASSWORD=password # 上記ユーザー名でのパスワード GitHubからcloneしたのでほとんど必要なファイルは用意されましたが、その他Composerで用意されいたものを別途composer installでインストールする必要があります。 VPS [root@test.com ~]# cd /var/laravel-app [root@test.com laravel-app]# composer install MySQLデータベースの設定 ローカルでアプリケーションを開発していたときのデータベースをSVN上に移します。 local # データベースをファイルに出力 # mysqldump --single-transaction -u ユーザー名 -p データベース名 > 出力先のファイル $ cd ~/laravel-app $ mysqldump --single-transaction -u local-db-user -p local-db > local-db.sql VPSに事前にファイル共有ディレクトリを作っておく VPS [root@test.com ~]# mkdir /usr/local/src [root@test.com ~]# chmod 777 -R /usr/local/src DBファイルをVPSに移動 local # 出力したDBファイルをVPSにコピー # scp コピーするローカルのファイル SSH接続設定Host名:VPSのコピー先パス $ scp ~/laravel-app/local-db.sql test:/usr/local/src DBファイルでデータベースをリストア VPS [root@test.com ~]# cd /var/laravel-app [root@test.com laravel-app]# mysql -u root -p test-db < /usr/local/src/local-db.sql LaravelからDBにアクセスするroot以外のユーザーlaravelを作成します。 VPS # mysqlに接続 [root@test.com ~]# mysql -u root -p # パスワードを入力すると以下のようにDBに接続できる Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 1054 Server version: 10.3.28-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> 以下mysqlでの実施コマンド VPS(MySQL) #create user 作成するユーザー名@ホストのドメイン identified by 'パスワード' MariaDB [(none)]> create user laravel@localhost identified by 'password'; # 成功すると以下のように表示される Query OK, 0 rows affected (0.023 sec) # 使用するDBの指定 MariaDB [(none)]> use test-db; # ユーザーに権限の付与 MariaDB [(none)]> grant all on * to laravel@localhost; デプロイ完了! 長かったですがこれにてデプロイは完了しているはずです。 https://test.comなど自分のドメインにアクセスしてみてください。 きっとうまくいっているはずです。。 お疲れさまでした。 さいごに これは自分の備忘録として書きました。 なのであまり役立つものではない可能性もありますが、少しでも誰かのお役に立てればと思います。 間違っていることがあったりうまく行かないよということがあればコメントください。 謝辞と参考ページ メンターさんにアドバイスをたくさんいただきました。 本当にありがとうございます。一人だとたぶん5年かかってました。 たくさんのサイトを参考にさせていただきました。 大変勉強になりました。ありがとうございます。