さくらVPSのCentOS8・Nginxに新規Laravel10プロジェクトを立ち上げてみる
はじめに
さくらVPSで新規サーバ環境を構築して、Laravelの新規プロジェクトを作り、Laravelの初期画面が表示されるまでやりました。
前提
さくらのVPSで作ってみようと思いました。一番小さいサイズのサーバを会社で借りてもらったからです。他に理由はありません。
参考にしたマテリアル
こちらの貧困エンジニアUさんの動画を拝見し、参考にさせていただきました。
これからやってみる人は、ざっとみるといいと思います。
この場を借りて、御礼申し上げます!
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で使える便利なスタートアップスクリプトで、LAMP(Linux, Apache, MySQL, PHP)を一気にインストールされています。
私も、類似のスタートアップスクリプを探したのですが、CentOS8では同じスクリプトはありませんでした。
LEMP(ApacheがNginxに置き換わり、MySQLがMariaDBに置き換わったもの)のスクリプトがあったので、こちらを使いました。
そのため、Apacheではなく、Nginxとなっています。
しかし結局、スクリプトがうまく通らず、Nginxしかインストールされなかったため、PHPとMySQLは自分でインストールしました。
(便利スクリプトのはずが、色々と調べたりする羽目になったので、一から自分で入れた方が早かったかも・・・という教訓を得ました)
この記事の流れ
それでは早速行ってみましょう!
さくらVPSでOSをインストール
さくらVPSの契約のところはすっ飛ばします。
私は、とにかく一番安い512MBを契約してもらいました。
リジョンは割引していたので大阪にしましたが、割引がない場合は石狩が一番安いと思うので、さくっとやってみたい人はそれがいいと思います。
OS再インストール画面
サーバの基本情報の画面で、「OS再インストール」タブをクリックします。
※さくらで複数環境を動かしている人は、必ず再インストールを実行してしまう前に、「本当にこのサーバでいいのか?」を確認するようにしてください。
再インストールすると、当たり前ですが前のサーバの中身は全て消えてしまいます! 間違えて、お客さんがいるようなサーバを消してしまったら・・・! ムンクの叫びのような顔になるのは避けられません。
私も毎回必ずサーバのIPなどを確認してから作業するようにしています。
OSの選択・スタートアップスクリプトの選択
気を取り直して・・・再インストールする設定を選択します。
まずは、「標準OS」を選択します。
OSは、CentOS8を選択しました。
スタートアップスクリプトを使いたい場合は、ここで選んでおきます。
私は、LEMPのスタートアップスクリプトを選択しました。
スクリプトを使うときの注意点
スクリプトを使う人は、Webのポートをあけておくことを忘れないようにします。(ポートの設定は後述)
スクリプトの詳細にも、ポートを開けておくよう注意書きがあります。インターネットからインストールするモジュールをとってくるためです。
パスワードを設定する
管理ユーザー名はrootで固定です。
パスワードを設定します。
ポートを開ける
ポートを開けておきます。
スタートアップスクリプトを使う人は、webのポートを開けておかないとうまくいかないです。
そうじゃなくても、webサービスを作る場合は開けておきましょう。
さくらVPSのコンパネでは、IPで接続制限をかけたりはできないので、細かく接続制限を設けたい人は自分でfirewallを立ててください。
公開鍵を登録する
公開鍵を登録して、パスワード認証を許可しないようにする方が、セキュリティは強固になります。
以前は、OSインストール後に、SSHして自分で公開鍵を登録したり、パスワード認証を許可しないようにする設定をしていましたが、OSインストール時に一緒にできるようにしてくれたので、楽になったと思います。
これでインストールします! 数分かかるので少し待ちます。
完了しましたと言ったメッセージが画面に出たら、IPアドレスをアドレスバーに打ち込んで接続してみます。
Nginxの初期画面を確認
Nginxの初期画面が見られました。
次はSSHして、諸々ソフトをインストールしていきます。
サーバにSSHする
さくらのVPSでは、管理画面からコンソールを開くこともできます。
sshコマンドでサーバに接続
私はiTerm2をいつも使っているので、iTerm2から接続しました。
ssh -i <自分の秘密鍵のパス> root@<サーバのIPアドレス>
-iは鍵を指定して接続するオプションです。
パスワードも聞かれたので、サーバのパスワードを入力します。
このサーバへの初めてのアクセスなので接続確認があります。yesで接続します。
本来この時点で、ユーザを作成し、管理権限を付与して、それを使って作業するのがいいと思います。
今回は試行なので、早く終わらすためrootのまま作業しました。
次は、PHPのインストールです。
PHPをインストール
冒頭にも書きましたが、「スタートアップスクリプト」でLEMP構成をサクッと作ったつもりが、PHPのバージョンが出ませんでした。
which phpとしても、phpのコマンド自体存在していませんでした。
スタートアップスクリプト、働いてないやん。。。
働いていない理由を軽く検索してみましたが、わかりませんでした。
スクリプトのソースはGitHubに公開されていましたが、LEMPのインストール先の確認方法はわかりませんでした。
知り合いに聞くと、「便利機能は、得てしてうまくいかず、手数が余計にかかるよ」とアドバイスをもらいました(笑)
とにかく入っていないものは仕方ないので、自分で入れました。
remiレポジトリのインストール
気を取り直して、最新のPHPを入れたいので、remiレポジトリのインストールをやっていきます。
remiレポジトリとは、Remiさんがメンテナンスしてくれているレポジトリです。
PHPやMySQL等に強く、とにかく最新のバージョンを管理・配布してくれています。
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
※ dnf
は、 yum
に変えても同様に動きます。
CentOS7であれば、 remi-release-8
のところの数字を7に変えることでできるようです。
phpのモジュールのリストを見てみる
モジュールのリストを見てみます。
dnf module list php
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インストールが完了したことが確認できます。
Laravelをインストール
Laravelインストール
Laravelをインストールします。
sudo composer global require laravel/installer
パスを追加
パスを追加します。
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-serverをインストールします。
dnf install 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
下記の方々の記事も、合わせて参考にさせていただきました!
さくらの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
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://
さいごに
スタートアップスクリプトを使って数時間で作るつもりが、Nginxの設定が初めてだったので、ここまで行き着くのに数日かかってしまいました。
次回環境構築はスムーズに行くことを願っています。(だいたいそんなにすんなり行かないことが多いですが・・・)
一旦初期画面を見るというゴールまで至れたので、満足です。
今後は、この環境で既存のAPIを動かしたり、画面を作ったりしていこうと思います。
以上。