laravelでドメイン名を変更した話

とある案件で、laravelのドメイン変更のお仕事をいただきました。初の内容だったのと、複雑そうに感じたので色々調べて実施しました。結果、適切なステップを踏めばスムーズに行えることが分かりました。実際、かなり簡単でした。備忘録として、ここにLaravelアプリケーションで新ドメインに移行する手順を詳しく説明します。

元々、旧ドメインのコンテンツをコピーして、本番サーバー内に新ドメイン環境を構築。そこでUAT含むテストをしながら、切替日に旧ドメインにリダイレクト設定する予定でしたが、新サーバーが容量不足で、新旧ドメインを別コンテンツで稼働させるのができないことが分かりました。そのため、ドメイン名変更することになった経緯があります。

以下、手順です。

1.DNSサーバーに新ドメインを登録

まず、DNSサーバーに新ドメインをAレコードで登録し、旧ドメインと同じIPアドレスを指定します。その後、新ドメインにpingを実行して接続可能であることを確認します。

2.httpd.confでVirtualHostの設定

実環境でhttpでアクセスすることは最近はもうないと思いますが、この後の無料SSLを取得する際にhttpアクセスが必須となるため、ここで設定しました。

設定後、root権限で以下実施でサービス再起動します。
#service httpd restart

<VirtualHost *:80>
    ServerAdmin admin@[新ドメイン名]
    ServerName [新ドメイン名]
    ServerAlias [新ドメイン別名]

    DirectoryIndex index.php index.html
    DocumentRoot /home/laravel/htdocs/source/public

    <Directory /home/laravel/htdocs/source/public>
        AllowOverride All
        AddHandler cgi-script .pl .cgi .py
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    # Custom log file locations
    LogLevel warn
    ErrorLog /home/laravel/log/error_new.log
    CustomLog /home/laravel/log/access_new.log common
</VirtualHost>

3.無料SSLの設定

通常、Let’s Encryptで無料SSLサービスを使用したSSL証明書を取得しますが、今回がCentOS6.8と非常部古い環境だったため動作せず。。。get SSLを使って取得しました。

これらの記事を参考させてもらいました。

  • Let’s EncryptのSSL証明書、Certbotで更新できず、GetSSLで更新

https://qiita.com/AmbientData/items/50ab30cf06acf43b8ecf

  • 中間証明書(CA証明書)の設定漏れで、Let’s EncryptのSSL証明書が期限切れエラーになった話

https://blg.dai-it-system.com/2021/10/letsencrypt_sslerror/

  • 【Let’s Encrypt】CentOS6環境でSSLを発行させる

https://zenn.dev/dammyyy/articles/072481679dec62

4.ssl.confでVirtualHostの設定

Apacheのssl.confファイルで、新しいドメインに対する<VirtualHost>を設定します。ここでドメイン名、ドキュメントルート、その他の必要な設定を行います。

以下、今回設定した内容です。


<VirtualHost *:443>
    ServerName [新ドメイン名]
    ServerAlias [新ドメインの別名]
    DirectoryIndex index.php index.html
    DocumentRoot "/home/laravel/htdocs/source/public"
    <Directory "/home/laravel/htdocs/source/public">
        AllowOverride All
        AddHandler cgi-script .pl .cgi .py
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/my-server.crt"
    SSLCertificateKeyFile "conf/ssl.key/my-server.key"
</VirtualHost>

5.サーバーの再起動とテスト

Apacheサーバーを再起動し、ssl.confで設定したドキュメントルートにテストファイルを配置して新ドメインからアクセスできることを確認します。

再起動は、root権限で以下実施です。
#service httpd restart

6.”.env”ファイルのドメイン変更

Laravelの .env ファイルで APP_URL を新しいドメインに更新します。これにより、Laravelが生成するURLが新しいドメインになります。

7.routes.phpのドメイン変更

/app/Http/routes.php ファイルを開き、ドメイン指定のルートグループ内でドメインを新しいものに変更します。

8.サーバーの再起動とアプリの動作確認

もう一度Apacheサーバーを再起動し (#service httpd restart)、新しいドメインでアプリケーションが正しく動作することを確認します。

9.”.htaccess”で旧ドメインからのリダイレクト設定

旧ドメインから新ドメインへのリダイレクトを設定するために、.htaccess ファイルにリダイレクトルールを追加します。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^旧ドメイン\.com [NC]
RewriteRule ^(.*)$ http://新ドメイン.com/$1 [L,R=301,NC]

まとめ

新しいドメインへの移行は、注意深く手順を踏むことで、問題なく完了することができます。DNSの更新、サーバー設定、アプリケーションの設定を丁寧に行い、各ステップで動作確認をすることが重要です。これにより、新しいドメインでのアプリケーションの運用をスムーズに開始できます。

あと、うまく行かないときは、chatGPTに状況や設定ファイル内容を伝えれば、的確なトラブルシューティング手順教えてくれて助かりました。