英語多読用の laravel を xserver にデプロイ

(2025-10-14)

xserver でドメインを取得して laravel プロジェクトをデプロイして動かすのはこれまでは簡単でしたが、どうも最近 xserver のセキュリティ強化のためにかなり難しくなったようです。

chatGPT に相談してやっと解決しましたが、chatGPT も例によって迷路に入ってしまうとおかしなことを延々と提示してくるのでちょっと時間がかかりました。

ドメイン取得とデプロイ

ドメインは xserver で前回と同じ 1 円で取得しました。いつかバチが当たるかもしれません。

ローカルで作成した laravel プロジェクトをそのドメインに scp します。

scp -r -i ~/.ssh/moheno.key -P 10022 ~/READaLOT moheno@sv12345.xserver.jp:~/readalot.jp

前回は、.htaccess の設定だけで済んだのですが、今回は全然動きません。

.htaccess

前回は

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [QSA,L]
</IfModule>
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off
SetEnvIf Request_URI ".*" Ngx_Cache_StaticMode

これで動いたのですが。
そもそも何が書いてあるのかほとんど理解できません。

chatGPT が今回提示してきたのは、

<IfModule mod_rewrite.c>
RewriteEngine On
# 存在するファイル・ディレクトリはそのまま
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# それ以外を index.php に流す
RewriteRule ^ index.php [L]
</IfModule>

しかし、これだけでは動きません。

index.html と index.php の編集

取得したドメインの public_html 内に index.html があります。それを無効にして、index.php を作成します。

mv index.html index.html.bak

index.php

<?php
require __DIR__ . '/../READaLOT/vendor/autoload.php';
$app = require_once __DIR__ . '/../READaLOT/bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle(
$request = Illuminate\Http\Request::capture()
);
$response->send();
$kernel->terminate($request, $response);

でもどういうわけか css が効いていません。

そこで、ローカルでビルドしたものを scp します。

npm run build

でビルドして、

# public/build(CSS/JS)
scp -r -i ~/.ssh/moheno.key -P 10022 ~/READaLOT/public/build \
moheno@sv12345.xserver.jp:/home/moheno/readalot.jp/READaLOT/public/
# index.php(public内)
scp -i ~/.ssh/moheno.key -P 10022 ~/READaLOT/public/index.php \
moheno@sv12345.xserver.jp:/home/moheno/readalot.jp/READaLOT/public/

起動

サイトにアクセスすると、

register は削除してあります。
login すると、

メニューを選ぶと

book を選ぶと

まあまあの出来ですね。

本のデータはローカルで mariadb に記録してあるので、どんどん増やして xserver の phpmyadmin からインポートすればいくらでも増やすことができます。

index.php なんか要らない

chatGPT は質問してうまく行かないとどんどんおかしな設定を要求してきます。今回も、index.php を作成するよう要求してきました。

それで一応うまく行ったのですが、どうにも納得がいかないのでいろいろ調べてみると、index.php なんか必要ないとわかりました。 自分の昔のプログラムに書いてありました。

xserver でドメインを設定すると、

.
└── moheno.jp
├── READaLOT
├── autoreply
├── htpasswd
├── log
├── mail
├── public_html
├── script
└── xserver_php

のような感じの構造になります。

READaLOT は laravel プロジェクトです。ローカルで作成したプロジェクトは public_html の中には置きません。

シンボリックリンクを作成します。

ln -s ~/moheno.jp/READaLOT/public ~/moheno.jp/public_html

こうすることで、https://moheno.jp にアクセスした時に、READaLOT/public/index.php が実行されるようになります。

ただし、public_html が存在しているとシンボリックが生成されないので public_html を削除する必要があるようです。 以前はこんなことしなかったんですが。

でも完全に削除するのは危険なので、

mv public_html public_html_bk

として残しておいた方が無難です。

view もアップ

ローカルで blade をいろいろ変更した場合は、view もアップします。

# views
scp -i ~/.ssh/moheno.key -P 10022 ~/READaLOT/resources/views \
moheno@sv12345.xserver.jp:/home/moheno/readalot.jp/READaLOT/resources