現在、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 のコントロールパネルでドメイン名を登録して初期化すると、「http://moheno.site」でアクセスすると設定ファイルがアップされていませんと表示されます。
laravel プロジェクトを「moheno.site」直下にコピーします。
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 プロジェクトにアクセスできると思います。
「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」でアクセスできるようになります。
xserver のコントロールパネルから「moheno.site」に ssl 設定します。
ssl の設定は、反映されるまでに 1 時間ほどかかる場合があります。
以下のようなシェルスクリプトを作成して「moheno.site」のルートディレクトリに置きます。
同じ場所に「mysql_bak」というディレクトリを作成します。
#!/bin/shperiod=7dirpath='~/moheno.site/mysql_bak'filename=`date +%y%m%d`mysqldump -uheno -pmoheno henomemo > $dirpath/$filename.sqlchmod 700 $dirpath/$filename.sqloldfile=`date --date "$period days ago" +%y%m%d`rm -f $dirpath/$oldfile.sql
このシェルスクリプトに実行権限を与えて、一度実行してデータベースが保存されるのを確認します。
xserver のコントロールパネルから Cron 設定で、上のシェルスクリプトを実行ファイルとして毎日定時に実行するようにします。
xserver 上にある mysql_bak と画像フォルダを NAS にコピーします。
import osimport shutilimport paramikoimport 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にバックアップされます。