はじめに
かくかくしかじかで、Docker で Amazon Linux 2 ベースの LAMP 環境を構築する機会がありましたので、手順についてアウトプットします。
全 8 回を予定しています。
① 作成する環境の確認
② Apache の導入
③ PHP 8.1 系のインストール
④ Composer のインストール
⑤ timezone, locale の設定
⑥ docker-compose.yml の作成 & MySQL の導入
⑦ Laravel 9 系のインストール
⑧ Apache の設定ファイルの追加
今回は、 ⑦ Laravel 9 系のインストール についてです。
環境
以下の Docker 環境を構築します。
- Amazon Linux 2
- Apache 2.4
- MySQL 8.0.28
- PHP 8.1.x
- Laravel 9.x
目次
1. php.ini の作成・編集
2. Dockerfile の編集
3. Docker イメージとコンテナの再作成
4. Laravel 9 系のインストール
5. ブラウザの確認
1. php.ini の作成・編集
php.ini を作成・編集します。
php.ini は、PHP の起動時に読み込まれる設定ファイルです。
zend.exception_ignore_args = off
expose_php = on
max_execution_time = 30
max_input_vars = 1000
upload_max_filesize = 64M
post_max_size = 128M
memory_limit = 256M
error_reporting = E_ALL
display_errors = on
display_startup_errors = on
log_errors = on
error_log = /dev/stderr
default_charset = UTF-8
[Date]
date.timezone = "Asia/Tokyo"
[mysqlnd]
mysqlnd.collect_memory_statistics = on
[Assertion]
zend.assertions = 1
[mbstring]
mbstring.language = Japanese
以下の php.ini を参考に、というかそのまま使用させていただきました。
各設定の説明については以下の記事で確認できます。
2. Dockerfile の編集
Dockerfile の編集し、編集した内容の確認をします。
2-1. Dockerfile の編集
Dockerfile を編集します。
FROM amazonlinux:2
# timezone environment
ENV TZ=Asia/Tokyo \
# locale
LANG=ja_JP.UTF-8 \
LANGUAGE=ja_JP:ja \
LC_ALL=ja_JP.UTF-8
RUN yum update -y \
&& yum install -y \
glibc-langpack-ja \
zip \
unzip \
vim \
httpd
RUN amazon-linux-extras install -y epel
RUN yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
RUN yum clean metadata \
&& yum install -y \
php81 \
php81-php \
php81-php-mbstring \
php81-php-pdo \
php81-php-xml \
php81-php-fpm \
php81-php-mysqlnd \
php81-php-gd
RUN alternatives --install /usr/bin/php php /usr/bin/php81 1
# composer のインストール
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
# ファイルのコピー
COPY ./infra/docker/php/php.ini /etc/opt/remi/php81/php.ini
CMD [ "apachectl", "-D", "FOREGROUND" ]
WORKDIR /work/backend
2-2. 編集した内容の確認
zip \
unzip \
Laravel をインストールするために必要な機能(zip
, unzip
)のインストールします。
# ファイルのコピー
COPY ./infra/docker/php/php.ini /etc/opt/remi/php81/php.ini
PHPの設定ファイル php.ini のコピーについて追記しました。
php.ini ファイルの場所については、以下の手順で確認できます。
# r_yamate @ mbp in ~/Documents/code/advent-calendar on git:backend x [21:46:09]
$ docker compose exec web /bin/bash
bash-4.2# php --ini
Configuration File (php.ini) Path: /etc/opt/remi/php81
Loaded Configuration File: /etc/opt/remi/php81/php.ini
Scan for additional .ini files in: /etc/opt/remi/php81/php.d
Additional .ini files parsed: /etc/opt/remi/php81/php.d/20-bz2.ini,
/etc/opt/remi/php81/php.d/20-calendar.ini,
/etc/opt/remi/php81/php.d/20-ctype.ini,
/etc/opt/remi/php81/php.d/20-curl.ini,
/etc/opt/remi/php81/php.d/20-dom.ini,
/etc/opt/remi/php81/php.d/20-exif.ini,
/etc/opt/remi/php81/php.d/20-fileinfo.ini,
/etc/opt/remi/php81/php.d/20-ftp.ini,
/etc/opt/remi/php81/php.d/20-gd.ini,
/etc/opt/remi/php81/php.d/20-gettext.ini,
/etc/opt/remi/php81/php.d/20-iconv.ini,
/etc/opt/remi/php81/php.d/20-mbstring.ini,
/etc/opt/remi/php81/php.d/20-mysqlnd.ini,
/etc/opt/remi/php81/php.d/20-pdo.ini,
/etc/opt/remi/php81/php.d/20-phar.ini,
/etc/opt/remi/php81/php.d/20-simplexml.ini,
/etc/opt/remi/php81/php.d/20-sockets.ini,
/etc/opt/remi/php81/php.d/20-sodium.ini,
/etc/opt/remi/php81/php.d/20-sqlite3.ini,
/etc/opt/remi/php81/php.d/20-tokenizer.ini,
/etc/opt/remi/php81/php.d/20-xml.ini,
/etc/opt/remi/php81/php.d/20-xmlwriter.ini,
/etc/opt/remi/php81/php.d/20-xsl.ini,
/etc/opt/remi/php81/php.d/30-mysqli.ini,
/etc/opt/remi/php81/php.d/30-pdo_mysql.ini,
/etc/opt/remi/php81/php.d/30-pdo_sqlite.ini,
/etc/opt/remi/php81/php.d/30-xmlreader.ini
WORKDIR /work/backend
WORKDIR
を追記して、コマンドを実行する作業ディレクトリに /work/backend ディレクトリを指定します。
3. Docker イメージとコンテナの再作成
Docker コンテナを削除し、 Docker イメージを作り直して、 Docker コンテナを作成・起動します。
docker compose down
docker compose up -d --build
4. Laravel 9 系のインストール
以下のコマンドで、 Laravel をインストールします。
docker compose exec web composer create-project --prefer-dist "laravel/laravel" .
docker compose exec web composer create-project --prefer-dist "laravel/laravel=9.*" .
参考:実行時ログ(zip, unzip がない場合のエラー)
# r_yamate @ mbp in ~/Documents/code/advent-calendar [14:00:36]
$ docker compose exec web composer create-project --prefer-dist "laravel/laravel" .
Creating a "laravel/laravel" project at "./"
Info from https://repo.packagist.org: #StandWithUkraine
Installing laravel/laravel (v9.3.10)
Failed to download laravel/laravel from dist: The zip extension and unzip/7z commands are both missing, skipping.
Your command-line PHP is using multiple ini files. Run `php --ini` to show them.
Now trying to download from source
In GitDownloader.php line 82:
git was not found in your PATH, skipping source download
create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--add-repository] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--no-audit] [--audit-format AUDIT-FORMAT] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--ask] [--] [<package> [<directory> [<version>]]]
backend/ ディレクトリ以下に Laravel のディレクトリ、ファイルが作成されました。
# r_yamate @ mbp in ~/Documents/code/advent-calendar on git:backend x [22:24:37]
$ tree -L 2
.
├── README.md
├── backend
│ ├── README.md
│ ├── app
│ ├── artisan
│ ├── bootstrap
│ ├── composer.json
│ ├── composer.lock
│ ├── config
│ ├── database
│ ├── lang
│ ├── package.json
│ ├── phpunit.xml
│ ├── postcss.config.js
│ ├── public
│ ├── resources
│ ├── routes
│ ├── storage
│ ├── tailwind.config.js
│ ├── tests
│ ├── vendor
│ └── vite.config.js
├── docker-compose.yml
└── infra
└── docker
14 directories, 11 files
Laravelのバージョンを確認します。
# r_yamate @ mbp in ~/Documents/code/advent-calendar [17:03:05]
$ docker compose exec web php artisan -V
Laravel Framework 9.39.0
5. ブラウザの確認
ブラウザで、http://localhost:8080/index.php にアクセスして、表示を確認します。
現時点では、 404 Not Found が表示されます。
http://localhost:8080/ にアクセスすると、Apache のテストページが表示されます。
現時点では、Laravel のページは表示されませんでした。
これは Apache の mod_rewrite モジュールを有効化していないためです。
おわりに
今回は、 ⑦ Laravel 9 系のインストール についての手順でした。
次回は、 ⑧ Apache の設定ファイルの追加 の手順です。
ありがとうございました。
参考にしたサイト