【Laravel】TwitterModokiアプリの自宅サーバーへのデプロイ作業

Laravel

Windowsのローカル開発環境で作成したLaravelアプリケーション(TwitterModoki)を、自宅サーバー(AlmaLinux)の本番環境へデプロイしました。既存のポートフォリオサイトのサブドメインの動作を邪魔することなく、サブディレクトリ形式(/twitter)として共存・公開させるまでの全手順を技術記録として残します。

1. 事前のインストール作業

移設をスムーズに進めるため、まずはサーバー(AlmaLinux)側に必要となる不足パッケージやデータベース環境の整備を行いました。

① PHPパッケージ管理ツール「Composer」の導入

Laravelの依存関係を本番環境で最適化・インストールするために、システム全体で利用できるグローバルなComposerをインストールしました。

# インストーラーのダウンロード
[root@almalinux ~]# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

# セットアップの実行
[root@almalinux ~]# php composer-setup.php

# 不要になったインストーラーファイルの削除
[root@almalinux ~]# php -r "unlink('composer-setup.php');"

# システム全体で「composer」コマンドとして使えるようにパスへ移動
[root@almalinux ~]# mv composer.phar /usr/local/bin/composer

# バージョン確認
[root@almalinux ~]# composer -V

② MariaDBでのアプリケーション専用データベース構築

セキュリティを考慮し、アプリケーション専用のデータベースと接続用ユーザーを新規作成しました。

# rootユーザーでMariaDBにログイン
[root@almalinux ~]# mysql -u root -p

# データベースの作成(文字コードをutf8mb4に指定)
[root@almalinux ~]# CREATE DATABASE twitter_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# 専用接続ユーザーの作成と権限付与
[root@almalinux ~]# CREATE USER 'twitter_user'@'localhost' IDENTIFIED BY '【任意のパスワード】';
[root@almalinux ~]# GRANT ALL PRIVILEGES ON twitter_db.* TO 'twitter_user'@'localhost';

# 設定の即時反映とログアウト
[root@almalinux ~]# FLUSH PRIVILEGES;
[root@almalinux ~]# EXIT;

2. 移設・デプロイ作業

事前準備の完了後、ソースコードの転送からサーバー固有のルーティング・権限設定までを一気に行いました。

① WinSCPによるファイル転送

Windowsローカル環境の TwitterModoki プロジェクトフォルダを、WinSCPを使用してサーバーの /var/www/sub/ 直下に丸ごとアップロードしました。 ※ファイル数の非常に多い vendor フォルダは転送から除外することで、アップロード時間を大幅に短縮できます。

② Laravel環境設定(.env)の書き換え

サーバー環境に合わせて、/var/www/sub/TwitterModoki/.env の重要項目を編集しました。

APP_ENV=production
APP_DEBUG=false
APP_URL=https://【サブドメイン】/twitter

DB_DATABASE=twitter_db
DB_USERNAME=twitter_user
DB_PASSWORD=【設定したパスワード】

③ 依存ライブラリのインストールとマイグレーション

プロジェクトルートへ移動し、本番用に最適化したライブラリの展開とデータベーステーブルの自動生成を行いました。

[root@almalinux ~]# cd /var/www/sub/TwitterModoki

# 本番環境用に最適化してインストール(vendorを再生成)
[root@almalinux ~]# composer install --no-dev --optimize-autoloader

# データベースマイグレーションの実行
[root@almalinux ~]# php artisan migrate

④ 権限(パーミッション)の設定

Webサーバー(Apache)がLaravelのファイルを正常に読み書きできるよう、適切な所有権とパーミッションを付与しました。一般ユーザーでは実行できないため sudo を使用します。

# 所有者を一括で apache ユーザーに変更
[root@almalinux ~]# sudo chown -R apache:apache /var/www/sub/TwitterModoki

# ログやキャッシュを扱うフォルダに書き込み権限(775)を付与
[root@almalinux ~]# sudo chmod -R 775 /var/www/sub/TwitterModoki/storage
[root@almalinux ~]# sudo chmod -R 775 /var/www/sub/TwitterModoki/bootstrap/cache

⑤ ApacheでのAlias設定(サブディレクトリ運用の肝)

既存のポートフォリオサイトの動作を維持し、/twitter にアクセスが来たときだけLaravelを動かすため、/etc/httpd/conf.d/vhost.conf の一番上(バーチャルホストの枠外)に以下のグローバルAlias設定を追記しました。

Alias /twitter /var/www/sub/TwitterModoki/public

<Directory /var/www/sub/TwitterModoki/public>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
</Directory>

追記後、設定ファイルの文法チェックを行い、Apacheを再起動して反映します。

[root@almalinux ~]# sudo apachectl configtest
[root@almalinux ~]# sudo systemctl restart httpd

⑥ Laravel側 .htaccess の調整

サブディレクトリ階層での動作時、ボタン押下(リクエスト送信)による画面遷移が404エラーになる現象を回避するため、/var/www/sub/TwitterModoki/public/.htaccess を編集し、ルーティングのベースURLを明示的に指定しました。

<IfModule mod_rewrite.c>
    RewriteEngine On
    # RewriteEngine On のすぐ下にこの1行を追記
    RewriteBase /twitter/
</IfModule>

3.アクセス確認

 設定が完了したら、 https://【サブドメイン】/twitter にアクセスし、無事表示されれば完了

4.今後のワンポイント・運用Tips

今後、アプリケーションのアップデートや機能追加を行う際に役立つコマンド群です。

① ソースコードを更新(再アップロード)したとき

Windows側で修正したファイルを転送した際、サーバー側に古いキャッシュが残って変更が反映されない場合があります。その際はプロジェクトルートで以下のクリアコマンドを実行します。

[root@almalinux ~]# cd /var/www/sub/TwitterModoki
[root@almalinux ~]# php artisan config:clear
[root@almalinux ~]# php artisan cache:clear
[root@almalinux ~]# php artisan view:clear

② 機能拡張で新しいテーブルを追加したとき

Windows側で新しくマイグレーションファイル(create_xxx_table)を作成・転送した後は、本番環境のプロジェクトルートで以下のコマンドを叩くだけで、本番のMariaDBに自動的に新しいテーブルが追加されます。

[root@almalinux ~]# php artisan migrate

この構成であれば、同じように「Laravelアプリをサブディレクトリで運用したいけれど、ルーティングや404エラーで詰まった」という他のエンジニアの方々にとっても非常に有益な技術ブログ記事になるはずです!

コメント