LightsailのUbuntu20.04にLAMP(PHP8.1)環境を構築し、Laravelのプロジェクトを導入していきます。

LAMP環境の構築はこちらの記事を参考に構築してください。

LAMP環境

  • Laravel 9
  • Ubuntu 20.04
  • Apache 2.4.41
  • MariaDB 10.5.15
  • PHP 8.1

Composerの導入

Composer本体のインストール

Composer本体のインストールをします。

公式のコマンドからインストールしてください。

※以下は例となります。バージョンによって変わるため、必ず公式のコマンドを実行してください。

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"

どのディレクトリからでもComposerを実行できるようにする

$ sudo mv ./composer.phar $(dirname $(which php))/composer && chmod +x "$_"
$ composer -v

これでcomposerの導入は完了です。

Laravelプロジェクトのインストール

新規プロジェクトの場合

こちらでは新規でLaravelのプロジェクトをインストールします。

/var/wwwに移動します。こちらにプロジェクトを作成していきます。

$ composer create-project --prefer-dist laravel/laravel laravel
$ cd laravel

既存プロジェクトの場合

Gitの設定

まずはgitの設定をします。

以下のコマンドを実行してください。
メールアドレスはgithubに登録しているご自身のものに書き換えてください。

$ ssh-keygen -t rsa -C "your_email@gmail.com"
$ cat ~/.ssh/id_rsa.pub

公開鍵をGithubに登録して下さい。

Githubの設定に関してわからない方は以下の記事を参考にしてください。

https://qiita.com/junokichi/items/5805af8398800c3b9cc5

Laravelプロジェクトのインストール

gitの設定まで完了したら対象のLaravelプロジェクトをcloneします。

$ cd /var/www
$ git clone git@github.com:XXXXXXXX/XXXXXXXX.git laravel
$ cd laravel
$ composer install
$ cp .env.example .env
$ php artisan key:generate

これでLaravelプロジェクトの導入は完了です。

Apacheの設定

URLを叩いた時にLaravelのプロジェクトが表示されるようにApacheの設定を変更します。

Apacheの設定ファイルは/etc/apache2/sites-enabled/000-default.confです。こちらのファイルを開きましょう。

$ sudo vim /etc/apache2/sites-enabled/000-default.conf

開くと以下のように記述されています。

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

この中で、以下のように変更してください。

DocumentRoot /var/www/laravel/public
<Directory "/var/www/laravel/public">
    Allowoverride All
</Directory>

変更したら:wqで保存してください。

Apache2でmod_rewriteを有効にする

a2enmodというコマンドを実行する。

$ sudo a2enmod rewrite

a2enmodを実行すると以下の様なメッセージが出てきます。

Enabling module rewrite.
To activate the new configuration, you need to run:
  service apache2 restart

Apacheを再起動します。

$ sudo service apache2 restart

これで設定は完了です。lightsailのIPアドレスにアクセスしてみてください。

おまけ

nodeとnpmのインストール

Breezeなどのログイン機能などを実装されている場合はデフォルトでviteが使われているため、npmを利用する必要があります。

npmをインストールしてみましょう。

$ sudo apt install nodejs npm
$ sudo npm install n -g # nコマンド導入
$ sudo n lts # 安定版のインストール
$ node -v
v18.12.1
$ npm -v
8.19.2

npmパッケージのインストール

$ npm install
$ npm run build

サーバーのスペックが低い($3.5)とnpm run buildで全然処理が終わらない場合があります。

その場合、一度サーバーを再起動して試してみてください。

MariaDBの設定

MariaDBの設定をし、Laravelでmigrationまでしていきます。

まず、MariaDBのrootアカウントのパスワードを確認しましょう。

$ mysql -u root -p
Enter password: #パスワードを入力

MariaDB [(none)]>
MariaDB [(none)]>create database laravel;
MariaDB [(none)]>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| laravel            |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.000 sec)

はい、DBの作成まで完了です。

Control + Dでログアウトします。

それではLaravelでDBの設定をしましょう。.envを以下のように編集してください。

DB_PASSWORD="MariaDBパスワード"

これでmigrationすればテーブルが作成されます。

$ php artisan migrate

ドメイン設定

ドメインの設定をしていきます。

お名前.comやムームードメインなどでドメインを取得し、DNSを設定していきます。

ドメインの取得方法は割愛しますが、今回はムームードメインを元に解説していきます。

ムームードメインの場合、サイドメニューのムームーDNS>処理「変更」ボタンの順に進んでください。

種別をA、内容にサーバーのIPアドレスを入力してください。

これでDNSの設定まで完了です。
DNSの反映にはしばらく時間がかかります。

SSL化

続いて、https化していきます。

まずLightsailのファイアウォールではデフォルトでhttpsの443ポートが解放されていないため、設定する必要があります。

Lightsailのコンソールでネットワーキングを表示してください。

IPv4 ネットワーキングのルールを追加の部分で「HTTPS」を作成してください。

これでファイアウォールの設定は完了です。

続いて、Apacheの設定ファイルにドメインを設定します。

$ sudo vim /etc/apache2/sites-enabled/000-default.conf

ServerNameのコメントアウトをとり、自分のドメインを記述します。

ServerName www.example.com

続いて、SSL化の設定をしていきます。

今回のSSLは無料のLet’s Encryptを利用してみます。

まずはCertbotをインストールと実行をします。

$ sudo apt-get install certbot python3-certbot-apache
$ sudo certbot --apache

Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): xxx@yyy.co.jp # ご自身のメールアドレス

You must agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
(A)gree/(C)ancel: A

Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot?
(Y)es/(N)o: N

Which names would you like to activate HTTPS for?
----------------------------------------
1: xxx.yyy.co.jp
----------------------------------------
 (Enter 'c' to cancel): 1

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
----------------------------------------
1: No redirect
2: Redirect
----------------------------------------
(press 'c' to cancel): 2

Congratulations! You have successfully enabled https://xxx.yyy.co.jp

以上でドメインとSSL化が完了です。

ドメインにアクセスして確認してみましょう。

SSL 証明書の自動更新

Let’s Encrypt の SSL 証明書は期限が3ヶ月と短いです。そのため、期限が来たら自動更新する設定にしておきます。

$ sudo systemctl status certbot.timer

これで完了です!

この記事をシェアする