私のような素人にはなかなか難しく、ほぼ半日かかりました。
でも最終的にはうまくいきました。
今はネット上に良質な情報がたくさんあるので、とても助かりました。
環境
半日もアレコレやっていると何をどうしたのか全然憶えていませんが、php などの環境を書いておくと、
php --version
PHP 8.1.12 (cli) (built: Oct 31 2022 09:40:07) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.12, Copyright (c) Zend Technologies
composer --version
Composer version 2.4.4 2022-10-27 14:39:29
cd ~/myapp
php artisan --version
Laravel Framework 9.41.0
というような感じです。
自作のアプリのデプロイ
これは git を使う人が多いようですが、私は苦手なので ftp ソフトを使いました。
scp でもいいと思いますが、xserver では少し使いにくい感じです。
ssh ログインすると ~/ に入りますが、そこに xserver のディレクトリがあります。
ムームードメインなどで取得した moheno.site を xserver で登録するとこのような配置になります。
この moheno.site に自作のアプリをデプロイ(アップロード)します。
~/
├── henoheno.xsrv.jp
└── moheno.site
データベースは phpmyadmin で
migrate してもいいのですが、ローカルで phpmyadmin でエクスポートして xserver の phpmyadmin でインポートした方が簡単です。
ちょっと気をつけるべきは、mysql から mariadb に移すので、ローカルの mysql 8.0 で作成したデータベースを xserver の mariadb にインポートしようとすると以下のようなエラーが出ることです。
#1273 - Unknown collation: 'utf8mb4_0900_ai_ci'
最初にローカルの mysql 8.0 でデータベースを作成する際に文字セットを「utf8mb4_unicode_520_ci」にすると、mariadb にインポートすることができます。
シンボリックリンク
以下のようなシンボリックリンクを作成します。
ln -s ~/moheno.site/sample1/public ~/moheno.site/public_html
public を削除する
~/moheno.site/myapp/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
~/moheno.site/myapp/public/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
再起動したいのですが、xserver にはそういう機能がないようです。
xserver のコントロールパネルから moheno.site の .htaccess を変更して「確認画面に進む」とすれば再起動されるようですね。
xserver 上の laravel は素晴らしい
aws と比較するのは無茶ですが、xserver に設定した laravel は素晴らしいスピードです。
メモリ 1 GB の aws とは当然比較できるはずもないのですが、xserver はサクサク動きます。
aws の ec2 のインスタンスは即削除しました。
外部からの画像へのアクセス
django の場合は、画像名がそのまま記録されていました。
なので、例えば fullpath/サラアラグ.jpg で外部からアクセスすることができたようです。
ただし、「年/月/日/サラアラグ.jpg」なので、外部アクセスはそう簡単ではありません。
保存されているデータは個人情報がもろに記録されているものもあり、例えばコロナ接種証明書などですが、自分にとっては大事なデータですが他人にはほとんど何の意味もないものかもしれません。
それでも、個人情報が漏れるのは嬉しくはありません。
しかし、laravel の場合は画像名は「fXxrkUAmlJTg2GIwg1Prlp6ekafcVm9CQlnvq7aJ.jpg」というような意味不明な文字列の塊です。
これはデータベース内で一意になるように工夫されているようです。
画像名をこのように変換して記録してあれば外部からのアクセスは絶対に無理で、それだけ漏れる心配がなく安心だと言えます。
内容の変更は Git が便利 ?
そうか、ちょっとした変更をする場合には多分 Git が便利なんでしょうね。
Git だってそんなに難しくはないのでもう一度やってみましょうかね。