0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

さくらのVPSでlaravel環境構築

Posted at

この記事では、**さくらインターネットのVPS(CentOS Stream 9)**上にLaravelの開発環境を構築する手順をまとめています。

主に以下のような構成としています。

  • Webサーバ: Apache
  • PHP: 8.4 以上
  • データベース: MariaDB 10.5.27
  • フレームワーク: Laravel 11
  • OS: CentOS Stream 9 x86_64

1.Windowsで.sshフォルダにSSHキーを追加する

鍵ファイルを作成

PowerShellを使用。.sshフォルダに移動しコマンドで鍵ファイルを作成する

# .sshフォルダへ移動
cd $env:USERPROFILE\.ssh

# SSH鍵の作成(ファイル名を明示的に指定)
ssh-keygen -t ed25519 -C "sakura-centos-key" -f id_ed25519_sakura_centos

パスフレーズについてのプロンプトが表示されます:

Enter passphrase (empty for no passphrase):
  • パスフレーズを設定しない場合:そのまま Enterキー を押してください
  • パスフレーズを設定する場合:任意の文字列を入力して Enterキー を押し、再入力を求められたらもう一度入力します

SSHキー生成について

オプション 意味
ssh-keygen SSH鍵を生成するためのコマンド(Secure Shell Key Generator)
-t ed25519 鍵の種類(type)を指定。
ed25519 は高速・安全な楕円曲線暗号方式
-C "sakura-centos-key" 鍵にコメントを付ける(公開鍵の末尾に表示される)。識別用に便利
-f id_ed25519_sakura_centos 出力ファイル名の指定。
→ 秘密鍵:id_ed25519_sakura_centos
→ 公開鍵:id_ed25519_sakura_centos.pub

2.VPS側で公開鍵を登録

パスワードなしでSSH接続できるように公開鍵を登録する
自分はコントロールパネルでサーバーを起動する際にSSHキー登録を行いました。

3.TeraTermでSSHログイン

コントロールパネル上で作成された「管理ユーザー名」を入力し「RSA/DSA/ECDSA/ED25519 鍵を使ってログイン」にチェックする。作成した秘密鍵ファイルを指定してSSHログインできることを確認する。

4.ユーザー作成

# まずroot権限への切り替える
sudo -i
# rootユーザーのパスワード設定
passwd root

# ちなみに別のユーザーに切り替えるには?
su - centos

# ユーザー作成(rootで実行)
adduser {ユーザー名} # 例: admin

# パスワード設定(rootで実行)
passwd admin

# sudo権限を付与(rootで実行)
usermod -aG wheel {ユーザー名}

作成したユーザーで公開鍵認証ログインする

# 作成ユーザーの .ssh ディレクトリを作成(rootまたはsudoで)
mkdir /home/{ユーザー名}/.ssh
chmod 700 /home/{ユーザー名}/.ssh
chown {ユーザー名}:{ユーザー名} /home/{ユーザー名}/.ssh

公開鍵をauthorized_keysに追加

# 公開鍵の文字列をファイルに追記
echo "(公開鍵の中身)" >> /home/{ユーザー名}/.ssh/authorized_keys
# 安全に貼り付けたい場合は、nanoやviエディタを使って手動で貼り付けてもOK
nano /home/admin/.ssh/authorized_keys

# 権限の変更
chmod 600 /home/{ユーザー名}/.ssh/authorized_keys
chown {ユーザー名}:{ユーザー名} /home/{ユーザー名}/.ssh/authorized_keys

これで、作成したユーザーでもTera Termから公開鍵認証によるSSHログインが可能になります。

5.OSの設定・更新

ここからは基本的に作成ユーザーでログインし作業します

# パッケージの更新(CentOS Stream 9)
sudo dnf -y update

ファイアウォールの設定

# firewalldの起動・状態確認
sudo systemctl status firewalld

# 起動
sudo systemctl start firewalld
# 自動起動を有効化(次回起動後も有効に)
sudo systemctl enable firewalld

# 設定の再確認(起動後)
sudo firewall-cmd --list-all

エディタをインストール。nanoでも良いがlinux操作に慣れたいこともありvim(viより高機能なバージョン)をインストールする。

sudo dnf install -y vim

6.Apacheのインストール

Apacheをインストールしてブラウザ上から確認します

# Apache(httpd)のインストール
sudo dnf install -y httpd

# Apacheの起動 & 自動起動設定
sudo systemctl enable --now httpd

# Apache起動確認
sudo systemctl status httpd
→ active(running)と表示されればOK

# ファイアウォールでHTTP/HTTPSを許可
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

# ファイアウォール設定確認
sudo firewall-cmd --list-services
→ http https ssh などが表示されれば成功です

コマンド上ではなくコンパネで接続可能ポートを設定しても良し
WEB:TCP 80/443 を設定する

ブラウザでアクセスしてApacheのインストールを確認
http://[VPSのIPアドレス]
※VPSのIPアドレスは、さくらのコントロールパネルまたは ip a コマンドで確認できます。

7.PHPのインストール

まずは有効なリポジトリを確認

コマンド 内容 目的
dnf repolist 有効なリポジトリ一覧 基本確認
dnf repolist -v 有効なリポジトリの詳細情報付き リポジトリのURLやメタデータ確認
dnf repolist all すべての登録済みリポジトリを表示 無効なリポジトリの存在や状態を確認したい時

今回はPHP8.4をインストールしたいため新たにリポジトリを導入する

# EPELリポジトリを導入(拡張リポジトリ)
sudo dnf install -y epel-release epel-next-release

# Remiリポジトリを導入
# Remiは、PHPの最新バージョンや拡張モジュールを提供する信頼性の高いリポジトリです。
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm

ここで問題発生。メモリ不足により強制終了してしまうためスワップファイルを一時的に作成して対策します。
エラーにならない場合、次の項目は飛ばしてください。

スワップファイルの作成

sudo fallocate -l 1G /swapfile
  • fallocate: 指定したサイズの空のファイルを効率的に作成するコマンド。
  • -l 1G: 作成するファイルのサイズを 1GB に指定します。
  • /swapfile: スワップ領域として使用するファイルの名前と場所。
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
free -h
  • 600: このパーミッション設定により、ファイルの所有者だけが読み書き可能になります(他のユーザーはアクセス不可)。
  • mkswap: 指定したファイルまたはデバイスをスワップ領域として初期化するコマンド。
  • swapon: 指定したスワップ領域をシステムで利用可能にするコマンド。
  • free: スワップ領域の確認

改めて下記コマンドを実行
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm

8.PHP8.4インストール

# 利用可能なPHPバージョンを確認
dnf module list php

# 既存のPHPモジュールをリセット
sudo dnf module reset php -y

# PHP8.4モジュールを有効化(remi提供)
sudo dnf module enable php:remi-8.4 -y

# PHP8.4をインストール
sudo dnf install -y php

# インストールを確認
php -v

ついでにLaravel向け拡張モジュールのインストールしておく

sudo dnf install -y php-json php-mbstring php-zip php-gd php-pdo php-mysqlnd php-mysqli

9.MariaDBのインストール

# MariaDBサーバー本体とクライアントツールのインストール
sudo dnf install -y mariadb-server mariadb

# MariaDBの起動と自動起動設定
sudo systemctl enable --now mariadb

# 起動確認
sudo systemctl status mariadb

# MariaDBのバージョン確認
mysql -V
  • 初期セキュリティ設定 いくつか項目を以下のように設定してます
    sudo mysql_secure_installation
質問内容 回答
Enter current password for root (enter for none): そのままEnter(初期は空)
Set root password? Y(rootにパスワードを設定)
Remove anonymous users? Y(匿名ユーザー削除)
Disallow root login remotely? Y(リモートからのrootログイン禁止)
Remove test database and access to it? Y(テストDB削除)
Reload privilege tables now? Y(変更を即反映)
Switch to unix_socket authentication? n Laravel等のWebアプリでパスワード接続が必要なため
# rootユーザーでログイン確認
mysql -u root -p

# ログイン後にユーザーを作成
CREATE USER '{ユーザー名}'@'localhost' IDENTIFIED BY '{パスワード}';
GRANT ALL PRIVILEGES ON *.* TO '{ユーザー名}'@'localhost';
FLUSH PRIVILEGES;

10.Composerのインストール

PHPのパッケージ管理システムであるcomposerをインストールします。Laravelを構築するには必須になるでしょう。

# インストーラーのダウンロード
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

# ハッシュ値の検証(安全性チェック)
php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

# composerのインストール本体実行
php composer-setup.php

# インストーラーの削除
php -r "unlink('composer-setup.php');"

# composerをシステム全体で使えるようにファイルを移動
sudo mv composer.phar /usr/local/bin/composer

# 最終確認:バージョン表示
composer --version

11.Node.jsインストール

Laravelフロントエンドのビルドに必要なNode.jsをインストールします

curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo dnf install -y nodejs

# バージョンの確認
node -v

# Node.jsのパッケージ管理ツール npm のバージョンも確認
npm -v

12.gitのインストール

github上のLaravelをVPSにデプロイするためgitをインストールします。

# gitのインストール(バージョンの確認)
sudo dnf install -y git
git --version

# git用のSSH鍵ペアを作成(ホームディレクトリで作業)
cd ~
ssh-keygen -t ed25519 -C "github-vps-key" -f ~/.ssh/id_ed25519_github

# 公開鍵の内容をコピーしてGithubに登録
cat ~/.ssh/id_ed25519_github.pub

SSH接続時の情報を定義する.ssh/config を編集する
~/.ssh/config は複数のSSH鍵を使い分けるための設定ファイルです。

Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_github
# 保存後、権限も確認し変更する
chmod 600 ~/.ssh/id_ed25519_github

# 動作確認(エラーが出なければSSH接続成功です)
ssh -T git@github.com

これで無事githubからlaravelプロジェクトをcloneできるようになりました

13.Webサーバーの設定

laravel用のApache設定ファイルを作成します。ファイル名は任意ですがわかりやすい方が良いと思います。
/etc/httpd/conf.d/laravel.confの作成・設置

laravel.conf
<VirtualHost *:80>
    ServerName {ホスト名を指定}
    # laravelを設置したディレクトリに各自合わせてください
    DocumentRoot /var/www/html/app/public

    <Directory /var/www/html/app/public>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog /var/log/httpd/laravel_error.log
    CustomLog /var/log/httpd/laravel_access.log combined
</VirtualHost>

Apacheを再起動して設定を反映させます
sudo systemctl restart httpd

14.Laravelの構築

ここからはlaravelを設置したディレクトリに移動して基本的に作業します

# 依存パッケージのインストール
composer install

# envファイルの編集(DBの接続情報など設定します)
cp .env.example .env
sudo vim .env

# アプリケーションキーの生成
php artisan key:generate

# フロントエンド構築のため依存関係パッケージのインストールとソースコードのビルド
npm install
npm run build

# パーミッションの調整
sudo chown -R apache:apache /var/www/html/app
sudo chmod -R 775 storage bootstrap/cache

ブラウザで http://[VPSのIPアドレス] にアクセスし、Laravelの初期画面が表示されれば成功です
お疲れ様でした!!

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?