1
0

More than 1 year has passed since last update.

DockerでLaravel環境を構築

Last updated at Posted at 2022-09-28

はじめに

業務でLaravelを使用するので環境構築してみました。

検証に使用した環境

ホストOS:MacOS Monterey 12.6
Docker:20.10.14
CentOS:7
PHP:7.4.30
Laravel:7.30.6

DockerでCentOSを用意する

こちらのページを参考にCentOSを用意します。
httpdで構築したLaravelにアクセスし、ソースはホストと共有したいです。
そのため、ports、volumesに設定を加えてコンテナを立ち上げます。

最終的には以下の通り

version: "3"
services:
  centos:
    build: ./docker
    ports:
      - 8081:80
    privileged: true
    volumes:
      - ./src:/var/www/html
      - /sys/fs/cgroup:/sys/fs/cgroup:rw
    working_dir: /var/www/html

必要なものをインストール

yumのリポジトリを最新化+追加

まず、yumのパッケージをアップデートし、PHPをインストールためにRemi Repositoryを追加します。

sh-4.2# yum -y update
sh-4.2# yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

httpd、git、zip、unzipをインストール

httpdは、Webサーバに使用し、 git、zip、unzipは、Laravelのインストーラダウンロードやプロジェクト作成に必要のため、インストールします。

sh-4.2# yum -y install httpd git zip unzip 

PHPと拡張機能をインストール

ドキュメントより、Laravel Homestead仮想マシンを使用しない場合、
以下のソフトウェアがインストールされている必要があります。

・PHP >= 7.2.5
・BCMath PHP拡張
・Ctype PHP拡張
・Fileinfo PHP extension
・JSON PHP拡張
・Mbstring PHP拡張
・OpenSSL PHP拡張
・PDO PHP拡張
・Tokenizer PHP拡張
・XML PHP拡張

PHPと拡張機能をインストールします。

sh-4.2# yum -y install php74 php74-php php74-php-bcmath php74-php-ctype php74-php-json php74-php-mbstring php74-php-openssl php74-php-tokenizer php74-php-xml

インストールしたphp74を「php」でコマンド実行できるようにシンボリックリンクを作成します。

sh-4.2# ln -s /usr/bin/php74 /usr/bin/php 

インストール結果を確認

PHPのバージョンを確認します。

sh-4.2# php -v
PHP 7.4.30 (cli) (built: Jun  7 2022 08:38:19) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

次に組み込まれたモジュールを確認します。
「php -m」で一覧されます。
サーバー要件にあったPDOがありませんが、PHP 5.1.0から標準で導入されています。

sh-4.2# php -m
[PHP Modules]
bcmath
・・・
ctype
・・・
fileinfo
・・・
json
・・・
mbstring
・・・
openssl
・・・
tokenizer
・・・
xml
・・・
[Zend Modules]

Composerをインストール

Composerのインストーラーをダウンロードします。
インストーラーはPHPで作られてるため、念のため拡張子をつけておきます。

sh-4.2# php -r "copy('https://getcomposer.org/installer', 'installer.php');"
sh-4.2# ls
installer.php

インストーラーを実行します。

sh-4.2# php installer.php
All settings correct for using Composer
Downloading...

Composer (version 2.2.18) successfully installed to: /var/www/html/composer.phar
Use it: php composer.phar

実行が成功すれば、インストーラーは不要のためファイルを削除します。

sh-4.2# php -r "unlink('installer.php');"

スクリプトの実効結果として、「composer.phar」が出力されます。
composerコマンドとして実行出来るように「/usr/local/bin」に移動します。

sh-4.2# mv composer.phar /usr/local/bin/composer

Laravelの環境を構築

Laravelのインストーラをダウンロード

Composerを使用し、Laravelインストーラをダウンロードします。

sh-4.2# composer global require laravel/installer

Laravelのプロジェクトを作成

次にプロジェクトを作成します。
「composer create-project --prefer-dist laravel/laravel プロジェクト名 バージョン番号」で作成できます。
今回はLaravel7でhogeプロジェクトを作成します。

sh-4.2# composer create-project --prefer-dist laravel/laravel hoge 7

作成が出来ればプロジェクトディレクトリに移動し、バージョンを確認します。
artisanコマンドはプロジェクトディレクトリ内でのみ使用できます。

(こちら)[https://laravelversions.com/ja/7]でバージョンを比較できます。

sh-4.2# cd hoge/
sh-4.2# php artisan -V
Laravel Framework 7.30.6

httpdを設定

次にhttpdを設定します。

自動起動を設定

httpdが自動起動するように設定します。

sh-4.2# systemctl enable httpd

httpd.confを修正

Laravelプロジェクトには「PJディレクトリ/public」内に.htaccessがあります。
AllowOverRideがNoneのままだと.htaccessでの設定の書き換えが効かなくなります。
そのため、httpd.confを修正し、「/var/www/html」へのAllowOverRideをAllに修正します。

sh-4.2# vi /etc/httpd/conf/httpd.conf 
<Directory "/var/www/html">
  ・・・

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All

  ・・・
</Directory>

再起動

httpd.confを修正出来たらリスタートします。

sh-4.2# systemctl restart httpd

ステータスを確認

リスタートが出来たらステータスを確認し、httpdがアクティブになっていることを確認します。

sh-4.2# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2022-09-27 05:17:06 UTC; 42s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 585 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /docker/64d1ffc8d42daf603a7b36e84832ab1cf52cb5690ac8b7158f92ce692e9f2f77/system.slice/httpd.service
           ├─585 /usr/sbin/httpd -DFOREGROUND
           ├─586 /usr/sbin/httpd -DFOREGROUND
           ├─587 /usr/sbin/httpd -DFOREGROUND
           ├─588 /usr/sbin/httpd -DFOREGROUND
           ├─589 /usr/sbin/httpd -DFOREGROUND
           └─590 /usr/sbin/httpd -DFOREGROUND

Sep 27 05:17:06 64d1ffc8d42d systemd[1]: Starting The Apache HTTP Server...
Sep 27 05:17:06 64d1ffc8d42d httpd[585]: AH00558: httpd: Could not reliably ...e
Sep 27 05:17:06 64d1ffc8d42d systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.

環境構築の最後に

環境構築が完了したら、最後にyumのキャッシュをクリアしておきます。

sh-4.2# yum clean all

Laravelの動作を確認

Laravelのデフォルトページを表示

http://localhost:8080/hoge/public 」にアクセスします。
Laravelのデフォルトページが表示されていれば成功です。

追加ページの表示を確認

Laravelでは、「PJディレクトリ/routes/web.php」でURLを管理出来ます。
「hello」を返すRouteを追加し、httpd.confへの修正が適用されていることを確認します。

src/hoge/routes/web.php
Route::get('hello', function () {
    return 'hello';
});

http://localhost:8080/hoge/public/hello」にアクセスします。
helloが表示されていれば成功です。

参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0