鶏口牛後な日々

心の赴くまま、やりたいことを仕事に。

さくらVPSのCentOS8・Nginxに新規Laravel10プロジェクトを立ち上げてみる

はじめに

さくらVPSで新規サーバ環境を構築して、Laravelの新規プロジェクトを作り、Laravelの初期画面が表示されるまでやりました。

前提

さくらのVPSで作ってみようと思いました。一番小さいサイズのサーバを会社で借りてもらったからです。他に理由はありません。

参考にしたマテリアル

こちらの貧困エンジニアUさんの動画を拝見し、参考にさせていただきました。

これからやってみる人は、ざっとみるといいと思います。

www.youtube.com

この場を借りて、御礼申し上げます!

OSやソフトのバージョン

  • OS: CentOS(Stream 8 x86_64)
  • PHP: 8.2.4
  • Nginx: 1.23.4
  • Composer: 2.5.5
  • Laravel Framework: 10.5.1
  • mysql: 8.0.26

とにかく新しく作るなら、できるだけ新しいバージョンで作ろうというスタンスでバージョンを選択しました。

参考にした動画との違い

詳細は後で説明していきますが、ざっくりとした違いだけ書いておきます。念頭におきながら読んでください。

貧困エンジニアUさんの動画は、本記事執筆の2023年3月時点から2年ほど前の動画のため、ソフトウェアのバージョンが少し古いです。

また、さくらのVPSで使える便利なスタートアップスクリプトで、LAMPLinux, Apache, MySQL, PHP)を一気にインストールされています。

私も、類似のスタートアップスクリプを探したのですが、CentOS8では同じスクリプトはありませんでした。

LEMP(ApacheがNginxに置き換わり、MySQLMariaDBに置き換わったもの)のスクリプトがあったので、こちらを使いました。

そのため、Apacheではなく、Nginxとなっています。

しかし結局、スクリプトがうまく通らず、Nginxしかインストールされなかったため、PHPMySQLは自分でインストールしました。

(便利スクリプトのはずが、色々と調べたりする羽目になったので、一から自分で入れた方が早かったかも・・・という教訓を得ました)

この記事の流れ

  • さくらVPSでOSをインストール
  • PHPをインストール
  • Composerをインストール
  • Laravelをインストール
  • MySQLをインストール
  • Nginxの設定を変更する
  • 初期画面が見られた!

それでは早速行ってみましょう!

さくらVPSでOSをインストール

さくらVPSの契約のところはすっ飛ばします。

私は、とにかく一番安い512MBを契約してもらいました。

リジョンは割引していたので大阪にしましたが、割引がない場合は石狩が一番安いと思うので、さくっとやってみたい人はそれがいいと思います。


OS再インストール画面

サーバの基本情報の画面で、「OS再インストール」タブをクリックします。

OS再インストールタブをクリック

※さくらで複数環境を動かしている人は、必ず再インストールを実行してしまう前に、「本当にこのサーバでいいのか?」を確認するようにしてください。

再インストールすると、当たり前ですが前のサーバの中身は全て消えてしまいます! 間違えて、お客さんがいるようなサーバを消してしまったら・・・! ムンクの叫びのような顔になるのは避けられません。

私も毎回必ずサーバのIPなどを確認してから作業するようにしています。


OSの選択・スタートアップスクリプトの選択

気を取り直して・・・再インストールする設定を選択します。

まずは、「標準OS」を選択します。

標準OSを選択します

OSは、CentOS8を選択しました。

スタートアップスクリプトを使いたい場合は、ここで選んでおきます。

私は、LEMPのスタートアップスクリプトを選択しました。

CentOS8を選択します


スクリプトを使うときの注意点

スクリプトを使う人は、Webのポートをあけておくことを忘れないようにします。(ポートの設定は後述)

スクリプトの詳細にも、ポートを開けておくよう注意書きがあります。インターネットからインストールするモジュールをとってくるためです。

詳細にもポートを開けておくよう注意書きがある


パスワードを設定する

管理ユーザー名はrootで固定です。

パスワードを設定します。

管理ユーザーのパスワードを入力する


ポートを開ける

ポートを開けておきます。

スタートアップスクリプトを使う人は、webのポートを開けておかないとうまくいかないです。

そうじゃなくても、webサービスを作る場合は開けておきましょう。

さくらVPSのコンパネでは、IPで接続制限をかけたりはできないので、細かく接続制限を設けたい人は自分でfirewallを立ててください。

