前回の投稿では、ランディングページの作成プロセスと、それを Render.com にデプロイする方法を共有しました。これでメインのコーディング作業は完了しており、以下の公開リポジトリでソースコードを確認できます:
https://github.com/EdgarGGamartgo/landing-page
今回の投稿を理解しやすくするためにも、前回の投稿を先に読んでおくのがおすすめです。興味があれば、こちらをチェックしてみてください:
さて、今回のチャレンジは、作成したランディングページを別のホスティングサービスで動かすことです。今回は Hostinger を試します:
まず気づいたのは、Hostinger には Render のような無料プランがないということです。テストが目的なので、使わないリソースを買う必要はなく、一番安いプランを検討しました。自分にとってちょうど良さそうだったのは、Hostinger の「Premium Web Hosting」です。ただし、Postgres のサポートがすぐには利用できないようなので、今回は MySQL を使うことにします。
まず、ローカルでランディングページが動くか確認するために、MySQL をインストールする必要があります。Mac の場合は以下のコマンドを実行します:
brew install mysql
次に、MySQL サーバーを起動します:
brew services start mysql
その後、以下のコマンドで MySQL に接続します:
mysql -u root
そしてローカルのデータベースを作成します:
CREATE DATABASE landing_db;
無事に作成できたら、あとはお気に入りの GUI を使ってデータベースを操作できます。今回は DBeaver を使う予定です。接続は問題なく成功しました。

.env ファイルには、次の設定を記述します。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=landing_db
DB_USERNAME=root
DB_PASSWORD=
そして、以下のコマンドでマイグレーションを実行します:
php artisan migrate
これでローカルのデータベースにテーブルが作成されます。

ローカル環境でプロジェクトを実行し、前回の Postgres バージョンのように、ローカルのデータベースとやり取りしてメールを保存できるはずです。実行するには以下のコマンドを使います:
php artisan serve
ローカルで問題なく動作することを確認したら、Hostinger のアカウントにログインし、新しく MySQL データベースを作成する必要があります。これでメールをオンライン上に保存できるようになります。作成画面は次のような感じです:

次に、Hostinger の実際のデータベース情報を .env ファイルに反映させる必要があります。例:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=$your_db_from_hostinger
DB_USERNAME=$your_db_user_from_hostinger
DB_PASSWORD=$your_db_password_from_hostinger
vendor ディレクトリを除外して ZIP 化します。
zip -r my_project.zip . -x "vendor/*"
次に、その ZIP ファイルを Hostinger アカウントの Files → File Manager → public_html にアップロードします。
その後、プロジェクトの public フォルダ内のファイルをコピーし、Hostinger の File Manager 内の public_html に保存します。

public フォルダ内のすべてのファイルをコピーして、public_html に追加します。そして、index.php ファイルには次のコードを使用します。
<?php
use Illuminate\Foundation\Application;
use Illuminate\Http\Request;
define('LARAVEL_START', microtime(true));
// Check for maintenance mode
if (file_exists(__DIR__.'/storage/framework/maintenance.php')) {
require __DIR__.'/storage/framework/maintenance.php';
}
// Composer autoload
require __DIR__.'/vendor/autoload.php';
// Bootstrap Laravel and handle request
$app = require_once __DIR__.'/bootstrap/app.php';
$app->handleRequest(Request::capture());
.env ファイルも含める必要があり、そこにはデータベースの認証情報や APP_URL など、本番環境用の実際の値を設定しておきます。
さらに、public_html 内に新しく .htaccess ファイルを作成し、以下の内容を記述します。
<IfModule mod_rewrite.c>
RewriteEngine On
# Block sensitive files
<FilesMatch "^\.env">
Require all denied
</FilesMatch>
<Files composer.json>
Require all denied
</Files>
<Files composer.lock>
Require all denied
</Files>
<Files .gitignore>
Require all denied
</Files>
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Send everything to index.php if not file/folder
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
次に、SSHアクセスが必要です。プロジェクトの依存パッケージをインストールし、マイグレーションを実行します。

私の場合、Hostinger で公開用にアクセスするための URL は以下の通りです:
https://darkred-stork-321443.hostingersite.com
無事に新しいメールレコードを作成できました。

Hostinger のダッシュボードから phpMyAdmin を使って、レコードを確認することができます。


次回の投稿では、新しいプロバイダーでアプリケーションをデプロイするテストを行う予定です。DigitalOcean に興味があり、Render や Hostinger と比較してみたいと思っています。
Hostinger 用の最終的なコードは、以下の新しいブランチで公開しています:
https://github.com/EdgarGGamartgo/landing-page/tree/mysql-hostinger-deployment
最後まで読んでいただき、ありがとうございました!