「XserverでLaravelを動かしているけど、composer require laravel/passport
を実行したらext-sodium
がないって怒られた…。」
「sudo
(管理者権限)が使えないから、yum
やapt-get
で簡単に追加もできない…。」
そんな、レンタルサーバーならではの悩みを抱えているあなたへ。本記事では、SSH上でソースコードからライブラリをコンパイルし、管理者権限なしでPHPのsodium
拡張機能を有効にするための全手順を、ハマりどころの解説を交えて詳しく解説します。
💡 なぜこの記事が必要なのか?
Laravel Passportは、API認証(OAuth2)を実装するための強力なパッケージですが、内部で暗号化処理を行うためにPHPのsodium
拡張機能を必要とします。多くのレンタルサーバーでは、この拡張機能がデフォルトで有効になっていなかったり、特にコマンドライン(CLI)環境では読み込まれていなかったりします。
この記事を最後まで読めば、composer
コマンドが通らずに諦めかけていたあなたも、きっとLaravel Passportを導入できるようになるはずです。
Step 1: libsodium本体をソースからコンパイル
まずは、PHP拡張機能の土台となるlibsodium
ライブラリ本体をインストールします。sudo
が使えないので、自分のホームディレクトリ内にインストールするのがポイントです。
Bash
# 作業用ディレクトリを作成
mkdir -p ~/usr/local/src
# libsodiumのソースコードをダウンロードして展開
cd ~/usr/local/src
wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.20.tar.gz
tar xzvf libsodium-1.0.20.tar.gz
cd libsodium-1.0.20
# インストール先を自分のホームディレクトリに指定してコンパイル
# --prefixで「どこにインストールするか」を指定します
./configure --prefix=$HOME/usr/local
make && make check
# 指定したディレクトリにインストール
make install
これで、$HOME/usr/local
配下にlibsodium
がインストールされました。
Step 2: PHP sodium拡張機能をコンパイル
次に、PHPとlibsodium
を繋ぐための「接着剤」であるsodium
拡張機能自体をコンパイルします。
# PHPのソースコードからsodium拡張機能の部分だけを取り出す
cd ~/usr/local/src
# ★ご自身のPHPバージョンに合わせて修正してください
wget https://github.com/php/php-src/archive/refs/tags/php-8.3.21.tar.gz -O php-8.3.21.tar.gz
tar xzvf php-8.3.21.tar.gz
mv php-src-php-8.3.21/ext/sodium ./sodium-php-8.3.21
cd sodium-php-8.3.21
# PHP拡張機能としてビルドするための準備
# ★ご自身のPHPバージョン、パスに合わせて修正してください
/opt/php-8.3/bin/phpize
# 拡張機能のコンパイル設定
# PKG_CONFIG_PATHで先ほど入れたlibsodiumの場所を教えるのが重要!
PKG_CONFIG_PATH=$HOME/usr/local/lib/pkgconfig ./configure --with-php-config=/opt/php-8.3/bin/php-config --with-sodium=$HOME/usr/local
# コンパイルを実行
make
make test
make test
が成功すれば、コンパイルは完了です!modules/
ディレクトリにsodium.so
というファイルが生成されているはずです。
Step 3: 拡張機能の手動インストール
sudo
権限がないため、make install
は権限エラーで失敗します。そこで、コンパイルして出来上がったsodium.so
ファイルを、自分で管理するディレクトリに手動でコピーします。
# 拡張機能置き場を作成
mkdir -p ~/usr/local/php/extension
# コンパイルしたsodium.soをコピー
cp modules/sodium.so ~/usr/local/php/extension/
これで、拡張機能の「モノ」の準備は整いました。
Step 4: WebとCLI、両方のPHP環境を設定 🚀
ここがこの記事の一番重要なポイントです。レンタルサーバーでは、Webサイトを表示するときのPHPと、SSHでコマンドを打つときのPHP(CLI)は、別々の設定を読み込んでいます。両方を正しく設定しないと、composer
は成功したのにサイトが表示されない、といった問題に直面します。
A) コマンドライン(CLI)用の設定
composer
などのコマンド実行時に読み込ませるための、専用の設定ファイル~/sodium.ini
を作成します。
# ★ユーザー名の部分(weluvbaby2)はご自身のものに修正してください
cat << EOF > ~/sodium.ini
; 自前でコンパイルしたsodiumはフルパスで指定
extension = /home/{サーバーID}/usr/local/php/extension/sodium.so
; 他の必須拡張機能は名前だけで指定 (サーバーの標準ディレクトリから読まれる)
extension = pdo
extension = pdo_mysql
extension = mbstring
extension = gd
extension = dom
extension = openssl
extension = fileinfo
extension = xml
EOF
【ポイント解説】
- 自作した
sodium.so
だけフルパスで指定します。 extension_dir
は記述しません。これにより、pdo
などの標準拡張機能はサーバーの正しい場所から読み込まれます。
B) Webサーバー用の設定
サイト表示時に「Class "PDO" not found
」などのエラーが出るのを防ぐため、Webサーバー側の設定も行います。
- Xserverのサーバーパネルにログインします。
- 「PHP」カテゴリにある「php.ini設定」に進みます。
- 設定対象のドメインを選択し、
php.ini
の編集画面を開きます。 - テキストエリアの末尾に、上記 A) で作成した
sodium.ini
と全く同じ内容をコピー&ペーストして保存します。
これで、WebとCLI、両方の環境でsodium
とその他の必須拡張機能が正しく読み込まれるようになりました。
Step 5: composerを実行してPassportを導入! 🎉
いよいよ最終段階です。作成した専用設定ファイルを-c
オプションで指定してcomposer
を実行します。
# Laravelプロジェクトのディレクトリに移動
cd /path/to/your/laravel/project
# 専用設定ファイルを読み込ませてlaravel/passportをインストール!
# ★ご自身のPHPパス、ユーザー名に合わせて修正してください
/opt/php-8.3/bin/php -c /home/{サーバーID}/sodium.ini $(which composer) require laravel/passport
これで、ext-sodium
がないというエラーは表示されず、無事にインストールが開始されるはずです!
⭐ おまけ:便利なエイリアス設定
毎回長いコマンドを打つのは大変なので、alias
(コマンドのショートカット)を作っておくと非常に便利です。~/.bashrc
などに以下を追記しましょう。
# ~/.bashrcに追記 (★パスはご自身の環境に合わせてください)
alias composer-php='/opt/php-8.3/bin/php -c /home/{サーバーID}/sodium.ini $(which composer)'
# シェルに設定を再読み込みさせる
source ~/.bashrc
# これで、次回からはcomposer-phpと打つだけでOK!
# 例:
composer-php update
まとめ
sudo
権限のないレンタルサーバー環境では、少し遠回りな手順が必要ですが、一つずつ問題を切り分けて対処すれば必ず道は拓けます。この記事が、同じ壁にぶつかった誰かの助けになれば幸いです。