SSHとWebのポートを開けておきます


公開鍵を登録する

公開鍵を登録して、パスワード認証を許可しないようにする方が、セキュリティは強固になります。

以前は、OSインストール後に、SSHして自分で公開鍵を登録したり、パスワード認証を許可しないようにする設定をしていましたが、OSインストール時に一緒にできるようにしてくれたので、楽になったと思います。

できれば公開鍵を登録しておきます

これでインストールします! 数分かかるので少し待ちます。

完了しましたと言ったメッセージが画面に出たら、IPアドレスをアドレスバーに打ち込んで接続してみます。


Nginxの初期画面を確認

Nginxの初期画面が見られました。

Nginxの初期画面が見られた

次はSSHして、諸々ソフトをインストールしていきます。

サーバにSSHする

さくらのVPSでは、管理画面からコンソールを開くこともできます。

管理画面からコンソールを開く場合のボタン


sshコマンドでサーバに接続

私はiTerm2をいつも使っているので、iTerm2から接続しました。

ssh -i <自分の秘密鍵のパス> root@<サーバのIPアドレス>

-iは鍵を指定して接続するオプションです。

sshのコマンド

パスワードも聞かれたので、サーバのパスワードを入力します。

このサーバへの初めてのアクセスなので接続確認があります。yesで接続します。

本来この時点で、ユーザを作成し、管理権限を付与して、それを使って作業するのがいいと思います。

今回は試行なので、早く終わらすためrootのまま作業しました。

次は、PHPのインストールです。

PHPをインストール

冒頭にも書きましたが、「スタートアップスクリプト」でLEMP構成をサクッと作ったつもりが、PHPのバージョンが出ませんでした。

which phpとしても、phpのコマンド自体存在していませんでした。

phpが入っていない

スタートアップスクリプト、働いてないやん。。。

働いていない理由を軽く検索してみましたが、わかりませんでした。

スクリプトのソースはGitHubに公開されていましたが、LEMPのインストール先の確認方法はわかりませんでした。

知り合いに聞くと、「便利機能は、得てしてうまくいかず、手数が余計にかかるよ」とアドバイスをもらいました(笑)

とにかく入っていないものは仕方ないので、自分で入れました。


remiレポジトリのインストール

気を取り直して、最新のPHPを入れたいので、remiレポジトリのインストールをやっていきます。

remiレポジトリとは、Remiさんがメンテナンスしてくれているレポジトリです。

PHPMySQL等に強く、とにかく最新のバージョンを管理・配布してくれています。

dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

dnf は、 yum に変えても同様に動きます。

remiレポジトリをインストールします

CentOS7であれば、 remi-release-8 のところの数字を7に変えることでできるようです。


phpのモジュールのリストを見てみる

モジュールのリストを見てみます。

dnf module list php

remiレポジトリの方には、最新バージョンの8.2があることが確認できます。

モジュールのリストを見てみるとremiの方が新しいもの(8.2)がある


remiレポジトリを有効化

remiの8.2を有効化します。

dnf module enable php: remi-8.2

有効化する


phpをインストール

後で必要になりそうなものも含めて、phpをインストールします。

dnf install php php-cli php-common

必要になりそうなものも含めてインストールします


インストール完了確認

インストールが完了しました。

バージョン確認できました。

webサービス開発に関連しそうなライブラリをインストール

人によるphp-pdoやphp-xmlなど、webサイト開発関連しそうなライブラリを入れておきます。

dnf install php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt php-mysql

関連しそうなライブラリを色々と入れておきます

次はComposerのインストールです。

Composerをインストール

Composerインストール

Composerをインストールします。

dnf --enablerepo=remi install composer

composerをインストールします


Composerインストール完了確認

composer

これでComposerインストールが完了したことが確認できます。

Composerインストール完了

Laravelをインストール

Laravelインストール

Laravelをインストールします。

sudo composer global require laravel/installer

Laravelをインストールします


パスを追加

パスを追加します。

vi ~/.bash_profile

パスを追加します

.bash_profileを変更したら、再度読み込ませます。(よく忘れます)

source ~/.bash_profile

Laravelのバージョン確認

php artisan -V

バージョンが確認できました。

バージョン確認完了


Laravelの新規プロジェクト作成

var/www/html の下に移動します。

cd var/www/html

新規プロジェクトを作成します。

laravel new <プロジェクト名>

新規プロジェクトを作成します

MySQLをインストール

mysqlをインストールします。

