xserver の laravel を再設定

(2024-09-07)

現在、xserver 上で laravel による画像も保存できるカード型データベースを動かしています。

無料サービスの独自ドメインを使っていましたが、1年経ったので今後は有料になりますとのこと。 価格は5,000 円程度。

5,000円はちょっと高いので、もっと安い費用で設定したいと思います。

これまでは、新しいドメインを取得して再設定をおこなってきましたが年齢的に記憶が曖昧になっており、再設定にちょっと手こずりました。

生きていれば来年も必要なので、今回は完全なマニュアルを作っておきたいと思っています。

ドメイン名を取得

まず最初にドメイン名を取得する必要があります。

私はいつもムームードメインでドメイン名を取得しているので、今回もムームードメインで「moheno.site」を登録しました。価格は 110 円程度。

ドメイン名を取得したら、ネームサーバーを設定します。入力内容は xserver に対しては常に一定です。

ネームサーバ1 ns1.xserver.jp
ネームサーバ2 ns2.xserver.jp
ネームサーバ3 ns3.xserver.jp
ネームサーバ4 ns4.xserver.jp
ネームサーバ5 ns5.xserver.jp

xserver で laravel プロジェクトを配置

できれば、xserver 上で動いている laravel プロジェクトを予めどこかにコピーしておきます。

xserver のコントロールパネルでドメイン名を登録して初期化すると、「http://moheno.site」でアクセスすると設定ファイルがアップされていませんと表示されます。

laravel プロジェクトを「moheno.site」直下にコピーします。

php を 8.1 以上にする

xserver の php を 8.1 以上にしないと laravel プロジェクトは動きません。以下のようなエラーが表示されました。

Fatal error: Composer detected issues in your platform:
Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/user/moheno.site/laravelp/vendor/composer/platform_check.php on line 24

コントロールパネル上では php 8.1 以上になっているにも関わらず、このようなエラーが出ます。
こういう場合、以下の画像の「変更」ボタンを押すとエラーは出なくなります。

この時点で、「http://moheno.site/public」で laravel プロジェクトにアクセスできると思います。

public を削除する

https://moheno.site/public」ではなくて「https://moheno.site」でアクセスするためには、シンボリックリンクと .htaccess を設定する必要があります。

xserver に ssh ログインして以下のようにしてシンボリックリンクを作成します。

ln -s $HOME/[ドメイン名]/[プロジェクト名]/public $HOME/[ドメイン名]/public_html/public

コントロールパネルから「.htaccess」設定 → 「moheno.site」を選択して以下のように変更します。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [QSA,L]
</IfModule>

「確認画面」→「実行する」で設定が反映されます。

これで、「http://moheno.site」でアクセスできるようになります。

ssl 設定

xserver のコントロールパネルから「moheno.site」に ssl 設定します。

ssl の設定は、反映されるまでに 1 時間ほどかかる場合があります。

データベースのバックアップ

以下のようなシェルスクリプトを作成して「moheno.site」のルートディレクトリに置きます。
同じ場所に「mysql_bak」というディレクトリを作成します。

#!/bin/sh
period=7
dirpath='~/moheno.site/mysql_bak'
filename=`date +%y%m%d`
mysqldump -uheno -pmoheno henomemo > $dirpath/$filename.sql
chmod 700 $dirpath/$filename.sql
oldfile=`date --date "$period days ago" +%y%m%d`
rm -f $dirpath/$oldfile.sql

このシェルスクリプトに実行権限を与えて、一度実行してデータベースが保存されるのを確認します。

Cron を設定して毎日実行

xserver のコントロールパネルから Cron 設定で、上のシェルスクリプトを実行ファイルとして毎日定時に実行するようにします。

NAS から xserver のデータベースをコピー

xserver 上にある mysql_bak と画像フォルダを NAS にコピーします。

import os
import shutil
import paramiko
import scp
class ScpBykey():
def __init__( self ):
self.HOST = 'user.xsrv.jp'
self.PORT = 10022
self.USER = 'user'
self.KEY_FILE = '/volume1/backup/laravel/.ssh/moheno.key'
self.PASSPHRASE = ''
self.remote_mdeia_dir = 'moheno.site/laravel_project/storage/app/public'
self.remote_sql_dir = 'moheno.site/mysql_bak'
self.local_dir = '/volume1/backup/laravel_bak'
self.ssh = ''
self.resetDir()
def resetDir(self):
os.makedirs(self.local_dir, exist_ok=True)
shutil.rmtree(self.local_dir)
os.makedirs(self.local_dir, exist_ok=True)
def sshcon(self):
rsa_key = paramiko.RSAKey.from_private_key_file(self.KEY_FILE, self.PASSPHRASE)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(self.HOST, self.PORT, self.USER, pkey=rsa_key)
self.ssh = ssh
self.file_down( self.remote_sql_dir )
self.file_down( self.remote_mdeia_dir )
def file_down( self, remotedir ):
with scp.SCPClient(self.ssh.get_transport()) as scpc:
try:
scpc.get( remote_path = remotedir, local_path = self.local_dir, recursive = True)
except:
print('そのディレクトリは存在しません。')
if __name__ == '__main__':
scpk = ScpBykey()
scpk.sshcon()

この python が自動的に実行されるには、xserver の ssh 設定をおこなって、その時に作成された key を NAS 上の特定の場所に配置する必要があります。

この python を1日1回タスクスケジューラで実行します。

そうすると、xserver のデータベースと画像が毎日NASにバックアップされます。