dnf install mysql

mysqlをインストールします

mysql-serverをインストールします。

dnf install mysql-server

mysql-serverをインストールします

インストールできました。

データベース連携するためには、mysqlアカウントを作ったり、Laravelの.envファイルに接続情報を入力したりする必要がありますが、一旦初期画面を見るまでをやる目的でしたので、これはこのまま置いておきます。

フォルダのPermission変更

Laravel動かす際にお馴染みの、2つのフォルダの権限を変更しておきます。

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

Nginxの設定を変更する

これが結構面倒でした。

Nginxが初めてで、設定ファイルの変更と、Nginxのだから必要となるphp-fpmの設定が、よくわかっていなかったからです。

参考にしたサイト:

かなり丁寧に説明してくださっています↓ 感謝!

nginx.confの歩き方。NginxでLaravelを動かすための設定を読み解く | 株式会社CyberOwl

下記の方々の記事も、合わせて参考にさせていただきました!

Laravel プロジェクトを、nginxに設定する

さくらのVPSでLaravelアプリを作って公開する【CentOS9・Nginx・MySQL】 - VPS ONE


Nginxの設定ファイルを見つける

Nginxののバージョンを確認します。

Nginx -v

結構新しめであることを確認しました。

ステータスをチェック

Systemctl status nginx

動いていることが確認できます。

設定ファイルの構文チェックすると、configのパスが出てきます! これでNginxのファイルの場所がわかります。

Sudo nginx -t

php-fpmが入っているか確認

php-fpmが入っているかを確認しておきます!

dnf list php-fpm

Nginxの設定ファイルをいじる

基本は、この方の記載をかなりコピペさせていただきました。

nginx.confの歩き方。NginxでLaravelを動かすための設定を読み解く | 株式会社CyberOwl

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

sudo vi /etc/nginx/conf.d/default.conf

php-fpmのfastcgiパスのところは、.sockファイルの格納場所に合わせて変えます。

いろんなサイトを参考にしながら、「php-fpm.sock directory」とかで検索して出てきたパスを見つつ、結局類似の場所にあるかどうか、フォルダの中身を漁ってみて探したらありました。

/var/run/php-fpm/www.sock

このパスで、自分のサーバに合わせて場所を書き換えました。

fastcgi_pass unix:/run/php-fpm/www.sock;

※ このphp-fpm関連の記述は、実際はこんなにすんなり行かなくて、sockの場所を探したり、下で説明するphp-fpmのconfを何度も確認して、色々調べたりして、やっと辿り着きました。


php-fpmの設定ファイルをいじる

https://vps-one.site/laravel-sakura-vps/

この記事を見ていると、php-fpmの設定と、起動を行うと書いてあり、それはどちらもやっていなかったので実施します。

vi /etc/php-fpm.d/www.conf

php-fpmの設定ファイル

listen.owner =nginx
listen.group = nginx

(元はnobodyとなっていました)

listen = /var/run/php-fpm/www.sock

linux - How to find my php-fpm.sock? - Stack Overflow

この質問の中で、上記のlistenで指定したところに、php-fpmを起動すると、sockファイルが「生成される」と書いてありました。

いろんなサイトで見ると、このsockファイルのネーミングは、「php-fpm.sock」という名前になっていました。

そのため、名前を変更する必要があるのかかなり悩みましたが、php-fpm起動で「生成される」ことがわかったので、解決しました。

私の場合、初期が「www.sock」となっていたので、そのままにしました。(そして、そのパスを、Nginxのfastcgi_passにも入れ込みました)

user=nginx
group=nginx

参考サイトでは、変更していませんでしたが、上記stackoverflowで、「userやgroupもnginxと設定する」という記載があったので、そうしました。

php-fpmを再起動します。

sudo systemctl start php-fpm
sudo systemctl stop php-fpm

Nginxも再起動します。

Systemctl restart nginx

初期画面が見られた!

これで無事初期画面が見られました。(URLは、http://アドレス>)

Laravelの初期画面が見られました

さいごに

スタートアップスクリプトを使って数時間で作るつもりが、Nginxの設定が初めてだったので、ここまで行き着くのに数日かかってしまいました。

次回環境構築はスムーズに行くことを願っています。(だいたいそんなにすんなり行かないことが多いですが・・・)

一旦初期画面を見るというゴールまで至れたので、満足です。

今後は、この環境で既存のAPIを動かしたり、画面を作ったりしていこうと思います。

以上。